Ir para conteúdo
  • Cadastre-se

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Comprar

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Comprar

Scheila Dornelles

Subtotalização de desconto após rejeição ACBrECFVirtualSATClass

Recommended Posts

Bom dia,

Utilizo o ACBrECFVirtual para realizar as operações do SAT. Encontrei divergência no valor relacionado aos descontos totais  ( fpTotalDescontosICMS da unit ACBrECFVirtual ) quando da emissão do relatório da Redução Z para a seguinte situação: 

- Rejeição do CFe SAT: por exemplo ao informar um valor de cpf inválido 00.000.000/0000-00.

Ao realizar debug, verifiquei que o campo fpTotalDescontosICMS é atualizado ao subtotalizar o cupom  (TACBrECFVirtualClass.SubtotalizaCupom), onde o arquivo .ini é atualizado,  e somente posteriormente a este passo, será chamada a rotina em TACBrECFVirtualSATClass.FechaCupomVirtual. Se houver 3 rejeições seguidas para o mesmo CFe, então o valor do desconto será acrescentado 3x no campo de desconto total, fazendo que ao ser emitido o relatório da Z, o valor líquido das vendas do dia esteja incorreto. 

Gostaria de saber como posso proceder neste caso, devo implementar no evento OnErrorFechaCupom para ajustar os valores dos totalizadores do arquivo Ini ? Ou poderia ser alterado o momento da gravação dos campos totais do arquivo ini somente após a efetivação da operação? Alguma sugestão para a correção a ser realizada?

 

Att.

Scheila H. Dorneles

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o Exception seguir o fluxo normal, o próprio ACBr irá desfazer a alteração no INI... em:

procedure TACBrECFVirtualClass.FechaCupom(Observacao: AnsiString; IndiceBMP : Integer);
begin
  GravaLog( ComandoLOG );

  if Estado <> estPagamento then
    raise EACBrECFERRO.create(ACBrStr('O Estado nao é "PAGAMENTO", não houve SubTotal')) ;

  if CompareValue(TotalPago, SubTotal, 0.001) < 0 then
    raise EACBrECFERRO.create(ACBrStr('Total Pago é inferior ao Total do Cupom')) ;

  Observacao := StringReplace( Observacao, #10, CRLF, [rfReplaceAll] ) ;

  try
    EnviaConsumidorVirtual;
    FechaCupomVirtual(Observacao, IndiceBMP);    // <--- AQUI ocorrerá o Fechamento do TACBrECFVirtualSATClass

    fpEstado := estLivre ;

    GravaArqINI ;
  except
    LeArqINI;    // <----- AQUI as alterações feitas no fechamento serão desfeitas, em caso de Exception
    raise;
  end ;
end;

 

  • Curtir 1

Consultor SAC ACBr

Daniel Simões de Almeida
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, mas ao executar LerArqIni ele vai ler o valor que já foi atualizado no passo anterior, visto que o subtotaliza é executado sem erros. Só os valores da venda do item são retornados e não os subtotais: 

procedure TACBrECFVirtualClass.SubtotalizaCupom(DescontoAcrescimo: Double;
       MensagemRodape : AnsiString );
var
  ValorTotal: Double;
  PosAliqItem, I: Integer;
begin
  GravaLog( ComandoLOG );

  if not (Estado in [estVenda, estNaoFiscal]) then
    raise EACBrECFERRO.create(ACBrStr('O Estado nao é "VENDA" Cupom não Aberto')) ;

  if SubTotal <= 0 then
    raise EACBrECFERRO.create(ACBrStr('Nenhum Item foi vendido ainda')) ;

  try
    { Essa atribuição irá recomputar o total por aliquota, considerando o Rateio
      desse Desconto / Acrescimo, nos totais por aliquota do Cupom.
      Veja "TACBrECFVirtualClassCupom.SetDescAcresSubtotal" }
    fpCupom.DescAcresSubtotal := DescontoAcrescimo;

    fpEstado := estPagamento ;

    if (DescontoAcrescimo < 0) then
    begin
      fpTotalDescontosICMS  := fpTotalDescontosICMS  - fpCupom.DescAcresSubtotalICMS;
      fpTotalDescontosISSQN := fpTotalDescontosISSQN - fpCupom.DescAcresSubtotalISSQN;
    end
    else
    begin
      fpTotalAcrescimosICMS  := fpTotalAcrescimosICMS  + fpCupom.DescAcresSubtotalICMS;
      fpTotalAcrescimosISSQN := fpTotalAcrescimosISSQN + fpCupom.DescAcresSubtotalISSQN;

      { Se for Acréscimo, deve somar em GT e Venda Bruta }
      fpVendaBruta  := fpVendaBruta  + DescontoAcrescimo;
      fpGrandeTotal := fpGrandeTotal + DescontoAcrescimo;
    end;

    { Recomputando Total Diário das Aliquotas. Lista fpCupom.Aliquotas,
      contem o total por Aliquota do Cupom, já considerando se o rateio de
      Desconto e Acrescimo no SubTotal }
    if fpCupom.Aliquotas.Count > 0 then
    begin
      { Primeiro, vamos remover o ValorTotal por Item, que já havia sido
        adicionado em "VendeItem"; }
      For I := 0 to fpCupom.Itens.Count-1 do
      begin
        with fpCupom.Itens do
        begin
          ValorTotal := TotalLiquido;
          PosAliqItem:= AliqPos;
        end;

        with fpAliquotas[ PosAliqItem ] do
          Total := max(Total - ValorTotal, 0) ;
      end;

      { Agora, vamos adicionar o total computado por aliquota usada no cupom.
        Essa lista já contem o rateio do Desconto/Acrescimo dessa operação }
      for I := 0 to fpCupom.Aliquotas.Count-1 do
      begin
        with fpCupom.Aliquotas do
        begin
          ValorTotal := TotalLiquido;
          PosAliqItem:= AliqPos;
        end;

        with fpAliquotas[ PosAliqItem ] do
          Total := max(Total + ValorTotal, 0) ;
      end;
    end;

    SubtotalizaCupomVirtual( MensagemRodape );

    GravaArqINI ;   - - - > aqui atualiza o valor do fpTotalDescontosICMS   por exemplo, sem erros 
  except
    LeArqINI ;
    raise;
  end ;
end;

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 16/01/2019 at 14:09, Scheila Dornelles disse:

Então, mas ao executar LerArqIni ele vai ler o valor que já foi atualizado no passo anterior, visto que o subtotaliza é executado sem erros. Só os valores da venda do item são retornados e não os subtotais: 

Isso não parece ser o problema... Uma vez que ele não tenta enviar algo ao SAT, nesse momento...

Repare que o envio do XML ao SAT, somente ocorre em: TACBrECFVirtualSATClass.FechaCupomVirtual.. ou seja, antes disso o ECFVirtual ficará no estado estPagamento,  e não permitirá novas sub-totalizações

 

  • Curtir 1

Consultor SAC ACBr

Daniel Simões de Almeida
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

Chegou a alguma conclusão sobre este caso?

Att.


Consultora SAC ACBr

Juliana Tamizou

Conheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

Projeto ACBr

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, Faça seu login agora mesmo para postar com sua conta.

Visitante
Responder

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Criar Novo...