mlgoncalves
Membros-
Total de ítens
73 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que mlgoncalves postou
-
Boleto Santander - Nosso Número com ou sem dígito verificador
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Mas questionar o que, exatamente? No banco existe exatamente o que foi enviado. Não vejo o que questionar. Se enviar Nosso Número com DV fica com DV no banco (o DV é incluído automaticamente na geração do CNAB400), se enviar nosso número sem DV fica sem DV no banco (é o que ocorre na API, onde o DV deveria ser gerado automaticamente, mas não é). Se mantiver essa situação no componente, deverei alterar a programação no meu sistema para: .... NossoNumero recebe próximo número da sequencia; se banco_santanter e transmissao_via_API então calcular o dígito verificador e adicionar no final do NossoNumero fimse; .... Não acho que isso deveria acontecer. -
Boleto Santander - Nosso Número com ou sem dígito verificador
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Consultei os boletos diretamente no site do banco Santander: 1424 0000000148890 18.000,00 F33108 0000000148911 3.336,91 1424 0000000149187 18.000,00 29112 0000000148938 1.952,24 3110 0000000149080 2.303,50 F32120 0000000149098 3.433,91 F35120 0000000149101 5.183,73 3110 0000000149110 2.303,50 40120 0000000149128 5.092,07 <<<---Até aqui os boletos tinham sido enviados pelo CNAB400, depois usando a API os boletos ficaram sem o dígito verificador. F35120 0000000014923 8.117,71 F35120 0000000014924 6.521,23 33109 0000000014925 3.096,08 3148 0000000014926 5.771,17 2997 0000000014927 3.141,57 3181 0000000014928 2.248,87 F9120 0000000014929 9.927,83 33110 0000000014930 1.349,70 312 0000000014931 2.600,00 -
Boleto Santander - Nosso Número com ou sem dígito verificador
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Bom dia! A documentação da API dos boletos está em https://developer.santander.com.br/api/documentacao/api-de-emissao-de-boletos#/ Nela não descreve como deve ser montado o Nosso Número (banknumber) mas somente como deve ser preenchido. bankNumber string required Nosso Número do boleto >= 1 characters<= 13 characters Example: 123 Match pattern: ^[0-9]{1,13}$ O único local que encontrei onde descreve sobre o campo é no manual citado acima. Então entendo que existe apenas uma definição para o campo. Então o componente do ACBr não deveria ter o mesmo comportamento para o campo independente do canal de transmissão utilizado? -
Boleto Santander - Nosso Número com ou sem dígito verificador
um tópico no fórum postou mlgoncalves ACBrBoleto
Pessoal, boa noite! Esta semana implementei o uso de API de enviar boletos para o banco Santander. Até então utilizava o envio de arquivo remessa CNAB400. Ocorre que tive um problema na leitura do nosso número retornado do banco, estava cortando o último dígito do nosso número que tinha enviado. Após estudar a rotina do CNAB400 e o JSON do boleto percebi que existem diferenças entre elas na montagem do nosso número e é exatamente aí que gerou o problema, que estou propondo agora que seja corrigido. 1) Vamos direto ao ponto. No manual do Santander (em anexo) diz assim: >> Nota 3: Forma de cálculo do dígito de controle >> Nosso número >> Campo opcional. Se igual a zeros, o sistema de cobrança do Banco atribuirá automaticamente o nosso número, se não for igual a zeros, observar instruções abaixo: >> Composição >> NNNNNNN-D onde: >>NNNNNNN = Faixa seqüencial de 0000001 a 9999999. D = Dígito Verificador. Significa que o nosso número é um numero sequencial seguido de um dígito verificador. 2) O gerador do arquivo CNAB400 ao anotar o nosso número adiciona o digito verificador, ou seja, o NossoNumero do componente é alimentado com o número sequencial e o próprio componente se encarrega de adicionar o dígito verificador completando assim a informação do nosso número, conforme descrito no manual (7 dígitos para o número sequencial e 1 dígito para o dígito verificador). Trecho da unit ACBrBancoSantander que mostra o descrito acima e que está de acordo com o manual: wLinha:= '1' + // 1- ID Registro IfThen(Cedente.TipoInscricao = pJuridica,'02','01') + // 2 a 3 PadLeft(trim(OnlyNumber(Cedente.CNPJCPF)),14,'0') + // 4 a 17 PadRight(trim(Cedente.CodigoTransmissao),20,'0') + // 18 a 37 PadRight( SeuNumero ,25,' ') + // 38 a 62 PadLeft(RightStr(NossoNumero,7),7,'0') + DigitoNossoNumero + // 63 a 70 IfThen(DataAbatimento < EncodeDate(2000,01,01), '000000', FormatDateTime( 'ddmmyy', DataAbatimento)) + // 71 a 76 3) Quando no retorno dos dados do banco, arquivo retorno, o nosso número ocupa exatamente as mesmas posições da remessa, ou seja, 63 a 70. Então o componente do ACBr, unit ACBrBancoSantander, ao ler o retorno faz a seguinte atribuição que também está coerente com o que foi feito na remessa: ... with Titulo do begin SeuNumero := copy(Linha,38,25); NossoNumero := Copy(Linha,63,07); Carteira := Copy(Linha,108,1); ... Nessa atribuição do NossoNumero, o componente descartou o último dígito (dígito verificador) mantendo apenas a primeira parte do nosso número, que é o número sequencial. Então tanto a REMESSA CNAB400 quando o RETORNO CNAB400 estão coerentes no tratamento do campo NossoNumero. 4) Vamos ao problema: ao gerar o JSON de envio pro branco, o componente está gerando o nosso número incompleto, ou seja, não está incluindo o dígito verificador como era de se esperar. O banco não confere se o último dígito é ou não o verificador, simplesmente acata em seu sistema, e no arquivo retorno CNAB400 esse mesmo número incompleto ocupa as 8 posições previstas no layout (um 0 (zero) foi acrescentado à esquerda) e o componente do ACBr descarta o último dígito como se fosse o dígito verificador, no momento da atribuição para a propriedade NossoNumero, ficando o NossoNumero errado no compomente. Diante do exposto, entendendo que existe uma divergência na geração da informação do nosso número nos dois processos de envio de boleto, CNAB400 e API, sugiro corrigir a unit ACBrBoletoW_Santander_API, na linha 484, para acrescentar o dígito verificador que falta: Json.Add('bankNumber').Value.AsString := NossoNumero + ATitulo.ACBrBoleto.Banco.CalcularDigitoVerificador(ATitulo); e corrigir a unit ACBrBoletoRet_Santander_API no tratamento do nosso número retornado, removendo o dígito verificador das diversas linhas da unit, como no exemplo: ARetornoWS.DadosRet.IDBoleto.NossoNum := copy(LJSONObject.AsString['bankNumber'], 1, length(LJSONObject.AsString['bankNumber']) -1); Desse modo tudo fica logicamente correto, o NossoNumero enviado ao banco tanto pelo CNAB400 quanto pela API é retornado no CNAB400 e o componente lê e preenche corretamente a propriedade NossoNumero no momento do retorno, permitindo o uso padronizado para clientes com envios de boleto em canais diferentes. Anexei as units já modificadas. Diante disso, solicito que sejam validadas minhas considerações e atualizado o SVN caso sejam aprovadas. Atc, Marcelo Gonçalves ACBrBoletoRet_Santander_API.pas ACBrBoletoW_Santander_API.pas Layout CNAB 400 posições Out de 2009.pdf -
API Boleto Sicoob - Erro na leitura do JSON retornado da consulta
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Bom dia! Realmente, eles trataram desse assunto lá. Aproveitei para conferir e o SVN já está atualizado. Obrigado, e pode fechar o tópico. -
API Boleto Sicoob - Erro na leitura do JSON retornado da consulta
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Bom dia! Desculpe, mas esqueci de detalhar o problema, então vamos lá. 1) svn atualizado 2) O tópico sugerido não se refere ao problema detectado. 3) Segue o detalhamento do erro. Na linha 130 da unit ACBrBoletoRet_Bancoob.pas está dando erro de excessão porque no JSON retornado o campo 'resultado' é outro JSON e não um array de JSON. Linha com erro: aJsonViolacoes := aJson.Values['resultado'].AsArray; Proposta de correção, testar se o campo resultado é um array antes de obter o valor. if aJson.Values['resultado'].IsJsonArray('resultado') then begin aJsonViolacoes := aJson.Values['resultado'].AsArray; ... Favor validar a proposta de correção e, estando de acordo, confirmar no SVN. Atenciosamente, Marcelo -
API Boleto Sicoob - Erro na leitura do JSON retornado da consulta
um tópico no fórum postou mlgoncalves ACBrBoleto
Boa tarde! Está dando erro na leitura do JSON retornado de uma consulta. Fizemos a devida correção que estamos anexando neste chamado, para que seja analisada e ratificada. Atenciosamente, Marcelo.ACBrBoletoRet_Bancoob.rar -
Ajustes WEBFISCO/FGMAISS para Prefeitura de Três Rios
mlgoncalves replied to mlgoncalves's tópico in ACBrNFSe
Pessoal bom dia! Muito obrigado, Ítalo! Conferi as alterações e está tudo certo. Parabéns mais uma vez pelo excelente trabalho de vocês. Podem encerrar o tópico. Marcelo. -
Ajustes WEBFISCO/FGMAISS para Prefeitura de Três Rios
um tópico no fórum postou mlgoncalves ACBrNFSe
Olá pessoal, Estamos implantando a emissão da NFS-e para a prefeitura de Três Rios/RJ e durante o desenvolvimento tivemos de fazer uns ajustes no ACBrNFSeX para o perfeito funcionamento da integração, e solicitamos que esses ajustes sejam revisados e incorporados no componente. Provedor: WEBFISCO / FGMAISS Units: 1) WebFisco.GravarXml.pas Completar preenchimento do XML com IR e CSLL NFSeNode.AppendChild(AddNode(tcDe2, '#', 'irrf', 1, 12, 1, NFSe.Servico.Valores.ValorIr, '', True, xAtrib)); NFSeNode.AppendChild(AddNode(tcDe2, '#', 'csll', 1, 12, 1, NFSe.Servico.Valores.ValorCsll, '', True, xAtrib)); 2) WebFisco.LerXml.pas Atribuir o ID da NFS-e retornada, que é chave utilizada para consultas no provedor InfID.ID := ObterConteudo(ANode.Childrens.FindAnyNs('nfecontrole'), tcStr); 3) FGMaiss.Provider.pas Corrigir a URL informando a porta 443 de acesso Result := 'https://www1.fgmaiss.com.br:443/issqn/wservice/'; Segue em anexo as units modificadas Atenciosamente, Marcelo Gonçalves FGMaiss.Provider.pas WebFisco.GravarXml.pas WebFisco.LerXml.pas -
Erro na leitura do código de barras do boleto
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Pessoal, obrigado pelo retorno. Segui a orieBoletos IMPRESSOS FastReports teste código de barras.rarntação do Alexandre de Paula e consegui ler no APP SICOOB a maioria dos códigos de barras impresso dos diversos layouts FastReports e FortsReports. Usando um leitor NoNus a experiência foi péssima onde não foram lidos a maioria dos códigos de barras e os que foram lidos foi com muita paciência. Ainda, seguindo a dica do Renato Rubinho, fiz experiências com resolução em 100%, 120% e 150% para os boletos do FastReports usando FoxIt e não consegui ler nenhum boleto, exceto o boleto carnê em resolução mais alta, sendo que em 100% não foi possível fazer a leitura. Finalmente a conclusão que consegui chegar foi de que se depender da leitura do código de barras para efetuar o pagamento, o usuário vai ficar estressado. Outro ponto que está fora de prática é imprimir boleto para pagar. Muitos usuários estão lendo o código de barras (ou pelo menos tentando ler) diretamente do monitor. É isso aí. Estou anexando os testes com os boletos impressos somente do FastReports. Do FortsReports o APP do Sicoob leu quase todos e o leitor Nonu não leu quase nenhum. Por mim podem fechar o tópico. -
Pessoal, boa tarde! Um cliente entrou em contato reclamando que não conseguia ler o código de barras do boleto. Fizemos testes aqui no escritório e também não conseguimos ler a maioria dos códigos de barras dos diversos layouts de boletos existentes. Investimos um tempinho para fazer testes e abaixo segue o resultado. Definições: 1) Utilizamos o programa de exemplo do acbr para gerar os boletos e fazer os testes 2) Não imprimimos os boletos. Os códigos de barras foram lidos diretamente na tela do preview do programa de exemplo e também do leitor de pdfs FoxIt 3) Utilizamos o APP do SICOOB para fazer as leituras. Conclusões dos testes 4) Testamos todos os layouts do FastReports e somente no BoletoCarne foi que conseguimos ler o código de barras 5) Testamos todos os layouts do FortesReports e conseguimos ler o código de barras em quase todos os layouts, exceto no layout BoletoA5 que não conseguimos ler. Estamos anexando todos os boletos dos testes gerados no FastReposts e apenas o boleto do FortsReports que deu problema. Pergunta: O que pode estar ocorrendo e como resolver isso? Ficamos no aguardo. Atenciosamente, Marcelo Gonçalves Boletos FortsReports teste código de barras.rar Boletos FastReports teste código de barras.rar
-
Consultoria para converter API funcionando no PostMan em Delphi
mlgoncalves replied to mlgoncalves's tópico in Classificados
Obrigado, senhores! Conseguimos implementar a codificação. Marcelo -
Boa tarde, Renato! Depuramos a rotina e descobrimos que o problema está na falta da URL do serviço de ConsultarNFSeRps no arquivo ACBrNFSeXServicos.ini conforme abaixo: ProConsultarNFSeRps=https://www1.fgmaiss.com.br:443/issqn/wservice/wsnfeconsultaxml.php Segue em anexo o arquivo corrigido. Obrigado pelo retorno. Marcelo.ACBrNFSeXServicos.ini
-
Olá pessoal, Ao clicar no botão de Consultar NFS-e por RPS do programa de exemplo, está dando o erro abaixo. Já o botão Consultar NFS-e por Número está funcionando corretamente. O que pode estar ocorrendo? OpenSSL 1.1.1j 16 Feb 2021 01.01.01.0AF C:\WINDOWS\SYSTEM32\libcrypto-1_1.dll C:\WINDOWS\SYSTEM32\libssl-1_1.dll ------------------------------ Requisição Ambiente : 1 Cidade : Tres Rios/RJ Provedor : FGMaiss Versão: 1.00 Data/Hora: 11/12/2023 21:32:38 Método Executado: Consultar NFSe Por Rps Parâmetros de Envio Numero do Rps : 1 Série do Rps : 1 Parâmetros de Retorno Numero do Lote: Numero do Prot: Situação : Data : 30/12/1899 Desc. Situação: ID Nota : Link : Sucesso : False Erro(s): Código : X999 Mensagem: Erro de Conexão: Erro Interno: 12005 Erro HTTP: 0 URL: * Erro: 12005 - Falha abrindo Conexão HTTP. Erro: 12005 - Correção: ---------
-
Consultoria para converter API funcionando no PostMan em Delphi
um tópico no fórum postou mlgoncalves Classificados
Prezados, boa noite! Precisamos de consultoria para implementar em Delphi o consumo de API do Banco Itaú que está funcionando no PostMan, e ainda algumas dicas sobre API. Fico no aguardo. Marcelo -
Prezados, bom dia! Quando enviamos um boleto já registrado anteriormente é retornado um JSON com a mensagem de erro que não está sendo devidamente tratado no componente. Fizemos o ajuste e anexamos aqui a unit para validação. Exemplo de JSON retornado: { "codigo": "", "mensagem": "Erro na validação de Campos", "detalhes": [{ "codigo": "", "mensagem": { "campo": "COD-RET", "mensagem": "Título já cadastrado na cobrança", "valor": "" } } ] } Atenciosamente, Marcelo Gonçalves ACBrBoletoRet_Itau.rar
-
Evento Cancelamento de Pedido - OpenDelivery
mlgoncalves replied to mlgoncalves's tópico in Dúvidas Gerais sobre o ACBr
Boa noite! Resolvido. O problema estava na conversão da string acentuada para UTF8. Obrigado. Solução: Removido os acentos da string "reason" {"reason":"Texto livre indicando motivo da operacao","code":"UNAVAILABLE_ITEM","mode":"AUTO","outOfStockItems":[],"invalidItems":[]} -
Evento Cancelamento de Pedido - OpenDelivery
um tópico no fórum postou mlgoncalves Dúvidas Gerais sobre o ACBr
Pessoal, bom dia! Não estou conseguindo utilizar o evento de cancelamento de pedido do OpenDelivery. Está dando erro no retorno e eu não consegui entender e resolver o problema. Vocês poderiam me ajudar? No postman está funcionando corretamente. ENDPOINT conferido: https://api.deliveryvip.com.br/merchant/v3/orders/0580de97-27fc-4388-b7e1-3339a5279c16/requestCancellation JSON gerado pelo ACBROpenDelivery que funciona corretamente no postman: {"reason":"Texto livre indicando motivo da operação","code":"UNAVAILABLE_ITEM","mode":"AUTO","outOfStockItems":[],"invalidItems":[]} RETORNADO: {"status":400,"error":"Bad Request"} No aguardo. Atc, Marcelo Gonçalves -
Boleto Sicoob via WebService - GerarJuros JSON
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Olá pessoal, O código do juros continua errado. Segue a unit corrigida. Atenciosamente, ACBrBoletoW_Bancoob.pas -
Conferido e ok. Utilizar a mesma lógica no preenchimento de SeuNumero em outras partes da Unit. Segue em anexo unit corrigida. Atenciosamente, ACBrBoletoW_Bancoob.pas
-
Obrigado. Conferido ok.
-
Olá Victor, na alteração ficou faltando uma correção. Segue a UNIT corrigida Marcelo ACBrBoletoRet_Bancoob.pas
-
Olá Victor, Como saber se um boleto foi ou não registrado no banco Sicoob? Resposta: quando o codigo do objeto status estiver preenchido com 200; ou ACBrBoleto.Enviar retornar false. Como disse no post de abertura desse tópico, o Sicoob retorna sempre o código 207 (quando a comunicação é feita com sucesso) para boleto registrado ou não registrado, que retorna TRUE na função ACBrBoleto.Enviar Então não pode consultar esse valor retornado como indicador de registro de boleto. Entendo que a outra forma seria consultar a lista ListaRejeicao que, se contiver linha preenchida indicará o motivo da rejeição. Se não tiver linha preenchida indicará que o boleto foi registrado com sucesso. Nesse sentido estou anexando a Unit com a proposta de modificação. Agora, caso vocês interpretem uma lógica diferente, onde o programador deverá consultar obrigatoriamente a ListaRejeicao para saber se o boleto foi ou não registrado no banco, mesmo assim será necessário corrigir a programação que alimenta a lista pois não está funcionando corretamente. Estou anexando também um exemplo de retorno. No aguardo. retorno_boleto_registrado.json ACBrBoletoRet_Bancoob.pas
-
Boleto Sicoob via WebService - GerarJuros JSON
mlgoncalves replied to mlgoncalves's tópico in ACBrBoleto
Olá pessoal, Segue a Unit modificada. Atenciosamente, ACBrBoletoW_Bancoob.pas -
Olá Pessoal, Desculpe mas passei informação errada sobre o campo SeuNumero no banco Sicoob. Somente descobri quando peguei hoje o arquivo Retorno. O campo SeuNumero no Sicoob contém o número do documento a que o boleto se refere (ex. NF.393939, etc) que também é impresso no boleto. É um campo alfanumérico e é retornado nas posições 59 a 73 do segmento T do CNAB240. >> Entendo que o campo SeuNumero do Sicoob corresponde ao campo NumeroDocumento do ACBrBoleto. O campo identificacaoBoletoEmpresa no Sicoob é para ser utilizado pelo ERP anotando o ID do boleto, por exemplo e não é impresso no boleto. Também é um campo alfanumérico e é retornado nas posições 106 a 130 do segmento T do CNAB240. >> Entendo que o campo identificacaoBoletoEmpresa do Sicoob corresponde ao campo SeuNumero do ACBrBoleto. Segue abaixo a Unit modificada. Atenciosamente, ACBrBoletoW_Bancoob.pas