Árvore de páginas

MATA712 - MRP Ordens de Produção

Linha de Produto:Protheus
Segmento:Manufatura
Módulo:SIGAPCP

Rotina:

MATA712

Versões:

Protheus 12

Compatível Países:

Todos

Sistemas Operacionais:

Todos

Compatível às Bases de Dados:

Todos

Nível de Acesso:

Nível 1 (Acesso Clientes)

Idiomas:Espanhol, Inglês

Objetivo:

O objetivo da função MATA712 (MRP) é gerar ordens de produção e solicitações de compras baseado em uma Demanda (Pedido/Previsão).

IMPORTANTE:

Os números da Previsão de Vendas são conseguidos por meio do contato com a área comercial com os clientes, a fim de obter informações a respeito da intenção de compras de cada um, em um determinado período. As informações, associadas aos dados históricos de vendas e à evolução do mercado, possibilitam quantificar os montantes a serem comercializados num determinado período.

Quando a produção tem demanda elevada, é repetitiva e os produtos têm aceitação no mercado, a empresa pode manter a produção à frente das vendas, deixando certa quantidade à disposição do mercado. É a produção feita para estoque.

Esse tipo de produção tem a vantagem de a venda ocorrer efetivamente tão logo o pedido seja feito pelo cliente, mas traz o inconveniente de exigir da empresa um maior capital de giro, devido ao investimento em produção para armazenamento. A capacidade financeira tem de ser compatível com os níveis de produção e estoque.

Quando o produto não apresenta venda uniforme, é requisitado pelo mercado de forma imprevista e com baixa demanda, a empresa não se arrisca a produzir algo que não sabe quando vai vender e a produção só é feita sob encomenda. Nesse caso, os pedidos se antecipam à produção, com planejamento e programação feitos em função do que está sendo encomendado, respeitando-se as especificações e características de cada pedido.

Ao contrário do que acontece com a produção para estoque, que tem o seu preço de venda previamente estabelecido, a produção sob encomenda normalmente quantifica o preço após apreciação prévia do que está sendo solicitado, por meio de levantamento do custo atualizado.

Um veículo é feito para estoque. Há sempre alguém querendo adquiri-lo e a concessionária informa seu preço imediatamente.

Um guarda-roupa residencial é feito sob encomenda. É difícil encontrá-lo nas dimensões desejadas. O preço só é definido depois que o fornecedor toma conhecimento das especificações.

Um produto com demanda elevada deve ter suas características e especificações simplificadas e padronizadas.

Programa Fonte: MATA712.PRX

Sintaxe: MATA712 - Ordens de Produção ( PARAMIXB1PARAMIXB2 ) --> Nil

Retorno: Nil(nulo)


Parâmetros:

O vetor PARAMIXB2 é composto pela estrutura abaixo:

PARAMIXB2[1] // Tipo de período 1=Diário;2=Semanal;3=Quinzenal;4=Mensal;5=Trimestral;6=Semestral;7=Diversos
PARAMIXB2[2] // Quantidade de períodos
PARAMIXB2[3] // Considera Pedidos em Carteira
PARAMIXB2[4] // Array contendo Tipos de produtos a serem considerados (se Nil, assume padrão)
PARAMIXB2[5] // Array contendo Grupos de produtos a serem considerados (se Nil, assume padrão)
PARAMIXB2[6] // Gera/Nao Gera OPs e SCs depois do cálculo da necessidade.
PARAMIXB2[7] // Indica se monta log do MRP
PARAMIXB2[8] // Número da Op Inicial
PARAMIXB2[9] // Database para inicio do cálculo
PARAMIXB2[10] // Números dos períodos para geração de OPs
PARAMIXB2[11] // Números dos períodos para geração de SCs
PARAMIXB2[12] // Máximo de 99 itens por OP
PARAMIXB2[13] // Datas para tipo de período diversos


No exemplo abaixo, existe a preparação do ambiente para rodar esta rotina, que é feita por meio do comando Prepare Environment.
// aemp[1] = Empresa (Caracter)
// aemp[2] = Filial  (Caracter)
// Administrador = Através de qual usuário irá executar a rotina. (Caracter)
// senha = Senha do usuário (Caracter)
PREPARE ENVIRONMENT EMPRESA aemp[1] ;
FILIAL aemp[2] ;
USER 'Administrador' ;
PASSWORD 'senha' ;
TABLES "SB1","SB2","SC2","SC3","SC4","SC6" ;
MODULO "PCP"


Exemplos:

User Function jobm712()

Local PARAMIXB1 := .T.  //-- .T. se a rotina roda em batch, senão .F.

