Jump to content

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

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

Saiba mais

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

Saiba mais

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

 

 

Share this post


Link to post
Share on other 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;

 

  • Like 1

Consultor SAC ACBr

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

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Share this post


Link to post
Share on other 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;

  • Like 1

Share this post


Link to post
Share on other sites

Desculpe... mas ainda não tive tempo de analisar...

Se desejar sugerir modificações nos fontes, basta anexar as Units...

  • Like 1

Consultor SAC ACBr

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

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Share this post


Link to post
Share on other 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

 

  • Like 1

Consultor SAC ACBr

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

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Share this post


Link to post
Share on other sites

Bom dia.

Chegou a alguma conclusão sobre este caso?

Att.


Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...