Ir para conteúdo
  • Cadastre-se

dev botao

BoleCode Itau (Arquivo de Remessa)


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

Recommended Posts

Postado

Bom dia,

Recentemente, finalizei a homologação com o Itau em relação ao BoleCode por envio de arquivo de remessa.

Aonde é gerada uma location (Vazia) e passo essa location no arquivo de remessa e o banco faz o registro.
Abaixo o link aonde fiz a implementação da location vazia.



Ao iniciar a homologação do arquivo de remessa, tive que fazer algumas mudanças.
Segundo o pessoal do banco, existia 3 situações.

1° Posição da Identificação do registro bolecode estava após a identificação 5 e ela tem que ser antes, pois é a 3.
2° Quando vai enviar a location no arquivo de remessa não pode enviar a chave PIX.
3° A Posição aonde gera a location, tem que utilizar 100% de sua posição, completando com zeros a esquerda.
Exemplo:
Location é 123
Então tem que ficar 000000123(Colocando zeros a esquerda até a utilização total do campo).
Porem, essa situação tratei direto em meu sistema ou seja, ele que vai gerar os zeros a esquerda e enviar para o arquivo de remessa já com os zeros.

Abaixo uma imagem de como é hoje.
image.thumb.png.9db9aa15c5b66f41bb27a45d4b6a3d00.png

Abaixo com as mudanças que realizei

 

image.thumb.png.649d77307b9bbade2508b3020fb8d9bb.png

 

Abaixo o código completo e em anexo a unit alterada.

procedure TACBrBancoItau.GerarRegistroTransacao400( ACBrTitulo: TACBrTitulo; aRemessa: TStringList);
var
   ATipoCedente, ATipoSacado, ATipoSacadoAvalista, ATipoOcorrencia    :String;
   ADataMoraJuros, ADataDesconto, ATipoAceite    :String;
   ATipoEspecieDoc, ANossoNumero,wLinha,wCarteira :String;
   wLinhaMulta,LCPFCNPJBeneciciario :String;
   iSequencia : integer;

begin
   with ACBrTitulo do
   begin
     {Tipo de Ocorrencia}
     ATipoOcorrencia := TipoOcorrenciaToCodRemessa(ACBrTitulo.OcorrenciaOriginal.Tipo);

     {Aceite do Titulo }
     ATipoAceite := DefineAceite(ACBrTitulo);

     {Especie Documento}
     ATipoEspecieDoc := DefineEspecieDoc(ACBrTitulo);

     {Data Mora}
     ADataMoraJuros := DefineDataMoraJuros(ACBrTitulo, 'ddmmyy');

     {Descontos}
     ADataDesconto := DefineDataDesconto(ACBrTitulo, 'ddmmyy');

     {Pegando Tipo de Cedente}
     ATipoCedente := DefineTipoBeneficiario(ACBrTitulo);

     if (StrToIntDef(ATipoCedente,0) in [3..4]) then
       LCPFCNPJBeneciciario := OnlyNumber(ACBrTitulo.Sacado.SacadoAvalista.CNPJCPF)
     else
       LCPFCNPJBeneciciario := ACBrBoleto.Cedente.CNPJCPF;

     {Pegando Tipo de Sacado}
     ATipoSacado:= DefineTipoSacado(ACBrTitulo);

     {Pegando Tipo de Sacado Avalista}
     ATipoSacadoAvalista := DefineTipoSacadoAvalista(ACBrTitulo);

     {Pegando campo Intruções conforme código protesto}
     InstrucoesProtesto(ACBrTitulo);
     DefineDataProtestoNegativacao(ACBrTitulo);

    with ACBrBoleto do
    begin
       wCarteira:= Trim(Carteira);
       {Cobrança sem registro com opção de envio de arquivo remessa}
       if (wCarteira = '102') or (wCarteira = '103') or
          (wCarteira = '107') or (wCarteira = '172') or
          (wCarteira = '173') or (wCarteira = '196') then
        begin
          ANossoNumero := MontarCampoNossoNumero(ACBrTitulo);
          wLinha:= '6'                                                                            + // 6 - FIXO
                   '1'                                                                            + // 1 - FIXO
                   PadLeft(OnlyNumber(Cedente.Agencia), 4, '0')                                   + // AGÊNCIA MANTENEDORA DA CONTA
                   '00'                                                                           + // COMPLEMENTO DE REGISTRO
                   PadLeft(OnlyNumber(Cedente.Conta), 5, '0')                                     + // NÚMERO DA CONTA CORRENTE DA EMPRESA
                   PadRight(Cedente.ContaDigito, 1)                                               + // DÍGITO DE AUTO CONFERÊNCIA AG/CONTA EMPRESA
                   PadLeft(Carteira,3,' ')                                                        + // NÚMERO DA CARTEIRA NO BANCO
                   PadLeft(NossoNumero, 8, '0')                                                   + // IDENTIFICAÇÃO DO TÍTULO NO BANCO
                   Copy(ANossoNumero, Length(ANossoNumero), 1)                                    + // DAC DO NOSSO NÚMERO
                   '0'                                                                            + // 0 - R$
                   PadRight('R$', 4, ' ')                                                         + // LITERAL DE MOEDA
                   IntToStrZero( round( ValorDocumento * 100), 13)                                + // VALOR NOMINAL DO TÍTULO
                   PadRight(SeuNumero, 10, ' ')                                                   + // IDENTIFICAÇÃO DO TÍTULO NA EMPRESA
                   FormatDateTime('ddmmyy', Vencimento)                                           + // DATA DE VENCIMENTO DO TÍTULO
                   PadLeft(ATipoEspecieDoc, 2, '0')                                               + // ESPÉCIE DO TÍTULO
                   ATipoAceite                                                                    + // IDENTIFICAÇÃO DE TITILO ACEITO OU NÃO ACEITO
                   FormatDateTime('ddmmyy', DataDocumento)                                        + // DATA DE EMISSÃO
                   {Dados do sacado}
                   PadLeft(ATipoSacado, 2, '0')                                                   + // IDENTIFICAÇÃO DO TIPO DE INSCRIÇÃO/SACADO
                   PadLeft(OnlyNumber(Sacado.CNPJCPF), 15, '0')                                   + // Nº DE INSCRIÇÃO DO SACADO  (CPF/CGC)
                   PadRight(Sacado.NomeSacado, 30, ' ')                                           + // NOME DO SACADO
                   space(9)                                                                       + // BRANCOS(COMPLEMENTO DE REGISTRO)
                   PadRight(Sacado.Logradouro + ' ' + Sacado.Numero + ' ' +
                            Sacado.Complemento , 40, ' ')                                         + // RUA, NÚMERO E COMPLEMENTO DO SACADO
                   PadRight(Sacado.Bairro, 12, ' ')                                               + // BAIRRO DO SACADO
                   PadLeft(OnlyNumber(Sacado.CEP), 8, '0')                                        + // CEP DO SACADO
                   PadRight(Sacado.Cidade, 15, ' ')                                               + // CIDADE DO SACADO
                   PadRight(Sacado.UF, 2, ' ')                                                    + // UF DO SACADO
                   {Dados do sacador/avalista}
                   PadRight(Sacado.SacadoAvalista.NomeAvalista, 30, ' ')                          + // NOME DO SACADOR/AVALISTA
                   space(4)                                                                       + // COMPLEMENTO DO REGISTRO
                   PadRight(TiraAcentos(LocalPagamento), 55, ' ')                                 + // LOCAL PAGAMENTO
                   PadRight(' ', 55, ' ')                                                         + // LOCAL PAGAMENTO 2
                   '01'                                                                           + // IDENTIF. TIPO DE INSCRIÇÃO DO SACADOR/AVALISTA
                   PadRight(Sacado.SacadoAvalista.CNPJCPF, 15, '0')                               + // NÚMERO DE INSCRIÇÃO DO SACADOR/AVALISTA
                   space(31)                                                                      + // COMPLEMENTO DO REGISTRO
                   IntToStrZero(aRemessa.Count + 1 , 6);                                            // Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO

          aRemessa.Add(UpperCase(wLinha));
          wLinha := MontaInstrucoesCNAB400(ACBrTitulo, aRemessa.Count );

         if not(wLinha = EmptyStr) then
           aRemessa.Add(UpperCase(wLinha));

          //Result := DoMontaInstrucoes2(Result);               // opcional
        end
       else
        {Carteira com registro}
        begin
          wLinha:= '1'                                                                            + // 1 a 1 - IDENTIFICAÇÃO DO REGISTRO TRANSAÇÃO
                   PadLeft(ATipoCedente,2,'0')                                                    + // TIPO DE INSCRIÇÃO DA EMPRESA
                   PadLeft(OnlyNumber(LCPFCNPJBeneciciario),14,'0')                               + // Nº DE INSCRIÇÃO DA EMPRESA (CPF/CGC)
                   PadLeft(OnlyNumber(Cedente.Agencia), 4, '0')                                   + // AGÊNCIA MANTENEDORA DA CONTA
                   '00'                                                                           + // COMPLEMENTO DE REGISTRO
                   PadLeft(OnlyNumber(Cedente.Conta), 5, '0')                                     + // NÚMERO DA CONTA CORRENTE DA EMPRESA
                   PadRight(Cedente.ContaDigito, 1)                                               + // DÍGITO DE AUTO CONFERÊNCIA AG/CONTA EMPRESA
                   space(4)                                                                       + // COMPLEMENTO DE REGISTRO
                   '0000'                                                                         + // CÓD.INSTRUÇÃO/ALEGAÇÃO A SER CANCELADA
                   PadRight(SeuNumero, 25, ' ')                                                   + // IDENTIFICAÇÃO DO TÍTULO NA EMPRESA
                   PadLeft(NossoNumero, 8, '0')                                                   + // IDENTIFICAÇÃO DO TÍTULO NO BANCO
                   '0000000000000'                                                                + // QUANTIDADE DE MOEDA VARIÁVEL
                   PadLeft(Carteira,3,' ')                                                        + // NÚMERO DA CARTEIRA NO BANCO
                   space(21)                                                                      + // IDENTIFICAÇÃO DA OPERAÇÃO NO BANCO
                   'I'                                                                            + // CÓDIGO DA CARTEIRA
                   ATipoOcorrencia                                                                + // IDENTIFICAÇÃO DA OCORRÊNCIA
                   PadRight(NumeroDocumento, 10, ' ')                                             + // Nº DO DOCUMENTO DE COBRANÇA (DUPL.,NP ETC.)
                   FormatDateTime('ddmmyy', Vencimento)                                           + // DATA DE VENCIMENTO DO TÍTULO
                   IntToStrZero( round( ValorDocumento * 100), 13)                                + // VALOR NOMINAL DO TÍTULO
                   IntToStrZero(ACBrBanco.Numero, 3)                                              + // Nº DO BANCO NA CÂMARA DE COMPENSAÇÃO
                   '00000'                                                                        + // AGÊNCIA ONDE O TÍTULO SERÁ COBRADO
                   PadLeft(ATipoEspecieDoc, 2, '0')                                               + // ESPÉCIE DO TÍTULO
                   ATipoAceite                                                                    + // IDENTIFICAÇÃO DE TITILO ACEITO OU NÃO ACEITO
                   FormatDateTime('ddmmyy', DataDocumento)                                        + // DATA DA EMISSÃO DO TÍTULO
                   PadLeft(trim(ACBrStr(Instrucao1)), 2, '0')                                     + // 1ª INSTRUÇÃO
                   PadLeft(trim(ACBrStr(Instrucao2)), 2, '0')                                     + // 2ª INSTRUÇÃO
                   IntToStrZero( round(ValorMoraJuros * 100 ), 13)                                + // VALOR DE MORA POR DIA DE ATRASO
                   ADataDesconto                                                                  + // DATA LIMITE PARA CONCESSÃO DE DESCONTO
                   IfThen(ValorDesconto > 0, IntToStrZero( round(ValorDesconto * 100), 13),
                   PadLeft('', 13, '0'))                                                          + // VALOR DO DESCONTO A SER CONCEDIDO
                   IntToStrZero( round(ValorIOF * 100), 13)                                       + // VALOR DO I.O.F. RECOLHIDO P/ NOTAS SEGURO
                   IntToStrZero( round(ValorAbatimento * 100), 13)                                + // VALOR DO ABATIMENTO A SER CONCEDIDO

                   {Dados do sacado}
                   PadLeft(ATipoSacado, 2, '0')                                                   + // IDENTIFICAÇÃO DO TIPO DE INSCRIÇÃO/SACADO
                   PadLeft(OnlyNumber(Sacado.CNPJCPF), 14, '0')                                   + // Nº DE INSCRIÇÃO DO SACADO  (CPF/CGC)
                   PadRight(Sacado.NomeSacado, 30, ' ')                                           + // NOME DO SACADO
                   space(10)                                                                      + // BRANCOS(COMPLEMENTO DE REGISTRO)
                   PadRight(Sacado.Logradouro + ' '+ Sacado.Numero + ' ' +
                            Sacado.Complemento , 40, ' ')                                         + // RUA, NÚMERO E COMPLEMENTO DO SACADO
                   PadRight(Sacado.Bairro, 12, ' ')                                               + // BAIRRO DO SACADO
                   PadLeft(OnlyNumber(Sacado.CEP), 8, '0')                                        + // CEP DO SACADO
                   PadRight(Sacado.Cidade, 15, ' ')                                               + // CIDADE DO SACADO
                   PadRight(Sacado.UF, 2, ' ')                                                    + // UF DO SACADO

                   {Dados do sacador/avalista}
                   PadRight(Sacado.SacadoAvalista.NomeAvalista, 30, ' ')                          + // NOME DO SACADOR/AVALISTA
                   space(4)                                                                       + // COMPLEMENTO DO REGISTRO
                   ADataMoraJuros                                                                 + // DATA DE MORA
                   IfThen((DataProtestoNegativacao <> 0) and (DataProtestoNegativacao > Vencimento),
                        PadLeft(DiasProtestoNegativacao , 2, '0'), '00')+ // PRAZO
                   space(1)                                                                       + // BRANCOS
                   IntToStrZero(aRemessa.Count + 1, 6);                                             // Nº SEQÜENCIAL DO REGISTRO NO ARQUIVO

                   iSequencia := aRemessa.Count + 1;
                   aRemessa.Add(UpperCase(wLinha));
                   //Registro Complemento Detalhe - Multa
                   if PercentualMulta > 0 then
                   begin
                     inc( iSequencia );
                     wLinhaMulta:= '2'                                              + // Tipo de registro - 2 OPCIONAL – COMPLEMENTO DETALHE - MULTA
                                   IfThen(MultaValorFixo,'1','2')                   + // Cocidgo da Multa 1- Cobrar Multa Valor Fixo / 2- Percentual / 0-Não cobrar multa
                                   ifThen((DataMulta > 0),
                                           FormatDateTime('ddmmyyyy',  DataMulta),
                                           Poem_Zeros('',8))                        + // Data da Multa 9(008)
                                   IntToStrZero( round(PercentualMulta * 100 ), 13) + // Valor/Percentual 9(013)
                                   space(371)                                       + // Complemento
                                   IntToStrZero(iSequencia , 6);                      // Sequencial

                     aRemessa.Add(UpperCase(wLinhaMulta));
                   end;

                  {Registro Híbrido - Bolecode}
                  if (NaoEstaVazio(ACBrBoleto.Cedente.PIX.Chave)) then
                  begin
                    wLinha := '3'                                              + // 001 a 001 - Identificação do registro bolecode (3)
                              PadRight(IfThen(QrCode.txId = '', ACBrBoleto.Cedente.PIX.Chave, ''), 77, ' ') + // 002 a 078 - Chave Pix (opicional)
                              PadRight(QrCode.txId,  64, ' ')                  + // 079 a 142 - ID DA URL DO QR CODE PIX (opcional)
                              PadRight('', 252, ' ')                                                          + // 143 a 394 - Brancos
                              IntToStrZero(ARemessa.Count + 1, 6);
                    iSequencia := aRemessa.Count + 1;                                                                        // 395 a 400 - Número sequencial do registro
                    ARemessa.Text:= ARemessa.Text + UpperCase(wLinha);
                  end;

                   //OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA
                   if (Sacado.Email <> '') or (Sacado.SacadoAvalista.CNPJCPF <> '') then
                   begin
                     inc( iSequencia );
                     wLinhaMulta:= '5'                                                          + // 001 - 001 Tipo de registro - 5 IDENTIFICAÇÃO DO REGISTRO TRANSAÇÃO
                                   PadRight(Sacado.Email, 120, ' ')                             + // 002 - 121 ENDEREÇO DE E-MAIL ENDEREÇO DE E-MAIL DO PAGADOR
                                   PadLeft(ATipoSacadoAvalista, 2, '0')                         + // 122 - 123 CÓDIGO DE INSCRIÇÃO IDENT. DO TIPO DE INSCRIÇÃO DO SACADOR/AVALISTA
                                   PadLeft(OnlyNumber(Sacado.SacadoAvalista.CNPJCPF), 14, '0')  + // 124 - 137 NÚMERO DE INSCRIÇÃO NÚMERO DE INSCRIÇÃO DO SACADOR AVALISTA
                                   PadRight(Sacado.SacadoAvalista.Logradouro + ' '              +
                                   Sacado.SacadoAvalista.Numero + ' '                           +
                                   Sacado.SacadoAvalista.Complemento , 40, ' ')                 + // 138 - 177 RUA, Nº E COMPLEMENTO DO SACADOR AVALISTA
                                   PadRight(Sacado.SacadoAvalista.Bairro, 12, ' ')              + // 178 - 189 BAIRRO DO SACADOR AVALISTA
                                   PadLeft(OnlyNumber(Sacado.SacadoAvalista.CEP), 8, '0')       + // 190 - 197 CEP DO SACADOR AVALISTA
                                   PadRight(Sacado.SacadoAvalista.Cidade, 15, ' ')              + // 198 - 212 CIDADE DO SACADOR AVALISTA
                                   PadRight(Sacado.SacadoAvalista.UF, 2, ' ')                   + // 213 - 214 UF (ESTADO) DO SACADOR AVALISTA
                                   space(139)                                                   + // 215 - 353 Brancos
                                   //para se operar com mais de um desconto (depende de cadastramento prévio do indicador 19.0 pelo Itaú, conforme Item 5)
                                   IfThen(ValorDesconto2>0,                                       // Alternativamente este campo poderá ter dois outros usos  (SACADOR/AVALISTA ou 2 e 3 descontos)

                                          FormatDateTime('ddmmyy', DataDesconto2),                // 354 - 359 Data do 2º desconto (DDMMAA)
                                          space(6))                                             +
                                   IfThen(ValorDesconto2>0,
                                          IntToStrZero(round(ValorDesconto2 * 100), 13),          // 360 - 372 Valor do 2º desconto
                                          space(13))                                            +
                                   IfThen(ValorDesconto3>0,
                                          FormatDateTime('ddmmyy', DataDesconto3),                // 373 - 378 Data do 3º desconto (DDMMAA)
                                          space(6))                                             +
                                   IfThen(ValorDesconto3>0,
                                          IntToStrZero(round(ValorDesconto3 * 100), 13),          // 379 - 391 Valor do 3º desconto
                                          space(13))                                            +

                                   space(3)                                                     + // 392 - 394 COMPLEMENTO DE REGISTRO
                                   IntToStrZero(iSequencia , 6);                                  // 395 - 400 Sequencial

                     aRemessa.Add(UpperCase(wLinhaMulta));
                   end;

        end;




    end;
  end;
end;



Observação, já passei pela homologação do banco com essas modificações e já realizamos testes de pagamento do QRCode do PIX e o cliente já está utilizando este processo.

Lembrando que no itau existe 2 opções de Pix por aquivo de remessa.

1° é aonde informo a chave pix na identificação 3 e o banco que é responsavel por gerar o pix(copia e cola) e depois só pego essa informação no retorno e vinculo a impressão do boleto.
2° gero a location vazia e mando no arquivo de remessa, como mencionei acima, desta forma não tem a necessidade de pegar o pix(copia e cola) no retorno do boleto.

No meu caso utilizei a opção 2.
 

  • 1 mês depois ...
  • Moderadores
Postado
On 6/5/2024 at 10:10 AM, WashingtonFelipe said:

Bom dia,

Será possível realizar essas implementações ?

Pergunto, pois estou já com 2 clientes, indo para o 3.

No caso seu ACBr está atualizado?
pois ao que parece já está implementado isso na classe

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Boa tarde,
Sim, está atualizado.

Acredito que faltou um pouco mais de informações.

No Arquivo de Remessa, no registro de transação, existe as linhas que devem seguir uma ordem.

O Que está acontecendo é que a linha do "Registro Híbrido - Bolecode" (Linha 3), está para gerar após "OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA" (Linha 5)

E no Arquivo fica
1
2
5
3

E Deveria ficar
1
2
3
5

Essa foi a correção que informei que realizei no arquivo, no caso só coloquei o "Registro Híbrido - Bolecode", para gerar antes do  "OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA"

Como deve ficar

image.thumb.png.d3f0723bee056df605bb3b167ef5acc8.png

Como está

image.thumb.png.4dd7dd2aa1a74a00aa6462a9b592c4a1.png

Outra alteração que fiz em "Registro Híbrido - Bolecode", em "002 a 078 - Chave Pix (opcional)" só deve ser informado nos casos em que será enviado a remessa ao banco e pegar a informação do BoleCode no retorno(PIX Copia e Cola).
Caso não escolha está opção a outra opção é enviar no arquivo de remessa uma informação(Location vazia), que será vinculada junto com o boleto, porem, a linha "002 a 078 - Chave Pix (opicional)" deve ir nula, ao contrario será rejeitada no registro da remessa.


Alteração

image.thumb.png.0200d4f4f9b718c503dd79bb21bf80f3.png

 

Como está hj

image.thumb.png.def5a69b45931290ccb0fbc5e9ba039a.png

Na alteração realizada, apenas verifico se o txID é nulo, caso sim passo a chave pix, ao contrario deixo a informação nula.

 

E Aonde está: "079 a 142 - ID DA URL DO QR CODE PIX (opcional)"
Não é o ID da URL do QrCode PIX, deve ser gerado uma location vazia que será vinculada ao boleto no momento que realizar o registro e é assim que eles sabem que foi pago o boleto por PIX.

Essa informação de gerar a location, não existe no ACBrPIXCD, aonde realizei a implementação e enviei as informações sobre a implementação no furum abaixo.
No Caso a location "vazia", deve ser gerada pelo método ao qual foi implementado no link abaixo.

 



Em resumo são 2 ajustes

1° Ajustar a posição da geração do PIX
2° Validar se foi passado a location do PIX, caso tenha a chave PIX tem que ir nula.

Existe outra situação, porem não é necessário ajuste, que é informar com zeros a esquerda o campo abaixo, ou seja, tem que utilizar as 64 posições, porem, ao informar os dados no ACBr é só passar já com todos os zeros, por isso não passei essa informação.

PadRight(QrCode.txId,  64, ' ')                  + // 079 a 142 - ID DA URL DO QR CODE PIX (opcional)
(Tem que preencher com zeros a esquerda) - 0000000000000000000000+Numero
 


 

  • Moderadores
Postado
43 minutes ago, WashingtonFelipe said:

Boa tarde,
Sim, está atualizado.

Acredito que faltou um pouco mais de informações.

No Arquivo de Remessa, no registro de transação, existe as linhas que devem seguir uma ordem.

O Que está acontecendo é que a linha do "Registro Híbrido - Bolecode" (Linha 3), está para gerar após "OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA" (Linha 5)

E no Arquivo fica
1
2
5
3

E Deveria ficar
1
2
3
5

Essa foi a correção que informei que realizei no arquivo, no caso só coloquei o "Registro Híbrido - Bolecode", para gerar antes do  "OPCIONAL – COBRANÇA E-MAIL E/OU DADOS DO SACADOR AVALISTA"

Como deve ficar

image.thumb.png.d3f0723bee056df605bb3b167ef5acc8.png

Como está

image.thumb.png.4dd7dd2aa1a74a00aa6462a9b592c4a1.png

Outra alteração que fiz em "Registro Híbrido - Bolecode", em "002 a 078 - Chave Pix (opcional)" só deve ser informado nos casos em que será enviado a remessa ao banco e pegar a informação do BoleCode no retorno(PIX Copia e Cola).
Caso não escolha está opção a outra opção é enviar no arquivo de remessa uma informação(Location vazia), que será vinculada junto com o boleto, porem, a linha "002 a 078 - Chave Pix (opicional)" deve ir nula, ao contrario será rejeitada no registro da remessa.


Alteração

image.thumb.png.0200d4f4f9b718c503dd79bb21bf80f3.png

 

Como está hj

image.thumb.png.def5a69b45931290ccb0fbc5e9ba039a.png

Na alteração realizada, apenas verifico se o txID é nulo, caso sim passo a chave pix, ao contrario deixo a informação nula.

 

E Aonde está: "079 a 142 - ID DA URL DO QR CODE PIX (opcional)"
Não é o ID da URL do QrCode PIX, deve ser gerado uma location vazia que será vinculada ao boleto no momento que realizar o registro e é assim que eles sabem que foi pago o boleto por PIX.

Essa informação de gerar a location, não existe no ACBrPIXCD, aonde realizei a implementação e enviei as informações sobre a implementação no furum abaixo.
No Caso a location "vazia", deve ser gerada pelo método ao qual foi implementado no link abaixo.

 



Em resumo são 2 ajustes

1° Ajustar a posição da geração do PIX
2° Validar se foi passado a location do PIX, caso tenha a chave PIX tem que ir nula.

Existe outra situação, porem não é necessário ajuste, que é informar com zeros a esquerda o campo abaixo, ou seja, tem que utilizar as 64 posições, porem, ao informar os dados no ACBr é só passar já com todos os zeros, por isso não passei essa informação.

PadRight(QrCode.txId,  64, ' ')                  + // 079 a 142 - ID DA URL DO QR CODE PIX (opcional)
(Tem que preencher com zeros a esquerda) - 0000000000000000000000+Numero
 


 

baixe o codigo do svn e coloque no local verificando para não duplicar pois o seu código vou postar aqui para ver que já tem

image.png

note que tem dois locais um onde está antes e outro que está depois

image.png

 

image.png

notou?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Boa tarde,

Fiz a atualização, conforme o print.
 

image.thumb.png.19e2c7a605d635c8fd0a46a23c5dc542.png

 

 

Porem, ele está na posição errada.

Está indo após a linha 5 e tem que ir antes da linha 5, pois o bolecode é referente a linha 3.

 

image.thumb.png.509f6e241ef8c545b7bf31eba83802ff.png

 

Outra situação é que só pode informar a chave PIX na posição 002 a 078 - Chave Pix (opcional), caso não esteja preenchido a posição 079 a 142 - ID DA URL DO QR CODE PIX (opcional)

Caso seja preenchido não pode ser informado a chave PIX(Essa foi a orientação que me deram durante a homologação).

Ajustar a posição(Conforme mencionei acima) e se for utilizar a location, não posso informar a chave PIX.

Precisa seguir a ordem do conteúdo.
1,2,3,4,5 ...

image.thumb.png.078c96f6095e53cceef99902288692c3.png
 

image.thumb.png.91dd2e77dcfc3e6d2e3973edaffd0f03.png

image.thumb.png.fab32b9b65eb5ba7823a4a1dc6bb0fb2.png

image.thumb.png.a0115fe8fb3600ad5e87a90ccb971c8f.png

 

O Problema é apenas que está na posição errada.

 

  • Este tópico foi criado há 170 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.