Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Portuguese

Pagetitle
M330CD1 - Manipula custo em parte nas notas de entrada
M330CD1 - Manipula custo em parte nas notas de entrada

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.


Eventos  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'
Observações  
  • 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, 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