Árvore de páginas

 LJ7104 - Ponto de entrada para que seja possível modificar o desconto de Total para o desconto por item.

Descrição:

Foi Criado um ponto de entrada que é executado logo após a confirmação do Desconto no total da venda. Esse ponto de entrada modifica o Desconto no total para o desconto por item. Sendo que a proporcionalização do valor do desconto total deve ser gerado a partir do Rdmake do usuário sendo esse tendo que passar para o sistema os itens com o seu valor e porcentagem de desconto.

Localização:

Rotina de Validação do Desconto no Total - LJ7VldDesc Localizada no fonte: LOJA701A.PRW  

Eventos:

Ao realizar um orçamento no Venda Assistida selecionando, adicionado os itens para a venda, o usuário executando a rotina de desconto no total da venda o sistema apresenta a tela de desconto no total solicitando tanto o percentual quanto o valor do desconto. ao confirmar o ponto de entrada deve receber os valores de percentual e valor total de desconto e manipular esses e aplicando o desconto por item. Sendo que o valor do desconto total deve ser o mesmo valor de desconto somando os desconto dos itens.

Programa Fonte:LOJA701A.PRW

Pacote de Programa:

TVSP95.zip

Parâmetro :

ParamIxb[1]Numérico Percentual do desconto Total que foi dado no orçamento.
ParamIxb[2]Numérico Valor Total de desconto que foi dado no orçamento
Nome
Tipo
Modo
Descrição
Retorno:
Tipo
Obrigatório
Descrição
ArraySimArray manipulado com as informações dos itens,valor e desconto proporcional.

Exemplo da Criação do Ponto de Entrada:

#Include 'Protheus.ch'

//-------------------------------------------------------------------
/*/{Protheus.doc} LJ7104
@description Ponto de Entrada para manipulação do Desconto
@author 
@since 00/00/0000
@version 11.80
/*/
//-------------------------------------------------------------------

#Include 'Protheus.ch'

User Function LJ7104()
Local nPercent := ParamIxb[1]
Local nVldDesc := ParamIxb[2]
Local aAux := {}
Local aRet := {}
Local nPosPrd := Ascan(aHeader,{|x| AllTrim(Upper(x[2])) == "LR_PRODUTO"})
Local nPosIT := Ascan(aHeader,{|x| AllTrim(Upper(x[2])) == "LR_ITEM"})
Local nPosVIT := Ascan(aHeader,{|x| AllTrim(Upper(x[2])) == "LR_VLRITEM"})
Local nX := 0
Local lDelet := .F.
Local cCodPro := ""
Local nPosCPrd := 0
Local nDescMax := 0
Local nVDescAp := 0
Local nDifDesc := 0
Local nTotVen := 0
Local nValTot := Lj7T_Total(2)
Local aProd := {{"000506" ,; // Codigo Produto
                                    10 },; // Porcentagem Desconto Maximo
                           {"000507" ,; // Codigo Produto
                                     99 }} // Porcentagem Desconto Maximo

For nX := 1 to Len(aCols)
         // Verifico se o Item Esta Deletado.
         lDelet := ATail(acols[nX])
         If !lDelet .And. nPosPrd > 0 .And. nPosIT > 0
               // pego o produto
               cCodPro := acols[nX][nPosPrd]
               nPosCPrd := Ascan(aProd,{|x| AllTrim(Upper(x[1])) == AllTrim(cCodPro) })
               // Verifico o percentual do Produto
               If nPosCPrd > 0
                     nDescMax := aProd[nPosCPrd][2]
               Else
                     nDescMax := 99
               EndIf

               // Caso o Desconto Maximo permitido seja maior que o desconto aplicado fico o Concedido
               If nDescMax > nPercent
                       AADD(aAux, {Acols[nX][nPosIT] , Acols[nX][nPosPrd] , Acols[nX][nPosVIT] * (nPercent / 100) , nPercent , .T., Acols[nX][nPosVIT] } )
                       nVDescAp += Acols[nX][nPosVIT] * (nPercent / 100)
                       nTotVen += Acols[nX][nPosVIT]
               Else
                      AADD(aAux, {Acols[nX][nPosIT] , Acols[nX][nPosPrd] , Acols[nX][nPosVIT] * (nDescMax / 100) , nDescMax , .F., Acols[nX][nPosVIT] } )
                      nVDescAp += Acols[nX][nPosVIT] * (nDescMax / 100)
              EndIf

         EndIf
Next nX

nDifDesc := nVldDesc - nVDescAp

// Trabalho o Desconto individualemte. jogo no outro item a diferenca
For nX := 1 to Len(aAux)
          If aAux[nX][5]
                    aAux[nX][3] := ((nDifDesc / nTotVen ) * aAux[nX][6]) + aAux[nX][3] // Valor do Desconto
                    aAux[nX][4] := (aAux[nX][3] / aAux[nX][6]) * 100 // Porcentagem do Desconto
          EndIf

         AAdd(aRet , {aAux[nX][1] , aAux[nX][2], aAux[nX][3] , aAux[nX][4] })

Next nX

MsgAlert("Meu Ponto de Entrada LJ7104 ")

Return(aRet)

Composição do Array e exemplo do Conteúdo:

Os itens do array devem ser apresentados da seguinte forma:
1 - Item - Caracter
2 - Codigo Produto - Caracter
3 - Valor do Desconto - Numerico
4 - Percentual do Desconto - Numerico
Item 001
AAdd(aRet , {cItem , ; // item que deve corresponder ao item do acols para aplicação do desconto proporcional
cCodPro, ; // Codigo do Produto que deve corresponder ao item que esta no acols.
nValDesc , ; // Valor do desconto já proporcionalizado por item.
nPerDesc, ; // Percentual do desconto recalculado com o rateio do desconto total.
})

Item 002
AAdd(aRet , {cItem , ; // item que deve corresponder ao item do acols para aplicação do desconto proporcional
cCodPro, ; // Codigo do Produto que deve corresponder ao item que esta no acols.
nValDesc , ; // Valor do desconto já proporcionalizado por item.
nPerDesc, ; // Percentual do desconto recalculado com o rateio do desconto total.
})