#INCLUDE 'Protheus.ch'
User Function MyPCPA200(nOpc)
Local aCab := {}
Local aItem := {}
Local aGets := {}
Local cString := ""
Local cProdutos := ""
Private lMsErroAuto := .F.
Default nOpc := 3
ConOut(Repl("-",80))
ConOut(PadC("Teste de rotina automatica para estrutura de produtos",80))
//Verifica se os produtos que serão utilizados existem cadastrados.
SB1->(dbSetOrder(1))
If !SB1->(dbSeek(xFilial("SB1")+"PA001"))
cProdutos += "PA001, "
EndIf
If !SB1->(dbSeek(xFilial("SB1")+"PI001"))
cProdutos += "PI001, "
EndIf
If !SB1->(dbSeek(xFilial("SB1")+"PI002"))
cProdutos += "PI002, "
EndIf
If !SB1->(dbSeek(xFilial("SB1")+"PI003"))
cProdutos += "PI003, "
EndIf
If !SB1->(dbSeek(xFilial("SB1")+"MP001"))
cProdutos += "MP001, "
EndIf
If !SB1->(dbSeek(xFilial("SB1")+"MP002"))
cProdutos += "MP002, "
EndIf
If !SB1->(dbSeek(xFilial("SB1")+"MP003"))
cProdutos += "MP003, "
EndIf
If !Empty(cProdutos)
Alert("Cadastre os seguintes produtos: " + PadR(cProdutos,Len(cProdutos)-2))
Return
EndIf
If nOpc == 3
aCab := {{"G1_COD" , "PA001" , NIL},; //Código do produto PAI.
{"G1_QUANT" , 5 , NIL},; //Quantidade base do produto PAI.
{"ATUREVSB1", "N" , NIL},; //A variável ATUREVSB1 é utilizada para gerar nova revisão quando MV_REVAUT=.F.
{"NIVALT" , "S" , NIL}} //A variável NIVALT é utilizada para recalcular ou não os níveis da estrutura.
//Adiciona o componente MP001 com sequência em branco na estrutura do PA001.
aGets := {}
aadd(aGets, {"G1_COD" , "PA001" , NIL})
aadd(aGets, {"G1_COMP" , "MP001" , NIL})
aadd(aGets, {"G1_TRT" , Space(3) , NIL})
aadd(aGets, {"G1_QUANT", 1 , NIL})
aadd(aGets, {"G1_INI" , CTOD("01/01/01"), NIL})
aadd(aGets, {"G1_FIM" , CTOD("31/12/49"), NIL})
aadd(aGets, {"G1_PERDA", 0 , NIL})
aadd(aItem,aGets)
//Adiciona o componente PI001 com sequência em branco na estrutura do PA001.
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(aItem,aGets)
//Adiciona o componente MP001 com sequência "001" na estrutura do PA001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PA001" , NIL})
aadd(aGets, {"G1_COMP" ,"MP001" , NIL})
aadd(aGets, {"G1_TRT" ,"001" , 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(aItem,aGets)
//Adiciona o componente MP001 com sequência "005" na estrutura do PA001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PA001" , NIL})
aadd(aGets, {"G1_COMP" ,"MP001" , NIL})
aadd(aGets, {"G1_TRT" ,"005" , 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(aItem,aGets)
//Adiciona o componente MP001 na estrutura do PA001.
//Como o G1_TRT não foi informado no array, o programa irá criar um novo TRT para este
//componente, pois ele já está informado nesta estrutura.
aGets := {}
aadd(aGets, {"G1_COD" , "PA001" , NIL})
aadd(aGets, {"G1_COMP" , "MP001" , 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(aItem,aGets)
//Adiciona o componente MP002 com sequência em branco na estrutura do PA001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PA001" , NIL})
aadd(aGets, {"G1_COMP" ,"MP002" , NIL})
aadd(aGets, {"G1_TRT" ,Space(3) , NIL})
aadd(aGets, {"G1_QUANT",2 , 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(aItem,aGets)
//Adiciona o componente MP003 com sequência em branco na estrutura do PA001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PA001" , 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(aItem,aGets)
//Adiciona o componente MP003 com sequência em branco na estrutura do PI001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI001" , NIL})
aadd(aGets, {"G1_COMP" ,"MP003" , NIL})
aadd(aGets, {"G1_TRT" ,Space(3) , NIL})
aadd(aGets, {"G1_QUANT",3 , 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(aItem,aGets)
//Adiciona o componente MP002 com sequência em branco na estrutura do PI001.
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(aItem,aGets)
//Adiciona o componente MP001 com sequência em branco na estrutura do PI001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI001" , 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(aItem,aGets)
//Adiciona o componente PI002 com sequência em branco na estrutura do PI001.
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(aItem,aGets)
//Adiciona o componente MP001 com sequência em branco na estrutura do PI002.
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(aItem,aGets)
//Adiciona o componente MP002 com sequência em branco na estrutura do PI002.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI002" , 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(aItem,aGets)
//Adiciona o componente MP003 com sequência em branco na estrutura do PI002.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI002" , 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(aItem,aGets)
//Adiciona o componente PI003 com sequência em branco na estrutura do PI002.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI002" , 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(aItem,aGets)
//Adiciona o componente MP001 com sequência em branco na estrutura do PI003.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI003" , 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(aItem,aGets)
//Adiciona o componente MP002 com sequência em branco na estrutura do PI003.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI003" , 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(aItem,aGets)
//Adiciona o componente MP003 com sequência em branco na estrutura do PI003.
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(aItem,aGets)
ConOut("Teste de Inclusao")
MSExecAuto({|x,y,z| PCPA200(x,y,z)},aCab,aItem,3) //Inclusão
ConOut("Fim inclusao.")
ElseIf nOpc == 4
//--------------- Exemplo de Alteração ------------------------------------
aCab := {{"G1_COD" , "PA001" , NIL},; //Código do produto PAI.
{"G1_QUANT" , 5 , NIL},; //Quantidade base do produto PAI.
{"ATUREVSB1", "S" , NIL},; //A variável ATUREVSB1 é utilizada para gerar nova revisão quando MV_REVAUT=.F.
{"AUTREVPAI", " " , NIL},; //A variável AUTREVPAI é utilizada para indicar qual a revisão do produto pai será considerada. Caso não seja enviado, será utilizada a revisão atual do produto.
{"NIVALT" , "S" , NIL}} //A variável NIVALT é utilizada para recalcular ou não os níveis da estrutura.
//Altera o componente MP001 com sequência em branco.
aGets := {}
aadd(aGets, {"G1_COD" ,"PA001" ,NIL})
aadd(aGets, {"G1_COMP" ,"MP001" ,NIL})
aadd(aGets, {"G1_TRT" ,Space(3) ,NIL})
aadd(aGets, {"G1_QUANT",10 ,NIL})
aadd(aGets, {"G1_PERDA",1 ,NIL})
aadd(aGets, {"G1_INI" ,CTOD("01/01/20") ,NIL})
aadd(aGets, {"G1_FIM" ,CTOD("31/12/49") ,NIL})
aAdd(aGets, {"LINPOS" ,"G1_COD+G1_COMP+G1_TRT","PA001","MP001",Space(3)})
aadd(aItem,aGets)
//Adiciona o componente PI003 com sequência em branco na estrutura do PA001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PA001" ,NIL})
aadd(aGets, {"G1_COMP" ,"PI003" ,NIL})
aadd(aGets, {"G1_TRT" ,Space(3) ,NIL})
aadd(aGets, {"G1_QUANT",5 ,NIL})
aadd(aGets, {"G1_PERDA",1 ,NIL})
aadd(aGets, {"G1_INI" ,CTOD("01/01/20") ,NIL})
aadd(aGets, {"G1_FIM" ,CTOD("31/12/49") ,NIL})
aadd(aItem,aGets)
//Deleta o componente MP002 da estrutura do PA001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PA001" ,NIL})
aadd(aGets, {"G1_COMP" ,"MP002" ,NIL})
aadd(aGets, {"G1_TRT" ,Space(3) ,NIL})
aadd(aGets, {"G1_QUANT",5 ,NIL})
aadd(aGets, {"G1_PERDA",1 ,NIL})
aadd(aGets, {"G1_INI" ,CTOD("01/01/20") ,NIL})
aadd(aGets, {"G1_FIM" ,CTOD("31/12/49") ,NIL})
aAdd(aGets, {"LINPOS" ,"G1_COD+G1_COMP+G1_TRT","PA001","MP002",Space(3)})
aAdd(aGets, {"AUTDELETA","S" ,NIL})
aadd(aItem,aGets)
//Adiciona o componente PI002 com sequência "001" na estrutura do PI001.
aGets := {}
aadd(aGets, {"G1_COD" ,"PI001" ,NIL})
aadd(aGets, {"G1_COMP" ,"PI002" ,NIL})
aadd(aGets, {"G1_TRT" ,"001" ,NIL})
aadd(aGets, {"G1_QUANT",5 ,NIL})
aadd(aGets, {"G1_PERDA",1 ,NIL})
aadd(aGets, {"G1_INI" ,CTOD("01/01/20") ,NIL})
aadd(aGets, {"G1_FIM" ,CTOD("31/12/49") ,NIL})
aadd(aItem,aGets)
ConOut("Teste de Alteracao")
MSExecAuto({|x,y,z| PCPA200(x,y,z)},aCab,aItem,4) //Alteração
ConOut("Fim alteracao.")
ElseIf nOpc == 5
//--------------- Exemplo de Exclusao ------------------------------------
SG1->(dbSetOrder(1))
//Verifica se o produto PA001 possui estrutura. Se existir, executa a exclusão.
If SG1->(dbSeek(xFilial("SG1")+"PA001"))
aCab := {{"G1_COD" , "PA001" , NIL},;
{"NIVALT" , "S" , NIL}} //A variável NIVALT é utilizada para recalcular ou não os níveis da estrutura.
ConOut("Teste de Exclusao do codigo PA001")
MSExecAuto({|x,y,z| PCPA200(x,y,z)},aCab,NIL,5) //Exclusao
ConOut("Fim exclusao do codigo PA001.")
EndIf
//Verifica se não aconteceu nenhum erro, e tenta excluir a estrutura do PI001 se existir.
If !lMsErroAuto .And. SG1->(dbSeek(xFilial("SG1")+"PI001"))
aCab := {{"G1_COD" , "PI001" , NIL},;
{"NIVALT" , "S" , NIL}} //A variável NIVALT é utilizada para recalcular ou não os níveis da estrutura.
ConOut("Teste de Exclusao do codigo PI001")
MSExecAuto({|x,y,z| PCPA200(x,y,z)},aCab,NIL,5) //Exclusao
ConOut("Fim exclusao do codigo PI001.")
EndIf
//Verifica se não aconteceu nenhum erro, e tenta excluir a estrutura do PI002 se existir.
If !lMsErroAuto .And. SG1->(dbSeek(xFilial("SG1")+"PI002"))
aCab := {{"G1_COD" , "PI002" , NIL},;
{"NIVALT" , "S" , NIL}} //A variável NIVALT é utilizada para recalcular ou não os níveis da estrutura.
ConOut("Teste de Exclusao do codigo PI002")
MSExecAuto({|x,y,z| PCPA200(x,y,z)},aCab,NIL,5) //Exclusao
ConOut("Fim exclusao do codigo PI002.")
EndIf
//Verifica se não aconteceu nenhum erro, e tenta excluir a estrutura do PI003 se existir.
If !lMsErroAuto .And. SG1->(dbSeek(xFilial("SG1")+"PI003"))
aCab := {{"G1_COD" , "PI003" , NIL},;
{"NIVALT" , "S" , NIL}} //A variável NIVALT é utilizada para recalcular ou não os níveis da estrutura.
ConOut("Teste de Exclusao do codigo PI003")
MSExecAuto({|x,y,z| PCPA200(x,y,z)},aCab,NIL,5) //Exclusao
ConOut("Fim exclusao do codigo PI003.")
EndIf
EndIf
//Verifica se ocorreu algum erro, e exibe a mensagem.
If lMsErroAuto
If IsBlind()
If IsTelnet()
VTDispFile(NomeAutoLog(),.t.)
Else
cString := MemoRead(NomeAutoLog())
Conout("Aviso de Erro:",cString)
EndIf
Else
MostraErro()
EndIf
Else
MsgInfo("Operação realizada com sucesso","OK")
EndIf
ConOut(Repl("-",80))
Return
|