Ir para conteúdo
  • Cadastre-se

denerbuzato

Membros
  • Total de ítens

    152
  • Registro em

  • Última visita

  • Days Won

    4

Posts postados por denerbuzato

  1. Bom dia!

    Você pode criar um campo em sua tabela "cont_remessa_bancotal" por exemplo, e durante o dia inicializa com 0.

    Quando for gerar a remessa incrementa essa campo e passa o valor dele para o componente. No caso terá o valor de 1.

    ACBrBoleto1.GerarRemessa( SeqRemessa );

    A cada remessa o valor será incrementado durante aquele dia. No dia seguinte você volta o contador para 0 e ao gerar as remessas entrará no processo novamente.

  2. Boa tarde a todos,

    Espero que as minhas alterações sejam disponibilizadas no SVN, pois recebi o seguinte e-mail do banco:

    Hoje pela manhã (sex 20/11/2015 10:09):

    Citar

    Dener, bom dia!

    Os boletos foram aprovados ok?
    Só fica faltando para lhe responder o arquivo remessa. Logo que tiver o retorno lhe informo

    Abraços

    Rodrigo G RODRIGUES
    Especialista Vendas I | HSBC Bank Brasil S.A.
    Payments Cash Management Sales - Empresas MG
    Rua Paraíba, 550 - 16º Andar - Funcionários - Belo Horizonte/MG - CEP 30.130-140

     

    Agora a tarde (sex 20/11/2015 12:40):

    Citar

    Dener,

    complementando a informação, arquivo remessa também aprovado ok?

    Abraços

    Rodrigo G RODRIGUES
    Especialista Vendas I | HSBC Bank Brasil S.A.
    Payments Cash Management Sales - Empresas MG
    Rua Paraíba, 550 - 16º Andar - Funcionários - Belo Horizonte/MG - CEP 30.130-140

    Sendo assim, a cobrança foi homologada pelo banco. Sendo necessário os ajustes proposto no post.

    Estou no aguardo.

    Obrigado.

  3. Prezados,

    Estou homologando a cobrança bancária do banco HSBC, porém, foi rejeitado tanto o boleto quanto o arquivo remessa CNAB 400.

    Resposta do Banco sobre o arquivo remessa:

    Citar

    Segue pontos a serem alterados no arquivo remessa:

    HEADER

    . Nº da Linha: 0001               Tamanho do registro igual a 396 bytes
    . Nº da Linha: 0001               Colunas: 034 a 044               Contrato COB inválido
    . Nº da Linha: 0001               Colunas: 077 a 079               Código do banco inválido
    . Nº da Linha: 0001               Colunas: 080 a 094               Nome do banco inválido
    . Nº da Linha: 0001               Colunas: 095 a 100               Data da gravação do arquivo inválida
    . Nº da Linha: 0001               Colunas: 395 a 400               Número sequencial de registro inválido

     

    Segue algumas considerações sobre como resolver alguns dos problemas que observei.

    Pelo visto essa informação deveria constar tanto a agencia quanto a conta para que dê os 11 dígitos conforme diz o manual. No meu caso a agencia sendo 1256 e a conta 00775-17, deveria constar 12560077517.

    Liguei para o suporte do HSBC no telefone 31-3503-5342 e falei com Sr. Rodrigo G. Rodrigues o qual está acompanhando o processo de homologação e esclareci com ele o seguinte:

    A conta do HSBC é de 7 números, porém, será sempre 5 + 2, sendo os 5 primeiros da conta e 2 do dígito. Isso é padrão do HSBC no mundo todo.

    Assim sendo, observei que alguns pontos da unit “ACBrBancoHSBC” não estão trazendo os dados da conta corretos, pois como ele atribui 7 para conta, o numero da conta sem o digito que é 00775, e a conta fica 0000775. Dessa maneira, nos locais que ele junta conta + digito para resultar em 7, ele não faz pois a conta já está com 7 digitos.

    Exemplo:

    wConta   := PadLeft( OnlyNumber(Conta) + ContaDigito, 7, '0');

    Neste caso a conta já está com 7 digitos e não acrescenta o digito da conta, fazendo com que fique errado o valor final da variável. Fica com valor 0000775 sendo que o correto seria 00775 para que ao somar com o digito fique 0077517.

    Vamos as modificações:

    No “create” do “ACBrBancoHSBC”, na linha 119, a conta está sendo fixada com tamanho de 7.

       fpTamanhoConta          := 7;

    Sugiro que seja alterado para:

       fpTamanhoConta          := 5;

    Na procedure “GerarRegistroHeader400” na linha 265 consta o seguinte:

                   wConta                        + // Conta Corrente //Removi agencia repetido //ALFEU MOTA //

    Sugiro a alteração para:

                   wAgencia + wConta             + // Conta Corrente (Agência + Conta Corrente)

    Visto que no manual é tratado agencia e conta junto totalizando 11 digitos.

    Também na linha 356 onde consta

                      PadLeft(OnlyNumber(Cedente.Agencia) +

                      OnlyNumber(Cedente.Conta)+Cedente.ContaDigito, 11, '0') +

    Deverá ser alterado para:

                      PadLeft(OnlyNumber(Cedente.Agencia) +

                      OnlyNumber(Cedente.Conta)+Cedente.ContaDigito, 11, '0') +         //Conta Corrente (Agência + Conta Corrente)

    Visto que no manual é tratado agencia e conta junto totalizando 11 digitos.

    Obs: Lembrando que para as variáveis ficarem corretas, o tamanho da conta tem que ficar 5.

    Resposta do Banco sobre o boleto:

    Citar

     

    BOLETOS REPROVADOS

    AJUSTES NA LINHA DIGITÁVEL - (47 Posições)

    • A empresa deverá rever a criação da linha digitável. Favor verificar o manual técnico do código de barras para montagem correta dos dados, pois no terceiro bloco, o campo da conta da empresa está incorreto.

    Manual na página 19:     

    AJUSTES NO CÓDIGO DE BARRAS - (44 posições)

    • A empresa deverá rever a montagem dos dados seguindo o manual técnico do código de barras, pois é necessário corrigir os dados da Linha Digitável para o Código de Barras.

     

     

     

    Minhas Considerações:

    Observei no fonte “ACBrBancoHSBC.pas” na function “MontarCodigoBarras” na linha 224 consta o seguinte:

                       PadLeft(IfThen(ACBrBoleto.Cedente.Conta[1] = '0', RightStr(OnlyNumber(ACBrBoleto.Cedente.Conta),6) +

    Observem que a conta está ficando com 6 digitos, sendo que o correto seria 7. Como iremos setar a conta para 5 digitos, o copy deverá ser de 5 para que ao somar com o digito resulte em 7.

    Sugiro a alteração para:

                       PadLeft(IfThen(ACBrBoleto.Cedente.Conta[1] = '0', RightStr(OnlyNumber(ACBrBoleto.Cedente.Conta),5) +

    Fiz essa alterações no componente e enviei para o banco para novos testes.

    Obs.: Embora o desenvolvimento do arquivo retorno irei fazer após a homologação da cobrança, resolvi fazer uma conferencia entre o código fonte e o manual, onde observei alguns pontos a ajustar, sendo eles.

    Na procedure "LerRetorno400" é atribuído os seguintes valores para as variáveis:

      rCodigoCedente := Copy(ARetorno[0], 109, 10);

      rConta         := trim(Copy(ARetorno[0], 38, 6));
      rDigitoConta   := Copy(ARetorno[0], 44, 1);


    No manual na página 16, observei que na posição 109 com tamanho de 11 contém a seguinte informação "Uso do Banco", então embora não tenha um arquivo retorno, o copy está errado.

    Ajustei para o seguinte:

      rCodigoCedente := Copy(ARetorno[0], 109, 11);

      rConta         := trim(Copy(ARetorno[0], 38, 5));
      rDigitoConta   := Copy(ARetorno[0], 43, 2);

     

     

    Segue manual e unit alterada para disponibilizar.

    Grato.

     

    cob400_jan.pdf

    Codigo Barras COB.pdf

    ACBrBancoHSBC.pas

    • Curtir 2
  4. Boa tarde,

    Tentei fazer exatamente isso, porém, não consigo chamar a função. Segue um pedaço do meu código para ver se consegue me dizer como usar

      if Open.Execute then
      begin
        //Configurar banco
        ConfiguraComponenteAcBr;
        //
        ACBrBoleto1.NomeArqRetorno := ExtractFileName(Open.FileName);
        ACBrBoleto1.DirArqRetorno  := ExtractFilePath(Open.FileName);
        ACBrBoleto1.LerRetorno;
        for i := 0 to ACBrBoleto1.ListadeBoletos.Count-1 do
        begin
          if ACBrBoleto1.ListadeBoletos.Objects.ValorRecebido > 0 then
          begin
            // Grava a baixa da conta - recebimentos
            try


                ... aqui tem um sql para localizar qual conta baixar com o filtro, que é o ponto que estou com problema...

                qryCRBLanc.Parameters.ParamByName('NossoNumero').Value  := StrToInt(ACBrBoleto1.ListadeBoletos.Objects.NossoNumero);

                ... caso ele encontre o registro ele processa as baixas mais abaixo.

    Obs.: Esse digito que você me ajudará a calcular vou usar concatenando com o nosso numero para localizar o lançamento.

    Grato

  5. Bom dia Juliana,

    Obrigado pelo retorno. Realmente sabia que poderia afetar outros usuários, tanto que no início do post dei duas opções para desenvolvimento. Só que a criação do dígito no "ACBrBoleto" atenderia apenas o SICOOB, e pensei que seria mais fácil retirar o dígito do nosso numero (já que ele viria com 8) para quem usa com ele com 7, do que não ter ele para o caso de quem precisa. É melhor ter do que não ter. Pois tendo pode ser tratado para retirar, agora não tendo não tem como fazer nada.

    Observe que quem usa assim, está usando errado, pois não está de acordo com o manual. Como no boleto e remessa estão contemplando o dígito, logo o retorno também deveria contemplar.

    A sua sugestão para calcular o digito me chamou atenção, porém não consegui usar ela. Poderia me dar um exemplo de como usar? Já que pelo visto o retorno continuará em desacordo com o manual.

    Obs.: Fiz a atualização do componente hoje pela manhã "revisão 10489" e fiz novamente o ajuste do copy como estou usando.

    Grato.

    ACBrBancoBancoob.pas

  6. Bom dia,

    Estou tentando abrir um post novo, porém, gostaria de anexar dois arquivos ".pdf". Um arquivo tem 655kb e outro 443kb dando um total de 1098kb. Compactando os dois consigo chegar a 1034kb. Não queria abrir dois tópicos, um para cada arquivo, mas sim anexar os dois no mesmo tópico.

    Talvez a solução seria aumentar a permissão para o tamanho total do arquivo a ser anexado. Minha conta esta limitada a 1MB, porém, no geral estou usando 1MB dos 5MB que posso usar. Verifiquei isso em: "Meus Anexos" onde diz que uso 22%

    Observação: Neste post, iria anexar três telas, nas quais estava demonstrando os itens citados. Essas imagens são de 52KB, 36BK e 17KB, dando um total de 105KB, ou seja, bem menor que 1MB e apresenta a mesma mensagem: "Você só tem permissão para fazer o uploade de 1024kb."

    Como proceder neste caso?

    Desde já obrigado.

  7. Boa tarde Juliana,

    Pela manhã postei alguns itens que observei inconsistência no Banestes.

    Revolvi fazer mais testes e conferir os dados ente manual com os fontes onde encontrei mais ajustes a serem realizados. Segue considerações como sequência do post anterior.

    4 - GerarRegistroHeader400

    Nesta procedure observei que a Conta está copiando a partir 2º posição, sendo que o correto seria da 1º. O Banestes não possui digito na conta, sendo assim, pode-se retirar o digito da conta, pois ele sempre ficará vazio.

    Código atual:

      PadLeft(OnlyNumber(Copy(Trim(Conta),2,10)+trim(ContaDigito)), 11, '0')+ // Código da Empresa no Banco

    Como deveria ficar:

      PadLeft(OnlyNumber(Copy(Trim(Conta),1,11)), 11, '0')+ // Conta Corrente                       

    Alterações em comentários no código: No local onde passa "IntToStrzero(Numero,3)" incluído comentário para identificar que se trata do código do banco "021" e no local onde está "PadRight('BANESTES', 8)" com o comentário "Código e Nome do Banco(237 - Bradesco)" alterado comentário para "Nome do Banco (Banestes)"

    Obs.: Manual página 07  

    5 - GerarRegistroTransacao400

    Nesta procedure observei que a Conta está copiando a partir 2º posição, sendo que o correto seria da 1º. O Banestes não possui digito na conta, sendo assim, pode-se retirar o digito da conta, pois ele sempre ficará vazio.

    Código atual:

      PadLeft(OnlyNumber(Copy(Trim(Cedente.Conta),2,10)+trim(cedente.ContaDigito)), 11, '0')+ // Codigo da Empresa no Banco

    Como deveria ficar: 

      PadLeft(OnlyNumber(Copy(Trim(Cedente.Conta),1,11)), 11, '0')+ // Conta Corrente

    Obs.: Manual página 08

    6 - LerRetorno400

    Nesta procedure foram observados variáveis desnecessárias e copy de posições erradas.

    Removido a variável “rDigitoConta” e uso dela “rDigitoConta := Copy(ARetorno[0],38,1);” pois o Banestes não utiliza digito de conta.

    Removido a variável “rAgencia” e uso dela “rAgencia := trim(Copy(ARetorno[0],27,4));” pois no caso do arquivo retorno não consta no layout a agencia do cedente. A única agencia que vem mencionada no layout é a agencia onde foi recebido o titulo, porém, essa agencia não seria necessário usar.

    Ajustado copy da conta corrente.

    Código atual:

       rConta   := trim(Copy(ARetorno[0],33,5));

    Como deveria ficar:

       rConta   := trim(Copy(ARetorno[0],27,11));

    Removido códigos: “Cedente.AgenciaDigito:= '0';” / “Cedente.Agencia := rAgencia;” / “Cedente.ContaDigito:= rDigitoConta;” pois não está sendo necessário no arquivo retorno.

    Retirado comparação de "(rAgencia <> OnlyNumber(Cedente.Agencia)" pois não mais está usando a agencia no retorno.

    Uma informação que não consegui ajustar foi o "Código Lançamento (Aviso de Movimentação)" que no manual diz que está na posição 83 com 2 posições. Observei que no fonte a propriedade "Carteira" está sendo atribuída com sendo este aviso de movimentação. Mas logo abaixo no código a mesa "Carteira" está sendo atribuída com a informação correta.

    1 Vez:

    Carteira                    := copy(Linha,83,3);

    2 Vez

     Carteira             := Copy(Linha,108,1);

    Removido a primeira citação da carteira "Carteira := copy(Linha,83,3);"

    Não sei qual propriedade deveria ser usada para armazenar o "Código Lançamento (Aviso de Movimentação)" para fazer o copy correto desta posição. "Copy(Linha,83,2);". Por enquanto este item não foi implementado.

    Obs.: Manual página 13 e 14

    Segue a unit modificada com essas novas informações.

    Grato.

    ACBrBancoBanestes.pas

  8. Bom dia!

    Como não tive sugestões quanto a solução para o problema apresentado, resolvi por uma solução mais simples. Resolvi usar a sugestão 1, ajustar o copy do nosso numero. Assim, não precisaremos alterar o ACBrBoleto.

    Código atual:

    NossoNumero := copy( Copy(Linha,63,11),Length( Copy(Linha,63,11) )-TamanhoMaximoNossoNum+1  ,TamanhoMaximoNossoNum);

    Como deveria ficar:

    NossoNumero := copy( Copy(Linha,63,12),Length( Copy(Linha,63,12) )-TamanhoMaximoNossoNum+1  ,TamanhoMaximoNossoNum);

     

    Segue a unit modificada para atualização no SVN.

    Grato.

    ACBrBancoBancoob.pas

  9. Bom dia Juliana,

    Após atualizar o componente agora pela manhã, “revisão 10475”, para fazer uso da propriedade “modalidade” na composição da chave ASBACE, observei que ocorreram diferenças nos cálculos. Também os arquivos de remessa e retorno apresentaram problemas.

    Após localizar o problema, resolvi consultar o manual para saber quem estava correto.

    Segue minhas considerações:

    1 - CalcularCampoASBACE

    Nesta função, observei que o nosso numero está copiando a partir 2º posição, sendo que o correto seria da 1º. Também no numero da conta corrente está sendo copiadas apenas 10 posições, a parir da 2º posição, sendo que o correto seria 11 a partir da 1º. O Banestes não possui digito na conta, sendo assim, pode-se retirar o digito da conta, pois ele sempre ficará vazio.

    Obs.: Manual página 27

    Código atual:

      cLivreAsbace := copy(ACBrTitulo.NossoNumero,2,8)                       +

                      copy(trim(ACBrTitulo.ACBrBoleto.Cedente.Conta), 2, 10) +

                      ACBrtitulo.ACBrBoleto.Cedente.ContaDigito              +

                      IfThen(ACBrtitulo.ACBrBoleto.Cedente.Modalidade = '',

                             '4', ACBrtitulo.ACBrBoleto.Cedente.Modalidade)  +

                      IntToStrZero(fpNumero,3);

    Como deveria ficar:

      cLivreAsbace := copy(ACBrTitulo.NossoNumero,1,8)                       +

                      copy(trim(ACBrTitulo.ACBrBoleto.Cedente.Conta), 1, 11) +

                      IfThen(ACBrtitulo.ACBrBoleto.Cedente.Modalidade = '',

                             '4', ACBrtitulo.ACBrBoleto.Cedente.Modalidade)  +

                      IntToStrZero(fpNumero,3);

    2 - GerarRegistroTransacao400

    Nesta procedure observei que o nosso numero está copiando a partir 2º posição, sendo que o correto seria da 1º.

    Obs.: Manual página 08

    Código atual:

                      PadRight(Copy(NossoNumero, 2, 8) + DigitoNossoNumero, 10, '0')          +

    Como deveria ficar:

                      PadRight(Copy(NossoNumero, 1, 8) + DigitoNossoNumero, 10, '0')          +                 

    3 - LerRetorno400

    Nesta procedure observei que o nosso numero está copiando a partir 64º posição e 9 posições, sendo que o correto seria da 63º e 10 posições.

    Obs.: Manual página 14

    Código atual:

             NossoNumero          := Copy(Linha,64,9);

    Como deveria ficar:

             NossoNumero          := Copy(Linha,63,10);        

     

    Segue a unit modificada para atualização no SVN.

    Grato.

    layout_cobrança_cnab400.pdf

    ACBrBancoBanestes.pas

  10. Prezados,

    Estou desenvolvendo uma rotina de baixa do arquivo retorno para o banco SICOOB.

    O boleto e o arquivo remessa já foram homologados pelo banco e meu cliente já está utilizando. Agora que ele recebeu um arquivo de retorno onde irei programar esta rotina.

    Observei que o nosso numero para o SICOOB é 7. Ele calcula o digito e no final fica com 8.

    Meu sistema grava o nosso numero completo no banco de dados, ou seja, os 8 dígitos.

    A composição do código de barras, está sendo composta por 8 dígitos.

        {Montando Campo Livre}

        CampoLivre    := PadLeft(trim(ACBrTitulo.ACBrBoleto.Cedente.Modalidade), 2, '0') +

                         PadLeft(trim(ACBrTitulo.ACBrBoleto.Cedente.CodigoCedente), 7, '0') +

                         PadLeft(Copy(ANossoNumero,1,8), 8, '0') +  //7 Sequenciais + 1 do digito

                         IntToStrZero(Max(1,ACBrTitulo.Parcela),3);

    Se analisarmos os layouts tanto do arquivo remessa, quanto do arquivo retorno, observaremos que o nosso numero começa na posição 63 e termina na posição 74 com o digito.

    Na geração do arquivo remessa, está sendo levado os 8 dígitos.

        PadLeft( NossoNumero + DigitoNossoNumero, 12, '0')         +  // Nosso Número + //nosso numero com digito

    Já no arquivo retorno, ele não está considerando o digito, ou seja, apenas os 7 dígitos.

        NossoNumero  := copy( Copy(Linha,63,11),Length( Copy(Linha,63,11) )-TamanhoMaximoNossoNum+1  ,TamanhoMaximoNossoNum);

    Desse jeito, meu sistema não consegue localizar o nosso numero no banco de dados e não consegue realizar a baixa.

    Para resolver isso, poderíamos usar o copy de 12, para contemplar o digito

        NossoNumero  := copy( Copy(Linha,63,12),Length( Copy(Linha,63,12) )-TamanhoMaximoNossoNum+1  ,TamanhoMaximoNossoNum);

    Ou criar uma propriedade para o digito “DigitoNossoNumero”para que eu possa concatenar no momento de localizar. Na remessa existe essa propriedade, já no retorno não.

    Se tiver essa propriedade, usaríamos assim:

        DigitoNossoNumero:= copy( Copy(Linha,74,1);

    Só que para incluir o “DigitoNossoNumero” teria que alterar o “ACBrBoleto” já a alteração do copy não precisaria, seria apenas no “ACBrBancoBancoob”

    O que acham? Alguém tem alguma sugestão?

    Rotina “LerRetorno400” da unit “ACBrBancoBancoob”

    Boleto - SICOOB Ag3008-2 Conta00078942-9.pdf

    Layout-Remessa.JPG

    Layout-Retorno.JPG

    REMESSA05A09-1 - TESTE.TXT

    RETORNO05A09-1 - TESTE.ret

  11. Bom dia Weber,

    Acredito que os valores a serem usados seriam esses:

      ACBrBoleto1.Cedente.Agencia       := 3031
      ACBrBoleto1.Cedente.AgenciaDigito := 7
      ACBrBoleto1.Cedente.Conta         := 23449
      ACBrBoleto1.Cedente.ContaDigito   := 4
      ACBrBoleto1.Cedente.CodigoCedente := 190926

    Obs.: No seu caso o problema acredito estar no digito da agencia e o codigo do cedente faltou um digito.

    Seguindo os dados da planilha que você postou acima.

  12. Bom dia Juliana,

    Observei a propriedade que você pediu, porém não entendi que ela funcione para o fim do assunto do post, pois ela não permite usar variações de códigos para cobrança registrada, como é o assunto em questão.

    Observe como é essa propriedade:

    TACBrCaracTitulo = (tcSimples,tcVinculada,tcCaucionada,tcDescontada,tcVendor);

    Se eu estiver enganado, favor me dizer então como usar essa propriedade para cobrança com registro no código 6.

    Caso eu esteja certo, favor analisar a solução proposta pois depois que implementei consegui ter os resultados que necessitava. O problema é que quando atualizar o componente, terei que sempre ficar alterando. Por isso se fosse possível subir seria muito bom.

    Obrigado.

    • Curtir 1
  13.  

     

    Prezados,

    Como não obtive resposta no post, resolvi fazer a implementação necessária para atender essa necessidade.

    Na unit “ACBrBoleto” criei “TipoRegCob” e na unit “ACBrBancoBanestes” na function  CalcularCampoASBACE  passo o “TipoRegCob” no lugar onde estava fixo o valor "4" fixo, onde ele poderá ter os valores 2, 3, 4, 5, 6 ou 7 de acordo como for alimentado.

    Ficou assim:

    ACBrBoleto

      TACBrTipoRegCob = (SemRegitro=2, Caucionada=3, ComRegistroTp4=4, ComRegistroTp5=5,ComRegistroTp6=6,ComRegistroTp7=7);

    ACBrBancoBanestes

     

      cLivreAsbace := copy(ACBrTitulo.NossoNumero,1,8)+
                      copy(trim(ACBrTitulo.ACBrBoleto.Cedente.Conta), 1, 11)+
                                ACBrtitulo.ACBrBoleto.Cedente.ContaDigito+
                      VarToStr(ACBrtitulo.ACBrBoleto.Cedente.TipoRegCob)+
                      IntToStrZero(fpNumero,3);

     

    No meu caso estou usando assim:

     

          case AnsiIndexStr(qryBanco.FieldByName('TIPO_REG_COB').AsString,['2','3','4','5','6','7']) of
            0: ACBrBoleto1.Cedente.TipoRegCob := SemRegitro;
            1: ACBrBoleto1.Cedente.TipoRegCob := Caucionada;
            2: ACBrBoleto1.Cedente.TipoRegCob := ComRegistroTp4;
            3: ACBrBoleto1.Cedente.TipoRegCob := ComRegistroTp5;
            4: ACBrBoleto1.Cedente.TipoRegCob := ComRegistroTp6;
            5: ACBrBoleto1.Cedente.TipoRegCob := ComRegistroTp7;
            -1: ACBrBoleto1.Cedente.TipoRegCob := SemRegitro;
          End;

     

    Sendo assim, na composição da Chave Asbase o valor estará de acordo como for alimentado.

     

    Caso queiram subir para o SVN para que outros possam usar, está em anexo as units

     

    Abraço a todos!

     

    ACBrBoleto.pas

    ACBrBancoBanestes.pas

    ACBrBancoBanestes.pas

    • Curtir 1
  14. Prezados,

     

    Alguém saberia me dizer se já foi solucionado o problema da function "CalcularCampoASBACE" no "ACBrBancoBanestes" onde o componente passa o valor "4" na posição registro sendo que este valor pode mudar de acordo com a tipo de cobrança.

    Estou olhando o manual do banestes e na página 24 diz assim:

    No BANESTES a Chave ASBACE.

    NNNNNNNNCCCCCCCCCCCR021DD

    Onde:

    NNNNNNNN --------------------------------- > Nosso Número (sem os dois dígitos).

    CCCCCCCCCCC -------------------------- > Conta Corrente.

    R                                                                   > 2- Sem registro; 3- Caucionada; 4,5,6 e 7-Cobrança com registro.

    021 --------------------------------------------- > Código do BANESTES .

    DD ---------------------------------------------- > Dígitos Verificadores.

    Isso quer dizer que o campo registro pode variar entre 2, 3, 4, 5, 6 e 7 e atualmente o componente passa 4 fixo. Como em Janeiro deste ano foi levantado esta questão, gostaria de saber se alguém já solucionou e talvez não tenham disponibilizado para subir no svn, pois estou como o componente atualizado e ainda continua com os valor 4 fixo, não possibilitando passar o tipo de cobrança desejada.

    Desde já obrigado.

    CNAB400-B.DOC

  15. Boa tarde Carlos,

    Bem vinda sua sugestão. Também senti essa necessidade.
    Pois tanto a quantidade como o valor unitário terão a formatação de casas decimais somente quando necessário.

    Sua implementação deu este bom resultado como os anexos.

    Antes

    Antes.jpg

    Depois

    Depois.jpg

    Ficou mais limpo a leitura dos valores de quantidade e valor unitário

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