Ir para conteúdo
  • Cadastre-se

dev botao

Processar arquivo retorno


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

Recommended Posts

  • Membros Pro

Vinícius,

Boa noite. Bem vindo então, rsrs, abandonamos o cobrebemx também. Bom, no retorno eu trato dessa maneira:

procedure TfrmXTrataRetornoBancario.LerRetornoAcbr;
var
    bErroACBr : boolean;
    i : Integer;
begin
    if(cmbLocalCobranca.ItemIndex=-1) then
    begin
        MsgInfo('Selecione um local de cobrança primeiro');
        Exit;
    end;

    bErroACBr := false;

    try
        ConfigACBr; // lembrando que quando configuro deixo a tag ACBrBoleto.LeCedenteRetorno := true;
    except
        bErroAcbr := true;
        MsgErro('Dados não foram inseridos corretamente no componente ACBr');
    end;

    if(bErroAcbr) then Exit;

   // o arquivo pode estar em qualquer lugar.
    ACBrBoleto.DirArqRetorno := ExtractFilePath(txtArqRetorno.Text);

    // somente o nome do arquivo
    ACBrBoleto.NomeArqRetorno := ExtractFileName(txtArqRetorno.Text);

    // carrega na coleção ocorrencias de cobrança
    ACBrBoleto.LerRetorno;

    txtRegistros.Value := 0;

    for i := 0 to ACBrBoleto.ListadeBoletos.Count - 1 do
    begin
        gridPesquisa.RowCount := i + 2;
        gridPesquisa.Cells[0,i + 1]  := IntToStr(i);
        gridPesquisa.Cells[1,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].NossoNumero;
        gridPesquisa.Cells[8,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].SeuNumero;
        gridPesquisa.Cells[9,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].NumeroDocumento;
        gridPesquisa.Cells[2,i + 1]  := FormatDateTime('dd/mm/yyyy',ACBrBoleto.ListadeBoletos.Objects[i].DataCredito);
        gridPesquisa.Cells[3,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].Carteira;
        gridPesquisa.Cells[4,i + 1]  := FormatDateTime('dd/mm/yyyy',ACBrBoleto.ListadeBoletos.Objects[i].DataOcorrencia);
        gridPesquisa.Cells[5,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].CodigoLiquidacao;
        gridPesquisa.Cells[6,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].CodigoLiquidacaoDescricao;
        gridPesquisa.Cells[7,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].Sacado.NomeSacado;

        if(ACBrBoleto.ListadeBoletos.Objects[i].ValorRecebido > 0) then
            gridPesquisa.Cells[10,i + 1] := 'SIM'
        else
        begin
            gridPesquisa.Cells[10,i + 1] := 'NAO';
            gridPesquisa.Cells[2,i + 1]  := '';
        end;

        if(trim(gridPesquisa.Cells[6,i + 1]) = 'Compensação Eletrônica') then
            gridPesquisa.Cells[6,i + 1]  := 'Comp.Eletrônica';

        if(trim(gridPesquisa.Cells[2,i + 1]) = '') then
            gridPesquisa.Cells[6,i + 1]  := '';

        gridPesquisa.Cells[11,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorRecebido);
        gridPesquisa.Cells[12,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorDesconto);
        gridPesquisa.Cells[13,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorMoraJuros);
        gridPesquisa.Cells[14,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorOutrasDespesas +
                                                 ACBrBoleto.ListadeBoletos.Objects[i].ValorIOF );
        gridPesquisa.Cells[15,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorOutrasDespesas);
        gridPesquisa.Cells[16,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorPago);
        gridPesquisa.Cells[17,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorDespesaCobranca);

        if( DescricaoMotivoRejeicaoComando.Text <> '' ) then
            // problemas na baixa, registro o motivo
            grdListado.Cells[18,i + 1] := grdListado.Cells[1,i + 1]+' - '+DescricaoMotivoRejeicaoComando.Text
        else
        begin
           // localizar título no sistema
           qryPesquisa.Close;
           qryPesquisa.SQL.Clear;
           qryPesquisa.SQL.Add('SELECT id, vencto, venda, cliente, situacaotit FROM contasareceber WHERE nossonumero = ''' + Trim(gridPesquisa.Cells[1,i + 1]) + '''');
           qryPesquisa.SQL.Add('AND empresa =  ' + variables._EMP_CODI);
           qryPesquisa.Open;

           if(not qryPesquisa.Eof) then
           begin
              gridPesquisa.Cells[0 ,i + 1] := 'SIM';
              gridPesquisa.Cells[20,i + 1] := qryPesquisa.FieldByName('id').AsString;
              gridPesquisa.Cells[22,i + 1] := qryPesquisa.FieldByName('vencto').AsString;
              gridPesquisa.Cells[23,i + 1] := qryPesquisa.FieldByName('cliente').AsString;

              if qryPesquisa.FieldByName('venda').AsString = '' then
                 gridPesquisa.Cells[21,i + 1] := '0' // lancto avulso
              else
                 gridPesquisa.Cells[21,i + 1] := qryPesquisa.FieldByName('venda').AsString;

              if(qryPesquisa.FieldByName('situacaotit').AsString = 'P') then
                 gridPesquisa.Cells[8,i + 1] := 'SIM'  // alguem já baixou
              else
                 gridPesquisa.Cells[8,i + 1] := 'NAO';

           end
           else
           begin
              gridPesquisa.Cells[20,i + 1] := '';
              gridPesquisa.Cells[21,i + 1] := '0';
           end;
           qryPesquisa.Close;
        end;  

        gridPesquisa.Row := i + 1;
    end;
end;

Dessa maneira, eu abro o arquivo de retorno, leio e pesquiso no meu bd pelo nosso número que gerei na remessa. Assim eu obtenho a ID do meu contas a receber e fica um botão na tela chamado PROCESSAR BAIXA pro usuário comandar as baixas. 

Veja aí se ajuda,

Até mais,

 

  • Curtir 3

-- 

Alexandre de Oliveira

Diretor de T.I.

xx16 3811 0155

www.consultatec.com.br - [email protected]

image.png.744a897bbf36127e428c6e687ef05731.png

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Membros Pro
Em 27/07/2016 at 10:54, dreamsoft_PR disse:

vc esta pesquisando no 


 gridPesquisa.Cells

 em um grid?

Olá, boa noite.

Eu leio o retorno e coloco em um stringgrid e depois processo de acordo com minhas necessidades. A dica do Solivan também é válida.

Até mais,

-- 

Alexandre de Oliveira

Diretor de T.I.

xx16 3811 0155

www.consultatec.com.br - [email protected]

image.png.744a897bbf36127e428c6e687ef05731.png

 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

O que devo configurar antes no componente do boleto?

O que vc configura utilizando a função: ConfigACBR.

Estou tentando ler um retorno da caixa, mas esta reportando erro de não implementado para o banco.

Apenas estou apontando o path e arquivo de retorno. O que devo configurar para o retorno?

Ele não deveria identificar o banco, etc pelo arquivo?

Link para o comentário
Compartilhar em outros sites

Em 31/05/2016 at 00:55, aocampioni disse:

Vinícius,

Boa noite. Bem vindo então, rsrs, abandonamos o cobrebemx também. Bom, no retorno eu trato dessa maneira:


procedure TfrmXTrataRetornoBancario.LerRetornoAcbr;
var
    bErroACBr : boolean;
    i : Integer;
begin
    if(cmbLocalCobranca.ItemIndex=-1) then
    begin
        MsgInfo('Selecione um local de cobrança primeiro');
        Exit;
    end;

    bErroACBr := false;

    try
        ConfigACBr; // lembrando que quando configuro deixo a tag ACBrBoleto.LeCedenteRetorno := true;
    except
        bErroAcbr := true;
        MsgErro('Dados não foram inseridos corretamente no componente ACBr');
    end;

    if(bErroAcbr) then Exit;

   // o arquivo pode estar em qualquer lugar.
    ACBrBoleto.DirArqRetorno := ExtractFilePath(txtArqRetorno.Text);

    // somente o nome do arquivo
    ACBrBoleto.NomeArqRetorno := ExtractFileName(txtArqRetorno.Text);

    // carrega na coleção ocorrencias de cobrança
    ACBrBoleto.LerRetorno;

    txtRegistros.Value := 0;

    for i := 0 to ACBrBoleto.ListadeBoletos.Count - 1 do
    begin
        gridPesquisa.RowCount := i + 2;
        gridPesquisa.Cells[0,i + 1]  := IntToStr(i);
        gridPesquisa.Cells[1,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].NossoNumero;
        gridPesquisa.Cells[8,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].SeuNumero;
        gridPesquisa.Cells[9,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].NumeroDocumento;
        gridPesquisa.Cells[2,i + 1]  := FormatDateTime('dd/mm/yyyy',ACBrBoleto.ListadeBoletos.Objects[i].DataCredito);
        gridPesquisa.Cells[3,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].Carteira;
        gridPesquisa.Cells[4,i + 1]  := FormatDateTime('dd/mm/yyyy',ACBrBoleto.ListadeBoletos.Objects[i].DataOcorrencia);
        gridPesquisa.Cells[5,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].CodigoLiquidacao;
        gridPesquisa.Cells[6,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].CodigoLiquidacaoDescricao;
        gridPesquisa.Cells[7,i + 1]  := ACBrBoleto.ListadeBoletos.Objects[i].Sacado.NomeSacado;

        if(ACBrBoleto.ListadeBoletos.Objects[i].ValorRecebido > 0) then
            gridPesquisa.Cells[10,i + 1] := 'SIM'
        else
        begin
            gridPesquisa.Cells[10,i + 1] := 'NAO';
            gridPesquisa.Cells[2,i + 1]  := '';
        end;

        if(trim(gridPesquisa.Cells[6,i + 1]) = 'Compensação Eletrônica') then
            gridPesquisa.Cells[6,i + 1]  := 'Comp.Eletrônica';

        if(trim(gridPesquisa.Cells[2,i + 1]) = '') then
            gridPesquisa.Cells[6,i + 1]  := '';

        gridPesquisa.Cells[11,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorRecebido);
        gridPesquisa.Cells[12,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorDesconto);
        gridPesquisa.Cells[13,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorMoraJuros);
        gridPesquisa.Cells[14,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorOutrasDespesas +
                                                 ACBrBoleto.ListadeBoletos.Objects[i].ValorIOF );
        gridPesquisa.Cells[15,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorOutrasDespesas);
        gridPesquisa.Cells[16,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorPago);
        gridPesquisa.Cells[17,i + 1] := FloatToStr(ACBrBoleto.ListadeBoletos.Objects[i].ValorDespesaCobranca);

        if( DescricaoMotivoRejeicaoComando.Text <> '' ) then
            // problemas na baixa, registro o motivo
            grdListado.Cells[18,i + 1] := grdListado.Cells[1,i + 1]+' - '+DescricaoMotivoRejeicaoComando.Text
        else
        begin
           // localizar título no sistema
           qryPesquisa.Close;
           qryPesquisa.SQL.Clear;
           qryPesquisa.SQL.Add('SELECT id, vencto, venda, cliente, situacaotit FROM contasareceber WHERE nossonumero = ''' + Trim(gridPesquisa.Cells[1,i + 1]) + '''');
           qryPesquisa.SQL.Add('AND empresa =  ' + variables._EMP_CODI);
           qryPesquisa.Open;

           if(not qryPesquisa.Eof) then
           begin
              gridPesquisa.Cells[0 ,i + 1] := 'SIM';
              gridPesquisa.Cells[20,i + 1] := qryPesquisa.FieldByName('id').AsString;
              gridPesquisa.Cells[22,i + 1] := qryPesquisa.FieldByName('vencto').AsString;
              gridPesquisa.Cells[23,i + 1] := qryPesquisa.FieldByName('cliente').AsString;

              if qryPesquisa.FieldByName('venda').AsString = '' then
                 gridPesquisa.Cells[21,i + 1] := '0' // lancto avulso
              else
                 gridPesquisa.Cells[21,i + 1] := qryPesquisa.FieldByName('venda').AsString;

              if(qryPesquisa.FieldByName('situacaotit').AsString = 'P') then
                 gridPesquisa.Cells[8,i + 1] := 'SIM'  // alguem já baixou
              else
                 gridPesquisa.Cells[8,i + 1] := 'NAO';

           end
           else
           begin
              gridPesquisa.Cells[20,i + 1] := '';
              gridPesquisa.Cells[21,i + 1] := '0';
           end;
           qryPesquisa.Close;
        end;  

        gridPesquisa.Row := i + 1;
    end;
end;

Dessa maneira, eu abro o arquivo de retorno, leio e pesquiso no meu bd pelo nosso número que gerei na remessa. Assim eu obtenho a ID do meu contas a receber e fica um botão na tela chamado PROCESSAR BAIXA pro usuário comandar as baixas. 

Veja aí se ajuda,

Até mais,

 

Quando tu chama o ConfigACBr, ele verifica a conta que o cliente escolheu no combobox e faz a configuração, seria isso?

To pensando em mudar o componente de boletos que usamos aqui na empresa e como tem cliente que tem N contas com diversas carteiras, to pesquisando para ver o menor impacto possível. Hoje por exemplo no componente que tem aqui, ele verifica o banco que é e já dá o destino correto para leitura do retorno(240 ou 400), sendo que precisei fazer uma STA meio grande para a CEF por exemplo, para tratar o layout SICOB e SIGCB.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Olá, boa tarde.

Sim é isso. Um combobox com a carteira selecionada. Cadastramos uma conta corrente e a partir daí cadastramos as carteiras para essa conta (tipo mestre-detalhe), e o combobox lê esse DETALHE mostrando as carteiras cadastradas. 

Até mais,

-- 

Alexandre de Oliveira

Diretor de T.I.

xx16 3811 0155

www.consultatec.com.br - [email protected]

image.png.744a897bbf36127e428c6e687ef05731.png

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2794 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.

The popup will be closed in 10 segundos...