Ir para conteúdo
  • Cadastre-se

dev botao

ACBrPagFor - Leitura da propriedade DescOcorrencia no retorno


Ver Solução Respondido por Diego Foliene,
  • Este tópico foi criado há 388 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde.

No componente ACBrPagFor foi feita uma alteração "Alteração visando colocar cada ocorrência em um item da lista", revisão 30667
Nesta alteração foi removida a propriedade DescOcorrencia que utilizamos na leitura do retorno do pagamento de fornecedores.
Existe algum exemplo que mostre como fazer a leitura da descrição da ocorrência após esta alteração?

Desde já agradeço

  • Consultores
  • Solution
Postado
16 horas atrás, maico.smaniotto disse:

Boa tarde.

No componente ACBrPagFor foi feita uma alteração "Alteração visando colocar cada ocorrência em um item da lista", revisão 30667
Nesta alteração foi removida a propriedade DescOcorrencia que utilizamos na leitura do retorno do pagamento de fornecedores.
Existe algum exemplo que mostre como fazer a leitura da descrição da ocorrência após esta alteração?

Desde já agradeço

Bom dia.

Sim, veja como é feito no botão Ler Retorno do programa exemplo do componente.

    ACBrPagFor1.LerTxtRetorno(NomeArquivo);

    LogMsg.Lines.Add('Arquivo de Retorno: ' + NomeArquivo);
    LogMsg.Lines.Add('Lido com sucesso.');
    LogMsg.Lines.Add(' ');

    if ACBrPagFor1.Arquivos.Count > 0 then
      LogMsg.Lines.Add('Lista de Ocorrências:')
    else
      LogMsg.Lines.Add('Sem nenhuma Ocorrência.');

    for i := 0 to ACBrPagFor1.Arquivos.Count -1 do
    begin
      for k := 0 to ACBrPagFor1.Arquivos.Items[i].PagFor.Registro0.Aviso.Count -1 do
      begin
        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;
      end;
      for k := 0 to ACBrPagFor1.Arquivos.Items[I].PagFor.Lote.Count - 1 do
      begin
        Reg1 := ACBrPagFor1.Arquivos.Items[i].PagFor.Lote.Items[k].Registro1;

        if Reg1.CodOcorrencia <> '' then
          LogMsg.Lines.Add('Código...: ' + Reg1.CodOcorrencia);


      end;
    end;

 

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

Postado

Confesso que não entendi o motivo nem a lógica dessa alteração, pois tirou o DescOcorrencia mas o CodOcorrencia permaneceu.

Meu código não está compilando e por enquanto não entendi o que vou ter que fazer pra resolver, pois no meu processamento de retorno eu nem mesmo uso o  Registro0, e é nele que está a tal "Avisos" que é onde colocaram a descrição da ocorrência :-(

Postado

Boa tarde.

Obrigado pelo retorno @Diego Foliene

@Cantu lendo os fontes acredito que o motivo tenha sido que no código estava vindo mais de um código e foi alterado para poder "quebrar" esse código em vários itens e esses itens foram lançados dentro do Registro0.

Verifiquei que parece ser possível identificar as mensagens de cada segmento/item através das propriedades Segmento e SeuNumero, porém no momento estamos sem nenhum arquivo de retorno em mãos e não conseguimos testar.

Segue o código:

    ACBrPagFor1.LerTxtRetorno(NomeArquivo);

    for I := 0 to ACBrPagFor1.Arquivos.Count - 1 do
    begin
      for J := 0 to ACBrPagFor1.Arquivos.Items[I].PagFor.Lote.Count - 1 do
      begin
        for K := 0 to ACBrPagFor1.Arquivos.Items[I].PagFor.Lote.Items[J].SegmentoA.Count - 1 do
        begin
          vValor := 0;

          vCodOcorrencia  := ACBrPagFor1.Arquivos.Items[I].PagFor.Lote.Items[J].SegmentoA.Items[K].CodOcorrencia;
//          vDescOcorrencia := ACBrPagFor1.Arquivos.Items[I].PagFor.Lote.Items[J].SegmentoA.Items[K].DescOcorrencia;
          vDescOcorrencia := '';

          if vCodOcorrencia <> '' then
          begin
            for A := 0 to ACBrPagFor1.Arquivos.Items[I].PagFor.Registro0.Aviso.Count - 1 do
            begin
              // Busca avisos do segmento A deste SeuNumero
              if (ACBrPagFor1.Arquivos.Items[I].PagFor.Registro0.Aviso.Items[A].Segmento = 'A') and
                 (ACBrPagFor1.Arquivos.Items[I].PagFor.Registro0.Aviso.Items[A].SeuNumero = ACBrPagFor1.Arquivos.Items[I].PagFor.Lote.Items[J].SegmentoA.Items[K].Credito.SeuNumero) then
              begin
                if vDescOcorrencia <> '' then
                  vDescOcorrencia := vDescOcorrencia + ' | ';

                vDescOcorrencia := vDescOcorrencia + ACBrPagFor1.Arquivos.Items[I].PagFor.Registro0.Aviso.Items[A].CodigoRetorno + ': ' + ACBrPagFor1.Arquivos.Items[I].PagFor.Registro0.Aviso.Items[A].MensagemRetorno;
              end;
            end;
          end;
          ...
    end;
  end;
end;

 

  • Curtir 2
Postado

Bom dia,

Uma opção é criar uma function seguindo a ideia da procedure "TArquivoR_CNAB240.GerarAvisos", onde passaria ocorrência, Segmento e SeuNumero, aí é só varrer a lista de avisos e retornar a descrição.

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.