Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

PCPA135 - Pré-estrutura de Produtos

Linha de Produto:

Protheus

Segmento:

Manufatura

Módulo:

SIGAPCP - Planejamento e Controle da Produção

Parâmetro(s):

Para Inclusão, Alteração e Exclusão:


Nome
Tipo
Descrição
Default
Obrigatório
Referência

PARAMIXB1
Vetor
Array contendo cabeçalho da Pré-estrutura de Produtos


X



PARAMIXB2
Vetor
Array contendo os itens que a pré-estrutura possui.







PARAMIXB3
Numérico
Opção desejada: 3-Inclusão; 4-Alteração ; 5-Exclusão


X


Idiomas:Todos

País(es):

Todos

Banco(s) de Dados:

Todos

Sistema(s) Operacional(is):

Todos


Para a operação de Exclusão, o segundo parâmetro (PARAMIXB2) é ignorado pois são excluídos todos os componentes relacionados ao produto PAI, que é informado no primeiro parâmetro (PARAMIXB1).

A operação de exclusão
Descrição:

A rotina Pré-estrutura permite simular a Criação de Estruturas de Produtos¹ que a empresa quer fabricar.

O objetivo é controlar a Criação da Estrutura do Produto antes de oficializa-la, podendo transformá-la depois em uma estrutura definitiva, se necessário.

O Sistema controla quais usuários podem transformar uma Pré-Estrutura em uma Estrutura Definitiva por meio da Senha de Usuário.

Além disso, a pré-estrutura pode ser utilizada para simulação da Formação de preços do produto, pela rotina Formação de Preços do ambiente Estoque e Custos.

Bloco de código
languagecpp
firstline1
titleExemplo Inclusão/Alteração/Exclusão:
linenumberstrue
collapsetrue
#INCLUDE 'Protheus.ch'

User Function MyPCPA135(nOpc)
Local aCab  :={}
Local aItem := {}
Local aGets	:= {}
Local lOK	:= .T.
Local cString
Private lMsErroAuto := .F.
Default nOpc := 4

//Abertura do ambiente                                         |
RpcSetEnv( "99" , "01" , Nil, Nil, "PCP", Nil )
ConOut(Repl("-",80))
ConOut(PadC("Teste de rotina automatica para estrutura de produtos",80))


//Verificacao do ambiente para teste                           |
dbSelectArea("SB1")
dbSetOrder(1)
If !SB1->(MsSeek(xFilial("SB1")+"PA001"))
	lOk := .F.
	ConOut("Cadastrar produto acabado: PA001")
EndIf

If !SB1->(MsSeek(xFilial("SB1")+"PI001"))
	lOk := .F.
	ConOut("Cadastrar produto intermediario: PI001")
EndIf

If !SB1->(MsSeek(xFilial("SB1")+"PI002"))
	lOk := .F.
	ConOut("Cadastrar produto intermediario: PI002")
EndIf

If !SB1->(MsSeek(xFilial("SB1")+"PI003"))
	lOk := .F.
	ConOut("Cadastrar produto intermediario: PA003")
EndIf

If !SB1->(MsSeek(xFilial("SB1")+"MP001"))
	lOk := .F.
	ConOut("Cadastrar produto materia prima: MP001")
EndIf

If !SB1->(MsSeek(xFilial("SB1")+"MP002"))
	lOk := .F.
	ConOut("Cadastrar produto materia prima: MP002")
EndIf

If !SB1->(MsSeek(xFilial("SB1")+"MP003"))
	lOk := .F.
	ConOut("Cadastrar produto materia prima: MP003")
EndIf

If !SB1->(MsSeek(xFilial("SB1")+"MP004"))
	lOk := .F.
	ConOut("Cadastrar produto materia prima: MP004")
EndIf

