Ir para conteúdo
  • Cadastre-se

lucasbelkys

Membros
  • Total de ítens

    63
  • Registro em

  • Última visita

Tudo que lucasbelkys postou

  1. Caros Colegas, Meu estado exige que o cancelamento de transação seja impresso em CCD, acredito que por conta de possibilidade de cancelamento do cupom, pois se emitido um relatório gerencial ou leitura x, não dá para cancelar o cupom em questão. Então alguém saberia a solução ? Alguém saberia a Procedure que devo alterar nos fontes do ACBrTEFD ? Ou seria melhor trabalhar fora do componente ? Qualquer ajuda agradeço. Lucas Belkys
  2. Boa noite a todos. Acontece algo muito estranho. Meu PAF é específico para bares, restaurantes e similares. Qnd enfim o sistema vai emitir o cupom da mesa, um Loop lança item a item, sendo que quando ele chega ao ultimo item, ele reinicia o loop por asssim dizer, ou seja, ele começa a lançar o primeiro item e vai até o ultimo novamente. dobrando assim o valor do cupom, sendo que no log do ACBR nao mostra a duplicação dos comandos. Verifiquei a estrutura do LOOP, nao vi nada errado. Alguém ? abs.
  3. Estou tendo problemas na hora da reducao Z nas impressoras Epson. Aumente o timeout, tire do bloco try except, mas nada resolveu, alguem ? Agradeco por qualquer ajudar.
  4. Como vc fez para tratar o COO Inicial usando ACBrECF.DadosUltimaReducaoZ? Você armazena o COO do primeiro documento impresso ? abs Eu tenho uma rotina de controle que efetua a abertura do dia, nela é impresso uma leitura X, ao executar essa rotina eu emito a X e gravo o COO, como sendo o primeiro do dia. Imaginei! terei que fazer o mesmo cara, porque usando ACBrECF.DadosReducaoZ estou tendo problemas, o retorno vem vazio. Eu uso uma variável do tipo TStringList e depois uso o SavetoFile no formato .INI, que entao depois é lido e gravado no DB. Utilizando ACBrECF.DadosUltimaReducaoZ o único problema é o COO inicial. Bom, vlw pelo retorno, vou fazer como você faz; ou melhor, vou incrementar o COO após a redução Z. ou seja, o COO inicial da próxima redução Z será o COO da redução atual+1, acha algum impecílio nisso ? abraço
  5. Como vc fez para tratar o COO Inicial usando ACBrECF.DadosUltimaReducaoZ? Você armazena o COO do primeiro documento impresso ? abs
  6. Companheiros, Devo tá esquecendo de algum detalhe, pois alimento os parametros do componente desse registro, mas simplesmente o C300 não entra no arquivo gerado. Alguém poderia postar um pequeno código funcionante ? Abraço e obrigado por qualquer ajuda.
  7. companheiro, isso é o que eu chamo de PRÓ-ATIVIDADE! surpreendeu... vou testar e qualquer mudança, commit nela. flw.
  8. sim, a idéia é consultar por marca e por versão do SB, no resultado final um LOOP tenta chegar no ECF em questão comparando a string retornada pelo ACBr com a string do cadastro nacional de ECF's. Não acha viável companheiro ?
  9. Talvez eu faça a compatibilização de um cadastro, com a string retornada pelo ACBR, vai depender do meu tempo aqui.. caso faça, eu disponibilizo pra todos. Ou entao um algorítimo para encontrar o ECF por probabilidade, ou seja, as strings não são exatas, mas são parecidas. Jogo um LIKE e no resultado final faço mais um filtro. Sacou? Abraço.
  10. Alguem já implementou a consulta automática do ECF num DB com todos os ECFs ? Por exemplo: no momento da inserção do ECF na tabela de "EcfsAutorizados", consultar seu código nacional automaticamente. Inclusive porque no PAF esse dados é necessário para gerar o arquivo "MovimentoPorECf" após Redução Z. Alguém ? Vlw
  11. Obrigado. Seguinte, não sei se essa modificação foi necessária, é necessário que vc entenda o que eu fiz. Mas homologuei com o código como tá abaixo: procedure TACBrTEFDClass.ImprimirRelatorio; Var I,J : Integer; TempoInicio : TDateTime ; ImpressaoOk, RemoverMsg, GerencialAberto : Boolean ; Est : AnsiChar ; ArqBackup : String ; ImagemComprovante : TStringList ; begin VerificarIniciouRequisicao; if Resp.QtdLinhasComprovante < 1 then exit ; GravaLog( Name +' ImprimirRelatorio: '+Req.Header ); CopiarResposta ; ImpressaoOk := False ; RemoverMsg := False ; TempoInicio := now ; J := 0 ; with TACBrTEFD( Owner ) do begin try BloquearMouseTeclado( True ); while not ImpressaoOk do begin try try Est := EstadoECF; if Est <> 'L' then begin { Fecha Vinculado ou Gerencial ou Cupom, se ficou algum aberto por Desligamento } case Est of 'C' : begin ComandarECF( opeFechaVinculado ); Inc(J); //tentativas de impressao //alterado por lucas belkys end; 'G','R' : begin ComandarECF( opeFechaGerencial ); GerencialAberto:=false; //alterado por lucas belkys end; 'V','P','N' : ComandarECF( opeCancelaCupom ); end; if EstadoECF <> 'L' then raise EACBrTEFDECF.Create( ACBrStr('ECF não está LIVRE') ) ; end; GerencialAberto := False ; TempoInicio := now ; if Self.Resp.TextoEspecialOperador <> '' then begin RemoverMsg := True ; DoExibeMsg( opmExibirMsgOperador, Self.Resp.TextoEspecialOperador ) ; end; if Self.Resp.TextoEspecialCliente <> '' then begin RemoverMsg := True ; DoExibeMsg( opmExibirMsgCliente, Self.Resp.TextoEspecialCliente ) ; end; I := 1 ; while I <= self.NumVias do begin if I = 1 then ImagemComprovante := Self.Resp.ImagemComprovante1aVia else ImagemComprovante := Self.Resp.ImagemComprovante2aVia ; if ImagemComprovante.Count > 0 then begin if not GerencialAberto then begin ComandarECF( opeAbreGerencial ) ; if J>0 //se ja houve tentativas anteriores zera o contador "I". then I := 0 ; //alterado por lucas belkys GerencialAberto := True; end else begin if I <> 1 then ComandarECF( opePulaLinhas ) ; DoExibeMsg( opmDestaqueVia, 'Destaque a 1ª Via') ; end ; ECFImprimeVia( trGerencial, I, ImagemComprovante ) end ; Inc( I ) ; end; if GerencialAberto then ComandarECF( opeFechaGerencial ); ImpressaoOk := True ; finally { Removendo a mensagem do Operador } if RemoverMsg then begin { Verifica se Mensagem Ficou pelo menos por 5 segundos } if ImpressaoOk then begin while SecondsBetween(now,TempoInicio) < 5 do begin Sleep(EsperaSleep) ; Application.ProcessMessages; end; end; DoExibeMsg( opmRemoverMsgOperador, '' ) ; DoExibeMsg( opmRemoverMsgCliente, '' ) ; end; end; except on EACBrTEFDECF do ImpressaoOk := False ; else raise ; end; if not ImpressaoOk then begin if DoExibeMsg( opmYesNo, 'Impressora não responde'+sLineBreak+ 'Tentar novamente ?') <> mrYes then break ; end; end; finally { Enviando CNF ou NCN e apagando Arquivo de Backup } ArqBackup := Resp.ArqBackup ; while FileExists( ArqBackup ) do begin try if ImpressaoOk then self.CNF else self.NCN ; except end; DeleteFile( ArqBackup ) ; end ; BloquearMouseTeclado( False ); end ; if not ImpressaoOk then raise EACBrTEFDECF.Create( ACBrStr('Impressão de Relatório Falhou' ) ) ; end; end;
  12. na verdade não precisei mudar nada. eu me precipitei ao postar esse código. na verdade eu exclui a pasta ACBR do meu PC, que estava toda mexida, e fiz o download novamente, e ficou tudo beleza.
  13. Tive que mudar essa procedure (a inteção foi tratar abertura da tampa por vááárias vezes seguidas): procedure TACBrTEFDClass.ImprimirRelatorio; Var I : Integer; TempoInicio : TDateTime ; ImpressaoOk, RemoverMsg, GerencialAberto : Boolean ; Est : AnsiChar ; ArqBackup : String ; ImagemComprovante : TStringList ; begin VerificarIniciouRequisicao; if Resp.QtdLinhasComprovante < 1 then exit ; GravaLog( Name +' ImprimirRelatorio: '+Req.Header ); CopiarResposta ; ImpressaoOk := False ; RemoverMsg := False ; TempoInicio := now ; with TACBrTEFD( Owner ) do begin try BloquearMouseTeclado( True ); while not ImpressaoOk do begin try try Est := EstadoECF; if Est <> 'L' then begin { Fecha Vinculado ou Gerencial ou Cupom, se ficou algum aberto por Desligamento } case Est of 'C' : ComandarECF( opeFechaVinculado ); 'G','R' : begin ComandarECF( opeFechaGerencial ); [color=#FF0000]GerencialAberto:=false; //alterado por lucas belkys[/color] end; 'V','P','N' : ComandarECF( opeCancelaCupom ); end; if EstadoECF <> 'L' then raise EACBrTEFDECF.Create( ACBrStr('ECF não está LIVRE') ) ; end; GerencialAberto := False ; TempoInicio := now ; if Self.Resp.TextoEspecialOperador <> '' then begin RemoverMsg := True ; DoExibeMsg( opmExibirMsgOperador, Self.Resp.TextoEspecialOperador ) ; end; if Self.Resp.TextoEspecialCliente <> '' then begin RemoverMsg := True ; DoExibeMsg( opmExibirMsgCliente, Self.Resp.TextoEspecialCliente ) ; end; I := 1 ; while I <= self.NumVias do begin if I = 1 then ImagemComprovante := Self.Resp.ImagemComprovante1aVia else ImagemComprovante := Self.Resp.ImagemComprovante2aVia ; if ImagemComprovante.Count > 0 then begin if not GerencialAberto then begin ComandarECF( opeAbreGerencial ) ; [color=#FF0000]I := 0 ; //alterado por lucas belkys[/color] GerencialAberto := True; end else begin if I <> 1 then ComandarECF( opePulaLinhas ) ; DoExibeMsg( opmDestaqueVia, 'Destaque a '+IntToStr(I)+'ª Via') ; end ; ECFImprimeVia( trGerencial, I, ImagemComprovante ) end ; Inc( I ) ; end; if GerencialAberto then ComandarECF( opeFechaGerencial ); [color=#FF0000] if ImagemComprovante.Count=0 //alterado por lucas belkys then ImpressaoOk := True ;[/color] finally { Removendo a mensagem do Operador } if RemoverMsg then begin { Verifica se Mensagem Ficou pelo menos por 5 segundos } if ImpressaoOk then begin while SecondsBetween(now,TempoInicio) < 5 do begin Sleep(EsperaSleep) ; Application.ProcessMessages; end; end; DoExibeMsg( opmRemoverMsgOperador, '' ) ; DoExibeMsg( opmRemoverMsgCliente, '' ) ; end; end; except on EACBrTEFDECF do ImpressaoOk := False ; else raise ; end; if not ImpressaoOk then begin if DoExibeMsg( opmYesNo, 'Impressora não responde'+sLineBreak+ 'Tentar novamente ?') <> mrYes then break ; end; end; finally { Enviando CNF ou NCN e apagando Arquivo de Backup } ArqBackup := Resp.ArqBackup ; while FileExists( ArqBackup ) do begin try if ImpressaoOk then self.CNF else self.NCN ; except end; DeleteFile( ArqBackup ) ; end ; BloquearMouseTeclado( False ); end ; if not ImpressaoOk then raise EACBrTEFDECF.Create( ACBrStr('Impressão de Relatório Falhou' ) ) ; end;
  14. Companheiros que passaram por tal processo, é o seguinte: se a homologação é da AC com o GP, pode haver ainda assim, necessidade de mexar no código da AC ? Imagino que pode ser que uma bandeira peça um teste que outra não peça, mas além disso há alguma modificação na AC ? Outra coisa, depois de homologado no Discado, a AC com o ACBRTEFD já fica compatível com o TEF Dedicado VesPague e ClisiTEF ? Grato.
  15. lucasbelkys

    Clisitef

    Nesse TEF tem duas modalidades técnicas: DLL e troca de arquivos, qual é utilizada no ACBRTEFD ? Obrigado
  16. Continue contrubuindo com a comunidade, parabéns. .
  17. Companheiro, quando citei a expressão "desencontro", me referi a situação onde o ACBrTEFD bloqueia os dispositivos de input e em seguida o componente ACBrECF lança uma pergunta de 'retry' ao usuário, no caso do desligamento do ECF durante a impressao de um CCD por exemplo, impossibilitando o usuário interagir com a máquina. Note que depois do 'retry' do ACBrECF, entra o retry do ACBrTEFD. Isso acontece porque como vc disse, não houve tentativa de encontro (não é uma crítica ao projeto). Depois da minha homologação irei mexer no código e "comitar" essa "tentativa de encontro". Abraço.
  18. Você tem razão, mas ambos os componentes acessam a impressora, acesso direto (ACBrECF) e acesso indireto (ECBrTEFD), e ambos possuem "código de retry", o que o nosso companheiro acima está "reclamando" e que não foi muito claro na explicação, eu só entendi porque tive o mesmo problema, é que há um desencontro no bloqueio de mouse/teclado, impossibilitando o usuário interagir com a AC.
  19. Companheiro Xispito, Isso estava me acontecendo até 3h atrás, até expus essa dificuldade no fórum, mas nada. O Retentar do ACBrECF é bem interessante deixar TRUE. Eu para não ter que perder essa funcionalidade do componente, fiz o seguinte: em tempo de execução: ACBrECF1.Retentar:=false; //quando você for usar o ACBrTEFD ACBrECF1.Retentar:=true; //quando você não estiver usando. {de repente você pode usar nos eventos do próprio ACBrTEFD} Boa sorte.
  20. Diz o roteiro: "Efetuar uma nova venda com valor diferente da transação anterior . Na tela do GP não escolher Administradora. Ir até a pasta Teste e copiar o arquivo Intpos.001 que está nela e colocar na pasta RESP (C:tef_dial\resp). Esse arquivo (Intpos.001) ao ser colado na pasta RESP deve ser apagado, pois a AC deve identificar que o conteúdo do campo 001-000 é diferente do arquivo Intpos.001 que está na pasta REQ (C:\tef_Dial\Req). Após realizar esse procedimento por diversas vezes, abra o arquivo Intpos.001 que a AC gerou na pasta REQ (C:\tef_dial\req) e copie o valor que consta no campo 001-000 dele. Depois abra o arquivo Intpos.001 copiado para a pasta teste e substitua o valor do campo 001-000 copiado do Intpos.001 da REQ. Copie o arquivo Intpos.001 da pasta teste para a para RESP (C:\tef_dial\resp). A AC deverá realizar a impressão normalmente, visto que o valor do campo 001-000 retornado é igual ao que enviou ( Obs.: a AC deverá verificar apenas o campo 001-000 para fazer a impressão do comprovante TEF)." O problema é que feito essa situação a coisa emperra na mensagem do componente "O Gerenciador Padrão não está ativo e será ativado automaticamente!". Daí o fluxo do programa é interrompido, ou seja, nada mais acontece. Alguém ? vlw Roteiro Pré-Certificação_Abril2010.rar
  21. Companheiros, No roteiro de pré-certificação, no teste 7 diz: Venda com cartão. Antes de receber a resposta da transação, desligar o ECF no cupom fiscal antes de totalizá-lo. não confirmar a transação. Obs.: AC poderá fazer tratamento de queda de energia apresentando ao operador “Impressora não responde. Tentar novamente? Sim/Não ou poderá cancelar a transação TEF automaticamente, enviando NCN. Sendo que antes da mensagem “Impressora não responde. Tentar novamente?" aparece a mensagem: "A Impressora MFD não está Pronta. Deseja tentar novamente?" Sendo que o problema é que o teclado e o mouse continuam travados, ou seja, o usuário não tem como decidir. Alguém sabe onde é disparada essa mensagem no código fonte do ACBR para eu incluir a linha de "destravateclado" ? Ou então alguma solução? Acho que isso esteja acontecendo pq o controle de bloqueio e desbloqueio está por conta do ACBrTEFD e a mensagem última é do ACBrECF. O que me dizem ? Obrigado.
  22. lucasbelkys

    TEFComandaECF

    Nesse evento tem a operação opeSubTotalizaCupom, que é disparado depois da primeira requisição, sendo que no meu caso, todo cupom tem um acrescimo de 10% (gorjeta). Daí o TEFD não aceita valor acima do valor do cupom, até entao o cupom não foi totalizado com o acrescimo, pois estou deixando o TEFD controlar tudo. Como faço Companheiros? O jeito seria tirar parte do controle do componente, ou seja, deixar só as impressoes?
×
×
  • 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.