Ir para conteúdo
  • Cadastre-se

cassianoBelniak

Membros
  • Total de ítens

    15
  • Registro em

  • Última visita

Tudo que cassianoBelniak postou

  1. Bom dia. Alterando a linha NossoNumero := Copy(Linha,69,5); para case CalcularTamMaximoNossoNumero(Carteira, '', rConvenioCedente) of 5: NossoNumero := Copy(Linha,69,5); 11: NossoNumero := Copy(Linha,63,11); else NossoNumero := Copy(Linha,69,5); end; na função LerRetorno400Pos6 resolve o problema das duas empresas. Att.
  2. 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.
  3. Bom dia. As primeiras posições não são o código do convênio e ao realizar a leitura do nosso número ele lê apenas 5 posições. As posições restantes são concatenadas com zeros pela função setter e em teoria sempre serão zeros. Anexei o código que configura o ACBr: codigoAcbr.pas Att.
  4. 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 Brasil o nosso número possui 11 carateres, porém no código fonte ele só lê 5 carateres: 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.
  5. 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.
  6. 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?
  7. Ele não me deixa alterar a configuração "onfiguracoes.Arquivos.IniServicos" para ''. Depois que altero o valor para uma string vazia ele volta para o valor anterior, que é a pasta do executável.
  8. 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?
  9. Bom dia Fui verificar a pasta do executável para excluir o arquivo e ele não estava lá. Então copiei o arquivo .ini que estava na pasta do ACBr pra pasta da aplicação e deu certo. Era a falta do arquivo ACBrCTeServicos.ini na pasta do executável. Muito obrigado.
  10. Boa tarde. Desculpe a demora. Já tentei instalar o ACBr tanto pelo instalador que baixei pelo site quanto pelo instalador que veio pelo SVN. Ja tentei também desinstalar pelo apagarACBr.bat. Não é um problema de instalação porque o projeto exemplo do CTe funciona. É algo do meu projeto que não consigo descobrir o que é.
  11. Bom dia, Na hora de carregar os schemas ele não tinha encontrado os arquivos, mas ai alterei a configuração e deu certo. Sobre o require, seria isso: Quando removi ele, ele parou de copilar.
  12. Fechando e abrindo o projeto, ele parou de copilar sem importar o ACBr_CTe.
  13. 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.
  14. 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.
  15. 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.