Árvore de páginas

MATA094 - Liberação de Documentos MVC

Produto:

Microsiga Protheus 

Versões:

A partir da Versão 12

Ocorrência:

Rotina Automática - MATA094

Ambiente:

SIGACOM - Compras

Descrição:

Rotina automática no modelo MVC 

Passo a passo:

Exemplo de rotina automática MATA094
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'

User Function MyExec094()

	Local oModel094 := Nil 		//-- Objeto que receberá o modelo da MATA094
	Local cNum 		:= "PMSA02" //-- Recebe o número do documento a ser avaliado
	Local cTipo 	:= "PC" 	//-- Recebe o tipo do documento a ser avaliado
	Local cAprov 	:= "000003" //-- Recebe o código do aprovador do documento
	Local nLenSCR 	:= 0 		//-- Controle de tamanho de campo do documento
	Local lOk 		:= .T. 		//-- Controle de validação e commit
	Local aErro     := {}       //-- Recebe msg de erro de processamento

    //-- Inicializa o ambiente
	PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"
	
	nLenSCR := TamSX3("CR_NUM")[1] //-- Obtem tamanho do campo CR_NUM
	DbSelectArea("SCR")
	SCR->(DbSetOrder(3)) //-- CR_FILIAL+CR_TIPO+CR_NUM+CR_APROV

	If SCR->(DbSeek(xFilial("SCR") + cTipo + Padr(cNum, nLenSCR) + cAprov))

		//-- Códigos de operações possíveis:
		//--	"001" // Liberado
		//--	"002" // Estornar
		//--	"003" // Superior
		//--	"004" // Transferir Superior
		//--	"005" // Rejeitado
		//--	"006" // Bloqueio
		//--	"007" // Visualizacao 

		//-- Seleciona a operação de aprovação de documentos
		A094SetOp('001')

		//-- Carrega o modelo de dados e seleciona a operação de aprovação (UPDATE)
		oModel094 := FWLoadModel('MATA094')
		oModel094:SetOperation( MODEL_OPERATION_UPDATE )
		oModel094:Activate()

		//-- Valida o formulário
		lOk := oModel094:VldData()

		If lOk
			//-- Se validou, grava o formulário
			lOk := oModel094:CommitData()
		EndIf

		//-- Avalia erros
		If !lOk
			//-- Busca o Erro do Modelo de Dados
			aErro := oModel094:GetErrorMessage()
			     
			//-- Monta o Texto que será mostrado na tela
			AutoGrLog("Id do formulário de origem:" + ' [' + AllToChar(aErro[01]) + ']')
			AutoGrLog("Id do campo de origem: "     + ' [' + AllToChar(aErro[02]) + ']')
			AutoGrLog("Id do formulário de erro: "  + ' [' + AllToChar(aErro[03]) + ']')
			AutoGrLog("Id do campo de erro: "       + ' [' + AllToChar(aErro[04]) + ']')
			AutoGrLog("Id do erro: "                + ' [' + AllToChar(aErro[05]) + ']')
			AutoGrLog("Mensagem do erro: "          + ' [' + AllToChar(aErro[06]) + ']')
			AutoGrLog("Mensagem da solução:"        + ' [' + AllToChar(aErro[07]) + ']')
			AutoGrLog("Valor atribuído: "           + ' [' + AllToChar(aErro[08]) + ']')
			AutoGrLog("Valor anterior: "            + ' [' + AllToChar(aErro[09]) + ']')

			//-- Mostra a mensagem de Erro
			MostraErro()
		EndIf

		//-- Desativa o modelo de dados
		oModel094:DeActivate()

	Else
		MsgInfo("Documento não encontrado!", "MyExec094")
	EndIf
    
    //-- Finaliza o ambiente
    RESET ENVIRONMENT

Return Nil
Exemplo de estorno para a rotina MATA094
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'

