Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 3635 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores
Postado

Pelo que pude perceber algum dos registros do arquivo de retorno está retornando a data toda zerada e isto está causando um erro de conversão.

 

Seria necessário verificar qual dos registros está com esta data zerada e se está informação está mesmo correta.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Membros Pro
Postado (editado)

tenho o executavel antigo e executou o mesmo arquivo de boa.

 

as atualizacao do acbr na minha umilde opcao, estao muito brusca ,

estou com um problema no nfc-e ate agora nao conseguir resolver,

e agora no boleto,

so porque min deu na ideia de atualiza o acbr.

 

 

CACBrBoleto_Versao = '0.0.90a' ;

CACBrBoleto_Versao = '0.0.104a' ;

 

 

Erro da data eu corrigir, mais as messagem de rejeicao nao.

 

 

 

procedure TACBrCaixaEconomica.LerRetorno240(ARetorno: TStringList);

 

   for ContLinha := 1 to ARetorno.Count - 2 do
   begin
      Linha := ARetorno[ContLinha] ;


        {Segmento T - Só cria após passar pelo seguimento T depois U}
        if Copy(Linha,14,1)= 'T' then
           Titulo := ACBrBanco.ACBrBoleto.CriarTituloNaLista;

        with Titulo do
        begin
           {Segmento T}
           if Copy(Linha,14,1)= 'T' then
            begin
              if StrToIntDef(Copy(Linha,74,2),0) <> 0 then
              begin

                Continuar                   := True;
                SeuNumero                   := copy(Linha,59,11);

post-4970-0-59568700-1422965595_thumb.jp

post-4970-0-41031100-1422965940_thumb.jp

post-4970-0-92918500-1422970609_thumb.jp

post-4970-0-39336900-1422970783_thumb.jp

Editado por hetoandrade
  • Membros Pro
Postado (editado)

Corrigir o erro da data e dos erros de Rejeicao Temporario.

 

function TACBrCaixaEconomica.GerarRegistroTrailler240( ARemessa : TStringList ): String;
var
  wQTDTitulos: Integer;
begin

   wQTDTitulos := ARemessa.Count - 1;
   {REGISTRO TRAILER DO LOTE}
   Result:= IntToStrZero(ACBrBanco.Numero, 3)                          + //Código do banco
            '0001'                                                     + //Lote de Serviço
            '5'                                                        + //Tipo do registro: Registro trailer do lote
            Space(9)                                                   + //Uso exclusivo FEBRABAN/CNAB
            IntToStrZero((3* wQTDTitulos + 2 ), 6)                     + //Quantidade de Registro no Lote (Registros P,Q,R, header e trailer do lote)
            IntToStrZero((wQTDTitulos), 6)                             + //Quantidade títulos em cobrança
            IntToStrZero( round( fValorTotalDocs * 100), 17)           + //Valor dos títulos em carteiras}
            padL('', 6, '0')                                           + //Quantidade títulos em cobrança
            padL('',17, '0')                                           + //Valor dos títulos em carteiras}
            padL('',6,  '0')                                           + //Quantidade títulos em cobrança
            padL('',17, '0')                                           + //Quantidade de Títulos em Carteiras
            padL('',31, ' ')                                           + //Uso exclusivo FEBRABAN/CNAB
            padL('',117,' ')                                           ; //Uso exclusivo FEBRABAN/CNAB}

   {GERAR REGISTRO TRAILER DO ARQUIVO}
   Result:= Result + #13#10 +
            IntToStrZero(ACBrBanco.Numero, 3)                          + //Código do banco
            '9999'                                                     + //Lote de serviço
            '9'                                                        + //Tipo do registro: Registro trailer do arquivo
            padL('',9,' ')                                             + //Uso exclusivo FEBRABAN/CNAB}
            '000001'                                                   + //Quantidade de lotes do arquivo (Registros P,Q,R, header e trailer do lote e do arquivo)
            IntToStrZero((3* wQTDTitulos)+4, 6)                        + //Quantidade de registros do arquivo, inclusive este registro que está sendo criado agora}
            padL('',6,' ')                                             + //Uso exclusivo FEBRABAN/CNAB}
            padL('',205,' ');                                            //Uso exclusivo FEBRABAN/CNAB}
end;
procedure TACBrCaixaEconomica.LerRetorno240(ARetorno: TStringList);
var
  ContLinha: Integer;
  Titulo   : TACBrTitulo;
  Linha, rCedente, rCNPJCPF: String;
  rAgencia, rConta,rDigitoConta: String;
  MotivoLinha, I, CodMotivo: Integer;
  Continuar: Boolean;
