Ir para conteúdo
  • Cadastre-se

pjunior

Membros
  • Total de ítens

    53
  • Registro em

  • Última visita

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

pjunior's Achievements

Enthusiast

Enthusiast (6/14)

  • Reacting Well Rare
  • Dedicated Rare
  • First Post
  • Collaborator Rare
  • Conversation Starter

Recent Badges

3

Reputação

  1. 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.pas
  2. 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;
  3. Oi, boa tarde. Então, pelo que entendi seria da vontade do BB, pq andei acompanhando, e de tempos em tempos o início muda, meio que aleatoriamente.
  4. Isso mesmo... Teria que iniciar da posição 38, nesse caso, pois esse início varia.
  5. Boa tarde, td bem ? o BB me respondeu hoje sobre a questão: Prezada Erika, boa tarde. O tipo de convênio do Cliente é "1" (Bco: Numera, emite e expede). Nesse caso, excepcionalmente, o Sistema CBR não segue a regra orientada no Manual "Especificações Técnicas para Confecção de Boleto de Cobrança do Banco do Brasil", para composição do Nosso Número questionada na mensagem do TI Junior.
  6. OK, obrigado. Eu fiz um ajuste temporário aqui, pra fazer funcionar esse caso, e vou testar. Vou cobrar a gerente novamente, pois já abri um chamado com ela faz um certo tempo, e não obtive retorno até agora
  7. Boa tarde pessoal. Ref. ao tópico que abri nesse link: Eu estava com problemas na reimpressão de boletos. Consegui ganhar um tempo junto ao cliente, enquanto a gerente da conta verificava o caso ( que nunca mais me retornou ). Recapitulando esse caso, a empresa envia o arquivo de remessa para o banco ( sem o nosso número, e com convênio de 5 dígitos, carteira 31 ), e o banco gera o NN, registra, e despacha os boletos. Quando o retorno volta ( ocorrência 02 ), preciso vincular o NN do arquivo no sistema, para que, quando ocorra o pagamento, o título seja baixado. Agora, ocorre o seguinte, essa numeração que o banco gera, não entra nas regras que a função "NossoNumeroSemFormatacaoLerRetorno" cobre. Ou seja, tenho um caso específico aqui, onde 2 títulos tem os seguintes NNs: 06072113764 e 06098513764, e foram registrados em momentos e com arquivos diferentes. Quando passa pela função NossoNumeroSemFormatacaoLerRetorno em ambos casos é retornado somente 13764, e ocorreu do sistema localizar e baixar um título que não foi pago. Eu precisaria do número da posição 38 até a 48 nesse caso ( 11 dígitos ). O que podemos fazer ?
  8. Opa, beleza, Não tinha atualizado. Vou fazer isso após almoço e recompilo tudo. Obrigado pelo retorno.
  9. pjunior

    Erro - LoadFromFile

    Bom dia. Não sei se alguém passou por isso, ao fazer um MFe1.Manifestos.LoadFromfile(), estou recebendo um erro: "List Index out of Bounds(0)". Isso foi após a atualização dos fontes no dia 06/03/19. Após verificar nos códigos, na function abaixo: function TinfContratanteCollection.New: TinfContratanteCollectionItem; begin Result := TinfContratanteCollectionItem.Create; end; Adicionei mais uma linha, ficando assim; function TinfContratanteCollection.New: TinfContratanteCollectionItem; begin Result := TinfContratanteCollectionItem.Create; Self.Add(Result); end; Feito isso, o problema foi resolvido.
  10. Sim, o métoto LerRetorno240 usa a "NossoNumeroSemFormatacaoLerRetorno" para retornar o Nosso número. Eu só preciso saber se esse número "060752" é algum cadastro da conta do cedente, ou se é aleatório do banco na hora de gerar o Nosso número. Se for do cadastro, consigo resolver pelo cadastro da conta. Só tive problema com esse cliente, pelo fato do banco gerar o número pra ele. Dos demais está OK, conforme a Juliana passou antes.
  11. Esqueci de mencionar um detalhe .. Nessa conta, o banco que gera o Nosso Número ... Mas acho que isso não influi, certo ?
  12. Olá. Obrigado pela resposta. Eu pensei nisso, mas é que no caso dessa conta, o convênio é "36589", e no nosso número inicia com "060752"
  13. Bom dia pessoal, Estou com uma dúvida no retorno do Banco do Brasil ( Cnab 240 ), quando faz a leitura do arquivo, a função "NossoNumeroSemFormatacaoLerRetorno" está parametrizada para montar o Nosso Número conforme o nº de dígitos do convênio. Mas está parecendo meio confuso, pois pelo que vi na documentação, não bate com o conteúdo que retorna na função. ex.: no arquivo anexo, o 1º título seria Nosso Número "06075265120" com DV "3", mas me retorna somente "65120". Caso eu precise montar uma impressão de boletos, ocorre uma divergência no código de barras/ linha digitável, em comparação ao boleto emitido pelo banco. Alguém mais tem tido algum problema quanto a isso ? IEDCBR45993007201822251.ret
  14. Bom dia Italo !! Grato pela resposta .. Isso mesmo .. Essas tags q vc passou, antes de eu alterar, estavam vindo vazias .. Aí pra esse caso q eu precisava fazer a leitura, a alteração resolveu .. A função do componente será acertada para esses casos q vc me passou acima ?? []´s Junior.
  15. pjunior

    Dúvida Ao Carregar Um Cte

    Olá ... Preciso carregar um CTE ( loadfromfile ), para extrair os dados dele .. No CTe em anexo, como faço pra ver as tags cStat, xMotivo e nProt ? Pelo q vi ele não tem a tag </cteProc> somente a <procCTe> ... localizei e alterei no arquivo ACBrConhecimentos.pas, na função LoadFromFile, o seguinte trecho: if pos('</cteProc>', ArquivoXML.Text) > 0 then begin XML := copy(ArquivoXML.Text, 1, pos('</cteProc>', ArquivoXML.Text) + 5); ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</cteProc>', ArquivoXML.Text) + 10, length(ArquivoXML.Text))); end else begin XML := copy(ArquivoXML.Text, 1, pos('</CTe>', ArquivoXML.Text) + 5); ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</CTe>', ArquivoXML.Text) + 6,length(ArquivoXML.Text))); end; a alteração ficou: if pos('</cteProc>', ArquivoXML.Text) > 0 then begin XML := copy(ArquivoXML.Text, 1, pos('</cteProc>', ArquivoXML.Text) + 5); ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</cteProc>', ArquivoXML.Text) + 10, length(ArquivoXML.Text))); end else // começa aqui ... if pos('</procCTe>', ArquivoXML.Text) > 0 then begin XML := copy(ArquivoXML.Text, 1, pos('</procCTe>', ArquivoXML.Text) + 5); ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</procCTe>', ArquivoXML.Text) + 10, length(ArquivoXML.Text))); end else // termina aqui ... begin XML := copy(ArquivoXML.Text, 1, pos('</CTe>', ArquivoXML.Text) + 5); ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</CTe>', ArquivoXML.Text) + 6,length(ArquivoXML.Text))); end; A alteração resolveu o problema.. mas, está correto isso ?? Obrigado desde já !! 35140412700261000101570010000000451000700049-cte.xml
×
×
  • 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...