User Function MyExec094()

	Local cNum 		:= "PMSA02" //-- Recebe o número do documento a ser avaliado
	Local cTipo 	:= "PC" 	//-- Recebe o tipo do documento a ser avaliado
	Local cAprov 	:= "000003" //-- Recebe o código do aprovador do documento
	Local nLenSCR 	:= 0 		//-- Controle de tamanho de campo do documento
	Local lOk 		:= .T. 		//-- Controle de validação e commit
	
    //-- Inicializa o ambiente
	PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"
	
	nLenSCR := TamSX3("CR_NUM")[1] //-- Obtem tamanho do campo CR_NUM
	DbSelectArea("SCR")
	SCR->(DbSetOrder(3)) //-- CR_FILIAL+CR_TIPO+CR_NUM+CR_APROV

	If SCR->(DbSeek(xFilial("SCR") + cTipo + Padr(cNum, nLenSCR) + cAprov))

		lOk := A094VldEst()
 
        If lOk
            MsgInfo("O documento "+cNum+" foi estornado com sucesso.")
        Else
            MsgInfo("Ocorreu um erro ao estornar o documento "+cNum)
        EndIf

	Else
		MsgInfo("Documento não encontrado!", "MyExec094")
	EndIf
    
    //-- Finaliza o ambiente
    RESET ENVIRONMENT

Return Nil
Exemplo de rejeição para a rotina MATA094
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'

User Function MyExec094()        
    Local oModel094 := Nil                    //-- Objeto que receberá o modelo da MATA094
    Local cNum      := "000000000000001"      //-- Recebe o número do documento a ser avaliado
    Local cTipo     := "CT"                   //-- Recebe o tipo do documento a ser avaliado
    Local cAprov    := "000003"               //-- Recebe o código do aprovador do documento
    Local cJustif   := "Rejeição de contrato" //-- Recebe a justificativa para rejeição
    Local nLenSCR   := 0                      //-- Controle de tamanho de campo do documento
    Local lOk       := .T.                    //-- Controle de validação e commit
    Local aErro     := {}                     //-- Recebe msg de erro de processamento

    //-- Inicializa o ambiente
    PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"

    nLenSCR := TamSX3("CR_NUM")[1] //-- Obtem tamanho do campo CR_NUM
    DbSelectArea("SCR")
    SCR->(DbSetOrder(3)) //-- CR_FILIAL+CR_TIPO+CR_NUM+CR_APROV

    If SCR->(DbSeek(xFilial("SCR") + cTipo + Padr(cNum, nLenSCR) + cAprov))

        //-- Códigos de operações possíveis:
        //-- "001" // Liberado
        //-- "002" // Estornar
        //-- "003" // Superior
        //-- "004" // Transferir Superior
        //-- "005" // Rejeitado
        //-- "006" // Bloqueio
        //-- "007" // Visualizacao

        //-- Seleciona a operação de rejeição de documentos
        A094SetOp('005')

        //-- Carrega o modelo de dados e seleciona a operação de aprovação (UPDATE)
        oModel094 := FWLoadModel('MATA094')
        oModel094:SetOperation( MODEL_OPERATION_UPDATE )
        oModel094:Activate()

        //-- Preenche justificativa
        oModel094:GetModel('FieldSCR'):SetValue('CR_OBS', cJustif)

        //-- Valida o formulário
        lOk := oModel094:VldData()

        If lOk
            //-- Se validou, grava o formulário
            lOk := oModel094:CommitData()
        EndIf

        //-- Avalia erros
        If !lOk
            //-- Busca o Erro do Modelo de Dados
            aErro := oModel094:GetErrorMessage()

            //-- Monta o Texto que será mostrado na tela
            AutoGrLog("Id do formulário de origem:" + ' [' + AllToChar(aErro[01]) + ']')
            AutoGrLog("Id do campo de origem: "     + ' [' + AllToChar(aErro[02]) + ']')
            AutoGrLog("Id do formulário de erro: "  + ' [' + AllToChar(aErro[03]) + ']')
            AutoGrLog("Id do campo de erro: "       + ' [' + AllToChar(aErro[04]) + ']')
            AutoGrLog("Id do erro: "                + ' [' + AllToChar(aErro[05]) + ']')
            AutoGrLog("Mensagem do erro: "          + ' [' + AllToChar(aErro[06]) + ']')
            AutoGrLog("Mensagem da solução:"        + ' [' + AllToChar(aErro[07]) + ']')
            AutoGrLog("Valor atribuído: "           + ' [' + AllToChar(aErro[08]) + ']')
            AutoGrLog("Valor anterior: "            + ' [' + AllToChar(aErro[09]) + ']')

            //-- Mostra a mensagem de Erro
            MostraErro()
        EndIf

        //-- Desativa o modelo de dados
        oModel094:DeActivate()

    Else
        MsgInfo("Documento não encontrado!", "MyExec094")
    EndIf

    //-- Finaliza o ambiente
    RESET ENVIRONMENT

