Árvore de páginas

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.


Programa Fonte
MATA330.PRX
Sintaxe

M330CD1 - Manipula custo em parte nas notas de entrada ( < PARAMIXB[1]> , < PARAMIXB[2]> , < PARAMIXB[3]> )

Retorno --> aRetPartes

Parâmetros:


NomeTipoDescrição

Default

Obrigatório

Referência
PARAMIXB[1]LógicolCstPart - Variavel utilizada para verificar se o sistema esta utilizando o custo em partes.




X



PARAMIXB[2]VetorArray com a regra do custo em partes.




X



PARAMIXB[3]VetorArray com o custo medio do movimento nas 5 moedas.




X




Retorno
aRetPartes
    (vetor)
  • Array com o novo custo em partes para o movimento de entrada 'SD1' no formato :

       aretPartes [1]: parte 1 na moeda 1 (Campo D1_CP0101)  \
       aretPartes [2]: parte 1 na moeda 2 (Campo D1_CP0102)    \
       aretPartes [3]: parte 1 na moeda 3 (Campo D1_CP0103)      > Parte 1
       aretPartes [4]: parte 1 na moeda 4 (Campo D1_CP0104)    /
       aretPartes [5]: parte 1 na moeda 5 (Campo D1_CP0105)  /

       aretPartes [6]: parte 2 na moeda 1 (Campo D1_CP0201)  \
       aretPartes [7]: parte 2 na moeda 2 (Campo D1_CP0202)    \
       aretPartes [8]: parte 2 na moeda 3 (Campo D1_CP0203)      > Parte 2
       aretPartes [9]: parte 2 na moeda 4 (Campo D1_CP0204)    /
       aretPartes [10]:parte 2 na moeda 5 (Campo D1_CP0205)  /
       ...
       ...
      a Parte abaixo corresponde a ultima parte + 1 (Outros)
       aretPartes [nn]: parte nn na moeda 1 (Campo D1_CPnn01)  \
       aretPartes [nn]: parte nn na moeda 2 (Campo D1_CPnn02)    \
       aretPartes [nn]: parte nn na moeda 3 (Campo D1_CPnn03)      > Parte n
       aretPartes [nn]: parte nn na moeda 4 (Campo D1_CPnn04)    /
       aretPartes [nn]: parte nn na moeda 5 (Campo D1_CPnn05)  /


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 adequar a regra utilizada.

O exemplo é apenas para demonstrar como deve ser montado o array de retorno em relação a regra usada.


User Function M330CD1()

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