Ir para conteúdo
  • Cadastre-se

dev botao

Problemas Com Método Vendeitem Em Acbrecf Para Passar Alíquota


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

Recommended Posts

Boa tarde,

após a atualização dos componentes Acbr, tive problemas com o método VendeItem da Unit ACBrECF. Minha rotina estava passando alíquota com o sulfixo e indice ("T01","S01" etc), mas agora o item é impresso na ecf, e logo depois gera uma exceção de alíquota não encontrada e cancela o item.

Na nova unit ACBrECF, existem dois novos métodos, IniciaVendeItem() e FinalizaVendeItem(), essas duas passam por rotinas que verificam a aliquota e nesse ponto está meu problema...

 

Passo a aliquota("T01") como parâmetro para o metodo VendeItem(), a rotina IniciaVendeItem() verifica minha aliquota pelo sufixo("T") e depois pelo indice("01"), ela salva o índice dentro da mesma variavel onde se encontrava a aliquota, perdendo assim o sufixo(ficando apenas "01").

Logo em seguida é impresso o item normalmente.

E no final é executado o metodo FinalizaVendeItem() onde ele executa a mesma verificação de aliquota com a mesma variável, porém agora só está o indice("01"), gerando assim a exceção de aliquota não encontrada e cancelando o item que acabou de ser impresso.

Desde já agradeço a atenção.

Link para o comentário
Compartilhar em outros sites

Bom dia

Já tentou utilizar T17 ou 17T!

Bom dia,

tentei enviando "T17,00" e "17,00T", ja que dentro da rotina IniciaVendeItem() é arredondado para 17 então acredito que não haja diferença. Acontece a mesma coisa, quando passa na rotina IniciaVendeItem() a aliquota "T17,00" é encontrada e removido a letra "T", ficando apenas "17" depois na rotina FinalizaVendeItem() o "T17,00" está apenas com "17", e acaba sendo tratado como um índice gerando uma exceção de aliquota não encontrada e cancelando o cupom logo em seguida.a.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Usem o ECFTeste para carregar as alíquotas, fazerem uma vendas com pelo menos 3 alíquotas diferentes onde o problema seja evidente e emitir uma leitura X.

Anexem o log do ACBrECF.

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

Elton, o erro só ocorre quando utiliza o componente AcbrRFD, vou fazer o que vc pediu e assim que puder eu posto...

Isso é uma informação muito importante.

Eu particularmente não utilizo o ACBrRFD, mas com os logs e a ajuda de outros desenvolvedores poderemos localizar qualquer conflito ou erro no código.

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

Usem o ECFTeste para carregar as alíquotas, fazerem uma vendas com pelo menos 3 alíquotas diferentes onde o problema seja evidente e emitir uma leitura X.

Anexem o log do ACBrECF.

Boa tarde, segue em anexo o cupom junto com o arquivo de log. Verifiquei que esse problema só ocorre quando estou gerando RFD.

post-13019-0-26262000-1416245919_thumb.p

logECF.txt

Link para o comentário
Compartilhar em outros sites

  • Consultores

Não me parece haver nada anormal no log.

Conecte o ACBrRFD e faça o mesmo teste.

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

Não me parece haver nada anormal no log.

Conecte o ACBrRFD e faça o mesmo teste.

Bom dia, realmente o erro não está sendo exibido no log, pois o item é impresso corretamente, o erro ocorre logo após a impressão do item. Refiz o teste e estou anexando a Resposta da aba cmd/Resp.

acbrlog.txt

acbrResposta.txt

Link para o comentário
Compartilhar em outros sites

  • Consultores

O erro continua não aparecendo.

Acho que vai ser melhor você conectar o ACBrRFD e debugar o código até a linha onde o erro acontece.

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

O erro continua não aparecendo.

Acho que vai ser melhor você conectar o ACBrRFD e debugar o código até a linha onde o erro acontece.

Ok, já estou com o ACBrRFD conectado, porém não é gerado nenhum registro de log referente ao erro que estou tendo, acredito que seja pelo item estar sendo impresso normalmente.

Depurei o código e ocorre o seguinte:

 

Chamo o método VendeItem passando para o parâmetro AliquotaICMS valor '12,00T';

procedure TACBrECF.VendeItem(Codigo, Descricao: String; AliquotaICMS : String ;
  Qtd: Double; ValorUnitario: Double; ValorDescontoAcrescimo: Double;
  Unidade: String; TipoDescontoAcrescimo : String; DescontoAcrescimo : String ;
  CodDepartamento: Integer);
Var
  AliquotaECF : String ;
  Tratado     : Boolean;
begin
  AliquotaECF := '';

//Lembrando, aqui AliquotaICMS = '12,00T' e AliquotaECF = ''
//Dentro do IniciaVendeItem, AliquotaECF := AliquotaICMS;
//AliquotaECF é utilizada para verificar se essa aliquota(12,00) existe na impressora, no caso ela existe e 
//é índice 02;
//Mas depois de localizado a aliquota, a variavel AliquotaECF := indice

  IniciaVendeItem(Codigo, Descricao, AliquotaICMS, AliquotaECF, Qtd, ValorUnitario,
    ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo, DescontoAcrescimo,
    CodDepartamento);

//Assim que passa pelo IniciaVendeItem, AliquotaICMS = '12,00T' e AliquotaECF = '02';
//A rotina abaixo vai funcionar corretamente, imprimindo o item na ECF
  try
     Tratado := False;
     fsECF.VendeItem( Codigo, CodificarPaginaDeCodigoECF( Descricao ),
                      AliquotaECF, Qtd, ValorUnitario,
                      ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo,
                      DescontoAcrescimo, CodDepartamento );
  except
     if Assigned( FOnErrorVendeItem ) then
        FOnErrorVendeItem(Tratado);

     if not Tratado then
        raise;
  end;

