Ir para conteúdo
  • Cadastre-se

dev botao

Acbrmonitor Via Txt


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 3756 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Prezados, estou já em fase final o meu projeto com o acbrmonitor e satisfeito com o resultado.

Existem uma questão que está me preocupando que é a seguinte:

 

Quando capturo os itens de uma pré-venda e os lanço em um cupom aberto, caso sejam 10, 15 itens, tudo ok. Eu tenho uma pre-venda que insistentemente faço vendas com ela, pois possui 49 itens e então, após abrir o cupom fiscal, gravo o remessa.txt (anexo)

 
o acbrmonitor lê, imprime todos os itens como esperado e me gera o retorno.txt, mas aí vejo um problema.
Muitas das vezes o acbrmonitor me gera o retorno faltando linhas. Esse comando teria que me gerar 49 linhas no retorno com a palavra ok: . Diversas vezes ele me gera 44, peguei uma onde gerou 22 e por aí vai. Fora as vezes que foi tudo certo e realmente gerou as 49 como esperado.
 
Até para isolar o meu sistema, abro o cupom manualmente via txt, depois, pelo windows explorer colo na pasta o arquivo com os comandos acima, justamente para não ser do meu aplicativo estar capturando o arquivo antes do acbrmonitor acabar de grava-lo, mas tb aconteceu. Colo o txt na pasta, somente aguardando o retorno e volta incompleto, sem interferência do sistema que está aguardando o retorno.
 
Volto a frisar,em todas as vezes, os 49 itens foram impressos no cupom, o problema é justamente o retorno.txt gerado.
 
Outra coisa que noto é que durante o processo de impressão dos itens, algumas vezes vejo o retorno.txt sumir da pasta,  aí aparece um retorno.tmp, depois o retorno.txt volta, creio que seja algum processamento que o acbrmonitor faça e será que é nesse processo que ele está falhando em gravar algum dos comandos?

remessa.txt

Editado por Siepi
  • Fundadores
Postado

Não fui capaz de reproduzir o problema...

 

Usando o NotePad++, por 7 vezes eu gravei o conteúdo do arquivo ENT.TXT na pasta de monitoramento do ACBrMonitor, e em toadas as 7 vezes obtive resposta para todos os Itens enviados (SAI.TXT)

 

O ACBrMonitor apaga o arquivo ENT.TXT após processá-lo...

Antes do inicio de cada teste eu apaguei o arquivo SAI.TXT

 

Os testes foram realizados usando:

- ACBrMonitor atual (SVN)

- Emulador Sweda Connect/SIM

- Modelo ecfSwedaSTX

 

Poderia descrever melhor como você está testando ?

 

 

SAI.TXT

ent.txt

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 (editado)

Muito estranho. O problema é a intermitência. Não há muito o que falar mais, é exatamente o que vc fez.

Editado por Siepi
  • Moderadores
Postado

Configuração de permissões do windows? Qual a configuração do micro? o usuário e administrador pra criar arquivos?

ele é criado no mesmo micro que está a aplicação ou na rede? se na rede, ela não tem alguma problema de comunicação?

ou por exemplo utiliza em uma wireless? e dai perde o sinal !

seriam algumas coisas a serem visualizadas!

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Usuário adm, não é uma pasta controlada por acesso, sempre local a gravação. Como citado, testes feitos colando o arquivo na pasta do acbr, sem aplicação capturando o arquivo.

Postado

Prezados, conforme foi solicitado, continuei observando para verificar algum padrão na ocorrência do erro e o único padrão é que quando se é gerado um arquivo .tmp alternando-se com o arquivo .txt é que ocorre o erro. E somente ocorre quando existem diversos comandos em sequencia na mesma remessa.txt

 

Como falei, trabalho com pre-venda e envio o remessa.txt anexo acima, algumas vezes o retorno.txt que é gerado, vem com as 48 linhas esperadas, que são as respostas de cada comando que estava no remessa e não é visto o retorno.tmp sendo gerado na pasta. Agora, quando vejo o retorno.tmp sendo gerado pelo acbrmonitor, em todas as vezes ele gerou com linhas a menos que a remessa e eu me baseio justamente na quantidade de linhas retornadas para saber se o comando inteiro da remessa foi ou não finalizado. 

 

Agora pergunto, porque o mesmo arquivo de remessa, hora o acbrmonitor gera o retorno.txt de uum vez, hora eu vejo ele gerando 2, ou 3 vezes um retorno.tmp. Mas volto a repetir, sempre a mesma remessa. e com arquivos de remessa pequenos, as vezes ocorre mas com muito menos frequencia.

 

Enfim, espero contar com a ajuda dos colegas.

Postado

Daniel, pelo que entendi lendo o comentário do fonte que diz:

{ Primeiro salva em Temporário para que a gravação de todos os Bytes ocorra
       antes que a aplicação controladora do ACBrMonitor tente ler o arquivo de
       Resposta incompleto }
 

, ele gera o tmp já na pasta e no final renomearia correto? Mas o que acontece quando vão diversos comandos na remessa? a cada um ele colocaria txt e depois voltaria para tmp e depois para txt novamente?

  • Consultores
Postado

Provavelmente está ocorrendo concorrência e numa condição de corrida, o arquivo de envio (remessa.txt) está sendo sobrescrito antes de ser totalmente analisado e processado. Talvez não seja fácil de reproduzir em outras máquinas com hardware diferente, por causa de tempo de resposta do disco, memória, processamento, etc...

[]'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.
Postado (editado)

Para ilustrar o que eu faço. 

Escrevo na pasta c:\Multpaf\ecfmonitor\integracao\remessa\remessa.txt (pasta somente para esse arquivo)

