01. DADOS GERAIS
Produto: |
TOTVS Backoffice
|
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Backoffice |
Módulo: | TOTVS Backoffice (Linha Protheus) - Estoque e Custos (SIGAEST)
|
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 - 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).
Importante
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 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 |
IMPORTANTE!
O tamanho do array retornado depende do número de regras configuradas no ponto de entrada MA330CP.
IMPORTANTE!
O tamanho do array retornado depende do número de regras configuradas no ponto de entrada MA330CP.
05. EXEMPLO DE UTILIZAÇÃO
IMPORTANTE!
Este exemplo é de referencia apenas, as partes variam de acordo com a regra utilizada no ponto de entrada MA330CP, podendo ter de 1 a 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.
IMPORTANTE!
Este exemplo é de referencia apenas, as partes variam de acordo com a regra utilizada no ponto de entrada MA330CP, podendo ter de 1 a 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.
Para o exemplo, considere o PE MA330CP configurado com 2 regras (3 partes) e rateio de 80%/20%/0% entre as 3 partes
#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 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