Pesquisar na Comunidade
Showing results for tags '#NFCe #ECFVirtual'.
Encontrado 1 registro
-
Desconto No Item E No Total Acbrecfvirtualnfce
um tópico no fórum postou edgardsampaio Dúvidas gerais
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