If nOpc==3 .And. lOk
	aCab := {	{"GG_COD"		,"PA001"			,NIL},;
				{"GG_QUANT"		,2		     		,NIL}} 

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PA001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"PI001" 			,NIL})
	aadd(aGets,	{"GG_TRT"		,"   "   			,NIL})
	aadd(aGets,	{"GG_QUANT"		,1					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PA001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP001"			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,1					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)
	
	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PA001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP002"			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,2					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PI002"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP003"			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,3					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PI002" 			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP001" 			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,1					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PI001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP002"			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,1					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PA001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"PI003" 			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,1					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PA001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP004" 			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,1					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)

	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PI003"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP003" 			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,1					,NIL})
	aadd(aGets,	{"GG_PERDA"		,0					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aadd(aItem,aGets)
	ConOut("Teste de Inclusao")
	ConOut("Inicio: "+Time())
	MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,aItem,3) //Inclusao
	ConOut("Fim: "+Time())
ElseIf nOpc == 4 .And. lOk
	//--------------- Exemplo de Alteração ------------------------------------
	aCab := { {"GG_COD", "PA001", NIL}}
	
	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PA001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"MP001" 			,NIL})
	aadd(aGets,	{"GG_TRT"		,Space(3)			,NIL})
	aadd(aGets,	{"GG_QUANT"		,5					,NIL})
	aadd(aGets,	{"GG_PERDA"		,1					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/01")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aAdd(aGets, {"AUTDELETA"    ,"S"                ,NIL})
	aAdd(aGets, {"LINPOS"       ,"GG_COD+GG_COMP+GG_TRT","PA001","MP001",Space(3)})
	aadd(aItem,aGets)
	
	aGets := {}
	aadd(aGets,	{"GG_COD"		,"PA001"			,NIL})
	aadd(aGets,	{"GG_COMP"		,"PI003" 			,NIL})
	aadd(aGets,	{"GG_TRT"		,"001"	     		,NIL})
	aadd(aGets,	{"GG_QUANT"		,5					,NIL})
	aadd(aGets,	{"GG_PERDA"		,1					,NIL})
	aadd(aGets,	{"GG_INI"		,CTOD("01/01/20")	,NIL})
	aadd(aGets,	{"GG_FIM"		,CTOD("31/12/49")	,NIL})
	aAdd(aGets, {"LINPOS"       ,"GG_COD+GG_COMP+GG_TRT","PA001","PI003",Space(3)})
	aadd(aItem,aGets)

	ConOut("Teste de Alteracao")
	ConOut("Inicio: "+Time())
	MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,aItem,4) //Alteração
	ConOut("Fim: "+Time())

ElseIf nOpc == 5 .And. lOk
	//--------------- Exemplo de Exclusao ------------------------------------
	aCab := {	{"GG_COD"		,"PA001"			,NIL}} 
	ConOut("Teste de Exclusao do codigo PA001")
	ConOut("Inicio: "+Time())
	MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,5) //Exclusao
	lOk := !lMsErroAuto
	ConOut("Fim: "+Time())


	aCab := {	{"GG_COD"		,"PI001"			,NIL}} 
	ConOut("Teste de Exclusao do codigo PI001")
	ConOut("Inicio: "+Time())
	MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,5) //Exclusao
	lOk := !lMsErroAuto
	ConOut("Fim: "+Time())
	
	aCab := {	{"GG_COD"		,"PI002"			,NIL}} 
	ConOut("Teste de Exclusao do codigo PI002")
	ConOut("Inicio: "+Time())
	MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,5) //Exclusao
	lOk := !lMsErroAuto
	ConOut("Fim: "+Time())

	aCab := {	{"GG_COD"		,"PI003"			,NIL}} 
	ConOut("Teste de Exclusao do codigo PI003")
	ConOut("Inicio: "+Time())
	MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,5) //Exclusao
	ConOut("Fim: "+Time())
EndIf
If lMsErroAuto
	//MostraErro()
	If IsBlind()
		If IsTelnet()
			VTDispFile(NomeAutoLog(),.t.)
		Else
			cString := MemoRead(NomeAutoLog())
			Conout("Aviso de Erro:",cString)
		EndIf
	Else
		MostraErro()
	EndIf
Else
	If lOk
		Aviso("Aviso","Incluido com sucesso",{"Ok"})
	Else
		Aviso("Aviso","Fazer os devidos cadastros",{"Ok"})
	EndIf
Endif
Return

Sintaxe:

PCPA135 - Pré-Estrutura de Produtos ( PARAMIXB1, PARAMIXB2, PARAMIXB3 ) --> Nil

Retorno:

Nil (nulo)

   Nil

ElseIf nOpc == 6 .And. lOk
    //--------------- Exemplo de Encaminhar Aprovação ----------------------
    aCab := {   {"GG_COD"       ,"PA001"            ,NIL},;
                {"AUTNIVAPROV"  , 1                 ,NIL}}
    ConOut("Teste de Encaminhar Aprovação do codigo PA001")
    ConOut("Inicio: "+Time())
    MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,6) //Encaminhar aprovação
    lOk := !lMsErroAuto
    ConOut("Fim: "+Time())

