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: | |||||||||||||
Parâmetro : |
| ||||||||||||
Retorno: |
|
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.
})