Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Pessoal,

 

Boa noite,

 

Meu aplicativo que estava na versão 9 e com o componente ACBr funcionava perfeitamente nos clientes. Ai fiquei sabendo do ACBrFramework e fiz a mudança no meu sistema para usar esse novo componente e gerei a versão 10.

 

Comecei a dar um erro "Disk Full" intermitente, na maioria das vezes ao abrir o cupom fiscal, porém, também deu na hora de receber, na hora de imprimir um gerencial, etc.

 

O HD da máquina nao está cheio, tem 15GB livres e fiz inúmeros testes e tentativas com meu sistema e nada, o erro ocorria como já disse acima intermitente, fazia uma venda e dava erro, tentava novamente exatamente a mesma venda e funcionava.

 

Após todas as tentativas desinstalei a versão 10 e voltei a versão 9 novamente com o componente ACBr e o problema parou.

 

É meio estranho um erro desse vir do ACBr, porém, mais aconteceu isso que escrevi acima.

 

Alguém tem alguma ideia?

 

Pra "confirmar" que o problema vem do ECF, se operar o sistema no modo emergencial, ou seja, ECF com problemas (desligado), o erro não ocorre!

Editado por Gabriel Gonçalves Domingos
Link para o comentário
Compartilhar em outros sites

Ontem baixei a atualização nais recente do ACBrFramework do SVN e vi que o tamanho do DLL compilada havia aumentado.

 

Compilei uma nova versão do meu PDV usando o ACBrFramework mais recente, coloquei no cliente que estava com o ACBr32.dll funcionando perfeitamente desde sexta (dia que escrevi o post acima) e na 5º venda apareceu o erro Disk Full.

 

O cupom chega a abrir no ECF porém o produto não registra, assim o cupom fica aberto.

 

Fechei meu aplicativo e abri de novo para cancelar o cupom aberto e deu o mesmo erro, Disk Full.

 

Fechei e abri novamente, ai o cupom cancelou, porém, voltei a versão da minha aplicação que trabalha com o ACBr32.dll e tudo voltou ao normal.

 

É IMPORANTE ressaltar que o erro está sendo gerado por uma ACBrFramework.ACBrException, ou seja, está vindo do componente ACBr,

Link para o comentário
Compartilhar em outros sites

Pessoal,

 

Descobriiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii o problema.

 

Agora preciso de vocês pra resolver.

 

O erro Disk Full ocorre com a Daruma FS-600 quando o sensor de papel está acusando pouco papel.

 

Consegui simular o erro na minha máquina, coloque uma bobina de papel quase no finalzinho e tente abrir um cupom, registrar um item que apresenta o erro Disk Full, depois cole o sensor de papel com durex e pronto, o erro não acontece mais.

Link para o comentário
Compartilhar em outros sites

Pessoal,

 

Bom dia,

 

Sei que o projeto ACBr é gratuito e não tenho o direito de exigir uma solução imediata pra os problemas encontrados, porém, acho que o problema citado acima merece uma atenção especial por ser gravíssimo.

 

Gostaria de ouvir a manifestação de algum dos integrantes (desenvolvedores) do projeto ACBr em relação ao assunto.

 

Se realmente é problema, se conseguiram testar/simular em ambiente de desenvolvimento, etc.

 

Desde o dia que descobri a causa do problema orientei meus clientes a colarem um durex no sensor de pouco papel da impressora Daruma o problema foi amenizado.

Link para o comentário
Compartilhar em outros sites

Algumas considerações:

 

1. Isso já aconteceu comigo, apenas 1 vez. Após abrir o cupom e antes de imprimir o primeiro item recebi o erro Disk Full, usando uma Daruma MACH 2

Desconectei o cabo USB e reconectei e o problema não aconteceu mais. Não troquei papel ou mexi no sensor.

 

2. O ACBrException em questão só reproduz o erro disparado pelo componente ACBr, ou seja, isso está acontecendo no nível do ACBr em Delphi.

 

3. Tente reproduzir o mesmo comportamento usando o aplicativo de teste, tanto do ACBr quanto do ACBrFramework. Assim isolamos se o problema pode ser da aplicação/máquina, AcbrFramework ou do ACBr

 

Abs

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link para o comentário
Compartilhar em outros sites

Respondendo o Rafael Dias:

 

Qual a linguagem de desenvolvimento?

R: Eu baixo o ACBrFramework do SVN e copio pra minha Solution que é toda em Visual Basic (Visual Studio 2010) apenas as pastas ACBrFramework (pra usar o arquivo \ACBrFramework\ACBrFramework\x86\ACBrFramework32.dll) e ACBrFramework.Net em C# (pra gerar o arquivo ACBrFramework.Net.dll compilado).

 

Agora pro Rafael Batiati:

 

Acabei de testar usando o aplicativo ACBrFramework.Net.ECFTeste e aconteceu o mesmo erro, estou postando um vídeo pra que vocês possam ver com mais clareza. Agora quanto sua solicitação pra testar com o ACBr como faço? Seria o que está dentro da pasta /trunk em Delphi? É que não tenho esse compilador, teria um .exe pronto pra eu poder testar?

 

*Lembrando que com o antigo ACBr32 (ACBr32.dll e ACBr.Net.dll) o problema não acontece.

 

Segue abaixo o vídeo:

 

https://www.dropbox.com/s/olne6x3vje3xbww/2013-04-29%2014.12.17.mp4


 

 

Segue abaixo uma imagem:

 

Deu o erro Disk Full tanto na abertura do cupom quanto na hora de registrar qualquer item. Depois coloquei um durex no sensor e o erro não aconteceu (está no vídeo). A impressora é uma Daruma FS600.

 

ErroDiskFull.png

Link para o comentário
Compartilhar em outros sites

Cara este erro ocorre por que você não setou o evento OnPoucoPapel.

No demo do ACBr Mostra a mensagem por que nele esta setado o evento.

Eu adicionei o evento no Demo do ACBrFramework.

 

Obs.: Sobre a dll antiga, ela funcionava por que antigamente não tínhamos eventos e por isso suprimíamos esta mensagem.

 

Link para o comentário
Compartilhar em outros sites

Rafael, 

 

O que seria "setar o evento OnPoucoPapel", pelo que entendo eventos são disparados para que eu possa fazer algum tipo de tratamento e não "setados".

 

No código fonte do ECFTeste do ACBrFramework no método Ativar() está assim:

acbrECF.Modelo = (ModeloECF)modeloComboBox.SelectedItem;
acbrECF.Device.Porta = (string)portaComboBox.SelectedItem;
acbrECF.Device.TimeOut = (int)nudTimeOut.Value;
acbrECF.GavetaSinalInvertido = gavetaCheckBox.Checked;
acbrECF.DescricaoGrande = descricaoCheckBox.Checked;
acbrECF.Ativar();

Sendo assim, qual linha de código devo acrescentar, poderia me dar um exemplo? Também não encontrei esse evento OnPoucoPapel, apenas OnMsgPoucoPapel.

 

E outra observação a ser feita:

 

(1) Quando mudei do ACBr.Net.dll (antigo ACBr) para o ACBrFramework.Net.dll não mudei uma linha de código na minha aplicação e o erro não acontecia. Agora é necessário tratar esse evento?

Link para o comentário
Compartilhar em outros sites

1º O Evento é o OnMsgPoucoPapel mesmo, ele fico como OnPoucoPapel na primeira implementação.

2ª Sim vai precisar deste evento, pois como disse antigamente não tinhamos eventos na dll do ACBrFramework.

3º Setar, seria isso "acbrECF.OnMsgPoucoPapel += acbrECF_OnMsgPoucoPapel".

4º O ACBr existe ainda não confunda ACBr com a antiga dll ACBr32, esta não existe mais.

5º E eu acho dificil você não ter mudado nada pois mudou varias coisas na dll inclusive as namespace.

 

Link para o comentário
Compartilhar em outros sites

Rafael,

 

Tamo parecendo um bate-papo aqui, hehe, mais vamos lá:

 

Quanto ao item 5, realmente mudei apenas o namespace e a parte da serial que agora ficou dentro de Device, de resto, não mudei nada.

 

Agora o bagulho ficou louco, olha só:

 

No ECFTeste.exe adicionei o comando:

private void acbrECF_OnMsgPoucoPapel(object sender, EventArgs e)
{
    MessageBox.Show("Pouco papel!");
}

- Abri o aplicativo, registrei um item, exibiu a mensagem "Pouco papel" e realmente não deu o erro Disk Full;

- Fechei, removi o código acima, executei novamente e o erro não voltou a aparecer;

- Fechei novamente, recompilei, coloquei no outro ECF que também estava dando o erro e não deu novamente;

- Não contente, joguei o código fora, baixei do SVN de novo, compilei, abri e NÃO deu novamente.

 

Agora meus neurônios saíram fumaça...Tô aqui pensativo, já já posto mais alguma coisa!

Link para o comentário
Compartilhar em outros sites

Pessoal,

 

Por enquanto vou encerrar a discussão pelo seguinte:

 

Apenas adicionei o trecho de códibo abaixo em VB.net na minha aplicação e parou de dar o erro, repare que nem precisei fazer nada dentro do código do evento, apenas a declaração já resolveu.

Private Sub ACBrECF_OnMsgPoucoPapel(sender As Object, e As System.EventArgs) Handles Me.OnMsgPoucoPapel
End Sub

Agora ficam as dúvidas aí pra quem quiser resolver/explicar:

 

(1) Qual a obrigatoriedade de agora ter que tratar/declarar o evento OnMsgPoucoPapel? (Sendo que antes com o ACBr32.dll não havia necessidade)

(2) Sendo obrigado, porque só com a Daruma acontece o erro? (Testei  com Bematech e Sweda e o erro não ocorreu)

(3) Já que o assunto/método é sobre pouco papel, porque a mensagem de erro é "Disk Full"?

Link para o comentário
Compartilhar em outros sites

1º como eu disse não tem obrigatoriedade de tratar você pode apenas declarar como fez e deixar em branco, antes não tinha eventos por isso nos tratávamos internamente na dll.

2º Não acontece com todas impressoras que lançam erro por causa de pouco papel.

3º Não sei o por que pode ser que seja esta a resposta da impressora, pois não achei nenhuma declaração Disk Full no código do ACBr.

 

Link para o comentário
Compartilhar em outros sites

Oi Gabriel,

Que bom que foi identificado o problema, porém eu tenho algumas dúvidas.

Comigo esse erro não acontece, mesmo com pouco papel no ECF, mesmo sem usar o evento de OnMsgPoucoPapel.

Já que você está tendo a oportunidade de reproduzi-lo, gostaria que pudesse nos ajudar a entender melhor o problema:

 

 

O que seria "setar o evento OnPoucoPapel", pelo que entendo eventos são disparados para que eu possa fazer algum tipo de tratamento e não "setados".

 

E outra observação a ser feita:

 

(1) Quando mudei do ACBr.Net.dll (antigo ACBr) para o ACBrFramework.Net.dll não mudei uma linha de código na minha aplicação e o erro não acontecia. Agora é necessário tratar esse evento?

 

Setar um evento é o termo usado comumente em C# para "assinar" um evento.

assinar um evento, é declarar um método em sua aplicação e relacioná-lo com um evento de forma que esse método seja executado sempre que o evento for disparado.

 

Usamos a palavra setar, pois em C# a sintaxe fica como se fosse um set de propriedade, ecf.OnMsgPoucoPapel += <<nome do método>>

Em VB.Net a declaração é feita com WithEvents e o evento é assinado implicitamente por convenção de nome <<nomeDaVariável>>_<<NomeDoEvento>>, e realmente nessa linguagem o termo setar não faz nenhum sentido.

 

Quando você usava o antigo ACBr.Net.dll, ele não possuía eventos, e os tratamentos feitos via eventos eram processados internamente pela DLL nativa.

Atualmente os componentes possuem os eventos, e o aplicativo devem assiná-los conforme a necessidade.

 

Eventos obrigatórios que eu saiba, são apenas aqueles que solicitam as chaves de criptografia. (OnGetChave do AAC e OnGetChavePublica/OnGetChavePrivada do EAD)

 

Este caso específico do ECF Daruma quando o OnMsgPoupoPapel não estiver assinado disparar uma exception cuja mensagem é Disk Full, não me parece algo muito natural, e deve ser debugado para melhor entendimento.

Em todo caso, enquanto não esclarecemos esse ponto, faremos melhor ao utilizar o evento para tratar o sensor de pouco papel no aplicativo em produção nos clientes.

 

 

(...)

 

 

No ECFTeste.exe adicionei o comando:

private void acbrECF_OnMsgPoucoPapel(object sender, EventArgs e)
{
    MessageBox.Show("Pouco papel!");
}

1 - Abri o aplicativo, registrei um item, exibiu a mensagem "Pouco papel" e realmente não deu o erro Disk Full;

2 - Fechei, removi o código acima, executei novamente e o erro não voltou a aparecer;

3 - Fechei novamente, recompilei, coloquei no outro ECF que também estava dando o erro e não deu novamente;

4 - Não contente, joguei o código fora, baixei do SVN de novo, compilei, abri e NÃO deu novamente.

 

Agora meus neurônios saíram fumaça...Tô aqui pensativo, já já posto mais alguma coisa!

 

1. Você precisa apenas assinar o evento, não precisa de fazer nenhum tratamento ou colocar nenhum código dentro dos métodos.

 

2. Se você removeu apenas o MessageBox.Show("..."); tá explicado no item 1 acima, mas se você removeu toda a declaração e não está mais assinando o evento, isso pode significar que este erro tem relação com o pouco papel mas não é proveniente dele. Se puder reproduzir isso e postar com mais detalhes será bem útil.

 

3. Idem ao item 2. Como eu disse num post anterior, quando esse erro aconteceu comigo eu apenas desconectei a USB e reconectei novamente. não mexi no papel ou no sensor.

 

4. Neste caso, você ao pegar a versão do SVN pode ter baixado a versão atualizada que já assina o evento, ou pode ser o mesmo caso do item 2 ou 3 acima.

Novamente, se puder reproduzir isso com mais detalhes...

 

Abs,

Rafael Batiati

ACBrFramework - Automação comercial para todos.

MultiClubes - Soluções para a área de clubes, parques, lazer e entretenimento.

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...

Pessoal,

 

acabei de encontrar o problema e a solução.

Juntei os argumentos de cada um de vocês, consegui simular o problema, diagnostica-lo e achar uma solução (que está vinculada ao design da minha aplicação).

 

Cenário:

Cliente

  Windows XP

  Impressora fiscal MP 4000 TH FI

  Bobina com pouco papel

  Aplicativo desenvolvido em Visual Basic 6.0 utilizando ACBrFramework

 

Histórico:

  Aplicativo instalado ontem no cliente.

  Hoje apresentou problemas ao ativar a impressora (ACBR.ATIVAR), retornando a mensagem DISK FULL.

  Ao utilizar o formulario de configuração da impressora (no mesmo aplicativo) a impressora ativava normalmente e retornava a mensagem POUCO PAPEL.

  Eu desativava a impressora e ativava novamente e nada de aparecer a mensagem DISK FULL.

  Saia da configuração da impressora  e quando retornava recebia novamente a mensagem DISK FULL.

 

  Ainda no cliente, pedi para que o mesmo trocasse a bobina (com pouco papel) por uma nova.

  Ele trocou e resolveu o problema.

  O que não tinha sentido (POUCO PAPEL e DISK FULL) confirmou ter alguma relação obscura.

  

  Para encontrar a solução precisava simular o problema no meu ambiente de desenvolvimento.

 

Simulação em Ambiente de Desenvolvimento:

 

  Sempre uso o emulador da SWEDA, connectsim, e tentei simular pouco papel com ele.

  Em todos os aplicativos que tinha em mãos nao retornava o status e nem a mensagem. 

  Instalei o emulador novo da bematech e tambem nao funcionou direito com o com0com que tenho funcionando aqui.

 

  Instalei emulador antigo da Bematech.

  Este sim me retornou o status de pouco papel e fez com o erro acontecesse em ambiente de desenvolvimento.

 

  Depois de vários testes e tentativas de alteração de código percebi que:

 

  Eu tento no sistema ativar a impressora em 2 locais diferentes:

 

  a) para verificar somente se a impressora esta configurada corretamente e funcionando e 

       Declaracao da variavel global

       Public ACBrECF As New ACBrFramework_Net.ACBrECF

  B) para trabalhar efetivamente com a impressora.

  Declaração da Variavel Local

  Public WithEvents ACBrECF As ACBrFramework_Net.ACBrECF

  As diferenças entre os 2 locais de ativação eram a existência(B) ou não (a) de um formulário (form) associado.

  

  Concluí então, que o fato do ACBr disparar eventos como o de POUCO PAPEL exigia um tratamento (ou pelo menos um ambiente-form- em que pudesse se "expressar")

 para o evento disparado.

  

  Para não alterar muito meu código criei um formulário (que fica invisivel o tempo todo) com uma variavel do ACBR que será setada para a instância global e que trata

  os eventos emitidos pelo ACBrECF.

  Formulario

Public WithEvents ACBrECF As ACBrFramework_Net.ACBrECF
Public WithEvents ACBrAAC As ACBrFramework_Net.ACBrAAC
Public WithEvents ACBrEAD As ACBrFramework_Net.ACBrEAD


Private Sub ACBrECF_OnMsgPoucoPapel()
    MsgBox "POUCO PAPEL", vbCritical, "IMPORTANTE!"
    Beep
End Sub
 

Chamada ao Formulario


    Set frm_PDV_Testa_Impressora.ACBrECF = ACBrECF    
        
    Select Case AtivaEProgramaECF 'Onde ocorria o erro


 

  Com esta solução o problema não mais ocorreu.

 

  Resumindo, o cenário de ocorrência foi identificado, uma solução viável foi apresentada. Fica faltando a explicação do porque da mensagem DISK FULL.

 

  É com vocês agora.

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois ...
  • 2 meses depois ...
  • Este tópico foi criado há 3601 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.