begin
   ContLinha := 0;

   if (copy(ARetorno.Strings[0],1,3) <> '104') then
      raise Exception.Create(ACBrStr(ACBrBanco.ACBrBoleto.NomeArqRetorno +
                             'não é um arquivo de retorno do '+ Nome));

   rCedente := trim(Copy(ARetorno[0],73,30));
   rAgencia := trim(Copy(ARetorno[0],53,5));
   rConta   := trim(Copy(ARetorno[0],59,5));
   rDigitoConta := Copy(ARetorno[0],64,1);
   ACBrBanco.ACBrBoleto.NumeroArquivo := StrToIntDef(Copy(ARetorno[0], 158, 6), 0);

   ACBrBanco.ACBrBoleto.DataArquivo   := StringToDateTimeDef(Copy(ARetorno[1],192,2)+'/'+
                                                             Copy(ARetorno[1],194,2)+'/'+
                                                             Copy(ARetorno[1],198,2),0, 'DD/MM/YY' );

   if StrToIntDef(Copy(ARetorno[1],200,6),0) <> 0 then
      ACBrBanco.ACBrBoleto.DataCreditoLanc := StringToDateTimeDef(Copy(ARetorno[1],200,2)+'/'+
                                                                  Copy(ARetorno[1],202,2)+'/'+
                                                                  Copy(ARetorno[1],204,4),0, 'DD/MM/YY' );
   rCNPJCPF := trim( Copy(ARetorno[0],19,14)) ;

   if ACBrBanco.ACBrBoleto.Cedente.TipoInscricao = pJuridica then
    begin
      rCNPJCPF := trim( Copy(ARetorno[1],19,15));
      rCNPJCPF := RightStr(rCNPJCPF,14) ;
    end
   else
    begin
      rCNPJCPF := trim( Copy(ARetorno[1],23,11));
      rCNPJCPF := RightStr(rCNPJCPF,11) ;
    end;


   with ACBrBanco.ACBrBoleto do
   begin

      if (not LeCedenteRetorno) and (rCNPJCPF <> OnlyNumber(Cedente.CNPJCPF)) then
         raise Exception.Create(ACBrStr('CNPJ\CPF do arquivo inválido'));

      if (not LeCedenteRetorno) and ((rAgencia <> OnlyNumber(Cedente.Agencia)) or
          (rConta+rDigitoConta  <> OnlyNumber(Cedente.CodigoCedente))) then
         raise Exception.Create(ACBrStr('Agencia\Conta do arquivo inválido'));

      if LeCedenteRetorno then
      begin
         Cedente.Nome    := rCedente;
         Cedente.CNPJCPF := rCNPJCPF;
         Cedente.Agencia := rAgencia;
         Cedente.AgenciaDigito:= '0';
         Cedente.Conta   := rConta;
         Cedente.ContaDigito:= rDigitoConta;
         Cedente.CodigoCedente:= rConta+rDigitoConta;

         case StrToIntDef(Copy(ARetorno[1],18,1),0) of
            1: Cedente.TipoInscricao:= pFisica;
            2: Cedente.TipoInscricao:= pJuridica;
            else
               Cedente.TipoInscricao:= pJuridica;
         end;
      end;

      ACBrBanco.ACBrBoleto.ListadeBoletos.Clear;
   end;

   for ContLinha := 1 to ARetorno.Count - 2 do
   begin
      Linha := ARetorno[ContLinha] ;

        {Segmento T - Só cria após passar pelo seguimento T depois U}
        //if Copy(Linha,14,1)= 'T' then
        //   Titulo := ACBrBanco.ACBrBoleto.CriarTituloNaLista;

        if (Copy(Linha,14,1)= 'T') AND (StrToIntDef(Copy(Linha,74,2),0) <> 0) then
           Titulo := ACBrBanco.ACBrBoleto.CriarTituloNaLista;




        with Titulo do
        begin

           {Segmento T}
           if Copy(Linha,14,1)= 'T' then
            begin
              if StrToIntDef(Copy(Linha,74,2),0) <> 0 then
              begin
                Continuar                   := True;

                SeuNumero                   := copy(Linha,59,11);
                NumeroDocumento             := copy(Linha,59,11);
                OcorrenciaOriginal.Tipo     := CodOcorrenciaToTipo(StrToIntDef(copy(Linha,16,2),0));

                //05 = Liquidação Sem Registro
                Vencimento := StringToDateTimeDef( Copy(Linha,74,2)+'/'+
                                                   Copy(Linha,76,2)+'/'+
                                                   Copy(Linha,80,2),0, 'DD/MM/YY' );

                ValorDocumento       := StrToFloatDef(Copy(Linha,82,15),0)/100;
                ValorDespesaCobranca := StrToFloatDef(Copy(Linha,199,15),0)/100;
                NossoNumero          := Copy(Linha,42,15);
                Carteira             := Copy(Linha,40,2);
                CodigoLiquidacao     := Copy(Linha,214,02);
                CodigoLiquidacaoDescricao := CodigoLiquidacao_Descricao( StrToIntDef(CodigoLiquidacao,0) );

                {  //COMENTEI ESSA LINHA
                // DONE -oJacinto Junior: Implementar a leitura dos motivos das ocorrências.
                MotivoLinha := 214;

                for I := 0 to 4 do
                begin
                  CodMotivo := StrToIntDef(IfThen(Copy(Linha, MotivoLinha, 2) = '00', '00', Copy(Linha, MotivoLinha, 2)), 0);

                  if CodMotivo <> 0 then
                  begin
                    MotivoRejeicaoComando.Add(IfThen(Copy(Linha, MotivoLinha, 2) = '00', '00', Copy(Linha, MotivoLinha, 2)));
                    DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo, CodMotivo));
                  end;

                  MotivoLinha := MotivoLinha + 2; // Incrementa a coluna dos motivos.
                end;
                }

              end else
              begin
                Continuar := False;
              end;

            end
           {Ssegmento U}
           else if Copy(Linha,14,1)= 'U' then
            begin
              if Continuar = True then
              begin

                if StrToIntDef(Copy(Linha,138,6),0) <> 0 then
                   DataOcorrencia := StringToDateTimeDef( Copy(Linha,138,2)+'/'+
                                                          Copy(Linha,140,2)+'/'+
                                                          Copy(Linha,142,4),0, 'DD/MM/YYYY' );

                if StrToIntDef(Copy(Linha,146,6),0) <> 0 then
                   DataCredito:= StringToDateTimeDef( Copy(Linha,146,2)+'/'+
                                                      Copy(Linha,148,2)+'/'+
                                                      Copy(Linha,150,4),0, 'DD/MM/YYYY' );

                ValorMoraJuros       := StrToFloatDef(Copy(Linha,18,15),0)/100;
                ValorDesconto        := StrToFloatDef(Copy(Linha,33,15),0)/100;
                ValorAbatimento      := StrToFloatDef(Copy(Linha,48,15),0)/100;
                ValorIOF             := StrToFloatDef(Copy(Linha,63,15),0)/100;
                ValorRecebido        := StrToFloatDef(Copy(Linha,93,15),0)/100;
                ValorOutrasDespesas  := StrToFloatDef(Copy(Linha,108,15),0)/100;
                ValorOutrosCreditos  := StrToFloatDef(Copy(Linha,123,15),0)/100;
              end;
           end
          {Segmento W}
          else if Copy(Linha, 14, 1) = 'W' then
           begin
             //verifica o motivo de rejeição
             MotivoRejeicaoComando.Add(copy(Linha,29,2));
             DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(
                                                CodOcorrenciaToTipo(
                                                StrToIntDef(copy(Linha, 16, 2), 0)),
                                                StrToInt(Copy(Linha, 29, 2))));
           end;
        end;
   end;

