...
Como o orçamento raramente vai ter apenas 1 item então o Mr é calculado baseado no somatórios das Mr de cada item, não entra nesse calculo produtos em promoção, utilizando a seguinte formula:
//Calcula Margens Totais do Pré-venda
Func CalMargem(aProduto,cTotMv,cTotMg,cTotMa,cTotMr,nPercDesc)
Local nCt,nTotProduto,nTotAtualProduto,nProduto,nCusto,nMargem,cTotPMargem,nImposto,nAtualProduto,cTotAtualMargem
Local cTotMargemReal,cMargemReal,cCustoReal,cMargemFixa,nTotPromAtualProduto
stor 0 to nTotProduto,nTotAtualProduto,nProduto,nCusto,nMargem,cTotPMargem,nImposto,cTotMargem,cMargemPre,nAtualProduto,cTotAtualMargem
stor 0 to cTotMargemReal,cMargemReal,cCustoReal,nTotPromAtualProduto
for nCt:=1 to len(aProduto)
if !empty(aProduto[nCt,2])
//Totaliza Valores Reais dos Produtos com Desconto/Acrescimo
nAtualProduto:=val(str(aProduto[nCt,10],15,2))
//Desconto sobre Produtos Sem Promocao
if if(lDescPromocao,aProduto[nCt,21]$"NPQM",.T.)
//Totaliza Valores Normais dos Produtos
nTotProduto:=nTotProduto+val(str((aProduto[nCt,7]*aProduto[nCt,9]),15,2))
//Calcula Total Liquido com Desconto
nAtualProduto:=val(str(nAtualProduto*(1-nPercDesc/100),15,2))
//Produtos Sem Promocao
nTotPromAtualProduto:=nTotPromAtualProduto+nAtualProduto
endif
nTotAtualProduto:=nTotAtualProduto+nAtualProduto
//Inicializa Variaveis
nProduto:=val(str((aProduto[nCt,7]*aProduto[nCt,9]),15,2))
nCusto:=val(str(aProduto[nCt,6]*aProduto[nCt,9],15,2))
nMargem:=(aProduto[nCt,31]*nProduto)/100
//Custo Real do Produto
cCustoReal:=nCusto
//Calcula Imposto Aplicado no Produto
cTotPMargem:=if(empty(nProduto),0,nMargem/nProduto)
nImposto:=if(empty(nProduto),0,1-(nCusto/nProduto)-cTotPMargem)
//Produto Margem Zero
if !aProduto[nCt,21]$"NPQM"
//Calcula Preco de Custo para Margem igual a ZERO
nMargem:=0;nCusto:=(1-nImposto)*nProduto
endif
//Totaliza Margem Normal dos Produtos
cTotMargem:=cTotMargem+nMargem
//Totaliza Margem Real dos Produtos com Desconto/Acrescimo
nAtualMargem:=if(empty(nAtualProduto),0,(1-(nCusto/nAtualProduto)-nImposto)*100)
cTotAtualMargem:=cTotAtualMargem+((nAtualMargem*nAtualProduto)/100)
//Totaliza Margem Real de Todos os Produtos Reais
cMargemReal:=if(empty(nAtualProduto),0,(1-(cCustoReal/nAtualProduto)-nImposto)*100)
cTotMargemReal:=cTotMargemReal+((cMargemReal*nAtualProduto)/100)
endif
next
//Calcula Margem Normal do Pre-venda
cTotMargem:=if(empty(nTotProduto),0,cTotMargem/nTotProduto)
cTotMargem:=cTotMargem*100
//Calcula Margem Real do Pre-venda Custo Zerado
//cTotAtualMargem:=if(empty(nTotAtualProduto),0,cTotAtualMargem/nTotAtualProduto)
cTotAtualMargem:=if(empty(nTotPromAtualProduto),0,cTotAtualMargem/nTotPromAtualProduto)
cTotAtualMargem:=cTotAtualMargem*100
//Calcula Margem Real do Pre-venda Custo Real
cTotMargemReal:=if(empty(nTotAtualProduto),0,cTotMargemReal/nTotAtualProduto)
cTotMargemReal:=cTotMargemReal*100
//
do case
case lLinear=1;cProtecao:=cSeguranca
case lLinear=3;cProtecao:=0
case lLinear=2
cProtecao:=cTotMargem*cSeguranca/100
other
cProtecao:=0
endcase
//Armazena Margem Inicial do Produto
cMargemFixa:=cTotMargem-cProtecao
//Margem Real do Pre-Venda
cMargemPre:=cTotAtualMargem
//Margem Real com a Protecao
cTotMargem:=cTotAtualMargem-cProtecao
//Calcular Margem (Vendedor/Gerente/Administrador)
if lLinear#4
if lLinear=2
cTotMg:=cTotMargem-(cMargemFixa*(1-cMargemG/100))
cTotMv:=cTotMargem-(cMargemFixa*(1-cMargemV/100))
else
cTotMg:=cTotMargem*cMargemG/100
cTotMv:=cTotMargem*cMargemV/100
endif
endif
cTotMr:=cTotMargemReal //Colocado em 17-07-12 (Demacol) margem real dos produtos de precos especiais (promocoes/queima/vip)
cTotMa:=cTotMargem
cTotMv:=val(str(cTotMv,12,2));cTotMg:=val(str(cTotMg,12,2));cTotMa:=val(str(cTotMa,12,2));cTotMr:=val(str(cTotMr,12,2))
return nil