Ir para conteúdo
  • Cadastre-se

dev botao

Desconto Condicional no Arquivo Remessa


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

Recommended Posts

Postado

Boa tarde Senhores!

Parametrizamos o desconto condicional no boleto Itaú e a impressão do boleto saiu com os dados perfeitamente corretos; contudo, ao gerar a remessa, os dados do desconto condicional (data e valor) não eram registrados na linha. 

Analisando os fontes da unit ACBrBancoItau, percebi que o atributo ValorDesconto estava zerado, apesar de termos preenchido o campo conforme o exemplo. Debugando os fontes, percebi que no obj ACBrTitulo, este campo estava preenchido corretamente. Verifiquei então que no método TACBrBancoItau.GerarRegistroTransacao400, havia uma sobreposição do Obj ACBrBoleto em relação ao obj ACBrTitulo, conforme abaixo:

     with ACBrTitulo do

     begin,

          ....

          with ACBrBoleto do

          ....

Porém, o objeto que é preenchido é o ACBrTitulo, daí troquei a ordem da referência e o desconto condicional, assim como a data e os juros, passaram a ser gravados no arquivo remessa. 

Visto que não conheço aACBrBancoItau.pas fundo do código ACBr não sei informar se minha dedução está correta, ou se simplesmente o atributo ValorDesconto não foi preenchido no obj ACBrBoleto. Na verdade, fiz um outro teste e vi que é possível compilar os fontes sem a referência ao ACBrBoleto. Por este motivo, abri o tópico e anexo os ajustes que fiz, que pode ser identificados pelo meu nome e pela data de hoje - 15/02/2022.

  • Administradores
Postado

Obrigado pela contribuição, em breve será validada para possível inclusão ao svn

TK-2364

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

  • Consultores
  • Solution
Postado

Bom dia,

Não foi detectado não conformidade nas implementações atuais.

você está informando os campos valor e data do desconto ?

  var Titulo : TACBrTitulo;
begin
  Titulo := dm.ACBrBoleto.CriarTituloNaLista;
  Titulo.ValorDesconto := -- informar o valor;
  Titulo.DataDesconto := --informar o dia;
end;

 

image.png

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

Postado (editado)
Em 18/02/2022 at 09:41, Victor H. Gonzales - Panda disse:

Bom dia,

Não foi detectado não conformidade nas implementações atuais.

você está informando os campos valor e data do desconto ?

  var Titulo : TACBrTitulo;
begin
  Titulo := dm.ACBrBoleto.CriarTituloNaLista;
  Titulo.ValorDesconto := -- informar o valor;
  Titulo.DataDesconto := --informar o dia;
end;

 

image.png

Bom dia Victor!

