Membros Pro pjunior Postado 16 Dezembro, 2024 Membros Pro Postado 16 Dezembro, 2024 Boa tarde, td bem ? Estou implementando o Santander no sistema, e estou com uma dúvida / diferença no segmento pra mensagem. Antes eu usava o código 6, e vi agora que o ACBr usa o 2. Até aí acho q OK. Mas em determinadas situações, preciso de 4 ou até 5 mensagens, e vi que o ACBR gera só 3. Fiz um ajuste na procedure, segue ela abaixo, e destacado os pontos alterados: procedure TACBrBancoSantander.GerarRegistroTransacao400(ACBrTitulo :TACBrTitulo; aRemessa: TStringList); var DigitoNossoNumero, Ocorrencia,aEspecie :String; Protesto, aAgencia, TipoSacado, wLinha :String; aCarteira, I: Integer; LMensagem1, LMensagem2, LMensagem3 : String; LMensagem4, LMensagem5, LMensagem6 : String; LTipoChaveDICT, Ltipopagamento : string; begin aCarteira := StrToIntDef( DefineCarteira(ACBrTitulo) , 0); if aCarteira = 5 then aAgencia := PadLeft(OnlyNumber(ACBrTitulo.ACBrBoleto.Cedente.Agencia) + ACBrTitulo.ACBrBoleto.Cedente.AgenciaDigito,5,'0') else aAgencia:= '00000'; FvTotalTitulos := FvTotalTitulos + ACBrTitulo.ValorDocumento; with ACBrTitulo do begin DigitoNossoNumero := CalcularDigitoVerificador(ACBrTitulo); {Tipo de Ocorrencia} ocorrencia := TipoOcorrenciaToCodRemessa(ACBrTitulo.OcorrenciaOriginal.Tipo); {Especie Documento} aEspecie := DefineEspecieDoc(ACBrTitulo); {Instruções} Protesto := InstrucoesProtesto(ACBrTitulo); {Pegando Tipo de Sacado} TipoSacado := DefineTipoSacado(ACBrTitulo); with ACBrBoleto do begin wLinha:= '1' + // 1- ID Registro IfThen(Cedente.TipoInscricao = pJuridica,'02','01') + // 2 a 3 PadLeft(trim(OnlyNumber(Cedente.CNPJCPF)),14,'0') + // 4 a 17 PadRight(trim(Cedente.CodigoTransmissao),20,'0') + // 18 a 37 PadRight( SeuNumero ,25,' ') + // 38 a 62 PadLeft(RightStr(NossoNumero,7),7,'0') + DigitoNossoNumero + // 63 a 70 IfThen(DataAbatimento < EncodeDate(2000,01,01), '000000', FormatDateTime( 'ddmmyy', DataAbatimento)) + // 71 a 76 ' '+IfThen(PercentualMulta > 0,'4','0') + // 77 a 78 IntToStrZero( round( PercentualMulta * 100 ), 4) + // 79 a 82 '00'+StringOfChar( '0', 13)+space(4) + // 83 a 101 IfThen((DataMulta <= 0),'000000', FormatDateTime( 'ddmmyy', DataMulta)) + // 102 a 107 IntToStr(aCarteira) + Ocorrencia + // 108 a 110 PadRight( NumeroDocumento,10,' ') + // 111 a 120 FormatDateTime( 'ddmmyy', Vencimento) + // 121 a 126 IntToStrZero( round( ValorDocumento * 100), 13) + // 127 a 139 '033' + aAgencia + // 140 a 147 PadLeft(aEspecie, 2) + 'N' + // 148 a 150 FormatDateTime( 'ddmmyy', DataDocumento ) + // 151 a 156 PadLeft(trim(Instrucao1),2,'0') + // 157 a 158 PadLeft(trim(Instrucao2),2,'0') + // 159 a 160 IntToStrZero( round(ValorMoraJuros * 100 ), 13) + // 161 a 173 IfThen(DataDesconto < EncodeDate(2000,01,01), '000000', FormatDateTime( 'ddmmyy', DataDesconto)) + // 174 a 179 IntToStrZero( round( ValorDesconto * 100), 13) + // 180 a 192 IntToStrZero( round( ValorIOF * 100 ), 13) + // 193 a 205 IntToStrZero( round( ValorAbatimento * 100 ), 13) + // 206 a 218 TipoSacado + PadLeft(OnlyNumber(Sacado.CNPJCPF),14,'0') + // 219 a 234 PadRight( Sacado.NomeSacado, 40, ' ') + // 235 a 274 PadRight( Sacado.Logradouro + ' '+ Sacado.Numero, 40, ' ') + // 275 a 314 PadRight( Sacado.Bairro,12,' ') + // 315 a 326 PadRight( OnlyNumber(Sacado.CEP) , 8, ' ' ) + // 327 a 334 PadRight( Sacado.Cidade, 15, ' ') + PadRight( Sacado.UF, 2 ) + // 335 a 351 Space(30) + // 352 a 381 ' I' + // 382 a 383 Copy( Cedente.Conta, length( Cedente.Conta ),1 ) + // PadLeft( Cedente.ContaDigito, 1 ) + // 384 a 385 Space(6) + // 386 a 391 Protesto + ' ' + // 392 a 394 IntToStrZero( aRemessa.Count + 1, 6 ); // 395 a 400 aRemessa.Add(UpperCase(wLinha)); LMensagem1 := ''; LMensagem2 := ''; LMensagem3 := ''; if Mensagem.Count >= 1 then LMensagem1 := TiraAcentos(Mensagem[0]); if Mensagem.Count >= 2 then LMensagem2 := TiraAcentos(Mensagem[1]); if Mensagem.Count >= 3 then LMensagem3 := TiraAcentos(Mensagem[2]); wLinha:= '2' + // 001-001 "2" - Recibo Pagador space(16) + // 002-017 Reservado Banco PadLeft(Cedente.CodigoTransmissao,20,'0') + // 018-037 Agencia / Conta Movimento / Conta Cobranca Space(10) + // 038-047 Reservado Banco '01' + // 048-049 SubRegistro "01" PadRight(LMensagem1, 50) + // 050-099 Mensagem Variavel '02' + // 100-101 SubSequencia "02" PadRight(LMensagem2, 50) + // 102-151 Mensagem Variavel '02' + // 152-153 SubSequencia "02" PadRight(LMensagem3, 50) + // 154-203 Mensagem Variavel Space(179) + // 204-382 Reservado Banco 'I' + // 383-383 Identificação do Complemento PadLeft(Copy( Cedente.Conta, length( Cedente.Conta ),1 ), 1, '0') + PadLeft( Cedente.ContaDigito, 1, '0' ) + // 384-385 Complemento Space(9) + // 386-394 Reservado Banco IntToStrZero( aRemessa.Count + 1 , 6 ); // 395-400 Sequencial de Registro aRemessa.Add(UpperCase(wLinha)); //2ª linha de mensagem LMensagem4 := ''; LMensagem5 := ''; LMensagem6 := ''; if Mensagem.Count >= 4 then LMensagem4 := TiraAcentos(Mensagem[3]); if Mensagem.Count >= 5 then LMensagem5 := TiraAcentos(Mensagem[4]); if Mensagem.Count >= 6 then LMensagem6 := TiraAcentos(Mensagem[5]); wLinha:= '2' + // 001-001 "2" - Recibo Pagador space(16) + // 002-017 Reservado Banco PadLeft(Cedente.CodigoTransmissao,20,'0') + // 018-037 Agencia / Conta Movimento / Conta Cobranca Space(10) + // 038-047 Reservado Banco '01' + // 048-049 SubRegistro "01" PadRight(LMensagem4, 50) + // 050-099 Mensagem Variavel '02' + // 100-101 SubSequencia "02" PadRight(LMensagem5, 50) + // 102-151 Mensagem Variavel '02' + // 152-153 SubSequencia "02" PadRight(LMensagem6, 50) + // 154-203 Mensagem Variavel Space(179) + // 204-382 Reservado Banco 'I' + // 383-383 Identificação do Complemento PadLeft(Copy( Cedente.Conta, length( Cedente.Conta ),1 ), 1, '0') + PadLeft( Cedente.ContaDigito, 1, '0' ) + // 384-385 Complemento Space(9) + // 386-394 Reservado Banco IntToStrZero( aRemessa.Count + 1 , 6 ); // 395-400 Sequencial de Registro if (LMensagem4 <> '') or (LMensagem5 <> '') or (LMensagem6 <> '') then aRemessa.Add(UpperCase(wLinha)); if (ACBrTitulo.ACBrBoleto.Cedente.PIX.TipoChavePIX <> tchNenhuma) then begin case ACBrTitulo.ACBrBoleto.Cedente.PIX.TipoChavePIX of tchCPF : LTipoChaveDICT := '1'; tchCNPJ : LTipoChaveDICT := '2'; tchCelular : LTipoChaveDICT := '3'; tchEmail : LTipoChaveDICT := '4'; tchAleatoria : LTipoChaveDICT := '5'; end; case tipopagamento of tpAceita_Qualquer_Valor : Ltipopagamento := '01'; tpAceita_Valores_entre_Minimo_Maximo: Ltipopagamento := '02'; tpNao_Aceita_Valor_Divergente: Ltipopagamento := '03'; end; wLinha:= '8' + // 001 - 001 PIX Ltipopagamento + // 002 - 003 Identificação do tipo de pagamento IntToStrZero(QtdeParcelas,2) + // 004 - 005 Quantidade de pagamento possíveis '2' + // 006 - 006 Tipo de valor informado (1=%, 2=Valor) IntToStrZero( round( ValorDocumento * 100), 13) + // 007 - 019 Valor Máximo PadLeft('0',5,'0') + // 020 - 024 % (Percentual) Máximo IntToStrZero( round( ValorDocumento * 100), 13) + // 025 - 037 Valor Mínimo PadLeft('0',5,'0') + // 038 - 042 % (Percentual) Mínimo LTipoChaveDICT + // 043 - 043 Tipo de Chave Pix PadRight(ACBrTitulo.ACBrBoleto.Cedente.PIX.Chave,77,' ') + // 044 - 120 Chave Pix PadRight(QrCode.txId,35,' ') + // 121 - 155 Código de identificação do Qr Code (TXID) Space(239) + // 156 - 394 Reservado (uso Banco) IntToStrZero( aRemessa.Count + 1 , 6 ); // 395 - 400 Sequencial de Registro aRemessa.Add(UpperCase(wLinha)); end; end; end; end;
Moderadores Juliomar Marchetti Postado 16 Dezembro, 2024 Moderadores Postado 16 Dezembro, 2024 no caso anexe a sua alteração colando o código ali fica ruim pra ler ou tentar ajudar de alguma forma Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: juliomar_m@yahoo.com.br http://www.juliomarmarchetti.com.br
Membros Pro Solution pjunior Postado 16 Dezembro, 2024 Autor Membros Pro Solution Postado 16 Dezembro, 2024 Beleza, é que como foi no meio do código, achei melhor colar ela toda, já na posição certa e marcar com negrito o que foi alterado. segue: var: LMensagem4, LMensagem5, LMensagem6 : String; linha 927: //2ª linha de mensagem LMensagem4 := ''; LMensagem5 := ''; LMensagem6 := ''; if Mensagem.Count >= 4 then LMensagem4 := TiraAcentos(Mensagem[3]); if Mensagem.Count >= 5 then LMensagem5 := TiraAcentos(Mensagem[4]); if Mensagem.Count >= 6 then LMensagem6 := TiraAcentos(Mensagem[5]); wLinha:= '2' + // 001-001 "2" - Recibo Pagador space(16) + // 002-017 Reservado Banco PadLeft(Cedente.CodigoTransmissao,20,'0') + // 018-037 Agencia / Conta Movimento / Conta Cobranca Space(10) + // 038-047 Reservado Banco '01' + // 048-049 SubRegistro "01" PadRight(LMensagem4, 50) + // 050-099 Mensagem Variavel '02' + // 100-101 SubSequencia "02" PadRight(LMensagem5, 50) + // 102-151 Mensagem Variavel '02' + // 152-153 SubSequencia "02" PadRight(LMensagem6, 50) + // 154-203 Mensagem Variavel Space(179) + // 204-382 Reservado Banco 'I' + // 383-383 Identificação do Complemento PadLeft(Copy( Cedente.Conta, length( Cedente.Conta ),1 ), 1, '0') + PadLeft( Cedente.ContaDigito, 1, '0' ) + // 384-385 Complemento Space(9) + // 386-394 Reservado Banco IntToStrZero( aRemessa.Count + 1 , 6 ); // 395-400 Sequencial de Registro if (LMensagem4 <> '') or (LMensagem5 <> '') or (LMensagem6 <> '') then aRemessa.Add(UpperCase(wLinha)); aí termina antes de começar a parte do PIX. segue o arquivo em anexo: ACBrBancoSantander.pasFetching info...
Consultores Daniel InfoCotidiano Postado 17 Dezembro, 2024 Consultores Postado 17 Dezembro, 2024 Bom dia @pjunior Criado a TK-6376 para análise. Reportamos aqui apos conclusao. 1 Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord
Consultores Italo Giurizzato Junior Postado 7 Janeiro Consultores Postado 7 Janeiro Boa tarde @pjunior, Já esta no SVN. Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Membros Pro pjunior Postado 8 Janeiro Autor Membros Pro Postado 8 Janeiro Em 07/01/2025 at 18:01, Italo Giurizzato Junior disse: Boa tarde @pjunior, Já esta no SVN. Expandir Bom dia !! Obrigado !!
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