Ponto-de-Entrada: M330CD1 - Manipula custo em parte nas notas de entrada
Versões: | Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Microsiga Protheus 10 |
Compatível Países: | Todos |
Sistemas Operacionais: | Todos |
Compatível às Bases de Dados: | Todos |
Idiomas: | Espanhol , Inglês |
Descrição:LOCALIZAÇÃO : Function A330Recalc - Função utilizada para recalculo o custo medio dos movimentos.
EM QUE PONTO : Executada antes de realizar a atualização do custo em partes dos movimentos de entrada
'SD1' que possuem o D1_TIPO diferente de 'D'.
O Ponto de Entrada é utilizado para manipular o custo em partes das notas de entrada.
SintaxeM330CD1 - Manipula custo em parte nas notas de entrada ( < PARAMIXB[1]> , < PARAMIXB[2]> , < PARAMIXB[3]> )
Retorno --> aRetPartes
Parâmetros:
Nome | Tipo | Descrição |
|
| Default |
|
| Obrigatório |
|
| Referência |
|
PARAMIXB[1] | Lógico | lCstPart - Variavel utilizada para verificar se o sistema esta utilizando o custo em partes. |
|
|
|
|
| X |
|
|
|
|
PARAMIXB[2] | Vetor | Array com a regra do custo em partes. |
|
|
|
|
| X |
|
|
|
|
PARAMIXB[3] | Vetor | Array com o custo medio do movimento nas 5 moedas. |
|
|
|
|
| X |
|
|
|
|
RetornoaRetPartes(vetor)- Array com o novo custo em partes para o movimento de entrada 'SD1' no formato :
aretPartes [1]: parte 1 na moeda 1 \
aretPartes [2]: parte 1 na moeda 2 \
aretPartes [3]: parte 1 na moeda 3 > Parte 1
aretPartes [4]: parte 1 na moeda 4 /
aretPartes [5]: parte 1 na moeda 5 /
aretPartes [6]: parte 2 na moeda 1 \
aretPartes [7]: parte 2 na moeda 2 \
aretPartes [8]: parte 2 na moeda 3 > Parte 2
aretPartes [9]: parte 2 na moeda 4 /
aretPartes [10]:parte 2 na moeda 5 /
...
...
a Parte abaixo corresponde a ultima parte + 1 (Outros)
aretPartes [n]: parte n na moeda 1 \
aretPartes [n]: parte n na moeda 2 \
aretPartes [n]: parte n na moeda 3 > Parte n
aretPartes [n]: parte n na moeda 4 /
aretPartes [n]: parte n na moeda 5 /
Exemplo :
Atenção: Este exemplo é de referencia apenas, as partes variam de acordo com a regra utilizada no ponto de entrada MA330CP, podendo ter de 1 á 99 partes, portanto não se deve copiar e colar sem ajustar a regra utilizada. O exemplo é apenas para demonstrar como deve ser montado o array de retorno em relação a regra usada. |
---|
UserFunctionM330CD1()
Local aAreaAnt := GetArea()
Local lCstPart := PARAMIXB[1]
Local aRegraCP := PARAMIXB[2]
Local aCusto := PARAMIXB[3]
Local aRetPartes := {}
Local nMoedas := 0
Local nPartes, nMoe
Local nPar := 0
nMoedas := 5 (mesmo que não use o MV_MOEDACM, a qtde de moedas deve ser 5)
If lCstPart
aRetPartes := Array((len(aregraCP)+1)*(nMoedas))
For nPartes := 1 to len(aRetPartes) step nMoedas
nPar += 1
For nMoe := 1 to nMoedas
If Len(aRegraCP) >= nPar
If "'MP'" $ aregraCP[nPar] .and. SD1->D1_COD = 'TESTEMP'
If nMoe = 1
aRetPartes [nPartes] := 999
Else
aRetPartes [nPartes+nMoe-1] := 0
EndIf
Else
If "'EM'" $ aregraCP[nPar] .and. (SD1->D1_COD = 'TESTEEM' .or. SD1->D1_COD = 'TESTE')
If nMoe = 1
aRetPartes [nPartes] := 999
Else
aRetPartes [nPartes+nMoe-1] := 0
EndIf
else
If nMoe = 1
aRetPartes [nPartes] := 0
else
aRetPartes [nPartes+nMoe-1] := 0
EndIf
EndIf
EndIf
else
If nMoe = 1
aRetPartes [nPartes] := 0
else
aRetPartes [nPartes+nMoe-1] := 0
EndIf
EndIf
Next nMoe
Next nPartes
else
aRetPartes := NIL
EndIf
RestArea(aAreaAnt)
Return aRetPartes