Jump to content

Assista click.png tectoy.png

C6 chamada_c6.png botao.png

Erro 00/00/0000 Ao Lerretorno


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

Recommended Posts

  • Moderadores

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
Link to comment
Share on other sites

  • Membros Pro

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

Edited by hetoandrade
Link to comment
Share on other sites

  • Membros Pro

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;

Edited by hetoandrade
Link to comment
Share on other sites

  • Consultores

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
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

  • Consultores

a unit mesmo.... e se precisar compacta que aceita subir dai

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

  • Administradores

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
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

  • Administradores

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
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

  • Membros Pro

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.

Edited by hetoandrade
Link to comment
Share on other sites

  • Administradores

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
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

  • 1 month later...
  • Administradores

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
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.