Ir para conteúdo
  • Cadastre-se

eliandro.may

Membros
  • Total de ítens

    34
  • Registro em

  • Última visita

Tudo que eliandro.may postou

  1. A partir do dia 01/01/2026 o provedor IPM passou a rejeitar notas quando não informado o código de desdobramento nacional o item de serviço. Após adicionar este adicionar o código do desdobramento nacional, a impressão da Danfe não é feita corretamente, só imprime parte do código do item de serviço e não imprime a descrição. Para corrigir isso, eu alterei a unit IPM.LerXml.pas a linha 160 para ler 6 dígitos ao invés de 4 de ItemServico[i].ItemListaServico := PadLeft(aValor, 4, '0'); para ItemServico[i].ItemListaServico := PadLeft(aValor, 6, '0');
  2. Bom dia. Certo, vou fazer isto. Na verdade, acessei lá o git deles, no endereço https://github.com/geby/synapse/blob/master/synaser.pas, e já estava alterado. Muito obrigado!
  3. Bom dia. Na verdade como não tem Tags para estes valores retornados, eu usei o ACBrAbecsPinPad.Response.GetResponseData() e tratei a string de retorno. Mais ou menos assim repeat ACBrAbecsPinPad.DSP('Passe o cartao',''); ACBrAbecsPinPad.CKE( True, True, False, False, False); Resposta:=ACBrAbecsPinPad.Response.GetResponseData(); ACKE_EVENT:=Copy(Resposta,1,1); case StrToIntDef(ACKE_EVENT,-1) of 0: begin ACKE_KEYCODE:=Copy(Resposta,2,2); if (ACKE_KEYCODE='13') then begin Loga(iINFO,'Leitura do cartao cancelada no pinpad.'); MensagemPinPad('CANCELADO'); end; end; 1: begin ACKE_TRK1LEN:=Copy(Resposta,2,2); ACKE_TRK1:=Copy(Resposta,4,StrToIntDef(ACKE_TRK1LEN,0)); Loga(iINFO,'CKE_TRK1: '+ACKE_TRK1); ACKE_TRK2LEN:=Copy(Resposta,StrToIntDef(ACKE_TRK1LEN,0)+4,2); ACKE_TRK2:=Copy(Resposta,6+StrToIntDef(ACKE_TRK1LEN,0),StrToIntDef(ACKE_TRK2LEN,0)); Loga(iINFO,'CKE_TRK2: '+ACKE_TRK2); ACKE_TRK3LEN:=Copy(Resposta,StrToIntDef(ACKE_TRK1LEN,0)+StrToIntDef(ACKE_TRK2LEN,0)+6,2); ACKE_TRK3:=Copy(Resposta,8+StrToIntDef(ACKE_TRK1LEN,0)+StrToIntDef(ACKE_TRK2LEN,0),StrToIntDef(ACKE_TRK3LEN,0)); Loga(iINFO,'CKE_TRK3: '+ACKE_TRK3); expirationDate:=FormatDateTime('yymmdd',UltimoDiaDoMes(Encodedate(StrToInt(Copy(Cartao.Trilha2,Pos('=',Cartao.Trilha2)+1,2)),StrToInt(Copy(Cartao.Trilha2,Pos('=',Cartao.Trilha2)+3,2)),1))); Loga(iINFO,'expirationDate='+expirationDate); Result:=True; end; 2: begin ACKE_ICCSTAT:=Copy(Resposta,1); Loga(iINFO,'CKE_ICCSTAT: '+ACKE_ICCSTAT); end; 3: begin AKE_CTLSSTAT:=Copy(Resposta,1); Loga(iINFO,'CKE_CTLSSTAT: '+AKE_CTLSSTAT); end; end; until ( (ACKE_KEYCODE='13') and (ACKE_EVENT='0')) or (ACKE_EVENT = '1');
  4. Opa, sim, deveria, eu acabei mexendo na última hora e esqueci de colocar ela de volta fora. Daniel Pensei em colocar o tratamento no retorno, para facilitar o uso do componente, mas, como este retorno não tem aquela definição de campos, acabei não fazendo. Mas, seria interessante retornar o tipo da resposta, e os campos já separados, como trilha1, trilha 2, quando magnético, um campo boolean quando a resposta é de remoção de cartão, ou um campo com a tecla quando for tecla.
  5. Bom dia. Tive problema com um autorizador, pois ele exigia a trilha2 completa, com os 37 bytes. Olhando o fonte do ACBrAbecsPinPad, verifiquei que ele usava o comando CEX para fazer a leitura do cartão, e neste comando, o Pinpad retorna as trilhas incompletas. Para poder ler a trilha completa, é necessário usar o comando CKE, mas como ele não está implementado nACBrAbecsPinPad.pasa ACBrAbecsPinPad.pas, e fiz isso. Segue fonte do ACBrAbecsPinPad.pas com a função CKE. Obrigado
  6. Solução. Verifiquei aqui que o problema ocorria no lock feito no Linux no componente de terceiro chamado synser.pas. Para corrigir o erro, mudei a linha 825 FLinuxLock := False; para FLinuxLock := True; do constructor TBlockSerial.Create; Ficando assim constructor TBlockSerial.Create; begin inherited create; FRaiseExcept := false; FHandle := INVALID_HANDLE_VALUE; FDevice := ''; FComNr:= PortIsClosed; {HGJ} FInstanceActive:= false; {HGJ} Fbuffer := ''; FRTSToggle := False; FMaxLineLength := 0; FTestDSR := False; FTestCTS := False; FDeadlockTimeout := 30000; FLinuxLock := True; FMaxSendBandwidth := 0; FNextSend := 0; FMaxRecvBandwidth := 0; FNextRecv := 0; FConvertLineEnd := False; SetSynaError(sOK); FRecvBuffer := 4096; FLastCR := False; FLastLF := False; FAtTimeout := 1000; FInterPacketTimeout := True; end;
  7. Boa tarde! Ainda não sei certinho o motivo, mas, em uma máquina nova, com a mesma versão do SO funcionou. Vou tentar descobrir se é algum pacote ou o que seria e deixo aqui.
  8. Bom dia. Obrigado @datilas, tentei bastante coisas aqui, e ainda nada. Você compilou para x86_64? Passou alguma definição em "Custom Options"?
  9. Opa, maravilha, pelo menos eu sei que funciona. Estava seguindo os fontes aqui, e ele acaba indo chamar as funções de serial na synaser.pas, e nela ele tenta se referenciar ao device /dev/ttyS + o número da porta. Como meus fontes estão atualizados, deve ser algum DEFINA que eu tenho errado. Vou olhar mais.
  10. Obrigado pela resposta. Você conseguiu utilizar o ACBrAbecsPinPad no Linux então? Eu tenho ele conectado, ele cria o device "/dev/ttyACM0", inclusive alterei as regras do Linux para criar o device com permissão 666. Em outras aplicações consigo comunicar certinho com o Pinpad. Só no meu teste com o ACBrAbecsPinPad que não vai. Testei com a aplicação de exemplo que vem junto com o ACBR, e também deu este erro. O único detalhe é que estou usando o Lazarus com compilador cross para gerar os binários no Windows e rodar no linux, todo o restante está funcionando, somente o ACBrAbecsPinPad que me retorna este erro.
  11. Boa tarde. Estou tentando testar o ACBrAbecsPinPad no Linux, mas, sempre que tento abrir a porta serial, retorna o erro "Communication error 9990: Unknown Error (9990)" Alguém já usou este componente no Linux?
  12. Boa tarde Juliomar. Consegui resolver a questão. Como eu já utilizo o Xvfb, que é um X virtual framebuffer, para poder rodar algumas coisas que precisam de display, o que eu fiz foi criar um service para criar um display automaticamente no inicio da máquina. E no meu vhost do apache, que aponta para o minha api, eu coloquei um SetEnv DISPLAY para o display que criei. Com isso, posso rodar cgi que fazem uso da uses Interfaces. Eu só vou separar esses cgi's em programas a parte, pois eles são muito maiores, e mais pesados, sendo dispensáveis na maioria das api's. Obrigado!
  13. Bom dia Juliomar. Obrigado pela resposta, mas deamon eu não gosto, tenho minhas api direto no apache por https, muito simples, prático e rápido, e docker, seria mais uma camada de software desnecessária, gosto das coisas o quanto mais simples melhor. Vou estudar uma forma de colocar assim no cgi. Além do que, só o fato de eu colocar a uses Interfaces, faz o aplicativo triplicar de tamanho, é um dos motivos de eu querer fazer sem ela. Se eu achar uma forma, posto aqui. Se alguém já conseguiu uma solução, eu agradeço se compartilhar.
  14. Boa noite. É possível compilar o ACBrNFSeX em uma aplicação console/cgi para Linux, usando o Lazarus, sem a necessidade de um DISPLAY definido? Estou tentando criar uma API/CGI para apache usando o ACBr, mas não estou conseguindo compilar a minha aplicação sem ter que adicionar a uses Interfaces, e tornar ele dependente da GTK.
  15. Boa tarde Italo. Já atualizei meu fontes, recompilei tudo e testei, funcionou perfeitamente. Obrigado!
  16. Bom dia Juliomar. Realmente, fiz uma pesquisa no disco, e encontrei um arquivo em uma pasta chamada publica no home dos usuários, não tenho a menor ideia de como isso foi parar lá, mas depois de removido, resolveu. Obrigado!
  17. Bom dia Italo. Fiz a alteração, mas não funcionou, o arquivo foi gerado sem da hora, e apesar de na documentação dizer que o campo não é obrigatório, o sistema recusou. Veja os anexos de envio e resposta. 21611-ger-nfse.xml 21611-lista-nfse-ger.xml
  18. Bom dia. Recentemente eu reinstalei os componentes ACBr no meu Delphi 7, e a instalação ocorreu sem erros, mas os componentes de NFSeX e DanfseX para fortes não carregam com o delphi. Ocorrem os erros das imagens anexo. Apesar disso, estou conseguindo compilar e utilizar os fontes. Outra coisa que percebi, é que o instalador para delphi 7 não está mais acrescentando os path no search path, com isso, quando se atualiza os fontes, ou quando se faz uma alteração neles, eles não são compilados mais.
  19. Atualize os fontes, e passei a ter problema na emissão de notas para o provedor IPM. Acredito ser porque no meu sistema eu não utilizo a hora da emissão do recibo, ela é sempre zero, então, o campo hora_emissao_recibo_provisorio está ficando em branco, o que provoca erro no sistema da IPM. Comparei com o fonte antigo, e vi que a linha que grava este campo foi modificada Era assim: Result.AppendChild(AddNode(tcStr, '#1', 'hora_emissao_recibo_provisorio', 1, 10, 1, FormatDateTimeBr(NFSe.DataEmissaoRps, 'hh:mm:ss'), DSC_HEMI)); Agora está assim: Result.AppendChild(AddNode(tcHor, '#1', 'hora_emissao_recibo_provisorio', 1, 10, 1, NFSe.DataEmissaoRps, DSC_HEMI)); Então, comentei ela e voltei a anterior, e aí passou a funcionar //Result.AppendChild(AddNode(tcHor, '#1', 'hora_emissao_recibo_provisorio', 1, 10, 1, // NFSe.DataEmissaoRps, DSC_HEMI)); Result.AppendChild(AddNode(tcStr, '#1', 'hora_emissao_recibo_provisorio', 1, 10, 1, FormatDateTimeBr(NFSe.DataEmissaoRps, 'hh:mm:ss'), DSC_HEMI)); Anexo seguem os arquivos de envio e de resposta que deram erro, e que funcionaram da mesma nota para conferência. 21608-lista-nfse-ger_ERRO.xml 21608-ger-nfse_ERRO.xml 21608-lista-nfse-ger.xml 21608-ger-nfse.xml
  20. Boa tarde. Desculpe-me a demora, mas atualizei os fontes, e estou tendo uma série de problemas, até vou abrir um novo tópico para eles. Segue um exemplo em pdf da versão original e da versão alterada. Obrigado! NFS-e 139 - Original.pdf NFS-e 139 - Alterada.pdf
  21. Bom dia. Estava tendo problemas na impressão de outras informações na NFSeX usando o fortes report, pois o campo comportava um número pequeno de linhas. Vendo que normalmente ainda sobrava um espaço muito grande no final do papel, aumentei o tamanho do campo, e reposicionei as labels que ficavam abaixo. ACBrNFSeXDANFSeRLRetrato.dfm
  22. Boa tarde Italo. Fiz os testes com essa alteração no ACBrNFSeXConfiguracoes, e funcionou, a única coisa diferente foi na chamada, depois de alterado o provedor, deve-se antes de carregar o XML, chamar ACBrNFSeX.SetProvedor. Então, se você pudesse colocar a alteração ACBrNFSeXConfiguracoes no SVN, seria ótimo, assim não seria necessário alterar ele cada vez que os fontes fossem atualizados. Obrigado!
  23. Boa tarde. Segue anexo. Ainda pretendo fazer um tratamento na leitura dos arquivos retornados (não fiz ainda por falta de tempo), pois para que eu consiga carregar um XML corretamente (para impressão da nota a partir do XML), estou tendo que colocar as chaves <retorno> no início e final do arquivo. Assim ACBrNFSeX.NotasFiscais.LoadFromString(XML); if (ACBrNFSeX.NotasFiscais.Count > 0) and (ACBrNFSeX.NotasFiscais.Items[0].NFSe.Numero = '') and (ACBrNFSeX.Configuracoes.Geral.Provedor in [proIPM]) and (Copy(XML,1,6)='<nfse>') then begin XML:='<retorno>'+XML+'</retorno>'; ACBrNFSeX.NotasFiscais.Clear; ACBrNFSeX.NotasFiscais.LoadFromString(XML); end; Claro. IPM.LerXml.pas
×
×
  • 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.