Sim preenchi os campos corretamente, não funcionou, por isto debuguei o código para entender como funciona. Segue a referência do meu código, às vezes está faltando algo que não percebi.

        {Sérgio 30/04/2020: configura o título.}
        Titulo := ACBrBoleto.CriarTituloNaLista;
        with Titulo do
        begin
          {Dados do título.}
          LocalPagamento    := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenBbaPagLoc').AsString), true), 01, 15);
          case dsDenPqs.DataSet.FieldByName('DenBcrCesCod').AsInteger of
            00: OcorrenciaOriginal.Tipo := toRemessaRegistrar;
            04: OcorrenciaOriginal.Tipo := toRemessaBaixar;
            05: OcorrenciaOriginal.Tipo := toRemessaProtestar;
            08: OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtesto;
            14: OcorrenciaOriginal.Tipo := toRemessaAlterarVencimento;
            16: OcorrenciaOriginal.Tipo := toRemessaNegativacaoSerasa;
            18: OcorrenciaOriginal.Tipo := toRemessaExcluirNegativacaoSerasa;
          end;
          NumeroDocumento   := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenCreNum').AsString), true), 1, 10);
          NossoNumero       := RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenBcrPagDoc').AsString), true);
          SeuNumero         := copy(RemoverCaracteresInvalidos(RemoveEnterDaString('D' + dsDenPqs.DataSet.FieldByName('DenCreDocNum').AsString +
                                                                                   'S' + dsDenPqs.DataSet.FieldByName('DenCreDocSer').asString +
                                                                                   'P' + dsDenPqs.DataSet.FieldByName('DenCreDocPar').AsString), true), 1, 25);
          EspecieDoc        := 'DM';
          DataDocumento     := dsDenPqs.DataSet.FieldByName('DenCreEmiDat').AsDateTime;
          Vencimento        := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime;
          DataProcessamento := Now;
          Aceite            := atNao;
          Carteira          := RemoverCaracteresInvalidos(RemoveEnterDaString(edDenBanCarNum.Text), true);
          ValorDocumento    := dsDenPqs.DataSet.FieldByName('DenBcrPreVal').AsFloat;
          {28/12/2020. Sérgio: tratamento de desconto condicionado.}
          if dsDenPqs.DataSet.FieldByName('DenBcrBaiDes').AsFloat > 0 then
          begin
            TipoDesconto  := tdValorFixoAteDataInformada; {Código do Desconto - valor fixo até a data informada.}
            DataDesconto  := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime; {Data do Desconto.}
            ValorDesconto := dsDenPqs.DataSet.FieldByName('DenBcrBaiDes').AsFloat; {Valor do Desconto.}
          end
          else begin
                 TipoDesconto  := tdNaoConcederDesconto; {Código do desconto - não há desconto.}
                 DataDesconto  := 0; {Data do Desconto.}
                 ValorDesconto := 0; {Valor do Desconto.}
               end;
          DataAbatimento    := 0;
          ValorAbatimento   := 0;
          {28/12/2020. Sérgio: Tratamento de juros e multa.}
          case cbFinLanJurCod.ItemIndex of
            0: begin
                 CodigoMoraJuros := cjValorDia;
                 ValorMoraJuros  := GeRound(dsDenPqs.DataSet.FieldByName('DenBcrPreVal').AsFloat * DenPrmJurPer / 100 / 30, 2);
                 CodigoMulta     := cmPercentual;
                 PercentualMulta := 2; // GeRound(DenPrmMulPer, 2);
                 DataMulta       := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime + 1;
               end;
            1: begin
                 CodigoMoraJuros := cjTaxaMensal;
                 ValorMoraJuros  := GeRound(DenPrmJurPer, 2);
                 CodigoMulta     := cmPercentual;
                 PercentualMulta := 2; // GeRound(DenPrmMulPer, 2);
                 DataMulta       := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime + 1;
               end;
            2: begin
                 CodigoMoraJuros := cjIsento;
                 ValorMoraJuros  := 0;
               end;
          end;
          {Para instituição de educação, inclui o nome do curso.}
          Instrucao1          := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenBcrBbaMen').AsString), true), 01, 40);
          Instrucao2          := Se((StrToInt(LogAtiCod) = 7),
                                    copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('IedCurNom').AsString), true), 01, 40),
                                    '');
          {Dados do cliente.}
          Sacado.NomeSacado   := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntRazSoc').AsString), true), 01, 30);
          Sacado.CNPJCPF      := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntCnp').AsString), true),    01, 14);
          Sacado.Logradouro   := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndLog').AsString), true), 01, 30);
          Sacado.Numero       := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndNum').AsString), true), 01, 05);
          Sacado.Bairro       := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndBai').AsString), true), 01, 12);
          Sacado.Cidade       := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysCidNom').AsString), true),    01, 15);
          Sacado.UF           := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysUfeSig').AsString), true),    01, 02);
          Sacado.CEP          := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndCep').AsString), true), 01, 08);
          {Mensagens que devem sair no corpo do título.}
          ACBrBoleto.AdicionarMensagensPadroes(Titulo, Mensagem);
 

 

Editado por Sérgio Caldeira Silva
  • Consultores
Postado
16 minutos atrás, Sérgio Caldeira Silva disse:

Bom dia Victor!