Return Nil
Exemplo de transferência superior para a rotina MATA094
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'

User Function MyExec094()

Local oModel094 := Nil      //-- Objeto que receberá o modelo da MATA094
Local cNum      := "PMSAM7" //-- Recebe o número do documento a ser avaliado
Local cTipo     := "PC"     //-- Recebe o tipo do documento a ser avaliado
Local cAprov    := "SALC14" //-- Recebe o código do aprovador do documento
Local cProxApr	:= "000451" //superior
Local cGrupoAp	:= "ROM049"
Local cJustif   := "Teste"
Local nLenSCR   := 0        //-- Controle de tamanho de campo do documento
Local lOk       := .T.      //-- Controle de validação e commit 
Local aErro     := {}       //-- Recebe msg de erro de processamento

//-- Inicializa o ambiente
PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"
    
nLenSCR := TamSX3("CR_NUM")[1] //-- Obtem tamanho do campo CR_NUM 
DbSelectArea("SCR")
SCR->(DbSetOrder(3)) //-- CR_FILIAL+CR_TIPO+CR_NUM+CR_APROV

If SCR->(DbSeek(xFilial("SCR") + cTipo + Padr(cNum, nLenSCR) + cAprov)) 

    //-- Códigos de operações possíveis:
    //--    "001" // Liberado
    //--    "002" // Estornar
    //--    "003" // Superior
    //--    "004" // Transferir Superior
    //--    "005" // Rejeitado
    //--    "006" // Bloqueio
    //--    "007" // Visualizacao

    //-- Seleciona a operação de aprovação de documentos
    A094SetOp('004')

    //-- Carrega o modelo de dados e seleciona a operação de aprovação (UPDATE)
    oModel094 := FWLoadModel('MATA094') 
    oModel094:SetOperation( MODEL_OPERATION_UPDATE )
    oModel094:Activate()

    oModel094:GetModel("FieldSCR"):SetValue( 'CR_OBS' , cJustif )

    //-- Valida o formulário
    lOk := oModel094:VldData()

    If lOk
        //-- Se validou, grava o formulário
        lOk := oModel094:CommitData()
    EndIf

    //-- Avalia erros
    If !lOk
        //-- Busca o Erro do Modelo de Dados
        aErro := oModel094:GetErrorMessage()
                
        //-- Monta o Texto que será mostrado na tela
        AutoGrLog("Id do formulário de origem:" + ' [' + AllToChar(aErro[01]) + ']')
        AutoGrLog("Id do campo de origem: "     + ' [' + AllToChar(aErro[02]) + ']')
        AutoGrLog("Id do formulário de erro: "  + ' [' + AllToChar(aErro[03]) + ']')
        AutoGrLog("Id do campo de erro: "       + ' [' + AllToChar(aErro[04]) + ']')
        AutoGrLog("Id do erro: "                + ' [' + AllToChar(aErro[05]) + ']')
        AutoGrLog("Mensagem do erro: "          + ' [' + AllToChar(aErro[06]) + ']')
        AutoGrLog("Mensagem da solução:"        + ' [' + AllToChar(aErro[07]) + ']')
        AutoGrLog("Valor atribuído: "           + ' [' + AllToChar(aErro[08]) + ']')
        AutoGrLog("Valor anterior: "            + ' [' + AllToChar(aErro[09]) + ']')

        //-- Mostra a mensagem de Erro
        MostraErro()
    EndIf

    //-- Desativa o modelo de dados
    oModel094:DeActivate()

Else
    MsgInfo("Documento não encontrado!", "MyExec094")
EndIf
    
//-- Finaliza o ambiente
RESET ENVIRONMENT

Return Nil

Observação:Para maiores informações consultar as informações contidas no documento "ADVPL utilizando MVC"