Local PARAMIXB2 := {}

aAdd(PARAMIXB2,7)  //-- Tipo de período 1=Diário; 2=Semanal; 3=Quinzenal; 4=Mensal; 5=Trimestral; 6=Semestral; 7=Diversos

aAdd(PARAMIXB2,5)  //-- Quantidade de períodos

aAdd(PARAMIXB2,.T.)  //-- Considera Pedidos em Carteira

aAdd(PARAMIXB2,{})  //-- Array contendo Tipos de produtos a serem considerados, se Nil, assume padrão

aAdd(PARAMIXB2,{})  //-- Array contendo Grupos de produtos a serem considerados, se Nil, assume padrão

aAdd(PARAMIXB2,.T.)  //-- Gera/Não Gera OPs e SCs depois do cálculo da necessidade.

aAdd(PARAMIXB2,.T.)  //-- Indica se monta log do MRPaAdd(PARAMIXB2,"000001")

aAdd(PARAMIXB2,"98765")  //-- Número da Op Inicial

aAdd(PARAMIXB2,"02/10/2018")  //-- Database para inicio do cálculo

aAdd(PARAMIXB2,{1,3,5})  //-- Números dos períodos para geração de OPs

aAdd(PARAMIXB2,{1,3,5})  //-- Números dos períodos para geração de SCs

aAdd(PARAMIXB2,.F.)  //-- Máximo de 99 itens por OP

aAdd(PARAMIXB2,{"02/10/2018","04/10/2018","05/10/2018"})  //-- Datas para tipo de período diversos

aemp := {"99","01"}

Prepare Environment Empresa aemp[1] filial aemp[2] USER 'Administrador' PASSWORD '' Tables "SB1","SB2","SC2","SC3","SC4","SC6" Modulo "PCP"

//****************************

//* Monta a Tabela de Tipos  *

//****************************

dbSelectArea("SX5")

dbSeek(xFilial("SX5")+"02")

Do While (X5_FILIAL == xFilial("SX5")) .AND. (X5_TABELA == "02") .and. !Eof()

        cCapital := OemToAnsi(Capital(X5Descri()))        AADD(PARAMIXB2[4],{.T.,SubStr(X5_chave,1,2)+" "+cCapital})

        dbSkip()

EndDo

//****************************

//* Monta a Tabela de Grupos *

//****************************

dbSelectArea("SBM")

dbSeek(xFilial("SBM"))

AADD(PARAMIXB2[5],{.T.,Criavar("B1_GRUPO",.F.)+" "+"Grupo em Branco"})

Do While (BM_FILIAL == xFilial("SBM")) .AND. !Eof()

        cCapital := OemToAnsi(Capital(BM_DESC))        AADD(PARAMIXB2[5],{.T.,SubStr(BM_GRUPO,1,4)+" "+cCapital})

        dbSkip()

EndDo 

MATA712(PARAMIXB1,PARAMIXB2)   

RESET ENVIRONMENT

Return Nil


Parâmetros:


Nome



Tipo



Descrição



Default



Obrigatório



Referência



PARAMIXB1



Lógico



.T. se a rotina roda em batch, senão .F.






X






PARAMIXB2



Vetor



(Vide Observações)






X






Para rodar em batch, exemplo:

Local lBatch    := .T.  -> Identifica MRP rodado em modo Batch

Local nTipoPer  :=  1   -> Tipo de período 1=Diário;2=Semanal;3=Quinzenal;4=Mensal;5=Trimestral;6=Semestral;7=Diversos

Local nPeriodos := 20   -> Quantidade de períodos

Local lPedidos  := .F.  -> Considera Pedidos em Carteira

Local aTipo     := Nil  -> Array contendo Tipos de produtos a serem, se Nil, assume padrão

Local aGrupo    := Nil  -> Array contendo Grupos de produtos a serem considerados, se Nil, assume padrão

Local lGeraOpSc := .T.  -> Gera/Não Gera OPs e SCs depois do cálculo da necessidade.

Local lLogMrp   := .F.  -> Indica se monta log do MRP

Local cNumOpDig := "000001" -> Número da Op Inicial

Local cDatabase := "02/10/2018"

Local aPerOP := {1.3.5}

Local aPerSC := {1.3.5}

Local lMaxItemOp := .F.

Local aDataDiv := {}


Uso: MATA712(lBatch,{nTipoPer,nPeriodos,lPedidos,,,lGeraOpSc,lLogMRP,cNumOpDig,cDatabase,aPerOP,aPerSC,lMaxItemOp,aDataDiv})