
pjunior
-
Total de ítens
55 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Posts postados por pjunior
-
-
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:
-
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;
beginaCarteira := 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 400aRemessa.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;
-
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.
-
Isso mesmo...
Teria que iniciar da posição 38, nesse caso, pois esse início varia.
-
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. -
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
-
1
-
-
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 ?
-
Opa, beleza,
Não tinha atualizado.
Vou fazer isso após almoço e recompilo tudo.
Obrigado pelo retorno.
-
2
-
-
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.
-
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.
-
Esqueci de mencionar um detalhe .. Nessa conta, o banco que gera o Nosso Número ... Mas acho que isso não influi, certo ?
-
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"
-
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 ?
-
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.
-
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 thenbeginXML := copy(ArquivoXML.Text, 1, pos('</cteProc>', ArquivoXML.Text) + 5);ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</cteProc>', ArquivoXML.Text) + 10, length(ArquivoXML.Text)));endelsebeginXML := 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 thenbeginXML := copy(ArquivoXML.Text, 1, pos('</cteProc>', ArquivoXML.Text) + 5);ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</cteProc>', ArquivoXML.Text) + 10, length(ArquivoXML.Text)));endelse// começa aqui ...if pos('</procCTe>', ArquivoXML.Text) > 0 thenbeginXML := copy(ArquivoXML.Text, 1, pos('</procCTe>', ArquivoXML.Text) + 5);ArquivoXML.Text := Trim(copy(ArquivoXML.Text, pos('</procCTe>', ArquivoXML.Text) + 10, length(ArquivoXML.Text)));endelse// termina aqui ...beginXML := 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á !! -
boas !! problema resolvido !!
Obrigado Italo !!
-
Boa tarde ...estou com o mesmo problema aqui, começou qdo atualizei os fontes ontem ...
-
Blz .. vou fazer isso.
Vou orientar eles tb a entrar em contato com a CPA / IOB para maiores informações ...
Obrigado !!!
[]´s
-
Boa tarde, Ricardo, obrigado pela resposta ...
É q foi passado ao contador, e ele, sinceramente, não sabe exatamente como proceder ...
Por isso recorri a lista, pois aqui creio q terei melhores respostas ..
-
Pessoal, boa tarde.
Sei q essa minha dúvida não tem a ver com o componente, mas acredito q tenha alguém aqui q possa me ajudar.
Ocorre que, por uma alteração num cadastro, um cliente meu emitiu, desde 11/10/2013 +- umas 150 NFs com base de cálculo e valor de Icms integral, sendo que deveriam sair com redução de 30%.
Todas essas Nfs foram autorizadas e entregues, agora estamos com uma dúvida de como proceder.
Alguém já passou ou conhece alguma solução do que pode ser feito nesse caso ?
Agradeço qquer ajuda.
Obrigado,
-
Tb foi adicionado um item novo - 8 na origem, mas ainda não encontrei os schemas atualizados:
-
Ítalo ... obrigado !!!
Vou passar sim ao "contador" de araque ...
É cada uma q me aparece viu ....
[]´s
-
Pessoal, boa tarde.
Um contador me procurou essa semana, alegando que, ao usar o CST 04, 06, 07, 08 e 09 do Pis e Cofins, deveria ser informado o valor da base de cálculo.
Olhei nos manuais e não tem a tag vBC para esses códigos.
Estou certo, ou em algum momento houve alguma mudança nisso ?
Obrigado,
Junior.
-
blz !! obrigado !!!!
Boleto Santander - Mensagens
em ACBrBoleto
Postado
Bom dia !!
Obrigado !!