Ir para conteúdo
  • Cadastre-se

dev botao

ACBRPAGFOR : LEITURA ARQUIVO-RETORNO


Ver Solução Respondido por Diego Foliene,

Recommended Posts

  • Membros Pro
Postado

Prezados
Companheiros

Bom Dia!

Gostaria de lhes questionar sobre o funcionamento da Leitura do Arquivo-Retorno de Pagamentos à Fornecedor.  
    ´
No processamento do Arquivo-Retorno de Pagamentos à Fornecedor  eu preciso recuperar as seguintes informações :

a)-No Header de Arquivo : 
- Data da Geração do Arquivo
- Hora da Geração do Arquivo
- Código do Banco
- Número da Conta Bancária
- Dígito Verificador da Conta Bancária

b)-No Registro J :
- Código de Barras
- Data do Pagamento
- Valor do Pagamento
- Número Atribuido Pela Empresa
- Nosso Número
- Códigos das Ocorrências    

c)-No Segmento Z :
- Número da Autenticação Bancária
- Número da Autenticação / Protocolo

Sabem me dizer se consigo recuperar todas estas informações lendo o Arquivo utilizando o componente AcbrPagFor ?

Estou questionando isto porque não estou conseguindo uma forma de acessar todas estas informações, seguindo o Programa-Exemplo do AcbrPagFor.

Grato pela ajuda.

 

image.thumb.png.8cb31f1fd4016f7403bd094f74813770.png

  • Consultores
  • Solution
Postado

Bom dia!

Todas as propriedades que são preenchidas para gerar o arquivo de envio, também podem ser lidas no arquivo de retorno.

Mas é importante entender que as propriedades seguem um layout estabelecido.

Se não consta no layout do arquivo de retorno a informação da data da geração, ela não será devolvida.

1 hour ago, Carmo said:

a)-No Header de Arquivo : 
- Data da Geração do Arquivo
- Hora da Geração do Arquivo
- Código do Banco
- Número da Conta Bancária
- Dígito Verificador da Conta Bancária

Conforme você ilustrou, você vai ler as propriedades de Registro0.

Então você pode ler, por exemplo:

ACBrPagFor.Arquivos.Items[indice].PagFor.Registro0.Arquivo.DataGeracao;
ACBrPagFor.Arquivos.Items[indice].PagFor.Registro0.Arquivo.HoraGeracao;
ACBrPagFor.Arquivos.Items[indice].PagFor.Registro0.Empresa.ContaCorrente;
ACBrPagFor.Arquivos.Items[indice].PagFor.Registro0.NomeBanco;
//Demais propriedades de Registro0 ...

 

1 hour ago, Carmo said:

b)-No Registro J :
- Código de Barras
- Data do Pagamento
- Valor do Pagamento
- Número Atribuido Pela Empresa
- Nosso Número
- Códigos das Ocorrências    

c)-No Segmento Z :
- Número da Autenticação Bancária
- Número da Autenticação / Protocolo

Os registros J e Z ficam no Lote do arquivo, então para ler os mesmos, precisa ler a lista de lote.

Algo como:

ACBrPagFor.Arquivos.Items[Indice1].PagFor.Lote[Indice2].SegmentoJ[Indice3].XXXX
ACBrPagFor.Arquivos.Items[Indice1].PagFor.Lote[Indice2].SegmentoJ[Indice3].SegmentoZ[Indice4].XXXX

 

Consultor SAC ACBr

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

  • Membros Pro
Postado

Sr. Diego

Boa Tarde!

Seria possível o senhor mostrar um exemplo bem simples de como tem que ser a rotina de leitura ?

Apenas para eu entender como  o AcbtPagFor entende de forma hierarquica cada linha do arquivo retorno para ler :

- Registro 0 ( Header de Arquivo ) : que é exibido apenas 1 vez

- Registro J e Z ( que podem ter diversas ocorrências )

Estou me perdendo na passagem destes índices.

Muito obrigado

image.png.25930419810523f56adc345d832b3183.png

 

 

  • Consultores
Postado
2 hours ago, Carmo said:

Sr. Diego

Boa Tarde!

Seria possível o senhor mostrar um exemplo bem simples de como tem que ser a rotina de leitura ?

Apenas para eu entender como  o AcbtPagFor entende de forma hierarquica cada linha do arquivo retorno para ler :

- Registro 0 ( Header de Arquivo ) : que é exibido apenas 1 vez

- Registro J e Z ( que podem ter diversas ocorrências )

Estou me perdendo na passagem destes índices.

Muito obrigado

image.png.25930419810523f56adc345d832b3183.png

 

 

Boa tarde.

Um exemplo bem simplista:

var
  Reg0: TRegistro0;
  SegJ: TSegmentoJ;
  SegZ: TSegmentoZ;
  PagFor: TPagFor;
  Lote: TLote;
  i, j, k, l: integer;
begin
  ACBrPagFor1.LerTxtRetorno('Caminho do arquivo + nome do arquivo');
  for i:=0 to Pred(ACBrPagFor1.Arquivos.Count) do
  begin
    PagFor := ACBrPagFor1.Arquivos.Items[i].PagFor;
    Reg0 := PagFor.Registro0;
    //Aqui você tem acesso as propriedades em Reg0.XXX
    for j:=0 to Pred(PagFor.Lote.Count) do
    begin
      Lote := PagFor.Lote[j];
      for k:=0 to Pred(Lote.SegmentoJ.Count) do
      begin
        SegJ := Lote.SegmentoJ[k];
        //Aqui você tem acesso as propriedades em SegJ.XXX
        for l:=0 to Pred(SegJ.SegmentoZ.Count) do
        begin
          SegZ := SegJ.SegmentoZ[l];
          //Aqui você tem acesso as propriedades em SegZ.XXX
        end;
      end;
    end;
  end;
