Árvore de páginas

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

Características do Requisito

Linha de Produto:

Protheus

Segmento:

Serviços

Módulo:

SIGAEST - Estoque e Custos

Rotina:

Rotina

Nome Técnico

MATA180

Complemento de Produto

Cadastros Iniciais:

MATA010 - Cadastro de Produtos

País(es):

Todos os países

Banco(s) de Dados:

Bancos de dados homologados pela TOTVS

Tabelas Utilizadas:

SB5 - Dados Adicionais do Produto

Sistema(s) Operacional(is):

Sistemas Operacionais homologados pela TOTVS

Descrição

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).

MsExecAuto

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

Função:

MATA180

Parâmetros:

Nome

Tipo

Descrição

Obrigatório

 xAutoCab

Array

Campos a serem preenchidos

x

 nCallOpcX

Numérico

Operação da rotina onde: 3-Incluir; 4-Alterar e 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