01. DADOS GERAIS
Produto: | Solucoes_totvs_cross |
---|
SolucaoCross | TOTVS Backoffice |
---|
|
Solucoes_totvs_parceirosexptotvs |
---|
|
|
---|
Linha de Produto: | |
---|
Segmento: | |
---|
Módulo: | Modulos_cross_segmentos |
---|
ModulosCrossSegmentos | TOTVS Backoffice (Linha Protheus) - Estoque e Custos (SIGAEST) |
---|
|
Modulos_totvs_prestadores_de_servicos |
---|
|
---|
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 |
...
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 |
...
Sintaxe M330CD1 - Manipula custo em parte nas notas de entrada ( < PARAMIXB[1]> , < PARAMIXB[2]> , < PARAMIXB[3]> ) --> aRetPartes
...
Array com a regra do custo em partes |
...
| O mesmo conteúdo configurado no ponto de entrada MA330CP |
ParamIXB |
...
...
...
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 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! |
---|
|
05. EXEMPLO DE UTILIZAÇÃO
Card documentos |
---|
Informacao | 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. |
---|
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 |
---|
language | java |
---|
theme | Midnight |
---|
title | Exemplo M330CD1 |
---|
linenumbers | true |
---|
|
#INCLUDE "TOTVS.CH"
/*/{Protheus.doc} M330CD1
Manipula o custo da nota fiscal de entrada
@type user function
@author TOTVS
/*/
de entrada 'SD1' Observações Exemplos #INCLUDE 'RWMAKE.CH'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 // -- 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(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