Lfm_ Postado Quarta as 11:40 Postado Quarta as 11:40 Bom dia Pessoal, estou gerando remessa CNAB240 para o Santander e o banco me retorna o seguinte: Citar Dentro de 1 lote, o número sequencial deve ser crescente sem repetição, que é o que esta ocorrendo. Segue exemplo em anexo. Porém no componente eu envio Lote 01 apenas, este sequencial devo informar tbm? É o único banco que tenho problemas. Desde já agradeço a atenção, Luiz
Moderadores Juliomar Marchetti Postado Quarta as 12:19 Moderadores Postado Quarta as 12:19 Como é que tu tá alimentando o componente? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Lfm_ Postado Quarta as 12:23 Autor Postado Quarta as 12:23 (editado) Bom dia, segue: VACBrBoleto.Banco.TipoCobranca := cobSantander; with VACBrBoleto.Cedente do begin Nome := VQueryTitulo.FieldByName('NM_CEDENTE').AsString; CodigoCedente := VQueryTitulo.FieldByName('CD_CEDENTE').AsString; CodigoTransmissao := VQueryTitulo.FieldByName('CD_TRANSMISSAO_BOLETO').AsString; Agencia := VQueryTitulo.FieldByName('NR_BANCO_AGENCIA').AsString; AgenciaDigito := Geral.Decode((VACBrBoleto.Banco.TipoCobranca = cobBancoDoBrasil) and (VQueryTitulo.FieldByName('NR_DIGITO_AGENCIA').AsString = '0'), 'X', VQueryTitulo.FieldByName('NR_DIGITO_AGENCIA').AsString); DigitoVerificadorAgenciaConta := Geral.Decode(VACBrBoleto.Banco.Numero = 756, '0', ''); Conta := VQueryTitulo.FieldByName('NR_CONTA_BANCO').AsString; ContaDigito := VQueryTitulo.FieldByName('NR_DIGITO').AsString; Modalidade := VQueryTitulo.FieldByName('TP_VARIACAO_CARTEIRA').AsString; Convenio := Geral.Decode(VACBrBoleto.Banco.Numero = 756, ' ', VQueryTitulo.FieldByName('CD_CONVENIO').AsString); TipoCarteira := tctRegistrada; TipoInscricao := pJuridica; CNPJCPF := VQueryTitulo.FieldByName('NR_CNPJ_CEDENTE').AsString; Nome := VQueryTitulo.FieldByName('NM_CEDENTE').AsString; Logradouro := VQueryTitulo.FieldByName('DS_ENDERECO_CEDENTE').AsString; NumeroRes := VQueryTitulo.FieldByName('NR_ENDERECO_CEDENTE').AsString; Bairro := VQueryTitulo.FieldByName('DS_BAIRRO_CEDENTE').AsString; UF := VQueryTitulo.FieldByName('CD_UF_CEDENTE').AsString; Cidade := VQueryTitulo.FieldByName('DS_MUNICIPIO_CEDENTE').AsString; Complemento := VQueryTitulo.FieldByName('DS_COMPLEMENTO_CEDENTE').AsString; end; with Titulo.Sacado do begin Pessoa := Geral.Decode(VQueryTitulo.FieldByName('TP_SACADO').AsString = 'F', pFisica, pJuridica); NomeSacado := VQueryTitulo.FieldByName('NM_SACADO').AsString; CNPJCPF := VQueryTitulo.FieldByName('NR_DOCUMENTO_SACADO').AsString; Logradouro := VQueryTitulo.FieldByName('DS_ENDERECO_SACADO').AsString; Numero := VQueryTitulo.FieldByName('NR_ENDERECO_SACADO').AsString; Complemento := VQueryTitulo.FieldByName('DS_COMPLEMENTO_SACADO').AsString; Bairro := VQueryTitulo.FieldByName('DS_BAIRRO_SACADO').AsString; Cidade := VQueryTitulo.FieldByName('DS_MUNICIPIO_SACADO').AsString; UF := VQueryTitulo.FieldByName('CD_UF_SACADO').AsString; CEP := VQueryTitulo.FieldByName('CD_CEP_SACADO').AsString; end; with Titulo do begin SeuNumero := VQueryTitulo.FieldByName('CD_CONTA_RECEBER').AsString; Vencimento := VQueryTitulo.FieldByName('DT_VENCIMENTO').AsDateTime; DataDocumento := VQueryTitulo.FieldByName('DT_EMISSAO').AsDateTime; NumeroDocumento := VQueryTitulo.FieldByName('NR_DOCUMENTO').AsString; EspecieDoc := VQueryTitulo.FieldByName('DS_ESPECIE').AsString; EspecieMod := VQueryTitulo.FieldByName('TP_MOEDA').AsString; Aceite := Geral.Decode(VQueryTitulo.FieldByName('TP_ACEITE').AsString = 'S', atSim, atNao); DataProcessamento := VQueryTitulo.FieldByName('DT_PROCESSAMENTO').AsDateTime; Carteira := VQueryTitulo.FieldByName('TP_CARTEIRA').AsString; CarteiraEnvio := tceCedente; CaracTitulo := ObterCaracTitulo(Titulo.Carteira); NossoNumero := VQueryTitulo.FieldByName('NR_NOSSO_NUMERO').AsString; ValorDocumento := VQueryTitulo.FieldByName('VL_DOCUMENTO').AsFloat; ValorMoraJuros := VQueryTitulo.FieldByName('VL_JUROS').AsFloat; ValorDesconto := 0; PercentualMulta := VQueryTitulo.FieldByName('VL_MULTA_ATRASO').AsFloat; OcorrenciaOriginal.Tipo := TACBrTipoOcorrencia(VQueryTitulo.FieldByName('TP_OCORRENCIA_BOLETO').AsInteger); QtdePagamentoParcial := 1; TipoPagamento := tpNao_Aceita_Valor_Divergente; PercentualMinPagamento := 0; PercentualMaxPagamento := 0; ValorMinPagamento := 0; ValorMaxPagamento := 0; Instrucao1 := VQueryTitulo.FieldByName('CD_INSTRUCAO_1').AsString; Instrucao2 := VQueryTitulo.FieldByName('CD_INSTRUCAO_2').AsString; Mensagem.Add(VQueryTitulo.FieldByName('DS_MENSAGEM').AsString); if (VQueryTitulo.FieldByName('TP_CLIENTE_GERA_PROTESTO').AsString = 'S') and (VQueryTitulo.FieldByName('QT_DIAS_PROTESTO').AsInteger > 0) then begin DataProtesto := IncDay(Vencimento, VQueryTitulo.FieldByName('QT_DIAS_PROTESTO').AsInteger); TipoDiasProtesto := diCorridos; CodigoNegativacao := cnProtestarCorrido; Mensagem.Add('PROTESTAR EM ' + VQueryTitulo.FieldByName('QT_DIAS_PROTESTO').AsString + ' DIAS CORRIDOS APOS O VENCIMENTO'); end; if (ValorMoraJuros > 0) then begin //CodigoMora := '1'; if (VQueryTitulo.FieldByName('TP_VALOR_JUROS').AsString = 'P') then CodigoMoraJuros := Geral.Decode(VQueryTitulo.FieldByName('TP_JUROS').AsString = 'D', TACBrCodigoJuros.cjTaxaDiaria, TACBrCodigoJuros.cjTaxaMensal) else CodigoMoraJuros := Geral.Decode(VQueryTitulo.FieldByName('TP_JUROS').AsString = 'D', TACBrCodigoJuros.cjValorDia, TACBrCodigoJuros.cjValorMensal); if (VQueryTitulo.FieldByName('QT_TOLERANCIA_PAGAMENTO').AsInteger > 0) then DataMoraJuros := IncDay(Vencimento, VQueryTitulo.FieldByName('QT_TOLERANCIA_PAGAMENTO').AsInteger) else DataMoraJuros := IncDay(Vencimento, 1); if (VACBrBoleto.Banco.TipoCobranca = cobCaixaEconomica) then Mensagem.Add('COBRAR JUROS DE ' + FormatCurr('#,##0.00', ValorMoraJuros) + ' POR CENTO, POR ' + Geral.Decode(VQueryTitulo.FieldByName('TP_JUROS').AsString = 'D', 'DIA', 'MES') + ' DE ATRASO PARA PAGAMENTO ' + Geral.Decode(Vencimento = DataMoraJuros, 'APOS O VENCIMENTO', 'A PARTIR DE ' + FormatDateTime('dd/mm/yyyy', DataMoraJuros))) else Mensagem.Add('COBRAR JUROS DE ' + FormatCurr('#,##0.00 %', ValorMoraJuros) + ' POR ' + Geral.Decode(VQueryTitulo.FieldByName('TP_JUROS').AsString = 'D', 'DIA', 'MES') + ' DE ATRASO PARA PAGAMENTO ' + Geral.Decode(Vencimento = DataMoraJuros, 'APOS O VENCIMENTO', 'A PARTIR DE ' + FormatDateTime('dd/mm/yyyy', DataMoraJuros))) end; if (PercentualMulta > 0) then begin CodigoMulta := cmPercentual; if (VQueryTitulo.FieldByName('QT_TOLERANCIA_PAGAMENTO').AsInteger > 0) then DataMulta := IncDay(Vencimento, VQueryTitulo.FieldByName('QT_TOLERANCIA_PAGAMENTO').AsInteger) else DataMulta := IncDay(Vencimento, 1); if (VACBrBoleto.Banco.TipoCobranca = cobCaixaEconomica) then Mensagem.Add('COBRAR MULTA DE ' + FormatCurr('#,##0.00', PercentualMulta) + ' POR CENTO,' + Geral.Decode(Vencimento = DataMoraJuros, ' APOS O VENCIMENTO', ' A PARTIR DE ' + FormatDateTime('dd/mm/yyyy', DataMoraJuros))) else Mensagem.Add('COBRAR MULTA DE ' + FormatCurr('#,##0.00 %', PercentualMulta) + Geral.Decode(Vencimento = DataMoraJuros, ' APOS O VENCIMENTO', ' A PARTIR DE ' + FormatDateTime('dd/mm/yyyy', DataMoraJuros))); end; if (VACBrBoleto.Banco.TipoCobranca = cobCaixaEconomica) then LocalPagamento := 'EM TODA A REDE BANCÁRIA E SEUS CORRESPONDENTES ATÉ O VALOR LIMITE' else LocalPagamento := VACBrBoleto.Banco.LocalPagamento; end; Editado Quarta as 12:23 por Lfm_
Moderadores Juliomar Marchetti Postado Quarta as 12:37 Moderadores Postado Quarta as 12:37 Sugestão de começo. remova os WITH segunda é onde tu cria o titulo e essa variavel? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Lfm_ Postado Quarta as 12:49 Autor Postado Quarta as 12:49 Todo esse código é dividido em rotinas, juntei tudo em só pra mostrar aqui, antes dele eu faço isso: Titulo := VACBrBoleto.CriarTituloNaLista;
Moderadores Juliomar Marchetti Postado Quarta as 13:37 Moderadores Postado Quarta as 13:37 47 minutos atrás, Lfm_ disse: Todo esse código é dividido em rotinas, juntei tudo em só pra mostrar aqui, antes dele eu faço isso: Titulo := VACBrBoleto.CriarTituloNaLista; Cerot. então tu injeta o titulo para eles isso ? remova os WITH e tente novamente Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Lfm_ Postado Quarta as 14:27 Autor Postado Quarta as 14:27 49 minutos atrás, Juliomar Marchetti disse: Cerot. então tu injeta o titulo para eles isso ? remova os WITH e tente novamente Opa, removi aqui e a geração dos arquivos ficou idêntica. Fiz um antes e depois, pq de fato não compreendi o que poderia mudar removendo ele, vejo apenas para o debug uma melhoria. Mas esse sequencial do arquivo, em algum lugar preciso informar?
Moderadores Juliomar Marchetti Postado Quarta as 17:53 Moderadores Postado Quarta as 17:53 3 horas atrás, Lfm_ disse: Opa, removi aqui e a geração dos arquivos ficou idêntica. Fiz um antes e depois, pq de fato não compreendi o que poderia mudar removendo ele, vejo apenas para o debug uma melhoria. Mas esse sequencial do arquivo, em algum lugar preciso informar? Não lembro de precisar. chegou a depurar e ver onde ele gera e quem alimenta dentro do componente Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Lfm_ Postado Quarta as 18:03 Autor Postado Quarta as 18:03 9 minutos atrás, Juliomar Marchetti disse: Não lembro de precisar. chegou a depurar e ver onde ele gera e quem alimenta dentro do componente Então, eu vi que ele faz isso aqui embaixo, mas não entendi pq faz, qual a regra disso: ACBrBancoSantander.pas Linhas 641 à 816 fpQtdRegsLote := 1; if sCodMovimento = '01' then begin if (PercentualMulta = 0) then fpQtdRegsLote := 3 else fpQtdRegsLote := 4; if (ACBrTitulo.ACBrBoleto.Cedente.PIX.TipoChavePIX <> tchNenhuma) then fpQtdRegsLote := fpQtdRegsLote + 1; end; ISequencia := (ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo) * fpQtdRegsLote) + 1; ...
Moderadores Juliomar Marchetti Postado Quarta as 19:13 Moderadores Postado Quarta as 19:13 ele tem o lote 1 se o SCodMOvimento = 01 que não sei de onde ele vem pois não olhei ocódigo ele vai modificar dai ele trata se o percentuial igual zero 3 senão 4 para o lote e se a chave pix for diferente ali ele soma mais um e ao final ele retorna. o que tu não entendeu ai, é um teste de mesa fácil de fazer. só falta ainda informações de onde vem o 01 do scodMovimento Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Solution Lfm_ Postado Quarta as 20:33 Autor Solution Postado Quarta as 20:33 1 hora atrás, Juliomar Marchetti disse: ele tem o lote 1 se o SCodMOvimento = 01 que não sei de onde ele vem pois não olhei ocódigo ele vai modificar dai ele trata se o percentuial igual zero 3 senão 4 para o lote e se a chave pix for diferente ali ele soma mais um e ao final ele retorna. o que tu não entendeu ai, é um teste de mesa fácil de fazer. só falta ainda informações de onde vem o 01 do scodMovimento Tá certo, pela educação não estão afim de resolver.
Moderadores Juliomar Marchetti Postado Quarta as 20:43 Moderadores Postado Quarta as 20:43 8 minutos atrás, Lfm_ disse: Tá certo, pela educação não estão afim de resolver. Não entendi.!? tu viu que postei acima o que o código faz no teste de mesa. e aqui é um fórum gratuito e aberto e veja estou analisando contigo o que tem ali e o que tá sendo enviado e ainda assim está ruim? conseguiu depurar. eu não estou usando o santander eu estou aqui tentando te ajudar e mesmo assim parece que não quero ajudar ? Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Lfm_ Postado Quarta as 20:48 Autor Postado Quarta as 20:48 Eu tbm não uso santander, é um cliente que passou a usar, e não conheço a lógica ou não-lógica do banco... A forma como alimento o componente funciona bem gostoso pra todos os bancos, só pra essa coisa fofa ai que não... Já busquei uma solução pra não ter que ficar depurando e perdendo tempo buscando... como vc disse o fórum é gratuito e aberto, ou seja, esperamos que alguém que conheça o banco ou as maluquices dele responda, se não responder, ai terei que correr atrás.. que pelo visto é o que vou ter que fazer
Moderadores Juliomar Marchetti Postado Quarta as 20:57 Moderadores Postado Quarta as 20:57 5 minutos atrás, Lfm_ disse: Eu tbm não uso santander, é um cliente que passou a usar, e não conheço a lógica ou não-lógica do banco... mas tu tem as credenciais e o código é pascal. ele também é bem fofo e dai é só depurar e entender oque está informando os fontes estão ai para isso por isso é gratuito. para que tu possa depurar é só usar o F7 e o F8 e garanto que 30 minutos tu já descobriu o que tá fazendo gerar esses lotes. claro que para tudo é preciso ler os manuais seja de qual banco ou implementação que for fazer. acho que é um bom caminho pra ti resolver , pois o código está pronto. é só depurar e resolve Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Lfm_ Postado Quarta as 21:14 Autor Postado Quarta as 21:14 15 minutos atrás, Juliomar Marchetti disse: mas tu tem as credenciais e o código é pascal. ele também é bem fofo e dai é só depurar e entender oque está informando os fontes estão ai para isso por isso é gratuito. para que tu possa depurar é só usar o F7 e o F8 e garanto que 30 minutos tu já descobriu o que tá fazendo gerar esses lotes. claro que para tudo é preciso ler os manuais seja de qual banco ou implementação que for fazer. acho que é um bom caminho pra ti resolver , pois o código está pronto. é só depurar e resolve A sequência, sai de sequência, se na remessa tiver boletos variados, um com multa e outro não, o certo era iniciar o ISequencia com a sequencia gerada no registro anterior. ISequencia := (ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo) * fpQtdRegsLote) + 1; //AQUI TERIA QUE INICIAR COM A SEQUENCIA ANTERIOR Terei que ver como resolver agora..
Recommended Posts
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 contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora