Ir para conteúdo
  • Cadastre-se

pjunior

Membros Pro
  • Total de ítens

    55
  • Registro em

  • Última visita

Posts postados por pjunior

  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. 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.
  4. 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 ?

  5. 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.
     

  6. 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.

  7. 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

  8. 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.

  9. 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

  10. 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,

  11. 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.

×
×
  • 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.