Membros Pro Carmo Posted September 23 Membros Pro Share Posted September 23 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. Link to comment Share on other sites More sharing options...
Consultores Solution Diego Foliene Posted September 23 Consultores Solution Share Posted September 23 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 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro Carmo Posted September 23 Author Membros Pro Share Posted September 23 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 Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 23 Consultores Share Posted September 23 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 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. 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro Carmo Posted September 24 Author Membros Pro Share Posted September 24 (edited) 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; Edited September 24 by Carmo Link to comment Share on other sites More sharing options...
Consultores Italo Giurizzato Junior Posted September 24 Consultores Share Posted September 24 Boa tarde @Carmo, O programa exemplo do componente, mais precisamente o botão [Ler Arquivo Retorno], exemplifica a obtenção de todas as ocorrências, vale a pena conferir. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus Link to comment Share on other sites More sharing options...
Membros Pro Carmo Posted September 24 Author Membros Pro Share Posted September 24 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 Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 24 Consultores Share Posted September 24 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; 1 Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Membros Pro Carmo Posted September 30 Author Membros Pro Share Posted September 30 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. 1 Link to comment Share on other sites More sharing options...
Consultores Diego Foliene Posted September 30 Consultores Share Posted September 30 Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico. Diego FolieniAjude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (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 More sharing options...
Recommended Posts