Árvore de páginas

Exemplo de configuração da ExecAuto do Cadastro de Produtos (MATA010)

Produto:

Microsiga Protheus®

Ambiente:

Estoque e Custos (MATA010) - 12.1.17 (outubro/2017 e) e posteriores 

Ocorrência:

Inclusão, alteração ou exclusão de qualquer produto no Cadastro de Produtos de forma automática

Passo a passo:

O Cadastro pode ser realizado como nas versões anteriores, como também ser realizado através do MVC, conforme exemplos abaixo.

Observação

  • O exemplo demostra a inclusão, alteração e exclusão de um produto através da utilização da rotina automática.
  • Documentação também se aplica a Protheus 11 e 12, porém, deve-se atentar que a versão com MVC está disponível a partir da versão 12.1.17 de outubro de 2017 do Protheus.
  • Os exemplos abaixo devem ser adequados conforme a necessidade do cliente
  • A configuração do parâmetro MV_CADPROD deverá ser observado, de forma a garantir que a rotina automática respeitará a parametrização via Configurador.


Parâmetros:

Importante

Os parâmetros abaixo se aplicam a rotina automática via MsExecAuto

NomeTipoDescriçãoDefaultObrigatórioReferência
aVetorArrayArray contendo os campos que serão enviados para o Cadastro de Produtos
X
nOpcNumerico

Opção escolhida:

3 - Inclusão
4 - Alteração
5 - Exclusão


X
Sem MVC
#INCLUDE "RWMAKE.CH" 
#INCLUDE "TBICONN.CH" 
User Function TMata010()
Local aVetor := {}
private lMsErroAuto := .F.

//Abre Ambiente (não deve ser utilizado caso utilize interface ou seja chamado de uma outra rotina que já inicializou o ambiente)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"

//--- Exemplo: Inclusao --- //
aVetor:= { {"B1_COD" ,"9994" ,NIL},; 
 {"B1_DESC" ,"PRODUTO TESTE - ROTINA AUTOMATICA" ,NIL},; 
 {"B1_TIPO" ,"PA" ,Nil},; 
 {"B1_UM" ,"UN" ,Nil},; 
 {"B1_LOCPAD" ,"01" ,Nil},; 
 {"B1_PICM" ,0 ,Nil},; 
 {"B1_IPI" ,0 ,Nil},; 
 {"B1_CONTRAT" ,"N" ,Nil},; 
 {"B1_LOCALIZ" ,"N" ,Nil}} 
 
MSExecAuto({|x,y| Mata010(x,y)},aVetor,3)

//--- Exemplo: Alteracao --- //
aVetor:= { {"B1_COD" ,"9994" ,NIL},; 
 {"B1_DESC" ,"PRODUTO TESTE - ALTERADO" ,NIL}} 
 
MSExecAuto({|x,y| Mata010(x,y)},aVetor,4)

//--- Exemplo: Exclusao --- //
aVetor:= { {"B1_COD" ,"9994" ,NIL},; 
 {"B1_DESC" ,"PRODUTO TESTE - ROTINA AUTOMATICA" ,NIL}} 
 
MSExecAuto({|x,y| Mata010(x,y)},aVetor,5)

If lMsErroAuto
 MostraErro()
Else
 Alert("Ok")
Endif

Return
Com MVC (Versão 12.1.17 outubro/17 e posteriores)
#INCLUDE "RWMAKE.CH" 
#INCLUDE "TBICONN.CH"
#INCLUDE 'Protheus.ch'
#INCLUDE 'FWMVCDef.ch'

//------------------------------------------------------------------------
/*
EXEMPLO DE INCLUSÃO MODELO 1 
*/
//------------------------------------------------------------------------
User Function m010IncRa()
Local oModel      := Nil
Private lMsErroAuto := .F.

//Abre Ambiente (não deve ser utilizado caso utilize interface ou seja chamado de uma outra rotina que já inicializou o ambiente)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"

oModel  := FwLoadModel ("MATA010")
oModel:SetOperation(MODEL_OPERATION_INSERT)
oModel:Activate()
oModel:SetValue("SB1MASTER","B1_COD"		,"RASB100")
oModel:SetValue("SB1MASTER","B1_DESC"		,"PRODUTO TESTE 00")
oModel:SetValue("SB1MASTER","B1_TIPO"		,"PA")
oModel:SetValue("SB1MASTER","B1_UM"		,"UN")
oModel:SetValue("SB1MASTER","B1_LOCPAD"	,"01")
oModel:SetValue("SB1MASTER","B1_LOCALIZ"	,"N")


If oModel:VldData()
	oModel:CommitData()
	 MsgInfo("Registro INCLUIDO!", "Atenção")
Else
	VarInfo("",oModel:GetErrorMessage())
EndIf        
	
oModel:DeActivate()
oModel:Destroy()

oModel := NIL

Return Nil
//------------------------------------------------------------------------
/*
EXEMPLO DE INCLUSÃO MODELO 1  (Utilizando a função FwMvcRotAuto apenas em caráter didático)
*/
//------------------------------------------------------------------------
User Function m010Inc1Ra()
Local aDadoscab := {}
Local aDadosIte := {}
Local aItens := {}

Private oModel := Nil
Private lMsErroAuto := .F.
Private aRotina := {}

//Abre Ambiente (não deve ser utilizado caso utilize interface ou seja chamado de uma outra rotina que já inicializou o ambiente)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"

