Ir para conteúdo
  • Cadastre-se

lucasbelkys

Membros
  • Total de ítens

    63
  • Registro em

  • Última visita

Tudo que lucasbelkys postou

  1. companheiro, isso é o que eu chamo de PRÓ-ATIVIDADE! surpreendeu... vou testar e qualquer mudança, commit nela. flw.
  2. 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 ?
  3. 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.
  4. 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
  5. 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;
  6. 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.
  7. 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;
  8. 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.
  9. VLW companheiro.
  10. lucasbelkys

    Clisitef

    Nesse TEF tem duas modalidades técnicas: DLL e troca de arquivos, qual é utilizada no ACBRTEFD ? Obrigado
  11. Continue contrubuindo com a comunidade, parabéns. .
  12. valeu, desculpa a vergonha que eu passei. haha
  13. 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.
  14. 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.
  15. 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.
  16. 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
  17. Já resolvi. Vlw.
  18. 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.
  19. 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?
  20. Desculpa fugir tanto do escopo do tópico, mas.. Teria aí algum companheiro que já fez o agendamento, mas não tem tanta pressa na certificação e teria interesse em negociar a data? Estou em apuros. Valeu. [MODERAÇÃO] Título foi ajustado para esclarecer melhor objetivo do tópico. EMBarbosa
  21. Companheiros, se eu deixar por conta do componente, ele irá conceber todas aquelas regras da certificação? tipo queda de energia, etc... NCN e CNC (em caso de multiplos cartoes). Estou perguntando mas já imaginando que sim. Só para eu não gastar tempo testando. Agradeço por qualquer informação.
  22. lucasbelkys

    2ª Via do CCD

    { *** Se estiver usando ACBrECF... Lembre-se de configurar *** ACBrECF1.MaxLinhasBuffer := 3; // Os homologadores permitem no máximo // Impressao de 3 em 3 linhas ACBrECF1.LinhasEntreCupons := 7; // (ajuste conforme o seu ECF) NOTA: ACBrECF nao possui comando para imprimir a 2a via do CCD } Companheiros, o ACBrECF não possui comando para imprimir a 2ª via do CCD, ok, nesse caso é só repetir o comando ? ex: ACBrECF1.LinhaCupomVinculado(ImagemComprovante.Text+#13+#10+#13+#10+#13+#10+#13+#10+#13+#10+#13+#10); frmAvisoTEF.lblStatus.Caption:='Destaque a 1ª Via !'; frmAvisoTEF.Refresh; ACBrECF1.CortaPapel(true); Sleep(3000); ACBrECF1.LinhaCupomVinculado(ImagemComprovante.Text); Posso imprimir todos os comprovantes dos cartoes multiplos num mesmo CCD ou todos os modelos de ECF permitem emitar mais de 1 CCD por cupom fiscal ? Obrigado por qualquer esclarecimento. Abraço.
  23. Não sei se aqui é o lugar para postar esse tipo de informação, mas.... Na Procedure TACBrEAD.CalcularModuloeExpoente( var Modulo, Expoente : AnsiString ); da erro quando tento compilar o projeto: Record, object or class type required. Foi depois que eu atualizei os fontes via SVN.. resolvi mudando a linha de BN_print( Bio , fsKey.pkey.rsa.e); para BN_print( Bio , fsKey.pkey.rsa);
  24. perfeito. aula de delphi inclusive.
  25. Alguém sabe como posso fazer para usar as funções da DLL somente quando for conveniente ? Terei que desativar o ACBR para reconectar o aplicativo ao ECF pela DLL ? Tentei isso mas deu erros toscos. Obrigado.
×
×
  • 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.