Árvore de páginas


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:

MovimentoQuantidadeCusto TotalCusto MédioCusto Parte 1Parte 2Parte 3
Compra50020.0004020.00000
Requisição2008.00040800000
Saldo Final30012.0004012.00000

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:

MovimentoQuantidadeCusto TotalCusto MédioCusto Parte 1Parte 2Parte 3
Compra50020.0004014.0006.0000
Requisição2008.000405.6002.4000
Saldo Final30012.000408.4003.6000


03. PARÂMETROS

Além dos parâmetros que o ponto de entrada recebe, ele estará posicionado na nota fiscal de entrada (SD1).

NomeTipoDescriçãoConteúdo
ParamIXB[1]LógicolCstParte - Indica se o custo em partes está sendo calculado.T. ou .F.
ParamIXB[2]ArrayaRegraCP - Array com a regra do custo em partesO mesmo conteúdo configurado no ponto de entrada MA330CP
ParamIXB[3]ArrayaCusto - 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çãoParteMoedaDescrição
111Custo médio ou total na parte 1 e moeda 1
212Custo médio ou total na parte 1 e moeda 2
313Custo médio ou total na parte 1 e moeda 3
414Custo médio ou total na parte 1 e moeda 4
515Custo médio ou total na parte 1 e moeda 5
621Custo médio ou total na parte 2 e moeda 1
722Custo médio ou total na parte 2 e moeda 2
823Custo médio ou total na parte 2 e moeda 3
924Custo médio ou total na parte 2 e moeda 4
1025Custo médio ou total na parte 2 e moeda 5
............
(n-1) x 5 +1n1Custo médio ou total na parte n e moeda 1
(n-1) x 5 +2n2Custo médio ou total na parte n e moeda 2
(n-1) x 5 +3n3Custo médio ou total na parte n e moeda 3
(n-1) x 5 +4n4Custo médio ou total na parte n e moeda 4
(n-1) x 5 +5n5Custo 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.

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.

Para o exemplo, considere o PE MA330CP configurado com 2 regras (3 partes) e rateio de 80%/20%/0% entre as 3 partes


Exemplo M330CD1
#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