ElseIf nOpc == 7 .And. lOk
    //--------------- Exemplo Aprovação ------------------------------------
    aCab := {   {"GG_COD"       ,"PA001"            ,NIL},;
                {"AUTNIVAPROV"  , 1                 ,NIL}}
    ConOut("Teste de Aprovação do codigo PA001")
    ConOut("Inicio: "+Time())
    MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,7) //Aprovação
    lOk := !lMsErroAuto
    ConOut("Fim: "+Time())

ElseIf nOpc == 8 .And. lOk
    //--------------- Exemplo Rejeição -------------------------------------
    aCab := {   {"GG_COD"       ,"PA001"            ,NIL},;
                {"AUTNIVAPROV"  , 1                 ,NIL}}
    ConOut("Teste de Rejeição do codigo PA001")
    ConOut("Inicio: "+Time())
    MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,8) //Reijeição
    lOk := !lMsErroAuto
    ConOut("Fim: "+Time())

ElseIf lOk
    //--------------- Exemplo Criação de Estrutura -------------------------------------
    aCab := {   {"GG_COD"         ,"PA001"            ,NIL},;
                {"AUTNIVCRIAEST"  , 1                 ,NIL},;
                {"AUTCONSIDSTT"   , 3                 ,NIL},;
                {"AUTCONSIDCOMP"  , 1                 ,NIL},;
                {"AUTDTDE"        , NIL               ,NIL},;
                {"AUTDTATE"       , NIL               ,NIL},;
                {"AUTESTEX"       , 1                 ,NIL},;
                {"AUTPREESTGRAV"  , 2                 ,NIL},;
                {"AUTALTPAI"      , .F.               ,NIL},;
                {"AUTNVPAI"       , NIL               ,NIL}}
    ConOut("Teste de Criação de Estrutura do codigo PA001")
    ConOut("Inicio: "+Time())
    MSExecAuto({|x,y,z| PCPA135(x,y,z)},aCab,NIL,9) //Criação de Estrutura
    lOk := !lMsErroAuto
    ConOut("Fim: "+Time())
EndIf
If lMsErroAuto
	//MostraErro()
	If IsBlind()
		If IsTelnet()
			VTDispFile(NomeAutoLog(),.t.)
		Else
			cString := MemoRead(NomeAutoLog())
			Conout("Aviso de Erro:",cString)
		EndIf
	Else
		MostraErro()
	EndIf
Else
	If lOk
		Aviso("Aviso","Incluido com sucesso",{"Ok"})
	Else
		Aviso("Aviso","Fazer os devidos cadastros",{"Ok"})
	EndIf
Endif
Return

Sintaxe:

PCPA135 - Pré-Estrutura de Produtos ( PARAMIXB1, PARAMIXB2, PARAMIXB3 ) --> Nil

Retorno:

Nil (nulo)

   Nil

Observações:
Dica
titleOperação de Alteração

Para a operação de Alteração de estruturas, não é necessário enviar todos os componentes da estrutura no segundo parâmetro (PARAMIXB2). O programa irá fazer alterações somente para os componentes que forem informados no segundo parâmetro.

Para alterar um componente que faz parte da estrutura será necessário utilizar o parâmetro LINPOS, conforme exemplo acima.

Para excluir um componente que faz parte da estrutura será necessário utilizar os parâmetros LINPOS e AUTDELETA, conforme exemplo acima.

Caso seja informado no LINPOS os campos GG_COD e GG_COMP, os valores precisam ser os mesmos inseridos no array aItens.

Para adicionar um novo componente na estrutura, não é necessário utilizar os parâmetro LINPOS e AUTDELETA, sendo necessário apenas as informações do componente para que a inclusão seja feita.

A operação de alteração é realizada quando o terceiro parâmetro (PARAMIXB3) é enviado com o valor 4.

Dica
titleOperação de Exclusão

Para a operação de Exclusão, o segundo parâmetro (PARAMIXB2) é ignorado pois são excluídos todos os componentes relacionados ao produto PAI, que é informado no primeiro parâmetro (PARAMIXB1).

A operação de exclusão é realizada quando o terceiro parâmetro (PARAMIXB3) é enviado com o valor 5.

Dica
titleOperação de Encaminhar Aprovação

Para a operação de Encaminhar Aprovação, o segundo parâmetro (PARAMIXB2) é ignorado pois são utilizado os componentes registrados na tabela SGG, a partir do código PAI que é informado no primeiro parâmetro (PARAMIXB1).

Para encaminhar a aprovação da estrutura será necessário utilizar o parâmetro  AUTNIVAPROV, que indica o nível de aprovação.