Sim preenchi os campos corretamente, não funcionou, por isto debuguei o código para entender como funciona. Segue a referência do meu código, às vezes está faltando algo que não percebi.

        {Sérgio 30/04/2020: configura o título.}
        Titulo := ACBrBoleto.CriarTituloNaLista;
        with Titulo do
        begin
          {Dados do título.}
          LocalPagamento    := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenBbaPagLoc').AsString), true), 01, 15);
          case dsDenPqs.DataSet.FieldByName('DenBcrCesCod').AsInteger of
            00: OcorrenciaOriginal.Tipo := toRemessaRegistrar;
            04: OcorrenciaOriginal.Tipo := toRemessaBaixar;
            05: OcorrenciaOriginal.Tipo := toRemessaProtestar;
            08: OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtesto;
            14: OcorrenciaOriginal.Tipo := toRemessaAlterarVencimento;
            16: OcorrenciaOriginal.Tipo := toRemessaNegativacaoSerasa;
            18: OcorrenciaOriginal.Tipo := toRemessaExcluirNegativacaoSerasa;
          end;
          NumeroDocumento   := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenCreNum').AsString), true), 1, 10);
          NossoNumero       := RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenBcrPagDoc').AsString), true);
          SeuNumero         := copy(RemoverCaracteresInvalidos(RemoveEnterDaString('D' + dsDenPqs.DataSet.FieldByName('DenCreDocNum').AsString +
                                                                                   'S' + dsDenPqs.DataSet.FieldByName('DenCreDocSer').asString +
                                                                                   'P' + dsDenPqs.DataSet.FieldByName('DenCreDocPar').AsString), true), 1, 25);
          EspecieDoc        := 'DM';
          DataDocumento     := dsDenPqs.DataSet.FieldByName('DenCreEmiDat').AsDateTime;
          Vencimento        := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime;
          DataProcessamento := Now;
          Aceite            := atNao;
          Carteira          := RemoverCaracteresInvalidos(RemoveEnterDaString(edDenBanCarNum.Text), true);
          ValorDocumento    := dsDenPqs.DataSet.FieldByName('DenBcrPreVal').AsFloat;
          {28/12/2020. Sérgio: tratamento de desconto condicionado.}
          if dsDenPqs.DataSet.FieldByName('DenBcrBaiDes').AsFloat > 0 then
          begin
            TipoDesconto  := tdValorFixoAteDataInformada; {Código do Desconto - valor fixo até a data informada.}
            DataDesconto  := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime; {Data do Desconto.}
            ValorDesconto := dsDenPqs.DataSet.FieldByName('DenBcrBaiDes').AsFloat; {Valor do Desconto.}
          end
          else begin
                 TipoDesconto  := tdNaoConcederDesconto; {Código do desconto - não há desconto.}
                 DataDesconto  := 0; {Data do Desconto.}
                 ValorDesconto := 0; {Valor do Desconto.}
               end;
          DataAbatimento    := 0;
          ValorAbatimento   := 0;
          {28/12/2020. Sérgio: Tratamento de juros e multa.}
          case cbFinLanJurCod.ItemIndex of
            0: begin
                 CodigoMoraJuros := cjValorDia;
                 ValorMoraJuros  := GeRound(dsDenPqs.DataSet.FieldByName('DenBcrPreVal').AsFloat * DenPrmJurPer / 100 / 30, 2);
                 CodigoMulta     := cmPercentual;
                 PercentualMulta := 2; // GeRound(DenPrmMulPer, 2);
                 DataMulta       := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime + 1;
               end;
            1: begin
                 CodigoMoraJuros := cjTaxaMensal;
                 ValorMoraJuros  := GeRound(DenPrmJurPer, 2);
                 CodigoMulta     := cmPercentual;
                 PercentualMulta := 2; // GeRound(DenPrmMulPer, 2);
                 DataMulta       := dsDenPqs.DataSet.FieldByName('DenBcrPreDat').AsDateTime + 1;
               end;
            2: begin
                 CodigoMoraJuros := cjIsento;
                 ValorMoraJuros  := 0;
               end;
          end;
          {Para instituição de educação, inclui o nome do curso.}
          Instrucao1          := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('DenBcrBbaMen').AsString), true), 01, 40);
          Instrucao2          := Se((StrToInt(LogAtiCod) = 7),
                                    copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('IedCurNom').AsString), true), 01, 40),
                                    '');
          {Dados do cliente.}
          Sacado.NomeSacado   := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntRazSoc').AsString), true), 01, 30);
          Sacado.CNPJCPF      := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntCnp').AsString), true),    01, 14);
          Sacado.Logradouro   := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndLog').AsString), true), 01, 30);
          Sacado.Numero       := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndNum').AsString), true), 01, 05);
          Sacado.Bairro       := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndBai').AsString), true), 01, 12);
          Sacado.Cidade       := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysCidNom').AsString), true),    01, 15);
          Sacado.UF           := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysUfeSig').AsString), true),    01, 02);
          Sacado.CEP          := copy(RemoverCaracteresInvalidos(RemoveEnterDaString(dsDenPqs.DataSet.FieldByName('SysEntEndCep').AsString), true), 01, 08);
          {Mensagens que devem sair no corpo do título.}
          ACBrBoleto.AdicionarMensagensPadroes(Titulo, Mensagem);
 

 

Bom dia,

Faça os testes seus no programa exemplo

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

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