Membros Pro Carmo Postado 23 Setembro Membros Pro Postado 23 Setembro 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.
Consultores Solution Diego Foliene Postado 23 Setembro Consultores Solution Postado 23 Setembro 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 !!
Membros Pro Carmo Postado 23 Setembro Autor Membros Pro Postado 23 Setembro 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
Consultores Diego Foliene Postado 23 Setembro Consultores Postado 23 Setembro 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 !!
Membros Pro Carmo Postado 24 Setembro Autor Membros Pro Postado 24 Setembro (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 24 Setembro por Carmo
Consultores Italo Giurizzato Junior Postado 24 Setembro Consultores Postado 24 Setembro 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
Membros Pro Carmo Postado 24 Setembro Autor Membros Pro Postado 24 Setembro 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 Diego Foliene Postado 24 Setembro Consultores Postado 24 Setembro 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 !!
Membros Pro Carmo Postado 30 Setembro Autor Membros Pro Postado 30 Setembro 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
Consultores Diego Foliene Postado 30 Setembro Consultores Postado 30 Setembro 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 !!
Recommended Posts