Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 4720 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Escrevi uma rotina pra logar as Reduções Z da seguinte forma:


    AssignFile(LogRedZ, ExtractFilePath(Application.ExeName) + '\Log\RedZ-' + FormatDateTime('yyyymmdd',gdtMovimento) + '.log');

    Rewrite(LogRedZ);

    WriteLn(LogRedZ, ' <<>>>>>>> Dados da Redução ANTES da REDUÇÃO Z ser comandada <<<<<<<>>');

    ACBrECF1.Ativar;

    Write(LogRedZ, ACBrECF1.DadosReducaoZ);

    WriteLn(LogRedZ, '');

    WriteLn(LogRedZ, '');

    WriteLn(LogRedZ, ' <<>>>>>>> Dados da Redução DEPOIS da REDUÇÃO Z ser comandada <<<<<<<>>');

    ACBrECF1.ReducaoZ;

    Write(LogRedZ, ACBrECF1.DadosReducaoZ);

    CloseFile(LogRedZ);

    ACBrECF1.Desativar;

Apenas em alguns logs aparece o "DEPOIS", e a Red. Z na impressora é feita normalmente...

Postado

O método ACBrECF1.DadosReducaoZ deve sempre ser chamado antes de emitir a redução Z, se emitido depois as informações são zeradas.

Acho que você não entendeu.

O problema é que não é gravada a segunda parte, é como se após comandada a redução Z fosse abortada a procedure.

E pior, não é sempre, pois tem vezes que tem as duas partes do log (antes e depois da red z).

Postado

Use um Try Except e faça o tratamento do Erro (exception) levantado

Está dentro de um try/except.... não da erro algum, só não executa o restante da procedure... sinistro...

Postado

isso é o correto... Se houver exception em: ACBrECF1.DadosReducaoZ o resto das linhas nunca será executado...

Acontece assim:

1 - No arquivo de log aparece as informações do primeiro ACBrECF1.DadosReducaoZ, portanto o metodo foi executado corretamente.

2 - É chamado o metodo ACBrECF1.ReducaoZ, pois o comando é executado na Impressora Fiscal.

3 - As veses grava e as vezes não no log a segunda chamada a ACBrECF1.DadosReducaoZ. É como se abortasse a execução da procedure logo após a chamada a ACBrECF1.ReducaoZ (vezes sim, vezes não).

  • Moderadores
Postado

Funciona assim,

Utilize ACBrECF1.DadosReducaoZ para obter os dados da redução Z antes de executar o método ACBrECF1.ReducaoZ, se executar depois ele realmente sai em branco, sem nada.

Utilize ACBrECF1.DadosUltimaReducaoZ para obter os dados da redução Z depois de emitida a Redução Z.

Essa é a forma correta de utilizar os métodos.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado

Acho que entendi o problema...

no caso o log "Depois da Redução Z ser comandada" hora é gravada e hora não é... é isso mesmo?

Caso seja, em um teste aqui que eu precisei fazer algo parecido com oq vc fez (executar um determinado comando após a redução z) aconteceu a mesma coisa.

O que deu pra entender (no meu caso) é que mesmo quando a impressora está emitindo a redução z, em um determinado momento (não sei se por problema do ecf ou do acbr) o status passa a ficar livre, que teoricamente a redução estaria impressa, e ao tentar executar o próximo comando (procedure) na impressora, por ela ainda está imprimindo a redução z, mostraria status como ocupado e daria um erro.

Ass. Vially Israel

  • Fundadores
Postado

Sim, isso é possível... pois a redução Z é demorada, e o tempo pode variar...

O ACBrECF implementa em cada classe um mecanismo para saber se o ECF está ocupado, imprimindo... Geralmente isso é feito solicitando o flag de Satus ou ainda a Data/hora do ECF... se o mesmo não for capaz de responder, ele (ACBrECF) entende que o ECF está ocupado imprimindo

Pode ser que o ECF tenha sido capaz de responder a essa solicitação entre o término da Impressão do relatório e no inicio da impressão do BitMap

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Daniel foi o que me veio na cabeça também, eu acho que quando ela termina de imprimir os dados da redução z e vai começar a imprimir o bitmap nessa fração de segundos a impressora fica livre e volta a fica ocupada.

Mas isso é tempo suficiente para um teste retornar status livre

Ass. Vially Israel

Postado

Eu acho que vai depender do tamanho do bitmap, quando é apenas um "quadrado" parece (não lembro, eu fiz o teste a um bom tempo) que dá certo, mas quando são vários (o que é comum na bematech) já não da mais certo.

Ass. Vially Israel

  • Membros Pro
Postado

