Ir para conteúdo
  • Cadastre-se

dev botao

Bug no memobobina ao fazer Não Fiscal


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

Recommended Posts

  • Consultores

Estou registrando aqui o bug, mas devo logo (amanhã) tentar corrigir. Se usar os comandos para comprovantes não fiscais de abrir, registra item e subtotalizar COM DESCONTO, o Memobobina mostra valor errado.

Reprodução:

- + - + - + - + - + - + - + - + - + - + - + -
Abre Não Fiscal: 12345678909
#0#3#22#0#0#0#0
- + - + - + - + - + - + - + - + - + - + - + -
Registra Item Nao Fiscal: 01 11
#0#0#0#0
- + - + - + - + - + - + - + - + - + - + - + -
Subtotaliza Não Fiscal -1
#0#0#0#0#0#0#0#0#0#0#0
- + - + - + - + - + - + - + - + - + - + - + -[/code]

abrir, registrar um item de qualquer valor (exemplo R$11,00), dar desconto ao subtotalizar (ex.: R$1,00). O memo bobina vai mostrar subtotal igual ao desconto. Veja abaixo:

CUPOM NAO FISCAL

001 PGTO CONTA CORR 11,00

TESTE DE COMPROVANTE NAO FISCAL

SUBTOTAL R$ 1,00

Desconto R$ -1,00

TOTAL R$ 0,00

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

  • Consultores

Na verdade, isso acontece mesmo sem desconto para impressoras Bematech.

As propriedades fsSubTotalPagto e Subtotal estão ficando sempre zeradas no caso de Não Fiscal.

Ainda estou averiguando...

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

  • Consultores

Pessoal,

Descobri o problema. É que nos ECF Bematech, a função de retorno de Subtotal para Cupom Fiscal (ESC 29) é diferente da para Comprovante Não Fiscal (ESC 35 66 "RetornaInfoECF('66')").

Alguém sabe me dizer se em outras marcas isso também acontece?

Edit:A função para subtotalCNF só funciona nas MFDs.

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

  • Fundadores

Infelizmente não há um padrão em nada quando se fala de Cupom Não Fiscal... foram as rotinas mais difíceis de implementar no ACBrECF, devido a dificuldade de conseguir uma assinatura única para os métodos relacionados a Não Fiscal...

Acho que podemos tratar com um IF no método da Bematech... Tente assim:


function TACBrECFBematech.GetSubTotal: Double;
Var
RetCmd : AnsiString ;
begin
if (not fpMFD) or (Estado estNaoFiscal) then
begin
BytesResp := 7 ;
RetCmd := BcdToAsc( EnviaComando( #29 ) ) ;
end
else
RetCmd := RetornaInfoECF('66') ;

Result := StrToFloatDef( BcdToAsc( RetCmd ), 0) / 100 ;
end;
[/code]

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 classe ACBrECFNaoFiscal, não está implementado o método "EfetuaPagamentoNaoFiscal", portanto ele executará o método da classe Mãe (ACBrECFClass), que chama o método genérico de pagamento: EfetuaPagamento

procedure TACBrECFClass.EfetuaPagamentoNaoFiscal(CodFormaPagto: String;
Valor: Double; Observacao: AnsiString; ImprimeVinculado: Boolean);
begin
EfetuaPagamento( CodFormaPagto, Valor, Observacao, ImprimeVinculado );
end;[/code]

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

  • Consultores

Infelizmente não há um padrão em nada quando se fala de Cupom Não Fiscal... foram as rotinas mais difíceis de implementar no ACBrECF, devido a dificuldade de conseguir uma assinatura única para os métodos relacionados a Não Fiscal...

Acho que podemos tratar com um IF no método da Bematech... Tente assim:


function TACBrECFBematech.GetSubTotal: Double;
Var
RetCmd : AnsiString ;
begin
if (not fpMFD) or (Estado estNaoFiscal) then
begin
BytesResp := 7 ;
RetCmd := BcdToAsc( EnviaComando( #29 ) ) ;
end
else
RetCmd := RetornaInfoECF('66') ;

Result := StrToFloatDef( BcdToAsc( RetCmd ), 0) / 100 ;
end;
[/code]

Não dá dando certo, pois quando executa, o estado já é estPagamento... :(

Na classe ACBrECFNaoFiscal, não está implementado o método "EfetuaPagamentoNaoFiscal", portanto ele executará o método da classe Mãe (ACBrECFClass), que chama o método genérico de pagamento: EfetuaPagamento

Não quis dizer na ACBrECFBematech? Se for, é sim. O método para Efetuar pagamentos tanto no cupom fiscal como no Comprovante não Fiscal são iguais nos ECF Bematech (ESC 72). Eu também estranhei demais isso...

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

  • Consultores

Talvez a gente poderia ter um flag interno no ACBrECFBematech para setar se está no CNF ou num CF.

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

  • Fundadores

podemos usar uma variável private... (na Daruma é usado isso pois em alguns casos não é possível detectar o estado de pagamento)

Mas isso só funciona enquanto o Flag estiver na memória... ou seja, sair e carregar novamente o programa, o flag perderá o valor...

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

  • Consultores

Puxa, verdade não tinha pensado nisso...

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

  • Fundadores

Consegui resolver o problema, lendo direto o Flag de Tipo de documento...


function TACBrECFBematech.GetSubTotal: Double;
Var
RetCmd : AnsiString ;
B2 : Integer ;
ENaoFiscal : Boolean ;
begin
ENaoFiscal := False;
if fpMFD then
begin
RetCmd := RetornaInfoECF( '65' ) ;
B2 := ord( RetCmd[1] ) ;
ENaoFiscal := TestBit( B2 ,0) ;
end ;

if not ENaoFiscal then
begin
BytesResp := 7 ;
RetCmd := BcdToAsc( EnviaComando( #29 ) ) ;
end
else
RetCmd := RetornaInfoECF('66') ;

Result := StrToFloatDef( RetCmd, 0) / 100 ;
end;
[/code]

O problema porém agora foi transferido para o método [b]GetTotalPago[/b]... ao que parece a Bematech não tem um registrador que informe o total já pago em um comprovante não fiscal

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

  • Consultores

Haha Eu ia sugerir isso agora.

O RetornaInfoECF(22) não funciona pra isso? Testei aqui no Emulador e deu certo.

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

  • Fundadores

Acho que é a hora de aposentar essa IF do código :)


function TACBrECFBematech.GetTotalPago: Double;
begin
{ O Bug no comando 35 + 22 ainda persiste na versao 010101... Enquanto nao
obter uma correção da Bematech vou ignorar o uso do 35+22 na MPTH e MP25 }
if fs25MFD then // if NumVersao = '010000' then
Result := fsTotalPago
else
Result := StrToFloatDef( RetornaInfoECF( '22' ),0 ) / 100 ;
end;[/code] para simplesmente:
[code]
function TACBrECFBematech.GetTotalPago: Double;
begin
Result := StrToFloatDef( RetornaInfoECF( '22' ),0 ) / 100 ;
end;

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

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