Árvore de páginas

Exemplo de uso para a rotina automática do Complemento de Produto

Produto:

Microsiga Protheus®

Ambiente:

Estoque e Custos (SIGAEST)

Ocorrência:

Exemplo de ExecAuto da rotina "Complemento de Produto" (MATA180)

Passo a passo:

A finalidade deste documento é exemplificar como o Complemento de Produto pode ser feito por lançamento automático através de MsExecAuto (rotina automática) ou MVC (a partir do release 12.1.17 Outubro/2017).

É obrigatório o produto estar cadastrado na tabela SB1 (descrição genérica de produto).

Tabelas Utilizadas:

  • Dados Adicionais do Produto (SB5)


Exemplos:

Desenvolvimento com a utilização da função MsExecAuto()

Função: MATA180

Parâmetros: 

NomeTipoDescriçãoObrigatório
xAutoCabArrayCampos a serem preenchidosx
nCallOpcXNumérico

Operação da rotina onde:

3-Incluir;

4-Alterar 

5-Excluir

x
Exemplo
#Include "RwMake.CH"
#include "tbiconn.ch"
User Function TMata180()
Local aCab        := {}
Local cCodigo    := ""

Private lMsErroAuto := .F.

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"

// define o código do produto a ser utilizado
cCodigo    := "1234"

//
// Para incluir um registro na SB5, obrigatoriamente o código do produto deve estar previamente cadastrado na tabela SB1
//
dbSelectArea("SB1")
dbSetOrder(1)
If DbSeek(xFilial("SB1")+cCodigo)

    aCab:= {     {"B5_COD"  ,cCodigo  ,Nil},;            // Código identificador do produto            
                {"B5_CEME"  ,"Nome cientifico"  ,Nil}}    // Nome científico do produto
    MSExecAuto({|x,y| Mata180(x,y)},aCab,3) //Inclusão 
    conout("Acabou de executar a opção Incluir na rotina automática do Cadastro de Complemento do Produto")
    
    //-- Retorno de erro na execução da rotina
    If lMsErroAuto    
        conout("erro ao incluir o produto")
        cErro:=MostraErro()
    Else
        conout("Incluído com sucesso")
    Endif
Else
    conout("Produto não foi encontrado na tabela SB1.")
EndIf

//
// Para alterar um registro na SB5 não é obrigatório estar posicionado no registro a ser alterado
//
lMsErroAuto := .F.
aCab:= {     {"B5_COD"  ,cCodigo  ,Nil},;                // Código identificador do produto            
            {"B5_CEME"  ,"Nome cientifico 1234"  ,Nil}}    // Nome científico do produto
MSExecAuto({|x,y| Mata180(x,y)},aCab,4) //Alteração
conout("Acabou de executar a opção Alterar da rotina automática do Cadastro de Complemento do Produto")

//-- Retorno de erro na execução da rotina
If lMsErroAuto    
    conout("erro ao alterar o produto")
    cErro:=MostraErro()
Else
    conout("Alterado com sucesso")
Endif

//
// Para excluir um registro na SB5, não é obrigatório estar posicionado no registro a ser alterado
//
lMsErroAuto := .F.
aCab:= {     {"B5_COD"  ,cCodigo  ,Nil},;            // Código identificador do produto            
            {"B5_CEME"  ,"Nome cientifico"  ,Nil}}    // Nome científico do produto
MSExecAuto({|x,y| Mata180(x,y)},aCab,5) //Exclusão  
conout("Acabou de executar a opção Excluir da rotina automática do Cadastro de Complemento do Produto")

//-- Retorno de erro na execução da rotina
If lMsErroAuto    
    conout("erro ao excluir o produto")
    cErro:=MostraErro()
Else
    conout("Excluído com sucesso")
Endif

RESET ENVIRONMENT
Return

Desenvolvimento com a utilização em MVC (a partir do release 12.1.17 Outubro/2017).

Exemplo
#include 'protheus.ch'
#INCLUDE "TBICONN.CH"
#INCLUDE 'FWMVCDef.ch'
#INCLUDE "RWMAKE.CH"

//------------------------------------------------------------------------
/*
Função Principal
*/
//------------------------------------------------------------------------
User Function TMAT180MVC()



PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "EST"


Incluir1()    // Inclusão utilizando o MVC
Incluir2()    // Inclusão utilizando a função FWMVCRotAuto
Alterar()    // Alteração utilizando o MVC
Excluir()    // Alteração utilizando o MVC

RESET ENVIRONMENT

Return

