Ir para conteúdo
  • Cadastre-se

Mailson.Dragon

Membros
  • Total de ítens

    15
  • Registro em

  • Última visita

Posts postados por Mailson.Dragon

  1. Modifiquei ...\ACBr\Fontes\ACBrBoleto\ACBrBancoSafra.pas

    A partir da linha 810

    segmentoR := IntToStrZero(ACBrBanco.Numero, 3)                                                    + // 001 - 003 / Código do Banco na compensação
                      '0001'                                                                                + // 004 - 007 / Numero do lote remessa
                      '3'                                                                                   + // 008 - 008 / Tipo de registro
                      IntToStrZero(FSequencia ,5)                                                           + // 009 - 013 / Número seqüencial do registro no lote
                      'R'                                                                                   + // 014 - 014 / Cód. Segmento do registro detalhe
                      Space(1)                                                                              + // 015 - 015 / Reservado (uso Banco)
                      sCodMovimento                                                                         + // 016 - 017 / Código de movimento remessa
                      '0'                                                                                   + // 018 - 018 / Código do desconto 2
                      PadLeft('', 8, '0')                                                                   + // 019 - 026 / Data do desconto 2
                      IntToStrZero(0, 15)                                                                   + // 027 - 041 / Valor/Percentual a ser concedido
                      '0'                                                                                   + // 042 - 042 / Código do desconto 3
                      PadLeft('', 8, '0')                                                                   + // 043 - 050 / Data do desconto 3
                      IntToStrZero(0, 15)                                                                   + // 051 - 065 / Valor/Percentual a ser concedido

                      {sTipoDesconto                                                                        + // 042 - 042 1 = Valor Fixo ate a Data Informada / 2 = Percentual ate a Data Informada / 3 = Valor por Antecipação dia Corrido
                                                                                                              //           5 = Percentual por Antecipação dia corrido
                      IfThen((ACBrTitulo.ValorDesconto > 0),
                              FormatDateTime('ddmmyyyy', ACBrTitulo.DataDesconto), '00000000')              + // 043 - 050 Campo numerico e deve ser preenchido, caso não tenha desconto manter o campo zerado. DDMMAAAA
                      IntToStrZero(round(ACBrTitulo.ValorDesconto), 15)                                     + // 051 - 065 / Valor/Percentual a ser aplicado}

                      IfThen((ACBrTitulo.PercentualMulta > 0),
                             IfThen(ACBrTitulo.MultaValorFixo,'1','2'), '0')                + // 66 - 66 1-Cobrar Multa Valor Fixo / 2-Percentual / 0-Não cobrar multa
                      IfThen((ACBrTitulo.PercentualMulta > 0),
                              FormatDateTime('ddmmyyyy', ACBrTitulo.DataMulta), '00000000') + // 67 - 74 Se cobrar informe a data para iniciar a cobrança ou informe zeros se não cobrar
                      IfThen((ACBrTitulo.PercentualMulta > 0), IntToStrZero(round(ACBrTitulo.PercentualMulta * 100), 15),
                             PadRight('', 15, '0'))                                         + // 075 - 089 / Valor/Percentual a ser aplicado
                      Space(10)                                                             + // 090 - 099 / Reservado (uso Banco)
                      MontarInstrucoes1                                                     + // 100 - 139 / Mensagem 3
                                                                                              // 140 - 179 / Mensagem 4
                      Space(61)                                                             ; // 180 - 240 / Reservado (uso Banco)

     

    cb070701.rem VRTOFI200707175710442.pdf 500.pdf

  2. Sim, mudar para não informar o desconto 2 e 3 que o banco safra não trata essas informações, hoje na unit do ACBr está informando desconto 1 que o o único aceitável, desconto 2 em branco e desconto 3 que é o mesmo do desconto 1, resumindo aceitam apenas o desconto 1.

    Estou homologando essa carteira,  a equipe da ACBr já corrigiram outras pendencias, mais ainda falta essa.

    Retorno do banco:

    Os títulos foram rejeitados pelo motivo "115-SEQUENCIA DO DESCONTO INVALIDA".

    Olhando o arquivo, consta que a empresa está enviando duas formas de desconto, porém, está utilizando o primeiro campo e o terceiro campo de Desconto, pulando o campo 2.

  3. Meu problema é com o código da agência, resolvi quando mudei a função "MontarCodigoBarras", se poderem atualiza-la ficarei grato.

    function TACBrBancoSafra.MontarCodigoBarras(const ACBrTitulo: TACBrTitulo): string;
    var
      CodigoBarras, FatorVencimento, DigitoCodBarras,
      valorDocumento, agencia, {agenciaDigito, }conta,
      ContaDigito, NossoNumero: string;
    begin
      with ACBrTitulo.ACBrBoleto do
      begin
        FatorVencimento  := CalcularFatorVencimento(ACBrTitulo.Vencimento);
        valorDocumento   := IntToStrZero(Round(ACBrTitulo.ValorDocumento * 100), 10);
        agencia          := PadLeft(RightStr(Cedente.Agencia,fpTamanhoAgencia), fpTamanhoAgencia, '0');
        //agenciaDigito    := PadLeft(Cedente.AgenciaDigito, 1, '0');
        conta            := Cedente.Conta;
        ContaDigito      := PadLeft(Cedente.ContaDigito, 1, '0');
        NossoNumero      := PadLeft(RightStr(ACBrTitulo.NossoNumero,fpTamanhoMaximoNossoNum),fpTamanhoMaximoNossoNum,'0');

        CodigoBarras := IntToStr(Banco.Numero) + '9' + FatorVencimento +
                        valorDocumento +
                        '7' + agencia + {Trim(agenciaDigito) +} Trim(conta) + ContaDigito +
                        NossoNumero +  '2';


        DigitoCodBarras := CalcularDigitoCodigoBarras(CodigoBarras);
      end;

      Result := IntToStr(Numero) + '9' + DigitoCodBarras + Copy(CodigoBarras, 5, 39);

    end;

  4. Boa tarde, estou com o mesmo problema na formatação da agência, seque em anexo o manual do banco onde informa a agência com 5 dígitos sem a necessidade do digito verificador.

    Pude observar que no arquivo ..\Fontes\ACBrBoleto\ACBrBancoSafra.pas

    A função "MontarCodigoBarras", trata agencia com 4 dígitos mais 1 digito verificador

    Já na função: "GerarRegistroHeader240", Posições 53-57 trata a agencia com 5 dígitos

    Gerando inconsistências nas informações.

    Ex: minha agencia é "19700"

     

    500.pdf

  5. Está faltando a versão do lote 087 e versão do arquivo 045

    ...

     VersaoArquivo := LayoutVersaoArquivo;

          if not (VersaoArquivo in [030, 040, 080, 082, 083, 084, 087]) then
            VersaoArquivo := 030;

    ...

    VersaoLote := LayoutVersaoLote;

          case VersaoArquivo of
            030: if VersaoLote <> 020 then VersaoLote := 020;
            040: if VersaoLote <> 030 then VersaoLote := 030;
            080: if VersaoLote <> 040 then VersaoLote := 040;
            082: if VersaoLote <> 041 then VersaoLote := 041;
            083: if VersaoLote <> 042 then VersaoLote := 042;
            084: if VersaoLote <> 043 then VersaoLote := 043;
            087: if VersaoLote <> 045 then VersaoLote := 045;
          else
            VersaoLote := 000;
          end;

    ...

  6. Sugestão de atualização da função ACBrBancoBrasil.pas/GerarRegistroHeader240

    Leiaute CNAB 240 Posições

    Header de Arquivo Posições 164 a 166 Nº da Versão do Layout do Arquivo

    Hoje está fixa em 030, preciso manipular esse valor conforme meu cliente, que é 087.

    Nas posições 223 a 225 está fixo 'CSP' 

    -(Informar 'brancos', porém se o arquivo foi formatado com a versão do layout 030, pode ser informado 'CSP' nas posições 223 a 225, e 'zeros' nas posições 226 a 228)

    Header de Lote Posições 14 a 16 Nº da Versão do Layout do Lote

    Hoje está fixa em 020, preciso manipular esse valor conforme meu cliente, que é 045.

    >------------------------------------------------------------------------------------------<

    A seguir minhas alterações.

    { GERAR REGISTRO-HEADER DO ARQUIVO }

          Result:= IntToStrZero(ACBrBanco.Numero, 3)               + // 1 a 3 - Código do banco
                   '0000'                                          + // 4 a 7 - Lote de serviço
                   '0'                                             + // 8 - Tipo de registro - Registro header de arquivo
                   StringOfChar(' ', 9)                            + // 9 a 17 Uso exclusivo FEBRABAN/CNAB
                   ATipoInscricao                                  + // 18 - Tipo de inscrição do cedente
                   PadLeft(OnlyNumber(CNPJCPF), 14, '0')           + // 19 a 32 -Número de inscrição do cedente
                   PadLeft(Convenio, 9, '0') + '0014'              + // 33 a 45 - Código do convênio no banco [ Alterado conforme instruções da CSO Brasília ] 27-07-09
                   ACBrBanco.ACBrBoleto.ListadeBoletos[0].Carteira + // 46 a 47 - Carteira
                   aModalidade + '  '                              + // 48 a 52 - Variacao Carteira
                   aAgencia                                        + // 53 a 57 - Código da agência do cedente
                   PadRight(AgenciaDigito, 1 , '0')                + // 58 - Dígito da agência do cedente
                   aConta                                          + // 59 a 70 - Número da conta do cedente
                   PadRight(ContaDigito, 1, '0')                   + // 71 - Dígito da conta do cedente
                   ' '                                             + // 72 - Dígito verificador da agência / conta
                   TiraAcentos(UpperCase(PadRight(Nome, 30, ' '))) + // 73 a 102 - Nome do cedente
                   PadRight('BANCO DO BRASIL', 30, ' ')            + // 103 a 132 - Nome do banco
                   StringOfChar(' ', 10)                           + // 133 a 142 - Uso exclusivo FEBRABAN/CNAB
                   '1'                                             + // 143 - Código de Remessa (1) / Retorno (2)
                   FormatDateTime('ddmmyyyy', Now)                 + // 144 a 151 - Data do de geração do arquivo
                   FormatDateTime('hhmmss', Now)                   + // 152 a 157 - Hora de geração do arquivo
                   PadLeft(IntToStr(NumeroRemessa), 6, '0')        + // 158 a 163 - Número seqüencial do arquivo
                   PadLeft(IntToStr(LayoutVersaoArquivo), 3, '0')  + // 164 a 166 - Número da versão do layout do arquivo
                   StringOfChar('0', 5)                            + // 167 a 171 - Densidade de gravação do arquivo (BPI)
                   StringOfChar(' ', 20)                           + // 172 a 191 - Uso reservado do banco
                   StringOfChar('0', 20)                           + // 192 a 211 - Uso reservado da empresa
                   StringOfChar(' ', 11)                           + // 212 a 222 - 11 brancos
                   StringOfChar(' ', 3)                            + // 223 a 225 - 'CSP'
                   StringOfChar('0', 3)                            + // 226 a 228 - Uso exclusivo de Vans
                   StringOfChar(' ', 2)                            + // 229 a 230 - Tipo de servico
                   StringOfChar(' ', 10);                            // 231 a 240 - titulo em carteira de cobranca

              { GERAR REGISTRO-HEADER DO LOTE }

          Result:= Result + #13#10 +
                   IntToStrZero(ACBrBanco.Numero, 3)               + // 1 a 3 - Código do banco
                   '0001'                                          + // 4 a 7 - Lote de serviço
                   '1'                                             + // 8 - Tipo de registro - Registro header de arquivo
                   'R'                                             + // 9 - Tipo de operação: R (Remessa) ou T (Retorno)
                   '01'                                            + // 10 a 11 - Tipo de serviço: 01 (Cobrança)
                   '00'                                            + // 12 a 13 - Forma de lançamento: preencher com ZEROS no caso de cobrança
                   PadLeft(IntToStr(LayoutVersaoLote), 3, '0')     + // 14 a 16 - Número da versão do layout do lote
                   ' '                                             + // 17 - Uso exclusivo FEBRABAN/CNAB
                   ATipoInscricao                                  + // 18 - Tipo de inscrição do cedente
                   PadLeft(OnlyNumber(CNPJCPF), 15, '0')           + // 19 a 32 -Número de inscrição do cedente
                   PadLeft(Convenio, 9, '0') + '0014'              + // 33 a 45 - Código do convênio no banco [ Alterado conforme instruções da CSO Brasília ] 27-07-09
                   ACBrBanco.ACBrBoleto.ListadeBoletos[0].Carteira + // 46 a 47 - Carteira
                   aModalidade + '  '                              + // 48 a 52 - Variacao Carteira
                   aAgencia                                        + // 53 a 57 - Código da agência do cedente
                   PadRight(AgenciaDigito, 1 , '0')                + // 58 - Dígito da agência do cedente
                   aConta                                          + // 59 a 70 - Número da conta do cedente
                   PadRight(ContaDigito, 1, '0')                   + // 71 - Dígito da conta do cedente
                   ' '                                             + // 72 - Dígito verificador da agência / conta
                   PadRight(Nome, 30, ' ')                         + // 73 a 102 - Nome do cedente
                   StringOfChar(' ', 40)                           + // 104 a 143 - Mensagem 1 para todos os boletos do lote
                   StringOfChar(' ', 40)                           + // 144 a 183 - Mensagem 2 para todos os boletos do lote
                   PadLeft(IntToStr(NumeroRemessa), 8, '0')        + // 184 a 191 - Número do arquivo
                   FormatDateTime('ddmmyyyy', Now)                 + // 192 a 199 - Data de geração do arquivo
                   StringOfChar('0', 8 )                            + // 200 a 207 - Data do crédito - Só para arquivo retorno
                   StringOfChar(' ', 33);                            // 208 a 240 - Uso exclusivo FEBRABAN/CNAB

  7. Conforme foi citado acima não é obrigatório o envio do endereço completo apenas o CEP, estou homologando a carteira de um cliente e deu tudo certo apenas com o CEP dele, não tivemos problemas com a ausência do endereço completo. A melhor forma e testar, pegar esses boletos e pesquisar no site do banco para visualizar a 2ª via do mesmo caso apareça é por que está registrado.

    • Curtir 2
×
×
  • 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...
The popup will be closed in 10 segundos...