aguardo o arquivo c:\Multpaf\ecfmonitor\integracao\retorno\retorno.txt (pasta somente para esse arquivo)

 

Quando eu escrevo, entro num loop e vou lendo, sem bloqueio, se existe o retorno.txt e quantas linhas ele tem e só quando ele possui a mesma quantidade de linhas que eu mandei no remessa.txt, que no exemplo lá do início do tópico são 48 linhas, é que eu aceito ele como completo. A mesma prevenda, hora funciona, hora não. Creio que tenha a ver com a quantidade de comandos que mandei na remessa, pois eu vejo que o acbrmonitor gera o retorno.txt, mesmo mandando itens para a impressora e ele deveria escrever retorno.txt somente no final, após ter processado todo o remessa.txt com os 48 vendeItem que mandei.

Editado por Siepi
  • Consultores
Postado

Mas você escreve linha a linha o arquivo de entrada do monitor? Ou escreve o arquivo inteiro e depois joga ele na pasta?

[]'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.
Postado (editado)

Escrevo o arquivo inteiro como remessa.tmp

Depois de escrito inteiro renomeio para txt, que é o arquivo que o acbrmonitor está aguardando.

Editado por Siepi
  • Consultores
Postado

Você chega a enviar outro arquivo antes de receber o retorno completo?

[]'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.
Postado

Não, justamente para não encavalar. A comunicação sempre faço de forma sequencial, mando outro arquivo quando tenho resposta do que enviei antes.
Se vc pegar o remessa.txt que mandei ou o do Daniel, e gravar na pasta vc notará que o acbrmonitor antes da impressora lançar todos os itens, enquanto o acbrmonitor está lançando os comando para a impressora, ele já gerou o retorno.txt na pasta e não deveria. Deveria gerar somente após terminar o remessa.txt. Creio ser isso que possa estar causando o problema. Pelo menos o comentario no fonte contradiz o que está ocorrendo. Pois o acbr deveria executar tudo para depois gerar o retorno.txt

  • Fundadores
Postado

Não concordo... Os fontes parecem corretos...  não há concorrência ou chamada recursiva no tratamento dos comandos... Observe que o Timer de monitoramento é desligado assim que um arquivo é encontrado e somente é religado quando o metodo "Processar" é finalizado...  O método "Processar" por sua vez, trata linha a linha dentro de um loop... cada comando executado, tem seu retorno tratado e anexado no arquivo...

 

Acho que não é uma boa prática o envio de comandos em lote... talvez a comunicação em Sockets (TCP) pode funcionar melhor para o seu caso...

 

Em todo caso... não consegui reproduzir o problema... Já descrevi nesse tópico qual foi minha metodologia de teste...  (ou seja, do meu ponto de vista não há bug)

 

Se você me enviar um passo a passo como posso reproduzir o problema, usando um BAT ou bloco de notas para a geração dos arquivos de Entrada, posso tentar investigar...

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

Novamente alinhando. 

Eu relatei um problema de retorno faltando comandos, intermitente.

Relatei que notei que o retorno.txt vai sendo gerado mesmo antes do processamento completo do remessa.txt que aomeu ver não deveria acontecer, pois o arquivo remessa.txt como não foi totalmente processado, não pode retornar nada até sua finalização.

Então são dois problemas distintos. O segundo eu consigo simular com mais facilidade. Vou gravar  um vídeo, com o windows explorer aberto em duas janelas, o acbrmonitor aberto tb e vou colar o arquivo numa janela na pasta remessa e vocês verão que enquanto o acbrmonitor vai mandando os comandos para a impressora, um retorno.txt é gravado na pasta e não deveria acontecer. Mais tarde posto o vídeo.

  • Fundadores
Postado

Experimente com esse executável em anexo...

 

Fiz um tratamento de controle de Lote para arquivos TXT, para evitar: apagar TMP, renomear de SAI para TMP e de TMP para SAI a cada comando processado...

 

ACBrMonitor.7z

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

Senhores seguem o vídeo como prometido.

Notem que não existem nenhuma aplicação trabalhando junto. Apenas peguei o arquivo que o Daniel gerou acima o ent.txt, renomeei para remessa.txt e colei na pasta remessa. Enquanto o acbrmonitor vai mandando os comando, antes de finalizar, já é gravado no pasta retorno o retorno.txt e notem que as vezes aparece um retorno.tmp tb.

 

http://youtu.be/OJujj7aD_sU

  • Fundadores
Postado

Daniel, com o exe novo, para cada comando ele deu 

 

ERRO: Communication error 6: Identificador inválido.

 

Isso indica um erro na configuração da porta...

 

Não modifiquei nada no acesso a porta serial...

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.

  • Fundadores
Postado

Senhores seguem o vídeo como prometido.

Notem que não existem nenhuma aplicação trabalhando junto. Apenas peguei o arquivo que o Daniel gerou acima o ent.txt, renomeei para remessa.txt e colei na pasta remessa. Enquanto o acbrmonitor vai mandando os comando, antes de finalizar, já é gravado no pasta retorno o retorno.txt e notem que as vezes aparece um retorno.tmp tb.

Mas é justamente isso que a rotina faz...

 

Para cada comando processado...

- apaga o TMP se o mesmo existir

- se o SAI.TXT (arquivo de saída) existir,

--- renomeia ele para TMP...

--- Grava a resposta no final do TMP

- se o SAI.TXT (arquivo de saída) não existir,

--- Grava no arquivo TMP

- Renomeia TMP para SAI

 

A mudança que subi no último .EXE modifica apenas esse comportamento... verifique se suas configurações estão corretas...

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.

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