Histórico da Página
CONTEÚDO
- Dados Gerais
- Visão Geral
- Exemplos
- Demais Informações
- Tabelas UtilizadasAssuntos Relacionados
01. DADOS GERAIS
Produto: | TOTVS Backoffice |
---|---|
Linha de Produto: | Linha Protheus |
Segmento: | Backoffice SP |
Módulo: | ESTOQUE E CUSTOS (SIGAEST) |
Função: | INDICADORES DE PRODUTOS (MATA019SOLICITAÇÃO AO ARMAZEM (MATA105) |
02. VISÃO GERAL
Exemplo de rotina automática MVC para incluir, alterar e excluir Indicadores de Produtossolicitação ao armazem.
03. EXEMPLOS
Escolha o O modelo desejado abaixo conforme a sua necessidade de execução:abaixo inclui uma solicitação com 4 itens.
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "PROTHEUSRWMAKE.CH" #INCLUDE "TBICONN.CH" #INCLUDE "RWMAKE.CH" #INCLUDE "FWMVCDef.ch" //------------------------------------------------------------------------ /* EXEMPLO DE INCLUSÃO */ //------------------------------------------------------------------------ User Function m019Inc1() Local oModel := Nil Private lMsErroAuto := .F. PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST" If "SBZ" $ SuperGetMv("MV_CADPROD",.F.,"") oModel := FwLoadModel("MATA010") oModel:SetOperation(MODEL_OPERATION_INSERT) oModel:Activate() oModel:SetValue("SB1MASTER", "B1_COD", "000000000000001") oModel:SetValue("SB1MASTER", "B1_DESC", "PRODUTO TESTE") oModel:SetValue("SB1MASTER", "B1_TIPO", "PA") oModel:SetValue("SB1MASTER", "B1_UM", "UN") oModel:SetValue("SB1MASTER", "B1_LOCPAD", "01") oModel:SetValue("SB1MASTER", "B1_LOCALIZ", "N") oModel:SetValue("SBZDETAIL","BZ_FILIAL" ,"01") oModel:SetValue("SBZDETAIL","BZ_LOCPAD" ,"01") If oModel:VldData(User Function mymata105() Local lRet := .T. Local aCab := {} Local aItens := {} Local nSaveSx8 := 0 Local cNumero := '' Local N := 0 Local nOpcx := 0 Private lMsErroAuto := .F. Private lMsErroHelp := .T. RpcClearEnv() RpcSetType( 3 ) lRet := RpcSetEnv( 'T1', 'D MG 01 ' ) If ( !lRet ) ConOut( 'Problemas na Inicialização do Ambiente' ) Else //---------- nOpcx = 3 Inclusão de Solicitação de Armazém -------------- nOpcx := 3 nSaveSx8:= GetSx8Len() cNumero := GetSx8Num( 'SCP', 'CP_NUM' ) dbSelectArea( 'SB1' ) SB1->( dbSetOrder( 1 ) ) dbSelectArea( 'SCP' ) SCP->( dbSetOrder( 1 ) ) If nOpcx == 3 While SCP->( dbSeek( xFilial( 'SCP' ) + cNumero ) ) oModel:CommitData ConfirmSx8() MsgInfo("Registro INCLUIDO!", "Atenção") Else cNumero := GetSx8Num('SCP', 'CP_NUM') VarInfo("",oModel:GetErrorMessage())EndDo EndIf Aadd( aCab, { "CP_NUM" ,cNumero , Nil }) Aadd( aCab, { oModel:DeActivate() oModel:Destroy("CP_EMISSAO" ,dDataBase , Nil }) Aadd( oModel := NIL ElseaItens, {} ) MsgInfoAadd("Parâmetro MV_CADPROD deve conter tabela SBZ", "Atenção") EndIf RESET ENVIRONMENT Return Nil //------------------------------------------------------------------------ /* EXEMPLO DE INCLUSÃO (Utilizando a função FwMvcRotAuto apenas em caráter didático) */ //------------------------------------------------------------------------ User Function m019Inc2() Local aDadosCab := {} Local aDadosIte := {} Local aItens := {} Private oModel := Nil Private lMsErroAuto := .F. Private aRotina := {} PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST" If "SBZ" $ SuperGetMv("MV_CADPROD",.F.,"") oModel := FwLoadModel("MATA010") //Adicionando os dados do ExecAuto Cabeçalho aAdd(aDadosCab, {"B1_COD", "000000000000001" , 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 aAdd(aDadosIte, {"BZ_FILIAL", "01" , Nil}) aAdd(aDadosIte, {"BZ_LOCPAD", "01" , Nil}) //No item o array precisa de um nivel superior. aAdd(aItens,aDadosIte) //Chamando a inclusão - Modelo 2 FWMVCRotAuto( oModel,"SB1",MODEL_OPERATION_INSERT,{{"SB1MASTER", aDadosCab},{"SBZDETAIL", aItens}}) //Se houve erro no ExecAuto, mostra mensagem If lMsErroAuto MostraErro() //Senão, mostra uma mensagem de inclusão aItens[ Len( aItens ) ],{"CP_ITEM" , '01' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_001' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,10 , Nil } ) Aadd( aItens, {} ) Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '02' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_002' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,20 , Nil } ) Aadd( aItens, {} ) Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '03' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_003' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,30 , Nil } ) Aadd( aItens, {} ) Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '04' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_004' , Nil } ) Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,40 , Nil } ) //---------- nOpcx = 5 Exclusão de Solicitação de Armazém -------------- SB1->( dbSetOrder( 1 ) ) SCP->( dbSetOrder( 1 ) ) MsExecAuto( { | x, y, z | Mata105( x, y , z ) }, aCab, aItens , nOpcx ) If lMsErroAuto If !__lSX8 RollBackSx8() EndIf MsgStop( 'Erro ao Executar o Processo' ) MostraErro() lRet := .F. Else While ( GetSx8Len() > MsgInfo("Registro INCLUIDO!", "Atenção"nSaveSx8 ) ConfirmSx8() EndIfEnd Else CONOUT MsgInfo("Parâmetro MV_CADPROD deve conter tabela SBZ", "Atenção") EndIf RESET ENVIRONMENT Return Nil //------------------------------------------------------------------------ /* EXEMPLO DE INCLUSÃO QUANDO JÁ EXISTE PRODUTO CADASTRADO */ //------------------------------------------------------------------------ User Function m019Inc3() Local oModel := Nil Local aFils := {} Local aArmz := {} Local nI := 0 Private lMsErroAuto := .F. PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " USER "Administrador" PASSWORD "" MODULO "EST" //Posiciona SB1->(DbSetOrder(1)) If SB1->(DbSeek(xFilial("SB1") + "TESTE")) oModel := FwLoadModel("MATA019") oModel:SetOperation(MODEL_OPERATION_UPDATE) oModel:Activate() aFils := {"D MG 01 ", "D MG 02 ", "M SP 01 ", "M SP 02 "} aArmz := {"04", "02", "03", "01"} //Altera a primeira linha oModelGrid := oModel:GetModel('SBZDETAIL') If oModelGrid:Length() > 0 oModelGrid:GoLine(1) oModelGrid:SetValue("BZ_FILIAL",aFils[1]) oModelGrid:SetValue("BZ_LOCPAD",aArmz[1]) EndIf //Adiciona mais 3 linhas For nI := 2 To 4 If oModelGrid:Length() < nI oModelGrid:AddLine() EndIf oModelGrid:GoLine(nI) oModelGrid:SetValue("BZ_FILIAL", aFils[nI]) oModelGrid:SetValue("BZ_LOCPAD", aArmz[nI]) Next If oModel:VldData() oModel:CommitData() MsgInfo("Registro ALTERADO!", "Atenção") Else Conout(VarInfo("",oModel:GetErrorMessage())) EndIf oModel:DeActivate() Else MsgInfo("Registro NAO LOCALIZADO!", "Atenção") EndIf RESET ENVIRONMENT Return Nil //------------------------------------------------------------------------ /* EXEMPLO DE ALTERAÇÃO / INCLUSÃO QUANDO JÁ EXISTE PRODUTO CADASTRADO */ //------------------------------------------------------------------------ User Function m019Alt() Local oModel := Nil Private lMsErroAuto := .F. PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST" //Posiciona SB1->(DbSetOrder(1)) If SB1->(DbSeek(xFilial("SB1") + "000000000000001")) oModel := FwLoadModel("MATA019") oModel:SetOperation(MODEL_OPERATION_UPDATE) oModel:Activate() oModel:SetValue("SBZDETAIL","BZ_FILIAL","E1U102") oModel:SetValue("SBZDETAIL","BZ_LOCPAD","02") 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 RESET ENVIRONMENT Return Nil //------------------------------------------------------------------------ /* EXEMPLO DE EXCLUSÃO */ //------------------------------------------------------------------------ User Function m019Exc() Local oModel := Nil Private aRotina := {} PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" USER "Administrador" PASSWORD "" MODULO "EST" //Posiciona SB1->(DbSetOrder(1)) If SB1->(DbSeek(xFilial("SB1") + "000000000000001")) oModel := FwLoadModel ("MATA019") 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 RESET ENVIRONMENT Return Nil |
04. DEMAIS INFORMAÇÕES
Aviso | ||
---|---|---|
| ||
Ao utilizar a rotina MATA010 como modelo, é necessário que o parâmetro MV_CADPROD contenha a tabela SBZ para que o submodelo da rotina MATA019 também seja carregado e possibilite a manipulação dos dados. |
05. TABELAS UTILIZADAS
- SB1
- SBZ
06. ASSUNTOS RELACIONADOS
Cross Segmento - Backoffice (Linha Protheus) - SIGAEST - MATA019 - Indicador de Produtos
...
'Processo Executado' )
EndIf |
O modelo abaixo altera uma solicitação com 4 itens
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function mymata105()
Local lRet := .T.
Local aCab := {}
Local aItens := {}
Local nSaveSx8 := 0
Local cNumero := ''
Local N := 0
Local nOpcx := 0
Private lMsErroAuto := .F.
Private lMsErroHelp := .T.
RpcClearEnv()
RpcSetType( 3 )
lRet := RpcSetEnv( 'T1', 'D MG 01 ' )
//---------- nOpcx = 4 Alteração de Solicitação de Armazém -------------
//-----------------------------------------------------------------------------//
// AUTDELETA - Opcional
// Atributo para Definir se o Item que pertence a Solicitação de Armazém deve
// ser Excluído ou Não no processo de Alteração.
// - N = Não Deve Ser Excluído
// - S = Sim Deve Ser Excluído
//-----------------------------------------------------------------------------//
nOpcx := 4
Aadd( aCab, { "CP_NUM" ,cNumero , Nil })
Aadd( aCab, { "CP_EMISSAO" ,dDataBase , Nil })
Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '01' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_NUM" , 'cNumero' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_001' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,10 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '02' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_002' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,120 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '03' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_003' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,30 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'S' , Nil } )
Aadd( aItens, {} )
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '04' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_004' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,40 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
SB1->( dbSetOrder( 1 ) )
SCP->( dbSetOrder( 1 ) )
MsExecAuto( { | x, y, z | Mata105( x, y , z ) }, aCab, aItens , nOpcx )
If lMsErroAuto
If !__lSX8
RollBackSx8()
EndIf
MsgStop( 'Erro ao Executar o Processo' )
MostraErro()
lRet := .F.
Else
While ( GetSx8Len() > nSaveSx8 )
ConfirmSx8()
End
CONOUT ( 'Processo Executado' ) |
O modelo abaixo Exclui 1 ou mais itens de uma solicitação com 4 itens.
Aviso | ||
---|---|---|
| ||
Ao utilizar a rotina automatica MATA105 como exclusão, deve-se levar em consideração que a exclusão se dá apenas por item, não é possivel excluir por documento. |
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"
User Function mymata105()
Local lRet := .T.
Local aCab := {}
Local aItens := {}
Local nSaveSx8 := 0
Local cNumero := ''
Local N := 0
Local nOpcx := 0
Private lMsErroAuto := .F.
Private lMsErroHelp := .T.
RpcClearEnv()
RpcSetType( 3 )
lRet := RpcSetEnv( 'T1', 'D MG 01 ' )
If ( !lRet )
ConOut( 'Problemas na Inicialização do Ambiente' )
Else
//---------- nOpcx = 5 Exclusão de Solicitação de Armazém --------------
SB1->( dbSetOrder( 1 ) )
SCP->( dbSetOrder( 1 ) )
nOpcx := 5
Aadd( aCab, { "CP_NUM" ,cNumero , Nil })
Aadd( aCab, { "CP_EMISSAO" ,dDataBase , Nil })
for N := 1 to 4
aItens := {}
Aadd( aItens, {} )
If n = 1
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '01' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_001' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,10 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
elseif n = 2
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '02' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_002' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" , 20 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
elseif n = 3
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '03' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_003' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,30 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'S' , Nil } )
elseiF N = 4
Aadd( aItens[ Len( aItens ) ],{"CP_ITEM" , '04' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_PRODUTO" ,'PRD_004' , Nil } )
Aadd( aItens[ Len( aItens ) ],{"CP_QUANT" ,40 , Nil } )
Aadd( aItens[ Len( aItens ) ],{"AUTDELETA" ,'N' , Nil } )
EndIf
//----------------------------------------------------------------------
SB1->( dbSetOrder( 1 ) )
SCP->( dbSetOrder( 1 ) )
MsExecAuto( { | x, y, z | Mata105( x, y , z ) }, aCab, aItens , nOpcx )
If lMsErroAuto
If !__lSX8
RollBackSx8()
EndIf
MsgStop( 'Erro ao Executar o Processo' )
MostraErro()
lRet := .F.
Else
While ( GetSx8Len() > nSaveSx8 )
ConfirmSx8()
End
CONOUT ( 'Processo Executado' )
EndIf
NEXT N
EndIf |
04. TABELAS UTILIZADAS
- SCP