end;

Editado por hetoandrade
  • Moderadores
Postado

Boa tarde

Heto 

peço a gentileza que anexe os código e não cole os mesmos no post! por dois motivos ficam enormes e segundo é difícil de comparar com o código para corrigir!

 

sobre as atualizações se notar diversos colegas tem a pressa em subir o que eles fizeram para as correções ou implementações e na pressa acontece de ficar lacunas e erros!

testamos mas com a pressa que se tem de todos sempre fica esses problemas!

 

veja que já irão começar a pedir sobre o sped ECF e estou ainda escrevendo ele e testando para largar a versão estável mas com certeza terei diversos mais postes pedindo sobre ele!

 

mas vamos tentar corrigir ao máximo e liberar sem problemas os códigso

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Administradores
Postado

Boa tarde.

 

Pelo que observei em seu post, nenhum das alterações teria efeito relacionado a campos do tipo data, após o fonte ser anexado poderei comparar melhor.

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Administradores
Postado

Bom dia.

 

 

Não entendi muito bem suas alterações...

 

No trecho  "if (Copy(Linha,14,1)= 'T') AND (StrToIntDef(Copy(Linha,74,2),0) <> 0) then"  ele simplesmente deixa de criar um título e ler informações se este campo for = 0...Porém como pode ser observado em todas as leituras de data está sendo utilizado o StringToDateTimeDef, sendo assim não teria motivo para o erro ocorrer...

 

 

Também não entendi a necessidade da inclusão da variável Continuar...

 

 

 

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado (editado)

Tem necessidade,  porque no retorno da caixa economica ,

em todos os retorno sempre vem 2 linhas no fical incorretas

e o acbr ler, como sao incorretas vem a data 00000000

ai o acbr tenta convverter com  StringToDateTimeDef e da ERRO.

 

Olha no primiero post, tem a imagem de erro de data 00/00/0000

 

coloquei o continuar, para nao ler a linha = 'U'  pos a primeira linha que é 'T ta incorreta.

Editado por hetoandrade
  • Administradores
Postado

Bom dia Heto,

 

 

A função StringToDateTimeDef deveria conseguir tratar essa situação (para isso o def), irei testar no Delphi  para descobrir porque neste caso ela está falhando.

 

Att. 

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • 1 mês depois ...
  • Administradores
Postado

Boa noite.

 

Realizei testes diretamente com o executável gerado no delphi 7 e não foi possível reproduzir o problema, exceto em modo debug. Vcoê chegou a testar com o demo sendo executado fora do delphi?

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...