Se no caso for gerado uma exception de access violation, posso ser que o problema seja o seguinte. No evento OnBobinaAdicionaLinhas do ACBrECF, estaja igual ao demo que tem o seguinte código:


  WB_LoadHTML(wbBobina, mBobina.Text);

  Application.ProcessMessages ;


  WB_ScrollToBottom(wbBobina);

Que serve justamente para simular a bobina da impressora.

Mas provavelmente você esteja passando um TWebBrowser (wbBobina) que não foi criado ou instanciado, dai o exception.

Mas isso se você utilizar esse comando para reproduzir sua bobina.

Postado

O meu problema é que chamo ACBrECF1.DadosReducaoZ para pegar os dados necessários para SINTEGRA e SPED, chamo uma rotina que insere numa tabela (firebird) e aproveito pra salvar num txt, chamo ACBrECF1.ReducaoZ e a impressora emite a Red Z de boa, na sequencia eu leio novamente ACBrECF1.DadosReducaoZ e gravo no txt, meio que como uma prova de que foi executada msm.

Isso tudo ta dentro de um bloco try/except, se sair sem erros é chamado o commit pra gravar as informações no DB.

Não da erro algum, nada aparece no log (txt) nem na tela da aplicação. Pro operador parece ter dado tudo certo, mais os dados não foram comitados no DB e a segunda parte do log, ou seja, a segunda vez que chamo ACBrECF1.DadosReducaoZ e gravo no txt simplesmente não aparece.

Como já disse em post anterior, parece que durente o processo de execução da Red Z a procedure que a chamou é abortada...

Uma informação que fiquei sabendo esses dias é que o Cliente usa um "adaptador usb" pra ligar a Impressora Fiscal e um PINPAD (TEF) na mesma porta...

De longe fica muito difícil debugar, sou de Curitiba/PR e o Cliente está em Goiás

  • Consultores
Postado

Olá Dante,

Não há uma possibilidade de algum dos comandos do ACBrECF gerar uma exceção (Exception) mas seu software não estar logando a mesma? Pergunto pois tive um problema parecido mas com o Firebird. Ele não conseguia abrir a porta de eventos e gerava erro na aplicação só no modo debugger. Foi difícil descobrir o erro, mas conseguimos verificando o arquivo firebird.log na pasta do Firebird.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Moderadores
Postado

O meu problema é que chamo ACBrECF1.DadosReducaoZ para pegar os dados necessários para SINTEGRA e SPED, chamo uma rotina que insere numa tabela (firebird) e aproveito pra salvar num txt, chamo ACBrECF1.ReducaoZ e a impressora emite a Red Z de boa, na sequencia eu leio novamente ACBrECF1.DadosReducaoZ e gravo no txt, meio que como uma prova de que foi executada msm.

Isso tudo ta dentro de um bloco try/except, se sair sem erros é chamado o commit pra gravar as informações no DB.

Não da erro algum, nada aparece no log (txt) nem na tela da aplicação. Pro operador parece ter dado tudo certo, mais os dados não foram comitados no DB e a segunda parte do log, ou seja, a segunda vez que chamo ACBrECF1.DadosReducaoZ e gravo no txt simplesmente não aparece.

Como já disse em post anterior, parece que durente o processo de execução da Red Z a procedure que a chamou é abortada...

Uma informação que fiquei sabendo esses dias é que o Cliente usa um "adaptador usb" pra ligar a Impressora Fiscal e um PINPAD (TEF) na mesma porta...

De longe fica muito difícil debugar, sou de Curitiba/PR e o Cliente está em Goiás

Após emitir a redução Z vc deve chamar o comando ACBrECF.DadosUltimaReducaoZ.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.xpos.com.br
Postado

Após emitir a redução Z vc deve chamar o comando ACBrECF.DadosUltimaReducaoZ.

Devo entender que o meu problema é que estou chamando uma segunda vez a mesma função e não deveria faze-lo... é isso?

Eu entendi que, para obter os valores da ultima redução Z deve-se chamar "DadosUltimaReducaoZ" e não "DadosReducaoZ" como estou fazendo, mais meu objetivo era ter uma leitura com os dados antes da redução e depois uma leitura depois, a que traz os dados zerados mesmo, como uma prova em TXT que o comando foi executado com sucesso.

Dada a forma da ultima resposta eu poderia pensar que o fato de eu chamar uma segunda vez "DadosReducaoZ" estaria provocando o problema que eu estou tendo, mais se fosse isso, não explicaria a intermitencia do problema, pois não é sempre que acontece.

  • Fundadores
Postado

Qual seria a melhor forma de testar se já é possível mandar outro comando a impressora?

Testar o estado seria satisfatório?

Testar algumas vezes pra ter certeza ?

é exatamente isso que o ACBrECF faz quando a propriedade AguardaImpressao := True

Veja nos fontes o método Interno: VerificaFimImpressao

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • 3 semanas depois ...
  • Este tópico foi criado há 4720 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.