Histórico da Página
01. DADOS GERAIS
Produto: |
| |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Linha de Produto: |
| |||||||||||||
Segmento: |
| |||||||||||||
Módulo: |
| |||||||||||||
Função: | MATA330 | |||||||||||||
País: | Brasil | |||||||||||||
Ticket: | ||||||||||||||
Issue: | DMANMAT01-42029 |
02. DESCRIÇÃO
O ponto de entrada M330CD1 é utilizado em conjunto com o ponto de entrada MA330CP e permite a manipulação do custo em partes de notas fiscais de entrada (SD1) que não sejam do tipo (D1_TIPO) D-Devolução. Veja o tópico Assuntos Relacionados para maiores detalhes sobre o custo em partes e o ponto de entrada MA330CP.
Por padrão, a regra configurada no ponto de entrada MA330CP atribui o custo da nota fiscal na parte em que o produto se enquadra, e o ponto de entrada M330CD1 é utilizado para sobrepor este custo.
Assim como ocorre com o custo padrão, o custo em partes da nota fiscal de compras é adicionado na tabela de saldos físico/financeiro (SB2 ou TR2, durante o recálculo). Quando ocorrem movimentações que requisitam o saldo no estoque a custo médio, o custo em partes é requisitado proporcionalmente.
Veja um exemplo sem o ponto de entrada M330CD1:
Configuração do custo em partes:
- Parte 1: Produtos insumos industriais (B1_TIPO = II)
- Parte 2: Produtos matéria-prima (B1_TIPO = MP)
- Parte 3: Outros (demais produtos não classificados na regra anterior)
Movimentações no período:
- Compra de produto insumo industrial: Quantidade 500 | Custo total 20.000
- Requisição de produto insumo industrial: Quantidade 200 | Custo: médio (a calcular)
Após a execução do recálculo, teremos:
Movimento | Quantidade | Custo Total | Custo Médio | Custo Parte 1 | Parte 2 | Parte 3 |
---|---|---|---|---|---|---|
Compra | 500 | 20.000 | 40 | 20.000 | 0 | 0 |
Requisição | 200 | 8.000 | 40 | 8000 | 0 | 0 |
Saldo Final | 300 | 12.000 | 40 | 12.000 | 0 | 0 |
Digamos que, para o produto de insumo industrial, deseje-se que parte do custo seja atribuído à parte 2 - matéria prima. Isto é possível somente com a manipulação do custo através do ponto de entrada M330CD1. Ainda no mesmo exemplo, supondo que deseje-se atribuir 70% à parte 1 e 30% à parte 2, teremos:
Movimento | Quantidade | Custo Total | Custo Médio | Custo Parte 1 | Parte 2 | Parte 3 |
---|---|---|---|---|---|---|
Compra | 500 | 20.000 | 40 | 14.000 | 6.000 | 0 |
Requisição | 200 | 8.000 | 40 | 5.600 | 2.400 | 0 |
Saldo Final | 300 | 12.000 | 40 | 8.400 | 3.600 | 0 |
03. PARÂMETROS
Além dos parâmetros que o ponto de entrada recebe, ele estará posicionado na nota fiscal de entrada (SD1).
Nome | Tipo | Descrição | Conteúdo |
---|---|---|---|
ParamIXB[1] | Lógico | lCstParte - Indica se o custo em partes está sendo calculado | .T. ou .F. |
ParamIXB[2] | Array | aRegraCP - |
Composition Setup |
---|
import.css=/download/attachments/327912/newLayout.css |
...
...
'SD1' que possuem o D1_TIPO diferente de 'D'.
O Ponto de Entrada é utilizado para manipular o custo em partes das notas de entrada.
MATA330.PRX
M330CD1 - Manipula custo em parte nas notas de entrada ( < PARAMIXB[1]> , < PARAMIXB[2]> , < PARAMIXB[3]> )
Retorno --> aRetPartes
...
Array com a regra do custo em partes |
...
O mesmo conteúdo configurado no ponto de entrada MA330CP | |
ParamIXB |
...
[3] |
...
Array | aCusto - Array com |
...
custo da nota fiscal de entrada, nas 5 moedas | aCusto[1] - Custo total na moeda 1 aCusto[2] - Custo total na moeda 2 aCusto[3] - Custo total na moeda 3 aCusto[4] - Custo total na moeda 4 aCusto[5] - Custo total na moeda 5 |
04. RETORNO
aRetPartes -
...
Array com o novo custo em partes para a nota fiscal de entrada (SD1).
Informações | ||
---|---|---|
| ||
Caso não se deseje manipular o custo da nota posicionada, retornar Nil (nulo) ao ponto de entrada. |
Atualmente, existem dois retornos possíveis para o Array de retorno:
- Para notas que não são de transferência
- Para notas que são de transferência, onde ambas as notas de entrada e saída estão sendo processadas juntas.
Caso não seja uma nota de transferência, o retorno deve ser o custo do movimento
...
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 /
dividido pela quantidade (D1_CUSTO/D1_QUANT).
Caso seja uma nota de transferência, o retorno deve ser o custo total do movimento.
Estrutura do Array:
Posição | Parte | Moeda | Descrição |
---|---|---|---|
1 | 1 | 1 | Custo médio ou total na parte 1 e moeda 1 |
2 | 1 | 2 | Custo médio ou total na parte 1 e moeda 2 |
3 | 1 | 3 | Custo médio ou total na parte 1 e moeda 3 |
4 | 1 | 4 | Custo médio ou total na parte 1 e moeda 4 |
5 | 1 | 5 | Custo médio ou total na parte 1 e moeda 5 |
6 | 2 | 1 | Custo médio ou total na parte 2 e moeda 1 |
7 | 2 | 2 | Custo médio ou total na parte 2 e moeda 2 |
8 | 2 | 3 | Custo médio ou total na parte 2 e moeda 3 |
9 | 2 | 4 | Custo médio ou total na parte 2 e moeda 4 |
10 | 2 | 5 | Custo médio ou total na parte 2 e moeda 5 |
... | ... | ... | ... |
(n-1) x 5 +1 | n | 1 | Custo médio ou total na parte n e moeda 1 |
(n-1) x 5 +2 | n | 2 | Custo médio ou total na parte n e moeda 2 |
(n-1) x 5 +3 | n | 3 | Custo médio ou total na parte n e moeda 3 |
(n-1) x 5 +4 | n | 4 | Custo médio ou total na parte n e moeda 4 |
(n-1) x 5 +5 | n | 5 | Custo médio ou total na parte n e moeda 5 |
Card documentos Informacao O tamanho do array retornado depende do número de regras configuradas no ponto de entrada MA330CP. Titulo IMPORTANTE!
Informacao | O tamanho do array retornado depende do número de regras configuradas no ponto de entrada MA330CP. |
---|---|
Titulo | IMPORTANTE! |
05. EXEMPLO DE UTILIZAÇÃO
Exemplo :
...
Card documentos Informacao
Informacao |
---|
Este exemplo é de referencia apenas, as partes variam de acordo com a regra utilizada no ponto de entrada MA330CP,
Este exemplo é de referencia apenas, as partes variam de acordo com a regra utilizada no ponto de entrada MA330CP, |
...
podendo ter de 1
podendo ter de 1 |
...
a 99 partes, portanto não se deve copiar e colar sem
a 99 partes, portanto não se deve copiar e colar sem |
...
adequar a regra utilizada.
adequar a regra utilizada. |
...
O exemplo é apenas para demonstrar como deve ser montado o array de retorno em relação a regra usada. Titulo IMPORTANTE!
O exemplo é apenas para demonstrar como deve ser montado o array de retorno em relação a regra usada. | |
Titulo | IMPORTANTE! |
---|
Para o exemplo, considere o PE MA330CP configurado com 2 regras (3 partes) e rateio de 80%/20%/0% entre as 3 partes
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "TOTVS.CH"
/*/{Protheus.doc} M330CD1
Manipula o custo da nota fiscal de entrada
@type user function
@author TOTVS
/*/
User Function M330CD1()
Local aAreaAnt := GetArea()
Local aAreaSF4 := SF4->(GetArea())
Local aAreas := {aAreaSF4, aAreaAnt}
Local lCstPart := PARAMIXB[1]
Local aRegraCP := PARAMIXB[2]
Local aCusto := PARAMIXB[3]
Local aRetPartes := Nil
Local nMoedas := 0
Local nPartes, nMoe
Local aRateio := {0.80, 0.20, 0.0}
nMoedas := 5 //(mesmo que não use o MV_MOEDACM, a qtde de moedas deve ser 5)
If lCstPart
If SD1->D1_DOC = 'DOC123456' //Implementar regra de filtro
SF4->(DbSetOrder(1)) //F4_FILIAL+F4_CODIGO
If SF4->(DbSeek(FWXFilial('SF4')+SD1->D1_TES))
If SF4->F4_TRANFIL <> '1' //Não é nota de transferência
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]aRetPartes :=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 Array((len(aregraCP)+1)*(nMoedas))
For nPartes := 1 To Len(aRegraCP)
For nMoe := 1 To nMoedas
aRetPartes[(nPartes-1)*5+nMoe] := aCusto[nMoe]*aRateio[nPartes] / SD1->D1_QUANT
Next nMoe
Next nPartes
EndIf
EndIf
EndIf
Else
aRetPartes := NIL
EndIf
AEval(aAreas, {|x| RestArea(x)})
Return aRetPartes |
06. ASSUNTOS RELACIONADOS
- Custo em Partes - Recálculo do Custo Médio
- MA330CP - Define regras para classificação de matéria-prima
Templatedocumentos |
---|