end;

Para mais detalhes, você pode tentar seguir as classes com o CTRL+Click verificando as units do componente.

  • Curtir 1
Consultor SAC ACBr

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

  • Membros Pro
Postado (editado)

Sr. Diego

Boa Tarde!

O seu exemplo de ajudou muito!
Desta forma eu consegui efetuar a leitura completa do Arquivo-Retorno.

Só me restou uma dúvida : Existe uma forma de recuperar automaticamente a descrição da Ocorrência ?
Exemplo : Código Ocorrência : '00' igual à  "Crédito ou Débito Efetivado".

Lembrando que nada impede do Banco retornar mais de um Código de Ocorrencia no campo.

Grato

P.S.: Veja como ficou o código-fonte :

    ACBrPagFor1.LerTxtRetorno(NomeArquivo);
   for i:=0 to Pred(ACBrPagFor1.Arquivos.Count) do
    begin
      PagFor := ACBrPagFor1.Arquivos.Items[i].PagFor;
      Reg0   := PagFor.Registro0;
      LogMsg.Lines.Add('Registro 0');
      LogMsg.Lines.Add('Data Geração ...: ' + DateTimeToStr(Reg0.Arquivo.DataGeracao));
      LogMsg.Lines.Add('Hora Geração ...: ' + TimeToStr(Reg0.Arquivo.HoraGeracao));
      LogMsg.Lines.Add('Código Banco ...: ' + ACBrPagFor1.Configuracoes.Geral.CodigoBanco);
      LogMsg.Lines.Add('Nome Banco .....: ' + Reg0.NomeBanco);
      LogMsg.Lines.Add('Numero Conta ...: ' + IntToStr(Reg0.Empresa.ContaCorrente.Conta.Numero));
      LogMsg.Lines.Add('Dígito Conta ...: ' + Reg0.Empresa.ContaCorrente.Conta.DV);
      for j:=0 to Pred(PagFor.Lote.Count) do
        begin
          Lote := PagFor.Lote[j];
          for k:=0 to Pred(Lote.SegmentoJ.Count) do
          begin
            SegJ := Lote.SegmentoJ[k];
            LogMsg.Lines.Add('Registro J');
            LogMsg.Lines.Add('Código Barras ..: ' + SegJ.CodigoBarras);
            LogMsg.Lines.Add('Data Pagamento .: ' + DateToStr(SegJ.DataPagamento));
            LogMsg.Lines.Add('Vr.Pagamento ...: ' + CurrToStrF(SegJ.ValorPagamento,ffNumber,2));
            LogMsg.Lines.Add('Ref.Sacado .....: ' + SegJ.ReferenciaSacado);
            LogMsg.Lines.Add('Nosso Número ...: ' + SegJ.NossoNumero);
            LogMsg.Lines.Add('Ocorrência .....: ' + SegJ.CodOcorrencia);
            for l:=0 to Pred(SegJ.SegmentoZ.Count) do
              begin
                SegZ := SegJ.SegmentoZ[l];
                LogMsg.Lines.Add('Registro Z');
                LogMsg.Lines.Add('Autenticação .: ' + SegZ.Autenticacao);
                LogMsg.Lines.Add('Protocolo ....: ' + SegZ.SeuNumero);
              end;
          end;
        end;
    end;
 

 

Editado por Carmo
  • Membros Pro
Postado

Sr. Italo

Por favor me ajude a entender esta questão !

O Código da Ocorrência é retornado no Segmento J.

Mas no programa-exemplo a Mensagem do Retorno está vindo do Segmento Zero :
        with ACBrPagFor1.Arquivos.Items[i].PagFor.Registro0.Aviso.Items[k] do
        begin
          LogMsg.Lines.Add('Código........:' + CodigoRetorno);
          LogMsg.Lines.Add('Mensagem......:' + MensagemRetorno);

Como proceder neste caso ?

Grato

  • Consultores
Postado
1 hour ago, Carmo said:

Mas no programa-exemplo a Mensagem do Retorno está vindo do Segmento Zero :

Boa tarde!

Os avisos apenas foram centralizados no Registro0, mas se você observar a leitura dos avisos, na integra, verá que ele tem uma propriedade para informar a qual segmento aquele aviso se refere:

with ACBrPagFor1.Arquivos.Items[i].PagFor.Registro0.Aviso.Items[k] do
begin
  LogMsg.Lines.Add('Código........:' + CodigoRetorno);
  LogMsg.Lines.Add('Mensagem......:' + MensagemRetorno);
  LogMsg.Lines.Add('Segmento......:' + Segmento);
  LogMsg.Lines.Add('Segmento Filho:' + SegmentoFilho);
  LogMsg.Lines.Add('Seu Numero....:' + SeuNumero);
end;

 

  • Curtir 1
Consultor SAC ACBr

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

  • Membros Pro
Postado

Senhores

Diego e Italo

Boa Tarde!

Muito obrigado por sua ajuda.

Eu consegui implementar todo o recurso de Pagamentos a Fornecedor utilizando o AcbrPagFor.

Por favor, podem fechar o Tópico.

  • Curtir 1
  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

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

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.