Jump to content

mlgoncalves

Membros
  • Posts

    35
  • Joined

  • Last visited

Everything posted by mlgoncalves

  1. Prezados, boa tarde! Segue a unit ACBrPagForGravarTxt.pas que contém as configurações para geração do arquivo no padrão do Banco do Brasil. Favor verificar e se julgarem pertinentes as mudanças, incluir no projeto. ACBrPagForGravarTxt.rar Atenciosamente, Marcelo
  2. Boa tarde! Segue em anexo unit ACBrPagForLerTxt.pas revisada. Por favor verifiquem e se jugarem pertinentes as alterações favor publicar. Atenciosamente, MarceloACBrPagForLerTxt.rar
  3. Obrigado pelo retorno. Ainda estamos desenvolvendo o componente para gerar arquivo do Banco do Brasil. Assim que finalizar os testes iremos subir os novos fontes. Atenciosamente, Marcelo
  4. Prezados colegas, não encontrei um grupo específico do ACBRPagFor e por isso abri este tópico aqui mesmo. Estava fazendo uns testes de leitura de arquivos de retorno e percebi que o método LerTxt estava incompleto. Então decidi fazer algumas modificações listadas na unit em anexo que parece estar funcionando corretamente. O banco que estou trabalhando o retorno é o Banco do Brasil. Ainda não revisei a geração do arquivo remessa. Quem quiser colaborar fique à vontade. Atc,Frm_ACBrPagFor_Exemplo.rar Marcelo Gonçalves Lógica da leitura dos registros no arquivo. Existem registros de segmentos diferentes (A, J, O, etc) que possuem segmentos opcionais em comum (o segmento A pode ter segmentos opcionais B e Z; o segmento J pode ter segmentos opcionais B, C, D, E, F, Z; e assim por diante. Então para fazer uma leitura correta de um TXT estou lendo a linha do segmento principal e dentro da mesma rotina continuo incrementando o índice das linhas para avançar para as próximas linhas de segmento opcional, se houver. É isso. Não sou especialista em Delphi. Fiquem à vontade para aprimorar a escrita do código. Oportunamente estou anexando o exemplo que lê os arquivos. ACBrPagForLerTxt.rar ACBrPagForConversao.rar
  5. Fernando, obrigado pelo retorno. Analisei a unit, que por sinal está bem sinalizada com as suas intervenções, mas ainda a leitura do arquivo TXT retornado do banco está incompleta. Não consigo ler o segmento opcional Z do segmento O. Você pode tentar fazer a leitura do arquivo e verificar se o segmento opcional Z foi lido? Vou enviar o arquivo em anexo. segmento o.rar
  6. Olá Fernando, estou com o mesmo problema. No meu caso o banco em questão é o Banco do Brasil. Tenho vários retornos de diversos segmentos, mas não estou conseguindo ler completamente o retorno (digo dos segmentos opcionais). Você já evoluiu nesse assunto?
  7. Olá Fernando, desculpe mas somente agora vi sua citação. Podemos então falar sobre a API do BB para boletos e outros? Já finalizei a API do SICOOB. Marcelo
  8. Olá gtvosouza, tudo bem? Estou iniciando a implementação da API do Banco do Brasil para geração de boletos. Tenho experiência no ACBRBoleto, mas não é por esse caminho que desejo seguir, mas sim pela API do banco. Você poderia compartilhar o que você já tem implementado para eu analisar? Também estou abrindo acesso técnico no SICOOB para implementação da API. Caso tenha interesse posso compartilhar o projeto. Obrigado, Marcelo.
  9. Olá, Segue em anexo a unit alterada. Atc, Marcelo. ACBrBoletoW_Caixa.pas
  10. Olá José Jr, obrigado pelo retorno. Segue mais uma sugestão para ser analisada na geração do XML webservice boleto caixa. Existe a TAG POS_VENCIMENTO onde deve-se informar o que deverá ser feito após o vencimento: protestar ou devolver o título. Na programação existente está sendo utilizado o campo 'DiasDeProtesto' para preencher a tag 'NUMERO_DIAS'. Acho que não deveria utilizar este campo para situação em que não haja protesto, pois gera inconsistência de informação na hora de imprimir o boleto. No webservice vai informação de baixa e no boleto aparece informação de protesto mesmo não havendo protesto. Segue abaixo o código original e a minha sugestão, que entendo ser mais acertada. //Versão original procedure TBoletoW_Caixa.GerarPos_Vencimento; begin if Assigned(Titulos) then with Titulos do begin Gerador.wGrupo('POS_VENCIMENTO'); if (integer(CodigoNegativacao) in [1,2]) then Gerador.wCampo(tcStr, '#14', 'ACAO ', 01, 20, 1, 'PROTESTAR', DSC_CODIGO_NEGATIVACAO) else Gerador.wCampo(tcStr, '#14', 'ACAO ', 01, 20, 1, 'DEVOLVER', DSC_CODIGO_NEGATIVACAO); Gerador.wCampo(tcInt, '#15', 'NUMERO_DIAS', 03, 03, 1, DiasDeProtesto, DSC_DIAS_PROTESTO); Gerador.wGrupo('/POS_VENCIMENTO'); end; end; //versão proposta para resolver o problema procedure TBoletoW_Caixa.GerarPos_Vencimento; var ADiasBaixaDevolucao: integer; begin if Assigned(Titulos) then with Titulos do begin Gerador.wGrupo('POS_VENCIMENTO'); if (integer(CodigoNegativacao) in [1,2]) then begin Gerador.wCampo(tcStr, '#14', 'ACAO ', 01, 20, 1, 'PROTESTAR', DSC_CODIGO_NEGATIVACAO); Gerador.wCampo(tcInt, '#15', 'NUMERO_DIAS', 03, 03, 1, DiasDeProtesto, DSC_DIAS_PROTESTO); end else begin if DataBaixa > Vencimento then ADiasBaixaDevolucao := Trunc(DataBaixa) - Trunc(Vencimento) else aDiasBaixaDevolucao := 0; Gerador.wCampo(tcStr, '#14', 'ACAO ', 01, 20, 1, 'DEVOLVER', DSC_CODIGO_NEGATIVACAO); Gerador.wCampo(tcInt, '#15', 'NUMERO_DIAS', 03, 03, 1, ADiasBaixaDevolucao, DSC_DIAS_PROTESTO); end; Gerador.wGrupo('/POS_VENCIMENTO'); end; end; Atenciosamente, Marcelo.
  11. Boa tarde! Estou colocando em produção o boleto via webservice da Caixa e encontrei algumas situações que descrevo abaixo com algumas propostas de alteração ou adaptação no código do acbr. 1) campo/tag xml 'IDENTIFICACAO_EMPRESA': entendo que neste campo deverá ser preenchido com o valor usado pela empresa(software) para identificar unicamente o boleto. Este campo é equivalente ao campo 'Seu Numero' no arquivo remessa. Acho que este campo está sendo confundido com o campo NumeroDocumento. Diante disso proponho as seguintes alterações: a) Linha 413 do arquivo ACBrBoletoW_Caixa.pas: Trocar o campo NumeroDocumento para SeuNumero Criar a constante DSC_SEU_NUMERO (isso eu não fiz no arquivo anexado) b) Linha 167 do arquivo ACBrBoletoRet_Caixa.pas Trocar o campo NumeroDocumento para SeuNumero 2) o campo ESPECIEDOC é preenchido originalmente por letras (vide a geração do arquivo remessa que converte letras para números) que identificam o seu conteúdo: DM=Duplicata mercantil/ OU=outros/ etc. Ocorre que a unit do webservice está informando diretamente o campo que gera erro. Proposta: na unit ACBrBoletoW_Caixa.pas na procedure TBoletoW_Caixa.GerarTitulo utilizar a conversão exatamente como é feito no arquivo remessa. Trecho do código: //mantendo padronização de preenchimento do campo EspecieDoc entre //as funcionalides de REMESSA e REGISTRO ON-LINE. //o campo EspecieDoc é preenchido com letras e nas respectivas funções de //REMESSA ou de REGISTRO ele é convertido para código if AnsiSameText(EspecieDoc, 'CH') then AEspecieDoc := '01' else if AnsiSameText(EspecieDoc, 'DM') then AEspecieDoc := '02' ... else AEspecieDoc := '99'; Gerador.wGrupo('TITULO'); Gerador.wCampo(tcStr, '#02', 'NOSSO_NUMERO ', 17, 17, 1, '14' + ACBrUtil.PadLeft(NossoNumero, 15, '0'), DSC_NOSSO_NUMERO); Gerador.wCampo(tcStr, '#03', 'NUMERO_DOCUMENTO', 11, 11, 1, NumeroDocumento, DSC_NUMERO_DOCUMENTO); Gerador.wCampo(tcDat, '#04', 'DATA_VENCIMENTO ', 10, 10, 1, Vencimento, DSC_DATA_VENCIMENTO); Gerador.wCampo(tcDe2, '#05', 'VALOR ', 01, 15, 1, ValorDocumento, DSC_VALOR_DOCUMENTO); Gerador.wCampo(tcStr, '#06', 'TIPO_ESPECIE ', 02, 02, 1, AEspecieDoc, DSC_TIPO_ESPECIE); 3) 'string de autenticacao': o campo NossoNumero faz parta da string de autenticação do boleto e deve iniciar obrigatoriamente com o número 14. Minha sugestão é que esse número inicial 14 seja adicionado opcionalmente caso o nosso número esteja incompleto. Trecho do código da unit ACBrBoletoW_Caixa.pas, function TBoletoW_Caixa.GerarAutenticacao var sAutenticacao, sNossoNumero: string; begin if length(NossoNumero) = 17 then sNossoNumero := NossoNumero else //adicionar o prefixo 14 no nosso número sNossoNumero := '14' + ACBrUtil.PadLeft(NossoNumero, 15, '0'); 4) geração do HASH da autenticação: sou usuário do Delphi XE6 e nesta versão o cálculo do HASH existente na função TBoletoW_Caixa.GerarAutenticacao não funciona. Recorri ao fórum do ACBR onde encontrei uma função que resolveria o problema mas ocorre que a função faz uso da units System.NetEncoding.pas e System.Hash.pas, ausentes no Delphi XE6. Para resolver o problema copiei estas units de um Delphi mais novo, ajustei as linhas que citavam algunas constantes e pronto. Ficou resolvido, conforme conta na função TBoletoW_Caixa.GerarAutenticacao. Tive de incluir as citadas units na 'uses' ficando assim: uses Classes, SysUtils, ACBrBoletoWS, pcnConversao, pcnGerador, ACBrBoletoConversao, NetEncoding, Hash; É isso. Desculpe se me enganei em algum conceito mas minha intenção é de ajudar. Não sou muito experiente em Delphi para fazer um código mais elaborado. Abaixo anexei os arquivos que modifiquei e que trouxe do Delphi 10.1. Atc, Marcelo. ACBrBoletoW_Caixa.pas ACBrBoletoRet_Caixa.pas System.NetEncoding.pas System.Hash.pas
  12. Olá Jhonlenon, tudo bem? Verifique os campos relativos ao juros de mora. No finalzinho da mensagem de exceção aparece a mensagem abaixo. SERVICO_ENTRADA/DADOS/INCLUI_BOLETO/TITULO/JUROS_MORA/DATA Outra dica é utilizar o boleto de exemplo do ACBR. Me ajudou na implementação. Atc, Marcelo
  13. Olá Jhonlenon, vou enviar os arquivos por aqui, talvez possa ajudar outros. E desde já agradeço pela colaboração nos aperfeiçoamentos.retbradesco (em produção no site).phpManual_Registro_de_Boleto_Bancario_Online_Jun17.pdfManual_Bradesco_Online.rarEnviarBoletoBradesco (em produção no delphi).pas
  14. Olá Jhonlenon, eu tenho uma rotina de transmissão de boleto via webservice, porém como o Bradesco exige assinatura digital no boleto e eu não consegui assinar através do delphi, criei uma rotina intermediária em PHP para fazer assinatura, transmissão e retorno. Funciona assim: Delphi gera arquivo JSON e envia para site (rotina PHP que pega o JSON, assina, transmite e pega retorno, e devolve retorno para o delphi). Se tiver interesse em conhecer e até mesmo aprimorar a rotina posso disponibilizar.
  15. Olá marlonapcred, eu precisei desenvolver o CNAB para o BB e utilizei o ACBrCNAB do Branches. Já está em produção. Agora, fui atualizar o branches novamente e percebi que vieram atualizações do CNAB do Banco Itaú. O ideal seria ajuntar o BB ao componente para ter apenasACBrCNAB_BB.rar um. Vou anexar o componente que customizei para o BB e veja se ajuda.
  16. Prezados, Volta e meia deparo com a necessidade de salvar boletos em arquivos PDF individuais, utilizando o componente de impressão em FastReports. Pesquisei no componente e encontrei apenas a solução usando FortesReport, e no forum não encontrei uma solução definitiva, apenas aquela convencional, de manter na lista de boletos apenas um boleto para cada salvamento. Nesse sentido fiz uma pequena modificação na unit ACBrBoletoFCFR.pas que entendo ser a solução do problema, e gostaria que os senhores avaliassem a solução e, sendo viável, que a disponibilizasse no componente. Desde já agradeço. ACBrBoletoFCFR.zip
  17. Ítalo, muito obrigado pelo esclarecimento! Após consultar alguns escritórios de contabilidade estou entendendo que o campo ALÍQUOTA DO ISS deverá mesmo ser preenchido com valor diferente de zero para empresas optantes do Simples Nacional, informando a alíquota de enquadramento da empresa no Simples Nacional. A prática que tínhamos de informar a alíquota zerada, apesar de funcional, não era a mais correta. Resolvido. Muito obrigado.
  18. Bom dia! Estou acompanhando os desenvolvimentos do webservice de cobrança e gostaria de contribuir com a documentação do Banco Santander. Como não temos muita experiência em manipular certificado digital no delphi, desenvolvemos uma aplicação que gera o boleto e que chama um programa em PHP no nosso site para assinar, transmitir pro banco e pegar retorno. O processo é muito simples e foi feito de acordo com o exemplo do próprio Santander. Segue a documentação para quem desejar desenvolver nos padrões do ACBr. Se desejar realizar testes consigo o acesso a uma conta com a cobrança XML habilitada. Cobrança XML Santander.rar
  19. Olá Juliomar, Obrigado pela dica. Fiz o deploy e localizei a unit 'pnfsNFSeW_ABRASFv1' na linha 300, que é exatamente onde se monta a tag da aliquota do ISS. Mas não vi nenhum parâmetro que force a inclusão da tag quando a aliquota estiver zerada. Nas verificações que fiz, quando a alíquota estiver zerada a função 'TGerador.wCampo' localizada na unit 'pcnGerador', está preparada para DESCARTAR a tag que estiver zerada, e aí que está o meu problema que não consegui resolver. O provedor GINFES obriga informar a tag da ALIQUOTA DO ISS mesmo para empresas do SIMPLES NACIONAL. Antes de atualizar os fontes do ACBR esta tag estava sendo enviada zerada, sem gerar erros, após a atualização esta tag está sendo omitida no XML e retornando erro do provedor dizendo da obrigatoriedade de se informar a tag do ISS. Tem alguma dica que possa me ajudar? Para contornar o problema, orientei o cliente a informar a alíquota de enquadramento do Simples Nacional, SEM CALCULAR O ISS para que pudesse autorizar a NFS-e. Desde já agradeço pelo apoio.
  20. Olá Marcos, seu cliente é optante do Simples Nacional? Se sim, estou entendendo que deverá ser informado a alíquota do ISS do seu cliente conforme consta na tabela. Eu estava informando esta alíquota zerado e começou a aparecer erro de validação. Então decidi partir para essa solução.
  21. Bom dia! Estou com um problema para autorizar NFS-e para empresa optante do Simples Nacional. Depois de atualizar o ACBR o xml passou a ser gerado está sem a tag da alíquota do ISS, o que gera erro na autorização. Fiz um teste informando alíquota com valor 2 e o valor do iss zerado e consegui autorizar. A minha pergunta é como inserir aliquota zerada no xml. Trecho de um XML autorizado... <ns4:ValorIss>0.00</ns4:ValorIss> <ns4:BaseCalculo>265.00</ns4:BaseCalculo> <ns4:Aliquota>0.0000</ns4:Aliquota> <ns4:ValorLiquidoNfse>265.00</ns4:ValorLiquidoNfse> Trecho do novo XML gerado sem a tag da Alíquota e que está gerando erro <ns4:IssRetido>2</ns4:IssRetido> <ns4:ValorIss>0.00</ns4:ValorIss> <ns4:BaseCalculo>1.00</ns4:BaseCalculo> <ns4:ValorLiquidoNfse>1.00</ns4:ValorLiquidoNfse> Desde já agradeço pela colaboração. PS. Desculpe, mas sem querer respondi a pergunta de um colega com a minha pergunta, ao invés de abrir novo tópico. Marcelo.
  22. Bom dia! Também estou com um problema semelhante para o mesmo provedor GINFES. O cliente é optante do simples nacional e o provedor exige o preenchimento da aliquota com valor zero. Porém depois de atualizar o ACBR a tag da alíquota simplesmente sumiu. Fiz um teste informando alíquota com valor 2 e o valor do iss zerado e consegui autorizar. A minha pergunta é como inserir aliquota zerada no xml. Desde já agradeço pela colaboração. Marcelo.
  23. Entendi, BigWings! Vou tentar aprimorar a minha programação.
  24. Olá BigWings, obrigado pelo retorno. Primeiramente, optei por utilizar o boleto em FastReports pela facilidade de se criar layouts de padrões diferentes, e no projeto do boleto em FastReports não encontrei a propriedade 'detalhamento'. Acredito que se for adicionado o 'detalhamento' no projeto não teria problema em utilizá-lo. Outra coisa, estava com o projeto ACBrBoleto desatualizado e por isso apareceram as diferenças que você apontou. A solicitação que estou fazendo é apenas incluir 'frxRich' na 'uses' da unit 'ACBrBoletoFCFR.PAS'. Assim torna-se possível utilizar o objeto RichText para gerar uma carta formatada. Verifique se é viável a minha solicitação. Desde já agradeço. Estou enviando a unit modificada. ACBrBoletoFCFR.pas
  25. Prezados, surgiu a necessidade de criar um boleto com uma carta anexada. Então utilizamos como base o Boleto_Carne.fr3 e montamos o Boleto_Carne_Carta.fr3 inserindo um objeto do tipo RichText que carrega em tempo de execução o arquivo .\Carta_boleto.rtf Para fazer funcionar foi necessário incluir na cláusula USES da unit ACBrBoletoFCFR.PAS a classe frxRich (vide linha 60). Será que vocês poderiam incluir a alteração da unit ACBrBoletoFCFR.PAS no projeto ACBrBoleto? Desde já agradeço pela atenção e estou anexando todos os arquivos envolvidos na implementação. ACBrBoletoFCFR.pas carta_boleto.rtf Boleto_Carne_Carta.fr3 Carta_boleto_pdf.pdf
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.