Descrição: | 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:Produto a ser produzido - Produto Acabado ou Intermediário.Produtos ou materiais utilizados na produção do conjunto - Matéria-prima ou Produto Intermediário.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 – “/” .
Bloco de código |
---|
language | cpp |
---|
title | Exemplo Inclusão/Alteração/Exclusão: |
---|
|
User Function MyMATA200(PARAMIXB3) Local PARAMIXB1 := {} Local PARAMIXB2 := {} Local aGets := {} Local lOK := .T. Local cString Private lMsErroAuto := .F. Default PARAMIXB3 := 3 linenumbers | true |
---|
collapse | true |
---|
| #INCLUDE 'TOTVS.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'RWMAKE.CH'
#INCLUDE "TBICONN.CH"
User Function MyMATA200(PARAMIXB3)
Local PARAMIXB1 := {}
Local PARAMIXB2 := {}
Local aGets := {}
Local lOK := .T.
Local cString := ''
Private lMsErroAuto := .F.
Default PARAMIXB3 := 3
//------------------------//| Abertura do ambiente |//------------------------ |
----
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "PCP" TABLES "SB1","SG1","SG5" |
ConOut(PadC("Teste de rotina automatica para estrutura de produtos",80)) |
//------------------------//| Teste de Inclusao |//------------------------ |
-------
dbSelectArea("SB1") |
If !SB1->(MsSeek(xFilial("SB1")+"PA001")) |
ConOut("Cadastrar produto acabado: PA001") |
If !SB1->(MsSeek(xFilial("SB1")+"PI001")) | ConOut
ConOut("Cadastrar produto intermediario: PI001") |
If !SB1->(MsSeek(xFilial("SB1")+"PI002")) |
ConOut("Cadastrar produto intermediario: PI002") |
If !SB1->(MsSeek(xFilial("SB1")+"PI003")) |
ConOut("Cadastrar produto intermediario: PA003") |
If !SB1->(MsSeek(xFilial("SB1")+"MP001")) | ConOut
ConOut("Cadastrar produto materia prima: MP001") |
If !SB1->(MsSeek(xFilial("SB1")+"MP002")) |
ConOut("Cadastrar produto materia prima: MP002") |
If !SB1->(MsSeek(xFilial("SB1")+"MP003")) |
ConOut("Cadastrar produto materia prima: MP003") |
If !SB1->(MsSeek(xFilial("SB1")+"MP004")) |
ConOut("Cadastrar produto materia prima: MP004") |
PARAMIXB1 := {{"G1_COD","PA001",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(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(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(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
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(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
aadd(aGets,{"G1_FIM",CTOD("31/12/49"),NIL}) |
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}) | 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}) | If lOk ConOut("Teste de Inclusao")
If lOk
ConOut("Teste de Inclusao")
ConOut("Inicio: "+Time()) |
MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,PARAMIXB2,PARAMIXB3) | EndIfElse
EndIf
Else
//--------------- Exemplo de Exclusao ------------------------------------ | lOk
SG1->(dbSeek(xFilial("SG1")+PadR('PA001',Len(SG1->G1_COD)))) | PARAMIXB1
PARAMIXB1 := {{"G1_COD","PA001",NIL},; |
{"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra | recalcular estrutura estrutura
ConOut("Teste de Exclusao do codigo PA001") |
ConOut("Inicio: "+Time()) |
MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,NIL,5) | lOk EndIfIf lOk
EndIf
If lOk
SG1->(dbSetOrder(1)) |
SG1->(dbSeek(xFilial("SG1")+PadR('PI001',Len(SG1->G1_COD)))) | PARAMIXB1
PARAMIXB1 := {{"G1_COD","PI001",NIL},; {"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra | recalcular estrutura estrutura
ConOut("Teste de Exclusao do codigo PI001") |
ConOut("Inicio: "+Time()) |
MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,NIL,5) | lOk EndIf If lOk
EndIf
If lOk
SG1->(dbSetOrder(1)) |
SG1->(dbSeek(xFilial("SG1")+PadR('PI002',Len(SG1->G1_COD)))) | PARAMIXB1
PARAMIXB1 := {{"G1_COD","PI002",NIL},; {"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra | recalcular estrutura estrutura
ConOut("Teste de Exclusao do codigo PI002") |
ConOut("Inicio: "+Time()) |
MSExecAuto({|x,y,z| mata200(x,y,z)},PARAMIXB1,NIL,5) | lOk EndIfIf lOk
EndIf
If lOk
SG1->(dbSetOrder(1)) |
SG1->(dbSeek(xFilial("SG1")+PadR('PI003',Len(SG1->G1_COD)))) | PARAMIXB1
PARAMIXB1 := {{"G1_COD","PI003",NIL},; {"NIVALT","S",NIL}} // A variavel NIVALT eh utilizada pra | recalcular estrutura 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()) EndIf | EndIfIf lMsErroAuto If IsBlind() If IsTelnet()
EndIf
If lMsErroAuto
If IsBlind()
If IsTelnet()
VTDispFile(NomeAutoLog(),.t.) | Else cString := MemoRead(NomeAutoLog())
Else
cString := MemoRead(NomeAutoLog())
Aviso("Aviso de Erro:",cString) | EndIf Else MostraErro() EndIfElse If lOk
EndIf
Else
MostraErro()
EndIf
Else
If lOk
Aviso("Aviso","Operacao efetuada com sucesso",{"Ok"}) | Else Aviso(
Else
Aviso("Aviso","Fazer os devidos cadastros",{"Ok"}) | EndIfEndifReturn#include "tbiconn.ch" #include "protheus.ch" User Function MyMATA200()Local PARAMIXB1 := {}Local PARAMIXB2 := {}Local PARAMIXB3 := 7Private lMsErroAuto := .F.RPCSetType(3) PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "SIGAPCP" TABLES "SB1","SG1","SG5","SC2","SD4" aadd(PARAMIXB1,{"G1_CODORIG","9475-MP3",NIL})aadd(PARAMIXB1,{"G1_GRPORIG","",NIL})aadd(PARAMIXB1,{"G1_OPCORIG","",NIL})aadd(PARAMIXB1,{"G1_SEQORIG","001",NIL}) //Este campo não é obrigatório. Se for passado, filtrará o componente a ser substituído por uma sequência específica. aadd(PARAMIXB1,{"G1_CODDEST","9475-MP4",NIL})aadd(PARAMIXB1,{"G1_GRPDEST","",NIL})aadd(PARAMIXB1,{"G1_OPCDEST","",NIL}) aadd(PARAMIXB1,{"ALTEMPENHO","S",NIL}) //Se altera os empenhos. S = Sim e N = Não.//Este campo não é obrigatório. Se ele não estiver no array, será considerado N - Não.// Informar os itens Pais que será feito a substituição do componente origem pelo componente destinoaadd(PARAMIXB2,{"G1_COD","94751-PA",NIL}) aadd(PARAMIXB2,{"G1_COD","PI002",NIL}) MSExecAuto({|x,y,Z| | linenumbers | true |
---|
collapse | true |
---|
| #INCLUDE 'TOTVS.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'RWMAKE.CH'
#INCLUDE "TBICONN.CH"
User Function MyMATA200()
Local PARAMIXB1 := {}
Local PARAMIXB2 := {}
Local PARAMIXB3 := 7
Private lMsErroAuto := .F.
//------------------------//| Abertura do ambiente |//---------------------------------------------
RPCSetType(3)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "SIGAPCP" TABLES "SB1","SG1","SG5","SC2","SD4"
ConOut(Repl("-",80))
ConOut(PadC("Teste de rotina automatica para estrutura de produtos",80))
//------------------------//| Teste de Substituição |//--------------------------------------------
aadd(PARAMIXB1,{"G1_CODORIG","9475-MP3",NIL})
aadd(PARAMIXB1,{"G1_GRPORIG","",NIL})
aadd(PARAMIXB1,{"G1_OPCORIG","",NIL})
aadd(PARAMIXB1,{"G1_SEQORIG","001",NIL}) //Este campo não é obrigatório. Se for passado, filtrará o componente a ser substituído por uma sequência específica.
aadd(PARAMIXB1,{"G1_CODDEST","9475-MP4",NIL})
aadd(PARAMIXB1,{"G1_GRPDEST","",NIL})
aadd(PARAMIXB1,{"G1_OPCDEST","",NIL})
aadd(PARAMIXB1,{"ALTEMPENHO","S",NIL}) //Se altera os empenhos. S = Sim e N = Não.
//Este campo não é obrigatório. Se ele não estiver no array, será considerado N - Não.
// Informar os itens Pais que será feito a substituição do componente origem pelo componente destino
aadd(PARAMIXB2,{"G1_COD","94751-PA",NIL})
aadd(PARAMIXB2,{"G1_COD","PI002",NIL})
MSExecAuto({|x,y,Z| mata200(x,y,z)},PARAMIXB1,PARAMIXB2,PARAMIXB3) //Substituição
If lMsErroAuto
MostraErro()
Else
alert("Substituição efetuada com sucesso")
Endif
Return |
Bloco de código |
---|
language | cpp |
---|
title | Exemplo Exclusão de Item especifico: |
---|
linenumbers | true |
---|
collapse | true |
---|
| #INCLUDE 'TOTVS.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'RWMAKE.CH'
#INCLUDE "TBICONN.CH"
User Function ExcMyMATA200()
Local cItemPai := "PA-20868 "
Local cFilho1 := "MP-20868 "
Local cFilho2 := "MP-20868-2 "
Local cSeqTrt := " "
Local aCab := {}
Local aItem := {}
Local aDetalhe := {}
Private lMsErroAuto := .F.
aCab := {{"G1_COD" , cItemPai , NIL},;
{"ATUREVSB1" , "S" , NIL},;
{"NIVEL1" , "S" , NIL},;
{"NIVALT" , "S" , NIL},;
{"G1_QUANT" , 1 , NIL}}
aadd(aDetalhe, {"G1_COD" , cItemPai , NIL})
aadd(aDetalhe, {"G1_COMP" , cFilho1 , NIL})
aadd(aDetalhe, {"G1_TRT" , cSeqTrt , NIL})
aadd(aDetalhe, {"G1_INI" , dDataBase , NIL})
aadd(aDetalhe, {"G1_FIM" , DaySum(dDataBase, 365), NIL})
aadd(aDetalhe, {"G1_FIXVAR" ,"V" , NIL})
aadd(aDetalhe, {"G1_QUANT" , 1 , NIL})
aadd(aDetalhe, {"G1_PERDA" , 0 , NIL})
aadd(aItem,aDetalhe)
dbSelectArea('SG1')
SG1->(dbSetOrder(1))
if SG1->(dbSeek(xFilial('SG1')+cItemPai))
MSExecAuto({|x,y,z| mata200(x,y,z)},aCab,aItem,4) //Alteração ou Exclusão de Item não enviado no array aItem
Else
MSExecAuto({|x,y,z| mata200(x,y,z)}, | PARAMIXB1PARAMIXB2PARAMIXB3) //Substituição If lMsErroAuto MostraErro() Else alert("Substituição efetuada com sucesso") Endif
3)
Endif
If lMsErroAuto
MostraErro()
Else
alert("Alteração/Exclusão item efetuada com sucesso")
Endif
Return |
|