oModel := FwLoadModel ("MATA010")

//Adicionando os dados do ExecAuto cab
aAdd(aDadoscab, {"B1_COD" ,"RASB101" , Nil})
aAdd(aDadoscab, {"B1_DESC" ,"PRODUTO TESTE" , Nil})
aAdd(aDadoscab, {"B1_TIPO" ,"PA" , Nil})
aAdd(aDadoscab, {"B1_UM" ,"UN" , Nil})
aAdd(aDadoscab, {"B1_LOCPAD" ,"01" , Nil})
aAdd(aDadoscab, {"B1_LOCALIZ" ,"N" , Nil})

//Chamando a inclusão - Modelo 1
lMsErroAuto := .F.

FWMVCRotAuto( oModel,"SB1",MODEL_OPERATION_INSERT,{{"SB1MASTER", aDadoscab}})

//Se houve erro no ExecAuto, mostra mensagem
If lMsErroAuto
 MostraErro()
//Senão, mostra uma mensagem de inclusão
Else
 MsgInfo("Registro incluido!", "Atenção")
EndIf


Return Nil

//------------------------------------------------------------------------
/*
EXEMPLO DE INCLUSÃO MODELO 2 (Utilizando a função FwMvcRotAuto apenas em caráter didático)
*/
//------------------------------------------------------------------------

User Function m010Inc2Ra()
Local aDadoscab := {}
Local aDadosIte := {}
Local aItens := {}

Private oModel := Nil
Private lMsErroAuto := .F.
Private aRotina := {}

//Abre Ambiente (não deve ser utilizado caso utilize interface ou seja chamado de uma outra rotina que já inicializou o ambiente)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"

oModel := FwLoadModel ("MATA010")

//Adicionando os dados do ExecAuto cab
aAdd(aDadoscab, {"B1_COD" ,"RASB102" , Nil})
aAdd(aDadoscab, {"B1_DESC" ,"PRODUTO TESTE" , Nil})
aAdd(aDadoscab, {"B1_TIPO" ,"PA" , Nil})
aAdd(aDadoscab, {"B1_UM" ,"UN" , Nil})
aAdd(aDadoscab, {"B1_LOCPAD" ,"01" , Nil})
aAdd(aDadoscab, {"B1_LOCALIZ" ,"N" , Nil})

//Adicionando os dados do ExecAuto Item 
//Produtos alternativos (já deve existir na base)
If "SGI" $ SuperGetMv("MV_CADPROD",,"|SA5|SBZ|SB5|DH5|SGI|")
 aAdd(aDadosIte, {"GI_PRODALT" , "RASB101" , Nil})
 aAdd(aDadosIte, {"GI_ORDEM" , "1" , Nil})
 //no item o array precisa de um nivel superior.
 aAdd(aItens,aDadosIte)
EndIf

//Chamando a inclusão - Modelo 2
lMsErroAuto := .F.

FWMVCRotAuto( oModel,"SB1",MODEL_OPERATION_INSERT,{{"SB1MASTER", aDadoscab},{"SGIDETAIL", aItens}})

//Se houve erro no ExecAuto, mostra mensagem
If lMsErroAuto
 MostraErro()
//Senão, mostra uma mensagem de inclusão
Else
 MsgInfo("Registro incluido!", "Atenção")
EndIf


Return Nil

//------------------------------------------------------------------------
/*
EXEMPLO DE ALTERAÇÃO
*/
//------------------------------------------------------------------------

User Function m010AltRa()
Local oModel := Nil
Private lMsErroAuto := .F.

//Abre Ambiente (não deve ser utilizado caso utilize interface ou seja chamado de uma outra rotina que já inicializou o ambiente)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"

//Posiciona
SB1->(DbSetOrder(1))
If SB1->(DbSeek(xFilial("SB1") + "RASB101"))
 oModel := FwLoadModel ("MATA010")
 oModel:SetOperation(MODEL_OPERATION_UPDATE)
 oModel:Activate()
 oModel:SetValue("SB1MASTER","B1_DESC","PRODUTO ALTERADO")

If oModel:VldData()
 oModel:CommitData()
 MsgInfo("Registro ALTERADO!", "Atenção")
 Else
 VarInfo("",oModel:GetErrorMessage())
 EndIf 
 
 oModel:DeActivate()
Else
 MsgInfo("Registro NAO LOCALIZADO!", "Atenção")
EndIf

Return Nil

//------------------------------------------------------------------------
/*
EXEMPLO DE EXCLUSÃO
*/
//------------------------------------------------------------------------

User Function m010ExcRa()
Local oModel := Nil
Private aRotina := {}

//Abre Ambiente (não deve ser utilizado caso utilize interface ou seja chamado de uma outra rotina que já inicializou o ambiente)
PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"
//Posiciona
SB1->(DbSetOrder(1))
If SB1->(DbSeek(xFilial("SB1") + "RASB101"))
 oModel := FwLoadModel ("MATA010")
 oModel:SetOperation(MODEL_OPERATION_DELETE)
 oModel:Activate()

If oModel:VldData()
 oModel:CommitData()
 MsgInfo("Registro EXCLUIDO!", "Atenção")
 Else
 VarInfo("",oModel:GetErrorMessage())
 EndIf 
 
 oModel:DeActivate()
Else
 MsgInfo("Registro NAO LOCALIZADO!", "Atenção")
EndIf

Return Nil

Pode lhe interessar: