Ir para conteúdo
  • Cadastre-se

dev botao

Problemas com casas decimais na ACBrECF


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

Recommended Posts

  • Consultores

Você consegue reproduzir esse erro no DEMO?

Caso positivo, favor indicar os passos necessários.

[]'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.
Link para o comentário
Compartilhar em outros sites

Só é possivel reporduzir esse erro no demo setando a propriedade DecimaisPreco do componente em runtime

Vá a procedure AbrirCupom1Click e inclua a linha seguinte no inicio do procedure

ACBrECF1.DecimaisPreco := 3;

Conecte no Emulador da ECF ou na ECF, abra um cupom, ao vender item pelo menu "Cupom Fiscal" mude o valor unitário de 1 para 1,123

No meu caso eu tenho clientes que necessitam de vender itens com 3 casas decimais, pois o mesmo trabalham com fabricação de telhas e tojolos e o preço é dado em milhares, mas eles também fazem vendas em unidades em qualquer quantidade, Ex: 1 milheiro de tijolos custa 176,00, para chegar ao preço da unidade eu faço 176,00/1000 = 0,176 a unidade, agora imagine que o cliente resolva vender não 1 milheiro mas 885 unidades, com duas casa decimais o calculo é este: 0,17 * 885 = 150,45 e com 3 casas decimais: 0,176 * 885 = 155,76.

Enfim se eu fizer esta mesma venda utilizando a DLL do fabricante utilizando 3 casas decimais o cálculo vem correto, mas com o componente ACbrECF tá calculando errado como no exemplo com duas casas decimais e quando eu seto a propriedade em runtime ele entende 0,176 como 1,76 subindo o valor total da venda na ECF.

Link para o comentário
Compartilhar em outros sites

Bom dia.

Não consegui reproduzir o problema, qual impressora você está usando para faze o teste?

Fiz a mesma conta que você e não houve nenhum erro e nem diferença entre setar as casas decimais em runtime.

Por padrão o acbr usa 3 casas decimais no valor unitário.Eu usei a swedastx para testar.

Quantas reuniões foram mesmo esta semana? Reúna os amigos!

Link para o comentário
Compartilhar em outros sites

  • Fundadores

As casas decimais devem ser programadas na Intervenção do ECF, no momento da Lacração...

Até onde lembro, apenas a nova Epson FBIII permite enviar para o comando de Venda de Item a precisão em decimais no Preço e Qtd...

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.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia pessoal,

Estou com este mesmo problema usando a swedaStx. Eu mando o unitário R$ 0,013 e no cupom imprime o valor unitário R$ 0,01. Como eu faço para imprimir com Três casas decimais no unitário ?

Obs: Acontece o mesmo problema no ecfteste.exe e nele está setado Quantidade = 3 e Unitario = 3

Obrigado,

Rossine.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Provavelmente o ECF está programado para 2 casas decimais.... no ECFTeste em variáveis é possível ler isso...

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.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Na verdade, mesmo no ECFTeste esse parâmetro é muito mais para Leitura do que para escrita... pois apenas os Modelos ecfNaoFiscal, e ecfEpson permitem ajustar as decimais de forma dinâmica (se intervenção)

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.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Olá Daniel,

Na verdade, mesmo no ECFTeste esse parâmetro é muito mais para Leitura do que para escrita... pois apenas os Modelos ecfNaoFiscal, e ecfEpson permitem ajustar as decimais de forma dinâmica (se intervenção)

OK, então nestes dois combobox que aparecem para "Qtd casas decimais" são na verdade retornados da impressora ? Se for eles poderiam então serem "ReadOnly" ok ?

Outra coisa, existe no acbrmonitor um comando que me retorne o número de casas decimais da Qtd e do unitário ? Tipo: ECF.decimalQTD, ECF.decimalUNT, existe isto ? Ou um comando que me retorno um texto ou .ini para eu poder tratar isto em meu sistema ?

Obrigado,

Rossine.

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
O tópico é antigo, mas tive esse problema recentemente, não consegui resolver a tempo, acabei perdendo um cliente há um ano aproximadamente, tratava-se de uma situação muito específica para acontecer. Neste mês, ocorreu novamente em novo cliente, mas o engraçado é que tenho vários clientes com ECFs de diversas marcas, mais especificamente de EPSON e que o problema não ocorre. Como eu disse é uma situação muito especifica e não sei se conseguirei explicar bem.
 
- O problema ocorre quando a configuração do nosso sistema está diferente da configuração interna do ECF. Aparentemente seria um erro de lógica ou conflito de lógica entre os codigos fontes do nosso sistema e o do ACBRECF;
 
- Ao enviar o ECF para intervenção e solicitar configuração correta, por algumas vezes, os técnicos dizem já estar certo e não está. Parece que eles confundem configuração de decimais de preço com qtde e vice versa. 
 
- O problema ocorre na unit ACBrECFEpson na procedure TACBrECFEpson.Ativar_Epson. No código do nosso sistema, as propriedades do componente ACBRECF são setadas primeiro com as configurações salvas no nosso sistema, depois executa-se o comando para iniciar (ativar)o ECF. 
 
- A unit TACBrECFEpson.Ativar_Epson envia alguns comandos para o ECF para ele retornar as configurações internas de qtde de colunas, casas decimais de preço e qtde e sobrepõe as propriedades do componente (aquelas que nosso sistema setou primeiro, deixando-as compatíveis com o ECF)
 
- Na lógica e estrutura do nosso sistema, o componente ACBRECF fica em um datamodule que é instanciado apenas ao iniciar e permanece, portanto o dm e o componente não são destruídos até fechar o sistema. A nossa tela PDV (que usa o ECF) não é única e pode ser aberta e fechada durante o uso do sistema, alterando-se com outras telas. 
 
- Quando inicia a tela PDV pela primeira vez, o ECF é ativado e ao fechar é desativado e é aqui que há o conflito de lógica e onde inicia-se o problema. Se qualquer sistema ativa o ECF apenas 1x ou destroi o componente após o uso, o problema nunca ocorre, pois suas propriedades são "zeradas", "inicializadas" sempre. O problema só ocorre quando o ECF pode ser ativado e desativado e o componente é instanciado apenas 1x durante toda execução do sistema.
 
- A simulação e sequência em que ocorre o problema resume-se:
 
- Quando a tela PDV é aberta pela primeira vez, as propriedades do componente são carregadas com as configurações do sistema, o ECF é ativado e as propriedades são sobrepostas com as do ECF. 
 
- Quando a tela é fechada, executa-se uma outra tarefa e a reabre novamente, a mesma sequência é executada, mas no código que deveria sobrepor as propriedades obtidadas do ECF, há um IF de condição "if fpColunas < 0 then" que impede que as propriedades de casas decimais do componente sejam sobrepostas com as configurações do ECF. A propriedade fpColunas foi setada já na primeira inicialização do ECF e como o componente nem o datamodule dele não são destruídos, a propriedade se mantém, impedindo as atualização das demais propriedades de casas decimais. 
 
- Portanto, se a configuração de casas entre nosso sistema e o ECF estiverem diferentes e houver a tela for fechada e reaberta (reiniciando o ECF), quando o componente ACBRECF envia a string do comando VenderItem, o preço e/ou qtde são enviados com divergência de casas decimais e o ECF processa o posicionamento da fração decimal de acordo com sua configuração interna. Um valor e/ou qtde de 10,00 originais podem ser convertidos em 100,00 ou 1,00 dependo da diferença de configuração salva no nosso sistema e a do ECF.
 
- A solução consistem em:
 
1. Desativar/comentar os códigos "if fpColunas < 0 then", "begin" e "end" e deixar sempre executar os comandos ao iniciar ECF ou ao desativar, zerar as propriedades para os valores iniciais (principalmente fpColunas);
2. Criar código após iniciar o ECF para verificar se a configuração do nosso sistema está diferente da propriedade do componente do componente ACBRECF, emitir aviso de conflito e necessidade de solução e desativar o ECF, impedindo seu uso. Neste caso, ou corrige-se a configuração do nosso sistema para compatibilizar com ECF ou envia o ECF para intervenção e ajuste da configuração.
 
procedure TACBrECFEpson.Ativar_Epson ;
begin
  try
     //if fpColunas < 0 then { DESATIVAR/COMENTAR }
     //begin { DESATIVAR/COMENTAR }
        EpsonComando.Comando := '0905' ;  // Obtendo o numero de colunas
        EnviaComando ;
        fsTentaDetectarVelocidade := False;
        fpColunas := max( StrToIntDef( EpsonResposta.Params[0], 0 ), 48) ;
 
        EpsonComando.Comando := '0585' ;  // Obtendo o numero de Decimais
        EnviaComando ;
        fpDecimaisQtd   := StrToIntDef( EpsonResposta.Params[0], fpDecimaisQtd) ;
        fpDecimaisPreco := StrToIntDef( EpsonResposta.Params[1], fpDecimaisPreco) ;
 
        EpsonComando.Comando := '090A' ; // Obtendo se a ECF Imprime Cheque, e Le CMC7
        EnviaComando ;
        fsImprimeCheque :=  EpsonResposta.Params[4]  = 'S';
        fsLeituraCMC7   :=  EpsonResposta.Params[14] = 'S';
     //end ; { DESATIVAR/COMENTAR }
 
     fsIsFBIII := (pos( 'FBIII', SubModeloECF ) > 0) ;
 
  except
     On E : Exception do
     begin
        raise EACBrECFNaoInicializado.Create( ACBrStr(
                 'Erro inicializando a impressora '+fpModeloStr) + sLineBreak +
                 E.Message );
     end;
  end ;
Link para o comentário
Compartilhar em outros sites

  • Consultores

Olá edigargilvani,

 

  Muito obrigado pelo retorno. Tenho certeza que poderá ajudar alguém.

  Apenas para esclarecer, o Daniel disse a alguns posts acima que essa propriedade é mais para leitura do que para escrita. Não seria então mais apropriado ao invés de os aplicativos enviarem essas informações, passarem a ler do ECF?

[]'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.
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3465 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.