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
e é 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'
Observações 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 /
ExemploAtenção: Este exemplo é de referencia apenas, o custo em partes varia na quantidade de campos correspondendo
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
Exemplos #INCLUDE 'RWMAKE.CH'User Function M330CD1()Local aAreaAnt := GetArea()
Local lCstPart := PARAMIXB[1]
Local aRegraCP := PARAMIXB[2]
Local aCusto := PARAMIXB[3]
Local aRetPartes := {}//-- Customizacoes do Cliente//-- Vale ressaltar que a tabela SD1 ja esta posicionadaRestArea(aAreaAnt)Return aRetPartes //-- Retorna o array com o novo custo em partes para este movimento
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