Neste caso, será necessário utilizar no parâmetro AUTNIVAPROV, o valor 1 para indicar o primeiro nível ou o valor 2 para indicar todos os níveis.

A operação de Encaminhar Aprovação é realizada quando o terceiro parâmetro (PARAMIXB3) é enviado com o valor 6.

Dica
titleOperação Aprovar

Para a operação Aprovar, o segundo parâmetro (PARAMIXB2) é ignorado pois são utilizado os componentes registrados na tabela SGG, a partir do código PAI que é informado no primeiro parâmetro (PARAMIXB1).

Para aprovar a estrutura será necessário utilizar o parâmetro  AUTNIVAPROV, que indica o nível de aprovação.

Neste caso, será necessário utilizar no parâmetro AUTNIVAPROV, o valor 1 para indicar o primeiro nível ou o valor 2 para indicar todos os níveis.

A operação Aprovar é realizada quando o terceiro parâmetro (PARAMIXB3) é enviado com o valor 7.

Dica
titleOperação Rejeitar

Para a operação Rejeitar, o segundo parâmetro (PARAMIXB2) é ignorado pois são utilizado os componentes registrados na tabela SGG, a partir do código PAI que é informado no primeiro parâmetro (PARAMIXB1).

Para rejeitar a estrutura será necessário utilizar o parâmetro  AUTNIVAPROV, que indica o nível de rejeição.

Neste caso, será necessário utilizar no parâmetro AUTNIVAPROV, o valor 1 para indicar o primeiro nível ou o valor 2 para indicar todos os níveis.

A operação Rejeitar é realizada quando o terceiro parâmetro (PARAMIXB3) é enviado com o valor 8.

Dica
titleOperação de Criar Estrutura

Para a operação de Criar Estrutura, o segundo parâmetro (PARAMIXB2) é ignorado pois são utilizado os componentes registrados na tabela SGG, a partir do código PAI que é informado no primeiro parâmetro (PARAMIXB1).


Para a operação de Criar Estrutura será necessário utilizar os seguintes parâmetros: 

Nome
Tipo
Descrição
Valores
Obrigatório
AUTNIVCRIAEST
Numérico
Considera Níveis
1 - Todos
2 - Primeiro nível

X
AUTCONSIDSTT
Numérico
Considera Status
1 - Aprovados
2 - Rejeitados
3 - Todos

X
AUTCONSIDCOMP
Numérico
Considera componentes
1 - Qualquer data
2 - Data válida
3 - Validos no período

X
AUTDTDE
Data
Data de
StD("dd/mm/aaaa")

Apenas quando o parâmetro AUTCONSIDCOMP

possuir o valor 3 - Validos no período

AUTDTATE
Data
Data ate
StD("dd/mm/aaaa")

Apenas quando o parâmetro AUTCONSIDCOMP

possuir o valor 3 - Validos no período

AUTESTEX
Numérico
Estruturas já existentes
1 - Sobrescreve
2 - Mantem

X
AUTPREESTGRAV
Numérico
Pré-Estrutura gravada
1 - Apaga
2 - Mantém

X
AUTALTPAI
Lógico
Altera o código do produto pai
.T.
.F.

X
AUTNVPAI
Caractere 
Novo pai
"Novo pai"

Apenas quando o parâmetro AUTALTPAI

possuir o valor .T.


A operação de Criar Estrutura

Observações:
Dica
titleOperação de Alteração

Para a operação de Alteração de estruturas, não é necessário enviar todos os componentes da estrutura no segundo parâmetro (PARAMIXB2). O programa irá fazer alterações somente para os componentes que forem informados no segundo parâmetro.

Para alterar um componente que faz parte da estrutura será necessário utilizar o parâmetro LINPOS, conforme exemplo acima.

Para excluir um componente que faz parte da estrutura será necessário utilizar os parâmetros LINPOS e AUTDELETA, conforme exemplo acima.

Caso seja informado no LINPOS os campos GG_COD e GG_COMP, os valores precisam ser os mesmos inseridos no array aItens.

Para adicionar um novo componente na estrutura, não é necessário utilizar os parâmetro LINPOS e AUTDELETA, sendo necessário apenas as informações do componente para que a inclusão seja feita.

A operação de alteração é realizada quando o terceiro parâmetro (PARAMIXB3) é enviado com o valor 4.

Dica
titleOperação de Exclusão

é realizada quando o terceiro parâmetro (PARAMIXB3) é enviado com o valor

5

9.