Ir para conteúdo
  • Cadastre-se

cassianoBelniak

Membros
  • Total de ítens

    15
  • Registro em

  • Última visita

Posts postados por cassianoBelniak

  1. Boa tarde.

    desculpe a demora em responde-lá.

    Enfim, realizei uma análise mais profunda no código e encontrei algumas coisas:

    existe a função CalcularTamanhoMaximoNossoNumero, e nessa função existe esse trecho de código:

       if (Length(trim(NossoNumero)) > 10) and
          (((wTamConvenio = 6) and ((wCarteira = '16') or (wCarteira = '18'))) or
          ((wTamConvenio = 7) and (wCarteira = '18'))) then
          Result:= 17
       else if (wTamConvenio <= 4) then
          Result := 7
       else if ((wTamConvenio > 4) and (wTamConvenio < 6)) or
               ((wTamConvenio = 6) and ((wCarteira = '12') or (wCarteira = '15') or
                (wCarteira = '17') or (wCarteira = '18'))) then
          Result := 5
       else if (wTamConvenio = 6) then
          Result := 11
       else if (wTamConvenio = 7) then
          Result := 10;

    O que significa que existem casos em que o nosso número possui tamanho 11 e em outros possui tamanho 5.

    Essa função é chamada no setter do nosso número, e é disparada na função LerRetorno400Pos6 que contém a linha:

    NossoNumero          := Copy(Linha,69,5);

    O problema é que essa linha sempre lê 5 caracteres, mesmo havendo uma condição acima que permite a inserção de Nosso número maior que 5.

    Ok, verificando o código ainda mais encontrei a função que gera o nósso número:

    function TACBrBancoBrasil.FormataNossoNumero(const ACBrTitulo :TACBrTitulo): String;
    var
      ANossoNumero, AConvenio: String;
      wTamNossoNum: Integer;
    begin
      with ACBrTitulo do
      begin
        AConvenio    := ACBrBoleto.Cedente.Convenio;
        ANossoNumero := NossoNumero;
        wTamNossoNum := CalcularTamMaximoNossoNumero(Carteira,ANossoNumero);
    
        if ((ACBrTitulo.Carteira = '16') or (ACBrTitulo.Carteira = '18')) and
            (Length(AConvenio) = 6) and (wTamNossoNum = 17) then
          ANossoNumero := PadLeft(ANossoNumero, 17, '0')
        else if Length(AConvenio) <= 4 then
          ANossoNumero := PadLeft(AConvenio, 4, '0') + PadLeft(ANossoNumero, 7, '0')
        else if (Length(AConvenio) > 4) and (Length(AConvenio) <= 6) then
          ANossoNumero := PadLeft(AConvenio, 6, '0') + PadLeft(ANossoNumero, 5, '0')
        else if (Length(AConvenio) = 7) then
          ANossoNumero := PadLeft(AConvenio, 7, '0') + RightStr(ANossoNumero, 10);
      end;
      Result := ANossoNumero;
    end;

    e realmente, ele vai concatenar o convênio se o nosso número possuir 11 carateres.

    Porém, existem casos em que o nosso número não é gerado pelo sistema mas pelo banco, como é o caso do nosso cliente.

    Dando uma olhada no fórum achei esse post: 

    Em que foi encontrado um erro que é exatamento o contrário do meu, e foi realizada a correção para que o sistema leia 5 carateres.

    A parte legal é que, sim, essa correção está correta mas agora que possuimos dois clientes em que possuiem duas confgurações semelhantes de CNAB pude ver o que está acontecendo.

    Os nossos dois clientes possuem o CNAB 400 do banco do brasil. O convênio dos dois possui 6 carateres. Porém um código de carteira 17 (qua cai na condição de numero de 5 caracteres) e o outro possui carteira 31 e tem o nosso numero gerado pelo banco (tamanho do nosso número 11). Esse segundo cliente ja gerou mais de 100000 títulos e por isso o tamanho do nosso número é maior que 5, sendo que ele não concatena o código do convênio depois.

    Antes da correção proposta pelo post, a leitura do arquivo do cliente 2 funcionava, mas a do cliente 1 não. Depois, o cliente 1 passou a ler corretamente, mas começou a dar problemas na leitura ds segunda.

    A correção que realmente deveria ser feita seria buscar qual o tamanho máximo do nosso número e dependendo do resultado, ler 5 ou 11 caracteres.

    Att.

     

    • Curtir 1
  2. Boa tarde.

    Eu não tenho certeza se esses números são o valor do convênio porque os convênio do cliente é diferente. Segundo esse layout do Banco do Brasil94652020_manual2.thumb.JPG.36c755c0c411dd6d059a72669af2eb25.JPGmanual.thumb.JPG.2ffca120e859c1dea405e29c945acf60.JPG

    o nosso número possui 11 carateres, porém no código fonte ele só lê 5 carateres:

    FONTE.thumb.JPG.eac0f532618b0f6a70a92f71871775bc.JPG

    O valor da multa pelo que verifiquei está correto mas o valor do nosso numero está sendo lido com menos carateres do que deveria.

    Ou seja, no layout ele deveria pegar 11 carateres da posição 63 mas no código fonte do ACBr ele pega 5 carateres da posição 69.

    Att.

  3. As duas primeiras linhas são:

    02RETORNO01COBRANCA       3406100006498X008355RAZAO DO CLIENTE              001BANCO DO BRASIL1207190006737                      000004811700766309                                                                                                                                                                                                                                                       000001
    100000000000000003406100006498X00835534517-1                  06117626078320003900SD 01930000000000000000 310212071934517-1   06117626078320003900200819000000600312600105037010000000000185000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018510000000000000          0000000000000000000000000000000000000000000000001050000002

    O cliente espera como "Nosso número" o valor 06117626078, mas ele retorna 26078.

    Att.

  4. Bom dia.

    Estou com uma dúvida a respeito do layout do arquivo de cobrança retornado pelo Banco do Brasil:

    O cliente que estou atendendo possui um número de convênio do banco com o formato 00XXXX (X são números diferentes de zero) e, segundo o site do Banco do Brasil (https://www.bb.com.br/pbb/pagina-inicial/aplicativos-bb/leiautes#/), o convênio é de 4 posições. Porém verifiquei no código fonte do AcBr boleto que o código de leitura do Banco do Brasil só possui a leitura do retorno do convênio de 6 e 7 posições.

    Segundo o cliente, a leitura das informações como nosso número e o valor de juros e multa estão erradas.

    O arquivo retornado possui 400 caracteres de tamanho de linha.

    O ACBr atende o layout de cobrança com convênio de 4 posições ou alguma informação do cliente esta errada?

     

  5. 4 horas atrás, Juliomar Marchetti disse:

    Mas não é necessário pois ao compilar o ACBr faz sozinho de levar embutido esse arquivo

    Em teoria sim. Mas por algum motivo que não consegui descobrir o ACBrCTeServicos.ini não estava na pasta do executável. O ACbrNFeServicos estava ali mesmo sem eu ter colocado ele manualmente.

    Tem alguma configuração manual necessária para que ao copilar, o arquivo .ini apareça na pasta do executável?

  6. Tinha adicionado as BPLs no require do projeto. Removi elas e consegui compilar sem problemas. Porém ainda não consigo enviar o evento sem acontecer o erro.

    Testei o projeto demo do Cte, só alterando o tipo de evento pra 'tePrestDesacordo' ao invés do evento de cancelamento. Ele só deu erro depois na hora de carregar os schemas, mas vendo pelo debug ele passou pela linha que dava problema no meu projeto sem dar erro.

  7. Apaguei a pasta com os arquivos do ACBr, baixei o instalador pelo site,  baixei os pacotes pelo SVN (todos eles) e instalei os pacotes.

    Removi os arquivos do requires da bpl e inclui eles de novo, da pasta certa. Inclui "ACBr_CTE", "ACBr_synapse" e  "ACBr_PCNComum"

    O search path da bpl está vazio.

    Os designs packages estão apontando para a pasta correta.

    Recopilei o projeto.

    O erro continua.

  8. Bom dia.

    Estou tendo problemas para enviar o evento de desacordo do CTe.

    O projeto copila corretamente e consigo abrir o programa sem problemas. A classe ACBrCTe é instanciada e eu defino os dados do desacordo nela.

    O problema acontece ao chamar a função "aCBrCTe.EnviarEvento(lote)". Quando chamo ela aparece a mensagem "Resource ACBRCTeServicos not found".

    Já tentei executar o "apagarAcbr.bat" e o "ACBRInstall_Trunk2.exe". Também já tentei jogar os arquivos "ACBrCTeServicos.ini", "ACBrCTeServicos.res", "ACBrCTeServicos.rc" como sugerido nesse post: https://www.projetoacbr.com.br/forum/topic/22287-resouce-acbrnfeservicos-not-found-ao-testar-o-acbrnfe/ na pasta do ACBrDFe. Também já tentei excluir os arquivos "ACBr_DFeComum.res", "ACBr_Comum.res" e "ACBr_CTe.res" e copilar pela IDE.

    Estou usando Delphi 10.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.