Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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