/*------------------------------------------------------------------------
EXEMPLO DE INCLUSÃO NA TABELA SB5 UTILIZANDO MVC
------------------------------------------------------------------------*/
Static Function Incluir1()
Local oModel    := Nil
Local cCodigo    := ""

// informe o código do produto, a qual já deve estar registrado na tabela SB1
cCodigo := "1234"

//Para utilização da mesma, o modelo de dados chama-se MATA180M e nao MATA180
oModel := FwLoadModel("MATA180M")
oModel:SetOperation(MODEL_OPERATION_INSERT)
oModel:Activate()

oModel:SetValue("SB5MASTER","B5_COD"    ,cCodigo)
oModel:SetValue("SB5MASTER","B5_CEME"    ,"Nome científico")

If oModel:VldData()
    oModel:CommitData()
    conout("Registro INCLUIDO!")
Else
    VarInfo("Erro ao incluir",oModel:GetErrorMessage())
EndIf

oModel:DeActivate()
oModel:Destroy()
oModel := NIL

Return Nil

/*------------------------------------------------------------------------
EXEMPLO DE INCLUSÃO NA TABELA SB5 UTILIZANDO A FUNÇÃO FwMVCRotAuto
------------------------------------------------------------------------*/
Static Function Incluir2()
Local aCab        := {}
Local cCodigo    := ""

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

// informe o código do produto, a qual já deve estar registrado na tabela SB1
cCodigo := "ABC"

//Adicionando os dados do ExecAuto cab
aCab:= {     {"B5_COD"  ,cCodigo  ,Nil},;            // Código identificador do produto
            {"B5_CEME"  ,"Nome cientifico"  ,Nil}}    // Nome científico do produto

//Para utilização da mesma, o modelo de dados chama-se MATA180M e nao MATA180
oModel2 := FwLoadModel("MATA180M")

FWMVCRotAuto( oModel2,"SB5",MODEL_OPERATION_INSERT,{{"SB5MASTER", aCab}})

//Se houve erro no ExecAuto, mostra mensagem
If lMsErroAuto
    MostraErro()
//Senão, mostra uma mensagem de inclusão
Else
    conout("Registro incluído utilizando a função FWMVCRotAuto!")
EndIf

oModel2:DeActivate()
oModel2:Destroy()
oModel2 := NIL

Return Nil

/*------------------------------------------------------------------------
EXEMPLO DE ALTERAÇÃO NA TABELA SB5 COM MVC
------------------------------------------------------------------------*/
Static Function Alterar()
Local oModel    := Nil
Local cCodigo    := ""

// informe o código do produto, a qual já deve estar registrado na tabela SB1
cCodigo := "1234"

// O registro deve estar posicionado para alterar
dbSelectArea("SB5")
DbSetOrder(1)
If DbSeek(xFilial("SB5") + cCodigo)

//Para utilização da mesma, o modelo de dados chama-se MATA180M e nao MATA180
    oModel := FwLoadModel("MATA180M")
    oModel:SetOperation(MODEL_OPERATION_UPDATE)
    oModel:Activate()
    
    oModel:SetValue("SB5MASTER","B5_COD",cCodigo)
    oModel:SetValue("SB5MASTER","B5_CEME","Nome cientifico 1234")

    If oModel:VldData()
        oModel:CommitData()
        conout("Registro ALTERADO!")
    Else
        VarInfo("Erro ao alterar",oModel:GetErrorMessage())
    EndIf

    oModel:DeActivate()
    oModel:Destroy()
    oModel := NIL
Else
    conout("Registro não localizado!")
EndIf

Return Nil

/*------------------------------------------------------------------------
EXEMPLO DE EXCLUSÃO NA TABELA SB5 COM MVC
------------------------------------------------------------------------*/
Static Function Excluir()
Local oModel    := Nil
Local cCodigo    := ""

// informe o codigo do produto, a qual já deve estar registrado na tabela SB1
cCodigo := "1234"

// O registro deve estar posicionado para excluir
dbSelectArea("SB5")
DbSetOrder(1)
If DbSeek(xFilial("SB5") + cCodigo)

//Para utilização da mesma, o modelo de dados chama-se MATA180M e nao MATA180
    oModel := FwLoadModel("MATA180M")
    oModel:SetOperation(MODEL_OPERATION_DELETE)
    oModel:Activate()

    If oModel:VldData()
        oModel:CommitData()
        conout("Registro excluído!")
    Else
        VarInfo("Erro ao excluir",oModel:GetErrorMessage())
    EndIf

    oModel:DeActivate()
    oModel:Destroy()
    oModel := NIL
Else
    conout("Registro não localizado!")
EndIf

Return Nil

Pode lhe interessar: