Ir para conteúdo
  • Cadastre-se

dev botao

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


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

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

 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

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
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

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

  • Fundadores

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

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

  • Curtir 1
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
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
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

  • 3 semanas depois ...
  • Administradores

Bom dia.

Chegou a alguma conclusão sobre este caso?

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

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


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

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