Home

Linha Microsiga Protheus

Páginas filhas
  • MATA200 - Montagem de Produtos

Função: MATA200 - Montagem de Produtos
Abrangências: Microsiga Protheus 8.11 , Protheus 10
Versões: Microsiga Protheus 8.11 , Protheus 10
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
Descrição:

OBJETIVO:
A estrutura bill of materials demonstra como um produto é montado em todos os seus níveis, apresentando seus componentes e quantidades em forma de árvore com cada elemento ligado ao nível superior (produto "pai").

É com base nas estruturas que uma Ordem de Produção gera os empenhos dos componentes do produto para sua produção, permitindo a requisição automática deste material, baixa dos materiais e apuração do custo do produto.

Para determinar a fabricação/montagem é preciso que se tenha a relação dos componentes + mão-de-obra adequada e, se necessário, produtos fantasma para formação do produto acabado ou intermediário.

IMPORTANTE:
Para formação das estruturas são informados basicamente:
• Conjunto

Produto a ser produzido - Produto Acabado ou Intermediário.
• Componentes

Produtos ou materiais utilizados na produção do conjunto - Matéria-prima ou Produto Intermediário.
• Quantidade

Quantidade utilizada para fabricação de uma unidade de conjunto. No caso de mão-de-obra, deve-se informar como quantidade, o tempo padrão gasto em cada centro de custo.

Para empenho e compra do produto, é solicitada a quantidade normal que deve ser utilizada no conjunto acrescida do percentual de perda, se definido.

Unidades de Medidas

Para informar quais as unidades de medidas que serão utilizadas na validação do cadastro de estrutura deve-se configurar o parâmetro "MV_CONSDUM".

Ao cadastrar uma nova estrutura de produtos é verificada a quantidade base juntamente com as quantidades informadas em seus componentes, consistindo assim possíveis diferenças. Caso o parâmetro não exista, o Sistema utilizará a unidade de medida padrão para validação, que é quilo (KG).

Obs.: No campo conteúdo, as unidades de medida a serem consideradas deverão ser separadas pelo símbolo – “/” .

Programa Fonte:
MATA200.PRW
Sintaxe:

MATA200 - Montagem de Produtos ( PARAMIXB1PARAMIXB2 [ PARAMIXB3 ] ) --> Nil

Retorno:
    Nil(nulo)
  • Nil
Observações


Atenção: Na opção exclusão, posicione a tabela SG1 com o produto (PA ou PI) que terá sua estrutura excluída.

