Jump to content

Assista click.png tectoy.png

C6 chamada_c6.png botao.png

Desconto No Item E No Total Acbrecfvirtualnfce


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

Recommended Posts

Esses dias, adaptando meu PDV para NFC-e verifiquei o componente ACBrECFVirtualNFCe que mais uma vez adiantou bastante nosso trabalho. Precisei fazer umas pequenas alterações nele para fazer funcionar Desconto e Acréscimo por item, Acréscimo e Desconto no total e todas as possíveis combinações dessas ações. Minha equipe de suporte está fazendo todos os testes e gostaria de compartilhar o código caso vocês queiram adicionar. Tive um problema também para emitir o DANFEESCPOS por estar usando um "ecf virtual emulado" na porta, verifiquei uma solução no fórum () mas não sei se é definitivo.
 
 
Seguem as alterações, de acordo com a classe observe os métodos. Os arquivos seguem anexos.
 
procedure TACBrECFVirtualNFCeClass.SubtotalizaCupomVirtual(
  DescontoAcrescimo: Double; MensagemRodape: AnsiString);
var
  I: Integer;
  TotalNF, TotalItem, Desc, TotalDesc, Dif: Double;
  bDesconto: Boolean;
begin
  SomaTotais;
  with fsACBrNFCe do
  begin
    bDesconto := DescontoAcrescimo < 0;
    //Rateio do Desconto/Acrescimo por item  - Ideia Tecnologia
    TotalNF := fsvProd;
    with NotasFiscais.Items[0].NFe do
    begin
      TotalDesc := 0;
      for I := 0 to Det.Count-1 do
      begin
        TotalItem := Det.Items.Prod.vProd;
        Desc := RoundABNT((Abs(DescontoAcrescimo)/TotalNF)*TotalItem ,2);
 
        //Rateado (Desconto ou Acrescimo)
        if bDesconto then
          Det.Items.Prod.vDesc := Det.Items.Prod.vDesc + Desc
        else
          Det.Items.Prod.vOutro := Det.Items.Prod.vOutro + Desc;
        TotalDesc := TotalDesc + Desc;
      end;
 
      if (TotalDesc <> Abs(DescontoAcrescimo)) then
      begin
        //Se houve diferença pelo arredondamento, acerta no último item
        Dif := Abs(DescontoAcrescimo) - TotalDesc;
        if bDesconto then
          Det.Items[Det.Count-1].Prod.vDesc := Det.Items[Det.Count-1].Prod.vDesc + Dif
        else
          Det.Items[Det.Count-1].Prod.vOutro := Det.Items[Det.Count-1].Prod.vDesc + Dif;
      end;
    end;
 
    if DescontoAcrescimo > 0 then
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vOutro := NotasFiscais.Items[0].NFe.Total.ICMSTot.vOutro + Abs(DescontoAcrescimo)
    else
      NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc  := NotasFiscais.Items[0].NFe.Total.ICMSTot.vDesc + Abs(DescontoAcrescimo);
 
    NotasFiscais.Items[0].NFe.InfAdic.infCpl := MensagemRodape;
  end;
end;
 
 
procedure TACBrECFVirtualPrinterClass.DescontoAcrescimoItemAnteriorVirtual(
  ValorDescontoAcrescimo: Double; DescontoAcrescimo,
  TipoDescontoAcrescimo: String; NumItem: Integer);
begin
  ZeraBuffer;
  if DescontoAcrescimo = 'D' then
    fsBuffer.Add( 'DESCONTO NO ITEM: '+IntToStrZero(NumItem,3))
  else
    fsBuffer.Add( 'ACRESCIMO NO ITEM: '+IntToStrZero(NumItem,3));
  ImprimeBuffer;
end;
 

procedure TACBrECFVirtualClass.DescontoAcrescimoItemAnterior(
  ValorDescontoAcrescimo: Double; DescontoAcrescimo,
  TipoDescontoAcrescimo: String; NumItem: Integer);
var
  ValorReal, Perc: Double;
begin
  if Estado <> estVenda then
    raise EACBrECFERRO.create(ACBrStr('O Estado nao é "VENDA"')) ;
 
  if fpItensCupom.Count = 0 then
    raise EACBrECFERRO.create(ACBrStr('Nenhum Item foi vendido ainda')) ;
 
  if (NumItem < 1) or (NumItem > fpItensCupom.Count) then
    raise EACBrECFERRO.create(ACBrStr('Item ('+IntToStrZero(NumItem,3)+') fora da Faixa.')) ;
 
  if fpItensCupom[NumItem-1].DescAcres <> 0 then
    raise EACBrECFERRO.create(ACBrStr('Item ('+IntToStrZero(NumItem,3)+') já tem desconto/acréscimo')) ;
 
  try
    DescontoAcrescimoItemAnteriorVirtual(ValorDescontoAcrescimo, DescontoAcrescimo,
      TipoDescontoAcrescimo, NumItem);
 
    with fpItensCupom[NumItem-1] do
    begin
 
      if TipoDescontoAcrescimo = '%' then
      begin
        Perc := ValorDescontoAcrescimo ;
        ValorReal  :=  RoundTo(Subtotal * (ValorDescontoAcrescimo / 100), -3) ;
      end
      else
      begin
        ValorReal  := ValorDescontoAcrescimo;
        Perc :=  RoundTo( (ValorReal / Subtotal) * 100, -2) ;
      end ;
 
      if DescontoAcrescimo = 'D' then
      begin
        fpSubTotal := fpSubTotal - ValorDescontoAcrescimo;
        DescAcres := ValorReal * (-1);
      end else
      begin
        fpSubTotal := fpSubTotal + ValorDescontoAcrescimo;
        DescAcres := ValorReal;
      end;
 
      with fpAliquotas[ PosAliq ] do
      begin
        Total    :=  Total + ValorReal;
        BaseICMS := BaseICMS + ValorReal;
        if BaseICMS < 0 then
          BaseICMS := 0;
      end ;
    end ;
    GravaArqINI;
  except
    LeArqINI ;
    raise;
  end ;
end;
 
Att.,
 
Edgard Sampaio
 

ACBrECFVirtualNFCe.pas

ACBrECFVirtual.pas

ACBrECFVirtualPrinter.pas

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.