Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Olá a todos,

Na tela do meu PDV, no botão de fechamento da venda, dentre outros comandos, tenho o comando ACBrNFe1.Enviar responsável por enviar a NFCe. Normalmente quando acionamos o evento click de um botão, todos os comandos desse evento são executados e só depois novos eventos de outros objetos podem ser executados, mas não é o que acontece nesse caso.

Reparei com um teste simples que na linha do comando ACBrNFe1.Enviar, durante a sua execução, onde é exibido a Splash Screen do envio, o usuário consegue executar outros eventos de outros objetos do aplicativo, conseguindo dessa forma, por exemplo, inserir novos itens na nota enquanto está ainda está sendo enviada, dentre outros, desde que o mesmo seja "muito rápido".

Minha dúvida é, como bloquear totalmente a aplicação durante a execução do ACBrNFe1.Enviar? Quero que o mesmo tenha acesso a outros eventos como é de praxe, somente depois do encerramento do código referente ao evento ainda em processo, no caso o click do botão Enviar.

Desde já agradeço a atenção de todos

  • Consultores
Postado

Boa tarde,

Eu deixaria invisível por exemplo os objetos onde se pode entrar com algum dado bem como os demais botões que por ventura existam na tela.

E só voltaria a mostrar os objetos após o processo de envio ser finalizado por completo.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado
5 horas atrás, Italo Jurisato Junior disse:

Boa tarde,

Eu deixaria invisível por exemplo os objetos onde se pode entrar com algum dado bem como os demais botões que por ventura existam na tela.

E só voltaria a mostrar os objetos após o processo de envio ser finalizado por completo.

Olá Italo, obrigado pelo retorno.

O problema é que nessa tela de PDV possuo muitos objetos/eventos, será provável esquecer alguém. A possibilidade de ocorrer a execução de outros eventos durante o envio da NFCe, é muito remota, pois o tempo do envio é muito curto, portanto eu só saberia tempos depois, pois o tempo ainda variaria de cliente para cliente.

Na verdade eu estou querendo uma solução definitiva nessa questão pra eliminar uma suspeita. Em 3 anos com o emissor de NFCe rodando nos clientes, sempre tive um "bug" e nunca consegui reproduzir em laboratório, eu DEDUZO que ele mora nesse detalhe.

Em um universo de milhares de NFCes emitidas por mês, de dezenas de clientes que tenho, APENAS umas 10 apresentam um problema. O vPag difere do vNFe, e coincidentemente difere sempre faltando ou sobrando o valor referente ao último item da NFCe. Em algum momento o usuário consegue acrescer ou remover valores do vPag, e suspeito que é durante o envio.

Eu nunca consegui reproduzir esse erro, nem ve-lo acontecendo, só tenho essa suspeita, pois tentei por exemplo durante o envio acrescer novos itens, e consegui... Por isso sei que é possível "algo" ocorrer durante o envio, e creio que a origem desse bug está nessa possibilidade de executar outros eventos durante a Splash Screen de envio.

Já tive muito tempo pra analisar o código, corrigir falhas e até implementar melhorias, essa é a única anormalidade visível que tenho conhecimento, por isso preciso elimina-la, colocar nos clientes e esperar algumas semanas pra aí então eu ter certeza que eu estava no caminho certo.

Se eu simplesmente deixar os objetos invisíveis, pode levar semanas para o erro ocorrer novamente e eu suspeitarei que faltou deixar invisível algum outro objeto. Entende?

  • Consultores
Postado

Bom dia,

Concordo, mas pelo seu relato o que ocorre é uma diferença de valores e essa diferença sempre se refere ao último item informado a mais na nota ou removido dela durante o processo de envio da nota a SEFAZ.

Sendo assim se você boquear a adição ou remoção de qualquer item durante o processo de envio, acredito que esse problema já mata.

Como poderia ser feito isso, eis uma ideia.

Ao acrescentar ou remover um item, checar o valor de uma variável do tipo booleana (por exemplo: NotaSendoEnviada).

Ao liberar a venda para um novo cliente essa variável recebe o valor False, quando o funcionário finalizar a venda e solicitar a emissão da nota, altere ela para True.

Desta forma a rotina que acrescenta e a que remove itens da nota vão detectar que a nota esta sendo enviada para a SEFAZ e vai impedir que a inclusão ou exclusão de itens sejam realizadas na mesma nota.

É importante mostrar uma mensagem na tela o ocorrido.

Agora se mesmo assim o problema persistir isso significa que tem mais alguma coisa errada.

Por exemplo, o funcionário incluiu o item e mandou emitir a nota, ao ler os itens para alimentar o componente o banco de dados não estava 100% atualizado, ou seja, estava faltando o último item informado pelo funcionário.

Veja bem, são ideias para serem estudadas.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado

Show, gostei da idéia da variável, vou implementar.

Então esse "problema" de ser possível a execução de outros eventos de outros objetos durante o envio da NFCe é algo que existe para todos mesmo? E porque isso acontece?

  • Consultores
Postado

Boa tarde,

Tudo depende de como você desenvolveu a sua aplicação.

Eu não tenho uma aplicação de emissão de NFC-e, tenho de NF-e.

Na minha aplicação isso é impossível de ocorrer pois durante o processo de envio da NF-e é impossível acessar a tela que permite a inclusão e exclusão de itens na nota.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

  • Membros Pro
Postado
3 minutos atrás, Italo Jurisato Junior disse:

Boa tarde,

Tudo depende de como você desenvolveu a sua aplicação.

Eu não tenho uma aplicação de emissão de NFC-e, tenho de NF-e.

Na minha aplicação isso é impossível de ocorrer pois durante o processo de envio da NF-e é impossível acessar a tela que permite a inclusão e exclusão de itens na nota.

Sim, mas independente de como eu desenvolvi, observe que o comando ACBrNFe1.Enviar está dentro do evento Click de um botão.

Porque quando esse comando é executado o Delphi não "respeita" a conclusão do evento Click desse botão antes de permitir a execução de quaisquer outros eventos?

  • Membros Pro
Postado
5 horas atrás, Italo Jurisato Junior disse:

Você concorda que a utilização de uma variável para sinalizar o que esta ocorrendo pode resolver o problema?

Sim, tanto que anteriormente disse que gostei da idéia e vou implementa-la.

Mas apos isso fiquei curioso em saber porque, tecnicamente, o Delphi permite que isso aconteça.

De qualquer forma agradeço pela dica da variável.

  • Curtir 1
×
×
  • 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.