//E por fim é executado esta rotina. Dentro dela é verificado se o sistema está com ACBrRFD conectado, se 
//estiver( que é o meu caso), é executado novamente uma pesquisa nas aliquotas da impressora pra verificar se 
//a que estou passando existe;
//Mas como observado acima  a minha variavel AliquotaECF agora vale '02', e não é encontrada na impressora, 
//pois a pesquisa é realizada pelo valor da aliquota e não pelo índice
     FinalizaVendeItem(Codigo, Descricao, AliquotaICMS, AliquotaECF, Qtd, ValorUnitario,
          ValorDescontoAcrescimo, Unidade, TipoDescontoAcrescimo, DescontoAcrescimo);
end;

Bloco de comando executado dentro da rotina FinalizaVendeItem quando ACBrRFD está conectado:

  if RFDAtivo then
  begin
//Aqui será executado a rotina AchaICMSAliquota passando AliquotaECF(atualmente com '02') para ser localizada,
// no caso o valor a ser passado deveria ser o mesmo que encontra-se na AliquotaICMS('12,00T') para funcionar 
//corretamente
     case AliquotaICMS[1] of
       'I' : AliquotaICMS := 'I1' ;
       'N' : AliquotaICMS := 'N1' ;
       'F' : AliquotaICMS := 'F1' ;
     else
        Aliquota := AchaICMSAliquota( AliquotaECF ) ;

        if Aliquota <> nil then
           AliquotaICMS := IntToStrZero(Aliquota.Sequencia,2) + Aliquota.Tipo +
                           IntToStrZero(Round(Aliquota.Aliquota*100),4)
        else
           AliquotaICMS := '' ;
     end ;

     if ValorDescontoAcrescimo > 0 then
     begin
        { RFD aceita apenas desconto em Valor, convertendo... }
        if TipoDescontoAcrescimo = '%' then
           ValorDescontoAcrescimo := RoundTo( RoundABNT(ValorUnitario*Qtd,-2) *
                                              ValorDescontoAcrescimo / 100  , -2 ) ;
        { RFD considera Descontos, valores negativos, Acrescimos positivos }
        if DescontoAcrescimo = 'D' then
           ValorDescontoAcrescimo := -ValorDescontoAcrescimo ;
     end ;

     fsRFD.VendeItem( Codigo, Descricao, Qtd, ValorUnitario, Unidade,
                      ValorDescontoAcrescimo, AliquotaICMS ) ;

  end ;
Editado por Leonardo Romano Camargo
Link para o comentário
Compartilhar em outros sites

  • Fundadores

Porque você está usando o ACBrRFD ? esse componente está condenado, ele foi projetado para atender apenas as Impressoras Matriciais que hoje em dia não podem mais ser utilizadas...

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

Daniel, eu também utilizo ACBrRFD faz muito tempo, ele sempre funcionou perfeitamente independente da impressora, até essa ultima alteração.

 

Sei que no caso das impressoras térmicas não haveria a necessidade dele, vou ver a possibilidade de remover ele do sistema .

 

Agora sobre o erro que está ocorrendo infelizmente foi devido as ultimas alterações que foram realizadas no componente, nos testes que fiz apenas como uma linha na rotina VendeItem é possível resolver todo o problema.

 

Adicionar a linha abaixo antes do comando FinalizaVendeItem() resolvi o problema.

AliquotaECF := AliquotaICMS;

Seria possivel adicionar essa linha a procedure VendeItem??

 

Desde já agradeço.

 

 

 

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Na realidade, eu não estou vendo o motivo de se utilizar a AliquotaECF ao invés do AliquotaICMS na linha:

        Aliquota := AchaICMSAliquota( AliquotaECF ) ;

Acho que deveria ser:

        Aliquota := AchaICMSAliquota( AliquotaICMS ) ;

Pelo menos me parece. No entanto, como já disse antes, não faço uso do ACBrRFD, e concordo com o Daniel em dizer que ele é para ser evitado.

 

 

 

Daniel, eu também utilizo ACBrRFD faz muito tempo, ele sempre funcionou perfeitamente independente da impressora, até essa ultima alteração.

 

Qual é a alteração que vocês mencionam? Em qual revisão?

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

EMBarbosa, o problema está na alteração realizada na revisão 7720 onde foram adicionadas as rotinas IniciaVendeItem e FinalizaVendeItem.

 

O problema ocorre apenas na FinalizaVendeItem, e a sua sugestão resolve o problema!!!!  :-P

 

Entendo o posicionamento seu e o do Daniel sobre o uso do componente, porém é uma coisa que sempre funcionou e nunca tivemos problemas com mesmo, ainda tenho um ou outro cliente que tem uma ECF matricial já no fim da vida, e por isso não posso simplesmente remover o componente do sistema, e acredito que deva ter mais alguém por aí que utilize utilize o ACBr e possa vir a passar pelo mesmo problema após efetuar a atualização do componente.

 

Já que temos o componente e ele é funcional, apenas gostaríamos que o mesmo continuasse assim, até que possamos remover ele de nossos sistemas.

 

Se for possível adicionar a alteração ao projeto seria de grande valia para nós.

 

Desde já agradeço a atenção.

 

 

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

  • Consultores

Elton, você sobe a correção ?

Ok. Enviei na revisão 7810.

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

The popup will be closed in 10 segundos...