Jump to content

Making Software Fernando

Membros
  • Posts

    3
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Making Software Fernando's Achievements

Newbie

Newbie (1/14)

  • Reacting Well Rare
  • One Month Later
  • First Post
  • Week One Done
  • Conversation Starter

Recent Badges

0

Reputation

  1. Boa tarde, disponha Analisando aqui realmente a Unit não está reconhecendo o Segmento O para o seu caso. No segundo procedimento onde é inserido o próprio Segmento O acaba não ocorrendo esse processo pois a função atualmente aceita apenas o Segmento O no Banco Itaú. (E no seu caso o retorno é do Banco do Brasil) procedure TPagForR.LerSegmentoO(I: Integer); begin if ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3O') then Exit; FPagFor.Lote.Last.SegmentoO.New; FPagFor.Lote.Last.SegmentoO.Last.CodMovimento := TInstrucaoMovimento(StrToInt(Copy(FArquivoTXT.Strings[i], 15, 3))); case FPagFor.Geral.Banco of pagItau: begin FPagFor.Lote.Last.SegmentoO.Last.CodigoBarras := Copy(FArquivoTXT.Strings[i], 18, 48); FPagFor.Lote.Last.SegmentoO.Last.NomeConcessionaria := Copy(FArquivoTXT.Strings[i], 66, 30); FPagFor.Lote.Last.SegmentoO.Last.DataVencimento := StringToDateTime(Copy(FArquivoTXT.Strings[i], 96, 2)+'/'+Copy(FArquivoTXT.Strings[i], 98, 2)+'/'+Copy(FArquivoTXT.Strings[i], 100, 4)); FPagFor.Lote.Last.SegmentoO.Last.QuantidadeMoeda := StrToInt(Copy(FArquivoTXT.Strings[i], 107, 15)) / 100000000; FPagFor.Lote.Last.SegmentoO.Last.ValorPagamento := StrToInt(Copy(FArquivoTXT.Strings[i], 122, 15)) / 100; FPagFor.Lote.Last.SegmentoO.Last.DataPagamento := StringToDateTime(Copy(FArquivoTXT.Strings[i], 137, 2)+'/'+Copy(FArquivoTXT.Strings[i], 139, 2)+'/'+Copy(FArquivoTXT.Strings[i], 141, 4)); FPagFor.Lote.Last.SegmentoO.Last.ValorPago := StrToInt(Copy(FArquivoTXT.Strings[i], 145, 15))/100; FPagFor.Lote.Last.SegmentoO.Last.NotaFiscal := StrToInt(Copy(FArquivoTXT.Strings[i], 163, 9)); FPagFor.Lote.Last.SegmentoO.Last.SeuNumero := Copy(FArquivoTXT.Strings[i], 175, 20); FPagFor.Lote.Last.SegmentoO.Last.NossoNumero := Copy(FArquivoTXT.Strings[i], 216, 15); FPagFor.Lote.Last.SegmentoO.Last.CodOcorrencia := Trim(Copy(FArquivoTXT.Strings[i], 231, 10)); FPagFor.Lote.Last.SegmentoO.Last.DescOcorrencia := DescricaoRetornoItau(FPagFor.Lote.Last.SegmentoO.Last.CodOcorrencia); end; end; {opcionais segmento O} LerSegmentoZ(FPagFor.Lote.Last.SegmentoO.Last.SegmentoZ, i); end; Isso é um dos pontos, o segundo é o fato de no começo dessa função ter uma condição verificando se a linha lida contém o "3O" ao concatenar a posição 8 e 14, e essa condição acaba sendo FALSA nas linhas opcionais (Segmento Z), pois ao concatenar acaba sendo "3Z". Deveria nessa condição também ter uma verificação para checar se está sendo lido algum Segmento Opcional do Segmento O, como é o caso do Z. Com tudo isso, cheguei na conclusão de que referente ao Segmento O ainda não está completo quanto ao processamento de Retorno, sendo necessária algumas atualizações. Por ser uma solução recente é comum não estar completo, e conforme o uso da comunidade vamos acertando os detalhes. Estou confirmando se não deixei nada passar, mas acredito que seja isso mesmo conforme o que analisei da Unit ACBrPagForLerTxt.
  2. Olá mlgoncalves, consegui sim. Acabei não detalhando aqui mas precisei fazer uma mudança na lógica da Unit, e para ela valer acabei tendo que criar o arquivo da Unit em outra pasta sem ser a do SVN, pois minhas mudanças eram ignoradas quando eu fazia direto no arquivo da pasta do SVN. (Mesmo sem dar o Update, que acaba alterando o arquivo) Após criar o arquivo nessa outra pasta, importei para o meu projeto e esse arquivo começou a valer no lugar do original, que era exatamente o que eu precisava. (Pois esse meu arquivo estava com a correção) Vou deixar aqui o arquivo novo já com as mudanças que resolveram o meu problema. Após atualizar o cliente me deu o feedback que tudo voltou a funcionar corretamente no momento de processar o retorno. As minhas alterações estão marcadas com o comentário "//Velosys". Nas linhas: > linha 689: Adicionada verificação se o SegmentoJ existe antes de tentar incluir informações nele, pois quando não tinha Segmento J no arquivo ainda assim a função tentava incluir informações nele e causava "Access Violation". > linha 286: Por conta do Número da Conta do Favorecido em alguns dos meus casos estourar o máximo aceito pelo Int, precisei alterar para Int64. > linha 298: Mesma situação da linha 286. Espero que isso consiga te ajudar. Fico a disposição. ACBrPagForLerTxt.pas
  3. Bom dia, Ao utilizar o LerTXT do componente ACBrPagFor me deparei com um problema na Unit ACBrPagForLerTxt quando é feito o processamento do Segmento A do Arquivo de Retorno. Nos casos do Segmento A é incluso o Segmento B que possui algumas informações, assim como em outros Segmentos. Na leitura dos outros Segmentos (J e N) está faltando uma verificação se o Registro Pai existe, e acaba tentando inserir o Segmento B neles também, porém não existem e acaba apresentando o erro. Vou utilizar como exemplo a Leitura do Segmento J: (Observações feitas entre **** ****) procedure TPagForR.LerSegmentoJ(I: Integer); var mOk:boolean; x:integer; begin if ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3J') and ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3B') and ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3C') and ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3Z') then Exit; if ((Copy(FArquivoTXT.Strings[i], 18, 2) <> '52') and (Copy(FArquivoTXT.Strings[i], 18, 2) <> '99')) and ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3B') and ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3C') and ((Copy(FArquivoTXT.Strings[i], 8, 1) + Copy(FArquivoTXT.Strings[i], 14, 1)) <> '3Z') then begin FPagFor.Lote.Last.SegmentoJ.New; FPagFor.Lote.Last.SegmentoJ.Last.CodMovimento := StrToInMovimento(mOk, Copy(FArquivoTXT.Strings[i], 15, 3)); FPagFor.Lote.Last.SegmentoJ.Last.CodigoBarras := Copy(FArquivoTXT.Strings[i], 18, 44); FPagFor.Lote.Last.SegmentoJ.Last.NomeCedente := Copy(FArquivoTXT.Strings[i], 62, 30); FPagFor.Lote.Last.SegmentoJ.Last.DataVencimento := StringToDateTime(Copy(FArquivoTXT.Strings[i], 92, 2)+'/'+Copy(FArquivoTXT.Strings[i], 94, 2)+'/'+Copy(FArquivoTXT.Strings[i], 96, 4)); case FPagFor.Geral.Banco of pagItau, pagSantander, pagSicred, pagBancoCECRED, pagBradesco: begin FPagFor.Lote.Last.SegmentoJ.Last.ValorTitulo := StrToInt(Copy(FArquivoTXT.Strings[i], 100, 15)) / 100; FPagFor.Lote.Last.SegmentoJ.Last.Desconto := StrToInt(Copy(FArquivoTXT.Strings[i], 115, 15)) / 100; FPagFor.Lote.Last.SegmentoJ.Last.Acrescimo := StrToInt(Copy(FArquivoTXT.Strings[i], 130, 15)) / 100; FPagFor.Lote.Last.SegmentoJ.Last.DataPagamento := StringToDateTime(Copy(FArquivoTXT.Strings[i], 145, 2)+'/'+Copy(FArquivoTXT.Strings[i], 147, 2)+'/'+Copy(FArquivoTXT.Strings[i], 149, 4)); FPagFor.Lote.Last.SegmentoJ.Last.ValorPagamento := StrToInt(Copy(FArquivoTXT.Strings[i], 153, 15)) / 100; FPagFor.Lote.Last.SegmentoJ.Last.QtdeMoeda := StrToInt(Copy(FArquivoTXT.Strings[i], 168, 15)) / 100000; FPagFor.Lote.Last.SegmentoJ.Last.ReferenciaSacado := Copy(FArquivoTXT.Strings[i], 183, 20); case FPagFor.Geral.Banco of pagSicred, pagBancoCECRED, pagBradesco : FPagFor.Lote.Last.SegmentoJ.Last.NossoNumero := Copy(FArquivoTXT.Strings[i], 203, 20); else FPagFor.Lote.Last.SegmentoJ.Last.NossoNumero := Copy(FArquivoTXT.Strings[i], 216, 15) end; FPagFor.Lote.Last.SegmentoJ.Last.CodOcorrencia := Trim(Copy(FArquivoTXT.Strings[i], 231, 10)); if (FPagFor.Geral.Banco = pagItau) then FPagFor.Lote.Last.SegmentoJ.Last.DescOcorrencia := DescricaoRetornoItau(FPagFor.Lote.Last.SegmentoJ.Last.CodOcorrencia); if POS(FPagFor.Lote.Last.SegmentoJ.Last.CodOcorrencia, PAGAMENTO_LIBERADO_AVISO) = 0 then begin FPagFor.Registro0.Aviso.New; FPagFor.Registro0.Aviso.Last.CodigoRetorno := FPagFor.Lote.Last.SegmentoJ.Last.CodOcorrencia; FPagFor.Registro0.Aviso.Last.MensagemRetorno := FPagFor.Lote.Last.SegmentoJ.Last.DescOcorrencia; FPagFor.Registro0.Aviso.Last.Segmento := 'J'; FPagFor.Registro0.Aviso.Last.SegmentoFilho := ''; FPagFor.Registro0.Aviso.Last.SeuNumero := FPagFor.Lote.Last.SegmentoJ.Last.ReferenciaSacado; end; end; end; end; **** Nesse ponto abaixo é feita tentativa de inserir os segmentos opcionais, porém, não existe nenhum Segmento J preparado pois estou processando apenas o Segmento A. Com isso, é gerado um erro por não existir o registro. Acaba entrando nesse código pois reconhece no arquivo o Segmento B que existe também no Segmento A. Tentei colocar aqui uma condição "if (FPagFor.Lote.Last.SegmentoJ.Count > 0) then" mas por algum motivo minhas mudanças não estão sendo reconhecidas no código local e não consegui testar essa solução. **** {opcionais segmento J} LerSegmentoJ52(FPagFor.Lote.Last.SegmentoJ.Last.SegmentoJ52, i); LerSegmentoJ99(FPagFor.Lote.Last.SegmentoJ.Last.SegmentoJ99, i); LerSegmentoB(FPagFor.Lote.Last.SegmentoJ.Last.SegmentoB, i); LerSegmentoC(FPagFor.Lote.Last.SegmentoJ.Last.SegmentoC, i); LerSegmentoZ(FPagFor.Lote.Last.SegmentoJ.Last.SegmentoZ, i); case FPagFor.Geral.Banco of pagItau: begin for x := 0 to FPagFor.Lote.Last.SegmentoJ.Last.SegmentoB.Count - 1 do begin if POS(FPagFor.Lote.Last.SegmentoJ.Last.SegmentoB.Items[x].CodOcorrencia, PAGAMENTO_LIBERADO_AVISO) = 0 then begin FPagFor.Registro0.Aviso.New; FPagFor.Registro0.Aviso.Last.CodigoRetorno := FPagFor.Lote.Last.SegmentoJ.Last.SegmentoB.Items[x].CodOcorrencia; FPagFor.Registro0.Aviso.Last.MensagemRetorno := FPagFor.Lote.Last.SegmentoJ.Last.SegmentoB.Items[x].DescOcorrencia; FPagFor.Registro0.Aviso.Last.Segmento := 'J'; FPagFor.Registro0.Aviso.Last.SegmentoFilho := 'B'; FPagFor.Registro0.Aviso.Last.SeuNumero := FPagFor.Lote.Last.SegmentoJ.Last.ReferenciaSacado; end; end; for x := 0 to FPagFor.Lote.Last.SegmentoJ.Last.SegmentoC.Count - 1 do begin if POS(FPagFor.Lote.Last.SegmentoJ.Last.SegmentoC.Items[x].CodOcorrencia, PAGAMENTO_LIBERADO_AVISO) = 0 then begin FPagFor.Registro0.Aviso.New; FPagFor.Registro0.Aviso.Last.CodigoRetorno := FPagFor.Lote.Last.SegmentoJ.Last.SegmentoC.Items[x].CodOcorrencia; FPagFor.Registro0.Aviso.Last.MensagemRetorno := FPagFor.Lote.Last.SegmentoJ.Last.SegmentoC.Items[x].DescOcorrencia; FPagFor.Registro0.Aviso.Last.Segmento := 'J'; FPagFor.Registro0.Aviso.Last.SegmentoFilho := 'C'; FPagFor.Registro0.Aviso.Last.SeuNumero := FPagFor.Lote.Last.SegmentoJ.Last.ReferenciaSacado; end; end; end; end; end; Gostaria de um auxilio principalmente para eu conseguir checar se essa solução é viável, pois infelizmente não consegui testar o código já que mesmo mudando e rodando o sistema ele passa no código como se fosse o antigo ainda, ignorando minhas alterações locais. Vou continuar fazendo os testes aqui e qualquer novidade atualizo no tópico. Agradeço desde já e fico a disposição para passar mais detalhes sobre o ocorrido e chegarmos numa solução.
×
×
  • 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.