Ir para conteúdo
  • Cadastre-se

Valdir Dill

Membros Pro
  • Total de ítens

    931
  • Registro em

  • Última visita

  • Days Won

    5

Tudo que Valdir Dill postou

  1. Bom dia, Certo, entendi. Estamos conseguindo progredir. Na verdade os fontes deles (Gertec) são em Delphi 5, acredita? Não dá para entender como uma empresa que ganha tanto dinheiro vendendo hardware não é capaz de uma simples atualização de fontes. Atualizar a cada década já estaria bom, rs. Mas assim que tivermos as rotinas prontas, vamos disponibilizar aqui o código para ajudar quem precisar. Já conseguimos fazer o emulador se comunicar com o server. Agora é só questão de ajustes. Obrigado!
  2. Boa tarde A documentação deles é um pouco confusa. Ao mesmo tempo que diz que o layout do nosso número deve ser AABnnnnnD (arquivo Sicredi_Pag_108.pn anexo) , ou seja, no padrão que sempre foi, o mesmo manual mostra o json que retornará outro padrão para nosso número, caso este não seja informado. Vide arquivo Sicredi_Json_Ret_API_Pag_36.png anexo. Também anexo e o boleto solicitado. Não consegui anexar o manual porque ele excede 1 MB. Note que o boleto anexado tem o nosso número 00002. A impressão ficam assim no .pdf da Sicredi: 60/000002-1. Se eu aplicar esse número (00002) para o Acbr imprimir. Será impresso assim: 24/200002-4. Obrigado!
  3. Bom dia Não entendi muito bem sua resposta @Daniel Simoes Eu não tenho um projeto pronto que possa enviar para ser analisado. Deixe-me detalhar melhor sobre minha colocação anterior sobre o Monitor. Veja se fica mais claro: como eu vi num outro post aqui que, no Monitor tem as rotinas para uso do busca preço, mas o Monitor é desenvolvido em Lazarus e, como nós só trabalhamos com o Delphi, não temos como abrir esse projeto do monitor para compilar/analisar. Por isso perguntei em quais arquivos .pas da \Projetos\ACBrMonitorPLUS\Lazarus estariam as rotinas do busca preço. Aí abriríamos esses arquivos aqui para estudar as rotinas e, assim talvez, desenvolver as mesmas rotinas no Delphi. Obrigado
  4. Bom dia, Estamos precisando integrar nossa aplicação com o busca preços Gertec G2 E. No portal da Gertec, encontramos apenas um exemplo em Delphi, mas é muito antigo e não roda mais no Delphi atual. Vários bugs. Tentamos contato direto com a Gertec e nada conseguimos. Alguém usa esse ou outro modelo Gertec integrado e poderia nos dar uma luz? Há algum código fonte que algum colega possa compartilhar ou vender? Vi um post aqui no fórum falando que no Acbr Monitor teria um exemplo de código fonte, mas é em Lazarus. Qual a(s) units(s) desse código têm essas rotinas de exemplo? De repente conseguimos adaptar no Delphi. Enfim, qualquer dica ajuda, rs. Obrigado!
  5. Boa tarde, Fizemos a integração da API da Sicredi e estamos registrando boletos normalmente. Porém, na nossa requisição à API, não enviamos o nosso número e deixamos ela gerar esse dado automaticamente. Funciona tudo normal. Num exemplo prático de um boleto gerado dessa forma, o nossoNumero retornou com o seguinte valor: 600000009, ou seja, com 9 dígitos e sem formatação. Se baixarmos o .pdf disponibilizado pela API, ele vem impresso assim mesmo 600000009. Mas queremos imprimir os boletos off line na nossa aplicação, sem ter que baixar o .pdf cada vez. Para isso, usamos usando as rotinas do Acbr com Fortes e alimentamos os dados como se fosse um boleto com remessa. O problema que estamos enfrentando é que, ao alimetnar o valor do nosso número no componente, ou seja, ACBrTitulo1.NossoNumero := '600000009', o componente acusa erro q o tamanho máximo do nosso numero é 5. Existe alguma forma de quem sabe eu informar o valor do nosso número e o Acbr usar esse dado de forma literal e o Acbr não rejeitar para que seja possível imprimir da forma que precisamos? Obrigado!
  6. Bom dia, De fato, o problema era a versão que não estava sendo setada. Obrigado
  7. Bom dia, A opção de consultar cadastro do demo Acbr é para estar funcionando? Fiz um teste e deu erro. Print anexo. Obrigado!
  8. Não, no código Acbr não mexi. Apenas pesquisei para ver se tinha alguma rotina para transformar a octet-stream que retorna, em um arquivo .pdf. Essa mexida no código Acbr foi o @DevSolucaoSistemasque fez, lá no início do ano passado quando ele abriu esse post. Mas depois não teve mais continuidade. O arquivo .txt com a stream que retorna da Sicredi eu anexei na minha postagem anterior (há pouco). O que eu precisaria é de uma rotina (em Delphi) para salvar essa stream em arquivo .pdf, entende? Obrigado
  9. Boa tarde, Sim @Juliomar Marchetti, eu havia notado que o post é bastante antigo. Mas como não encontramos nada a respeito do assunto (e já pesquisamos um bocado nos últimos dias), resolvemos arriscar perguntando aqui no post do amigo. Vai que...rs. No componente não tem opção para tratar retorno pdf da Sicred. Já virei os fontes de ponta cabeça e não encontrei. Talvez a questão seja até simples de resolver, e seja eu que não esteja achando o fio da meada. Veja se podes me ajudar com alguma dica, por gentileza. É assim: o que ocorre é que a Sicredi, no caso da requisição do .pdf, ela retorna uma octet-stream, conforme arquivo que estou anexando a este post. O meu problema é que não estou sabendo como fazer para gerar o arquivo .pdf com essa stream, entende? Qualquer sugestão ajuda, rs. Obrigado! retPdf.txt
  10. Bom dia, @DevSolucaoSistemas Conseguistes algum progresso em relação a gerar o arquivo .pdf com a octet-stream retornada pela API Sicredi? Se sim, por gentileza, compartilha conosco, pois nós, e com certeza outros, estão com o mesma dificuldade. Obrigado!
  11. Bom dia, Resolvido. Baixado o arquivo (sem frase de segurança) e funcionou perfeito! Obrigado
  12. Ah, perfeito. Vamos tentar isso e retornaremos com os resultados. Obrigado!
  13. Boa tarde Boa tarde, Sim, como eu havia dito, eu fiz um teste com o outro arquivo .key que gerei pelo demo Acbr, e esse arquivo tem na primeira linha o "-----BEGIN RSA PRIVATE KEY-----". Esse arquivo não dá erro ao carregá-lo no Demo. Mas o arquivo .key que vem do banco é esse que anexei e, ao carregá-lo, dá o erro. Por favor, faça um teste configurando no componente o arquivo Key (Sem frase de segurança)... Não entendi muito bem. Pode, por gentileza, detalhar mais como eu faria esse teste? Obrigado!
  14. Bom dia, Estamos tendo erro "bad decrypt" ao carregar (no demo Acbr) o arquivo de chave privada (.key. Arquivo .key e print do erro, em anexo. Esse arquivo foi gerado no portal do Sicredi, assim como o .cer. Fiz um teste gerando um arquivo de chave privada pelo demo do Acbr. Este é carregado sem erros. Alguma sugestão do que pode ser esse problema? Obrigado api-pix-pix_max.key
  15. Sim, eu concordo que ao varrer uma lista, deve ser verificado antes o seu count. A boa prática de código seria essa. Mas note que o código (na rotina completa que coloquei) só pega o index 0 se ACBrPixCD1.PSP.epCob.CobCompleta.status = stcCONCLUIDA. E veja também (no .txt que anexei) que, no momento em que ocorre a exceção, em ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON tem sim um PIX. Então, se status = stcCONCLUIDA e ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON contém retorno de um PIX pago, o ACBrPixCD1.PSP.epCob.CobCompleta.pix.count não deveria estar necessariamente > 0? Obrigado!
  16. Bom dia, Estamos tendo um erro na hora de confirmar se um PIX dinâmico, banco Inter, foi pago. Gostaria de ajuda para ver se há alguma coisa errada em nosso código ou se pode ser algum problema no componente. O que ocorre é que são gerados e confirmados 6, 7, ...PIX ou mais, tudo normal, ou seja, é gerado o qrCode e depois a confirmação. Porém, aleatoriamente acontece um erro. Como eu disse, vários PIX processam normalmente e, de repente, um deles dá problema, sem que nada diferente seja feito em relação aos PIX anteriores que processaram corretamente. A consulta é feita por um timer com interval de 5 segundos. O erro é: "Argument out of range". Acreditamos (não temos certeza porque não há como debbugar) que ocorra nessas linhas de nosso código: begin VRetorno.FValorPago := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].valor; VRetorno.FEndToEnd := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].endToEndId; end; O código todo de tratamento da confirmação é este: try if not ACBrPixCD1.PSP.epCob.ConsultarCobrancaImediata(VID_PIXGerado) then //se não conseguiu fazer a consulta. begin TimerConsultarPIX.Enabled := false; VRetorno.FStatus := stcNENHUM; VRetorno.FErro := 'Não foi possível efetuar a consulta.'; end else begin VRetorno.FStatus := ACBrPixCD1.PSP.epCob.CobCompleta.status; if VRetorno.FStatus <> stcATIVA then //se estivar ativa, ou seja, se não foi paga nem baixada, não sai. begin TimerConsultarPIX.Enabled := false; if VRetorno.FStatus = stcCONCLUIDA then begin VRetorno.FValorPago := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].valor; VRetorno.FEndToEnd := ACBrPixCD1.PSP.epCob.CobCompleta.pix[0].endToEndId; end else ChamaErro('O PIX mudou status, mas não foi pago. Seu status está: ' + PIXStatusCobrancaToString(VRetorno.FStatus)); end; end; except on e:exception do begin TimerConsultarPIX.Enabled := false; VMsg := 'Ocorreu um erro ao tentar buscar o status de pagamento do PIX.'; VMsg := VMsg + '- exception: ' + e.message + sLineBreak + '- Status do PIX: ' + PIXStatusCobrancaToString(VRetorno.FStatus); if NaoEstaVazio(ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON) then VMsg := VMsg + sLineBreak + '- Json retornado: ' + ACBrPixCD1.PSP.epCob.CobCompleta.AsJSON; WriteToTXT(VG.FDirTemp + 'logPIX.txt', VMsg, false); ChamaErro(VMsg); end; end; Ou tem alguma coisa que estamos fazendo errado (o tempo do timer talvez?), ou, em algum momento o componente se perde e não alimenta a lista do ACBrPixCD1.PSP.epCob.CobCompleta.pix[0], pois a consulta retorna tudo certo no, conforme dá para ver no arquivo logPIX.txt que é gravado e estou anexando aqui. Obrigado logPIX.txt
  17. Deixe-me se entendi a sugestão e me ajudem colocar isso em um código, por favor. no evento ACBrTEFAPI1QuandoPerguntarMenu eu faria: - if szPrompt = "DATA 1 PARCELA:" then VIDentificadorGuardadoDataPrimeiraParcela := wIdentificador - if szPrompt = "VALOR 1 PARCELA:" then VIDentificadorGuardadoValorPrimeiraParcela := wIdentificador aí, no final da operação faço: DataPrimeiraParcela := ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(VIDentificadorGuardadoDataPrimeiraParcela) ValorPrimeiraParcela := ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(VIDentificadorGuardadoValorPrimeiraParcela) Seria isso? Obrigado!
  18. Boa noite, Obrigado @EMBarbosa as acho que você não entendeu bem nossa dúvida/dificuldade. Vou tentar explicar melhor. Bem, em primeiro lugar, é preciso registrar que, na verdade os eventos que você sugere seriam os QuandoPerguntarCampo e QuandoPerguntarMenu. Obs.: estamos falando do TEF PayGo, ok? Mas a questão não é onde (quando) pegar esses dados e sim, COMO pegar. Qual a rotina/método usar? Por exemplo, se eu quiser saber a quantidade de parcelas, vou ler: ACBrTEFAPI1.UltimaRespostaTEF.LeInformacao(PWINFO_INSTALLMENTS), certo? Mas COMO ler, por exemplo, o valor e vencimento da parcela 02 dessa transação que eu mencionei na abertura deste post? Os parâmetros PWINFO_INSTALLMDATE e PWINFO_INSTALLM1AMT trazem o vencimento e valor, mas é apenas da entrada (acredito que seja a primeira parcela). Mas e as parcelas 2, 3, ...? Como faço para obter seus dados? Obs.: eu já havia relatado essa situação no Discord e o @Daniel Simoes me orientou a abrir um post aqui no fórum para uma melhor análise. Obrigado
  19. Bom dia, Estamos tentando implementar a opção de recebimento no TEF com cartão de débito com mais de 1 parcela. Em anexo enviamos os arquivos de log para análise, se necessário. A operação realizada e que consta no log foi: - Cartão débito - 3 parcelas - Valor total: R$ 10,00 Ao iniciar o processamento, o TEF faz as perguntas: 1) Se a primeira parcela será à vista: foi respondido que não; 2) Se as parcelas serão iguais: respondido que não; Por conta dessa resposta, o TEF pergunta o valor e vencimento de cada parcela. Foi informado assim: - Parcela 01: R$ 2,00; vencimento: 05/01/24 - Parcela 02: R$ 3,00; vencimento: 10/01/24 - Parcela 03: R$ 5,00; vencimento: 15/01/24 A questão que não estamos conseguindo fazer é capturar os dados dessas parcelas. Como é uma informação que o operador vai digitar na tela do TEF, precisamos capturar essa lista de parcelas após a operação ser autorizada, para podermos gravar no banco de dados da nossa aplicação. Como fazer essa captura? Em anexo arquivos de log e também comprovante impresso da transação. Obrigado! comms_231221.log Log21122023.txt ppsers_231221.log
  20. Sim, exatamente essa foi a intenção do post, informar para que a questão seja analisada e, se for o caso, aplicada a correção. Obrigado!
  21. Sim sim, exatamente por causa das dll estarem na pasta é que o Acbr está carregando elas e, quando as carrega, ocorre o problema. Entendo perfeitamente essa questão das .dll openSSL e que o Acbr buscará na pasta do .exe. Já usamos isso há vários anos, rs. A questão é simples: com dlls versão 1.1, tudo certo. Com dlls versão 3.0, vai dar esse erro. Acredito que você fizer esse teste aí, vai acontecer o erro também, pois aconteceu com vários usuários nossos. Assim que colocamos as novas dlls na pasta, o problema ocorreu. Voltamos as dlls 1.1, o problema foi sanado. Lembrando que só ocorre se usar assim: FAcbrNota.SSL.DadosPFX := ... Se alimentar o número de série, ou buscando o .pfx do arquivo, o problema não acontece. Obrigado!
  22. Bom dia, Assim como sempre fizemos, estamos alimentando os dados do certificado no componente com uma stream gravada no BD de nossa aplicação. Desta forma: TBlobField(FDSFiscais.FieldByName('CERT_DADOSPFX')).SaveToStream(VStream); FAcbrNota.SSL.DadosPFX := VStream.DataString; Sempre funcionou e continua funcionando. Porém, com as openSSL versão 3 não funciona. Após alimentar os dados no componente e se tenta verificar o CNPJ AcbrNFe1.SSL.CertCNPJ ocorre o erro em anexo. Repito: a mesma rotina, mas utilizando as openSSL 1.1, não ocorre nenhum erro.
  23. Boa tarde, No programa de exemplo não ocorre. Vamos investigar melhor o que pode ser. Obrigado
  24. Bom dia, Não sei se pode ser algo na nossa aplicação, mas já fuçamos em tudo e não conseguimos detectar qual é a causa. Ao imprimir uma DANFSe na tela (ACBrNFSeXDANFSeRL1.MostraPreview= true) , ocorre o access violation ao destruir o RLReportPreview. Na linha indicada no print anexo Alguma sugestão? Obrigado!
  25. Sim Italo eu li seu post. Na verdade li, reli e reli de novo, rs. Justamente para não postar algo errado aqui, rs. Mas acho que você não viu meu post direito (ou então estou ficando doido, rs). Veja aí no primeiro parágrafo que eu falo da consulta do evento usando apenas a chave. Essa consulta, naquele seu post, diz que está funcionando tudo ok, mas aqui não está. Essa última linha que coloquei dizendo que dá esse erro é uma outra consulta que só relatei pois nessa o componente gera o xml, mas dá o erro. Só incluí esse relato para demonstrar que estou fazendo pelo demo do acbr e que setei corretamente a pasta de salvamento. Mas vamos esquecer essa consulta que dá erro então. Vamos nos ater apenas a primeira parte desta minha resposta anterior, ou seja, da consulta de evento apenas com a chave (sem código de evento e sem a sequência). Nessa consulta, o sistema salva apenas esses 2 arquivos .json que mencionei. Nenhum XML é salvo, entende?
×
×
  • 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.