Exemplos
User Function MyMATA200(PARAMIXB3)Local PARAMIXB1  := {}Local PARAMIXB2 := {}Local aGets := {}Local lOK   := .T.Local cStringPrivate lMsErroAuto := .F.Default PARAMIXB3 := 3//------------------------//| Abertura do ambiente |//------------------------PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "PCP" TABLES "SB1","SG1","SG5"ConOut(Repl("-",80))ConOut(PadC("Teste de rotina automatica para estrutura de produtos",80))//------------------------//| Teste de Inclusao    |//------------------------dbSelectArea("SB1")dbSetOrder(1)If !SB1->(MsSeek(xFilial("SB1")+"PA001"))	lOk := .F.	ConOut("Cadastrar produto acabado: PA001")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"PI001"))	lOk := .F.	ConOut("Cadastrar produto intermediario: PI001")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"PI002"))	lOk := .F.	ConOut("Cadastrar produto intermediario: PI002")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"PI003"))	lOk := .F.	ConOut("Cadastrar produto intermediario: PA003")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"MP001"))	lOk := .F.	ConOut("Cadastrar produto materia prima: MP001")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"MP002"))	lOk := .F.	ConOut("Cadastrar produto materia prima: MP002")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"MP003"))	lOk := .F.	ConOut("Cadastrar produto materia prima: MP003")EndIfIf !SB1->(MsSeek(xFilial("SB1")+"MP004"))	lOk := .F.	ConOut("Cadastrar produto materia prima: MP004")EndIfIf PARAMIXB3==3	PARAMIXB1 := {{"G1_COD","PA001",NIL},;		{"G1_QUANT",1,NIL},;		{"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra recalcular ou nao a                                     // estrutura	aGets := {}	aadd(aGets,{"G1_COD","PA001",NIL})	aadd(aGets,{"G1_COMP","PI001",NIL})	aadd(aGets,{"G1_TRT",Space(3),NIL})	aadd(aGets,{"G1_QUANT",1,NIL})	aadd(aGets,{"G1_PERDA",0,NIL})	aadd(aGets,{"G1_INI",CTOD("01/01/01"),NIL})	aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL})	aadd(PARAMIXB2,aGets)	aGets := {}	aadd(aGets,{"G1_COD","PI001",NIL})	aadd(aGets,{"G1_COMP","PI002",NIL})	aadd(aGets,{"G1_TRT",Space(3),NIL})	aadd(aGets,{"G1_QUANT",1,NIL})	aadd(aGets,{"G1_PERDA",0,NIL})	aadd(aGets,{"G1_INI",CTOD("01/01/01"),NIL})	aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL})	aadd(PARAMIXB2,aGets)	aGets := {}	aadd(aGets,{"G1_COD","PI001",NIL})	aadd(aGets,{"G1_COMP","MP002",NIL})	aadd(aGets,{"G1_TRT",Space(3),NIL})	aadd(aGets,{"G1_QUANT",1,NIL})	aadd(aGets,{"G1_PERDA",0,NIL})	aadd(aGets,{"G1_INI",CTOD("01/01/01"),NIL})	aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL})	aadd(PARAMIXB2,aGets)	aGets := {}	aadd(aGets,{"G1_COD","PI002",NIL})	aadd(aGets,{"G1_COMP","MP001",NIL})	aadd(aGets,{"G1_TRT",Space(3),NIL})	aadd(aGets,{"G1_QUANT",1,NIL})	aadd(aGets,{"G1_PERDA",0,NIL})	aadd(aGets,{"G1_INI",CTOD("01/01/01"),NIL})	aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL})	aadd(PARAMIXB2,aGets)	aGets := {}	aadd(aGets,{"G1_COD","PA001",NIL})	aadd(aGets,{"G1_COMP","PI003",NIL})	aadd(aGets,{"G1_TRT",Space(3),NIL})	aadd(aGets,{"G1_QUANT",1,NIL})	aadd(aGets,{"G1_PERDA",0,NIL})	aadd(aGets,{"G1_INI",CTOD("01/01/01"),NIL})	aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL})	aadd(PARAMIXB2,aGets)	aGets := {}	aadd(aGets,{"G1_COD","PA001",NIL})	aadd(aGets,{"G1_COMP","MP004",NIL})	aadd(aGets,{"G1_TRT",Space(3),NIL})	aadd(aGets,{"G1_QUANT",1,NIL})	aadd(aGets,{"G1_PERDA",0,NIL})	aadd(aGets,{"G1_INI",CTOD("01/01/01"),NIL})	aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL})	aadd(PARAMIXB2,aGets)	aGets := {}	aadd(aGets,{"G1_COD","PI003",NIL})	aadd(aGets,{"G1_COMP","MP003",NIL})	aadd(aGets,{"G1_TRT",Space(3),NIL})	aadd(aGets,{"G1_QUANT",1,NIL})	aadd(aGets,{"G1_PERDA",0,NIL})	aadd(aGets,{"G1_INI",CTOD("01/01/01"),NIL})	aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL})	aadd(PARAMIXB2,aGets)	If lOk		ConOut("Teste de Inclusao")		ConOut("Inicio: "+Time())		MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,PARAMIXB2,PARAMIXB3) //Inclusao		ConOut("Fim: "+Time())	EndIfElse	//--------------- Exemplo de Exclusao ------------------------------------	If lOk		SG1->(dbSetOrder(1))		SG1->(dbSeek(xFilial("SG1")+PadR('PA001',Len(SG1->G1_COD))))		PARAMIXB1 := {{"G1_COD","PA001",NIL},;		         {"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra recalcular                                              // ou nao a estrutura		ConOut("Teste de Exclusao do codigo PA001")		ConOut("Inicio: "+Time())		MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,NIL,5) //Exclusao		lOk := !lMsErroAuto		ConOut("Fim: "+Time())	EndIf	If lOk		SG1->(dbSetOrder(1))		SG1->(dbSeek(xFilial("SG1")+PadR('PI001',Len(SG1->G1_COD))))		PARAMIXB1 := {{"G1_COD","PI001",NIL},;			{"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra recalcular                                             // ou nao a estrutura		ConOut("Teste de Exclusao do codigo PI001")		ConOut("Inicio: "+Time())		MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,NIL,5) //Exclusao		lOk := !lMsErroAuto		ConOut("Fim: "+Time())	EndIf	If lOk		SG1->(dbSetOrder(1))		SG1->(dbSeek(xFilial("SG1")+PadR('PI002',Len(SG1->G1_COD))))		PARAMIXB1 := {{"G1_COD","PI002",NIL},;			{"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra recalcular                                             // ou nao a estrutura		ConOut("Teste de Exclusao do codigo PI002")		ConOut("Inicio: "+Time())		MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,NIL,5) //Exclusao		lOk := !lMsErroAuto		ConOut("Fim: "+Time())	EndIf	If lOk		SG1->(dbSetOrder(1))		SG1->(dbSeek(xFilial("SG1")+PadR('PI003',Len(SG1->G1_COD))))		PARAMIXB1 := {{"G1_COD","PI003",NIL},;			{"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra recalcular                                                       // ou nao a estrutura		ConOut("Teste de Exclusao do codigo PI003")		ConOut("Inicio: "+Time())		MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,NIL,5) //Exclusao		ConOut("Fim: "+Time())	EndIfEndIfIf lMsErroAuto	If IsBlind()		If IsTelnet()			VTDispFile(NomeAutoLog(),.t.)		Else			cString := MemoRead(NomeAutoLog())			Aviso("Aviso de Erro:",cString)		EndIf	Else		MostraErro()	EndIfElse	If lOk		Aviso("Aviso","Operacao efetuada com sucesso",{"Ok"})	Else		Aviso("Aviso","Fazer os devidos cadastros",{"Ok"})	EndIfEndifReturn
Parâmetros:
Nome Tipo Descrição Default Obrigatório Referência
PARAMIXB1 Vetor Array contendo cabeçalho da Estrutura de Produtos X
PARAMIXB2 Vetor Array contendo os itens que a estrutura possui. X
PARAMIXB3 Numérico Opção desejada: 3-Inclusão; 4-Alteração ; 5-Exclusão 3