Linha de Produto: | Protheus | ||||
Segmento: | Serviços | ||||
Módulo: | SIGAEST - Estoque e Custos | ||||
Rotina: |
| ||||
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 |
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).
Função: | MATA180 | ||||||||||||
Parâmetros: |
|
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
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