MATA094 - Liberación de documentos MVC

Producto:

Microsiga Protheus 

Versiones:

A partir da Versão 12

Ocurrencia:

Rutina automática - MATA094

Entorno:

SIGACOM - Compras

Descripción:

Rutina automática en el modelo MVC 

Paso a paso:

Ejemplo de rutina automática MATA094
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'

User Function MyExec094()

	Local oModel094 := Nil 		//-- Objeto que recibirá el modelo de la MATA094
	Local cNum 		:= "PMSA02" //-- Recibe el número del documento que se evaluará
	Local cTipo 	:= "PC" 	//-- Recibe el tipo del documento que se evaluará
	Local cAprov 	:= "000003" //-- Recibe el código del aprobador del documento
	Local nLenSCR 	:= 0 		//-- Control de tamaño de campo del documento
	Local lOk 		:= .T. 		//-- Control de validación y commit
	Local aErro     := {}       //-- Recibe msg de error de procesamiento

    //-- Inicia el entorno
	PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"
	
	nLenSCR := TamSX3("CR_NUM")[1] //-- Obtiene tamaño del 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 operaciones posibles:
		//--	"001" // Liberado
		//--	"002" // Revertir
		//--	"003" // Superior
		//--	"004" // Transferir Superior
		//--	"005" // Rechazado
		//--	"006" // Bloqueo
		//--	"007" // Visualización 

		//-- Selecciona la operación de aprobación de documentos
		A094SetOp('001')

		//-- Carga el modelo de datos y selecciona la operación de aprobación (UPDATE)
		oModel094 := FWLoadModel('MATA094')
		oModel094:SetOperation( MODEL_OPERATION_UPDATE )
		oModel094:Activate()

		//-- Valida el formulario
		lOk := oModel094:VldData()

		If lOk
			//-- Si validó, graba el formulario
			lOk := oModel094:CommitData()
		EndIf

		//-- Evalua errores
		If !lOk
			//-- Busca el Error del Modelo de Datos
			aErro := oModel094:GetErrorMessage()
			     
			//-- Elabora el texto que se mostrará en la pantalla
			AutoGrLog("Id del formulario de origen:" + ' [' + AllToChar(aErro[01]) + ']')
			AutoGrLog("Id del campo de origen: "     + ' [' + AllToChar(aErro[02]) + ']')
			AutoGrLog("Id del formulario de error: "  + ' [' + AllToChar(aErro[03]) + ']')
			AutoGrLog("Id del campo de error: "       + ' [' + AllToChar(aErro[04]) + ']')
			AutoGrLog("Id del error: "                + ' [' + AllToChar(aErro[05]) + ']')
			AutoGrLog("Mensaje del error: "          + ' [' + AllToChar(aErro[06]) + ']')
			AutoGrLog("Mensaje de la solución:"        + ' [' + AllToChar(aErro[07]) + ']')
			AutoGrLog("Valor atribuido: "           + ' [' + AllToChar(aErro[08]) + ']')
			AutoGrLog("Valor anterior: "            + ' [' + AllToChar(aErro[09]) + ']')

			//-- Muestra el mensaje de error
			MostraErro()
		EndIf

		//-- Desactiva el modelo de datos
		oModel094:DeActivate()

	Else
		MsgInfo("Documento no encontrado!", "MyExec094")
	EndIf
    
    //-- Finaliza el entorno
    RESET ENVIRONMENT

Return Nil
Ejemplo de reversión para la rutina MATA094
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'

User Function MyExec094()

	Local cNum 		:= "PMSA02" //-- Recibe el número del documento que se evaluará
	Local cTipo 	:= "PC" 	//-- Recibe el tipo del documento que se evaluará
	Local cAprov 	:= "000003" //-- Recibe el código del aprobador del documento
	Local nLenSCR 	:= 0 		//-- Control de tamaño del campo del documento
	Local lOk 		:= .T. 		//-- Control de validación y commit
	
    //-- Inicia el entorno
	PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"
	
	nLenSCR := TamSX3("CR_NUM")[1] //-- Obtiene tamaño del 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("El documento "+cNum+" se revertió con éxito.")
        Else
            MsgInfo("Ocurrió un error al revertir el documento "+cNum)
        EndIf

	Else
		MsgInfo("¡Documento no encontrado!", "MyExec094")
	EndIf
    
    //-- Finaliza el entorno
    RESET ENVIRONMENT

Return Nil
Ejemplo de rechazo para la rutina MATA094
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'

User Function MyExec094()        
    Local oModel094 := Nil                    //-- Objeto que recibirá el modelo de la MATA094
    Local cNum      := "000000000000001"      //-- Recibe el número del documento que se evaluará
    Local cTipo     := "CT"                   //-- Recibe el tipo del documento que se evaluará
    Local cAprov    := "000003"               //-- Recibe el código del aprobador del documento
    Local cJustif   := "Rechazo de contrato" //-- Recibe la justificación para rechazo
    Local nLenSCR   := 0                      //-- Control de tamaño del campo del documento
    Local lOk       := .T.                    //-- Control de validación y commit
    Local aErro     := {}                     //-- Recibe msg de error de procesamiento

    //-- Inicia el entorno
    PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"

    nLenSCR := TamSX3("CR_NUM")[1] //-- Obtiene tamaño del 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 operaciones posibles:
        //-- "001" // Liberado
        //-- "002" // Revertir
        //-- "003" // Superior
        //-- "004" // Transferir Superior
        //-- "005" // Rechazado
        //-- "006" // Bloqueo
        //-- "007" // Visualización

        //-- Selecciona la operación de rechazo de documentos
        A094SetOp('005')

        //-- Carga el modelo de datos y selecciona la operación de aprobación (UPDATE)
        oModel094 := FWLoadModel('MATA094')
        oModel094:SetOperation( MODEL_OPERATION_UPDATE )
        oModel094:Activate()

        //-- Informa la justificación
        oModel094:GetModel('FieldSCR'):SetValue('CR_OBS', cJustif)

        //-- Valida el formulario
        lOk := oModel094:VldData()

        If lOk
            //-- Si validó, graba el formulario
            lOk := oModel094:CommitData()
        EndIf

        //-- Evalua errores
        If !lOk
            //-- Busca el Error del Modelo de Datos
            aErro := oModel094:GetErrorMessage()

            //-- Elabora el texto que se mostrará en la pantalla
            AutoGrLog("Id del formulario de origen:" + ' [' + AllToChar(aErro[01]) + ']')
            AutoGrLog("Id del campo de origen: "     + ' [' + AllToChar(aErro[02]) + ']')
            AutoGrLog("Id del formulario de error: "  + ' [' + AllToChar(aErro[03]) + ']')
            AutoGrLog("Id del campo de error: "       + ' [' + AllToChar(aErro[04]) + ']')
            AutoGrLog("Id del error: "                + ' [' + AllToChar(aErro[05]) + ']')
            AutoGrLog("Mensaje del error: "          + ' [' + AllToChar(aErro[06]) + ']')
            AutoGrLog("Mensaje de la solución:"        + ' [' + AllToChar(aErro[07]) + ']')
            AutoGrLog("Valor atribuido: "           + ' [' + AllToChar(aErro[08]) + ']')
            AutoGrLog("Valor anterior: "            + ' [' + AllToChar(aErro[09]) + ']')

            //-- Muestra el mensaje de error
            MostraErro()
        EndIf

        //-- Desactiva el modelo de datos
        oModel094:DeActivate()

    Else
        MsgInfo("Documento no encontrado!", "MyExec094")
    EndIf

    //-- Finaliza el entorno
    RESET ENVIRONMENT

Return Nil
Ejemplo de transferencia superior para la rutina MATA094
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'

User Function MyExec094()

Local oModel094 := Nil      //-- Objeto que recibirá el modelo de la MATA094
Local cNum      := "PMSAM7" //-- Recibe el número del documento que se evaluará
Local cTipo     := "PC"     //-- Recibe el tipo del documento que se evaluará
Local cAprov    := "SALC14" //-- Recibe el código del aprobador del documento
Local cProxApr	:= "000451" //superior
Local cGrupoAp	:= "ROM049"
Local cJustif   := "Teste"
Local nLenSCR   := 0        //-- Control de tamaño del campo del documento
Local lOk       := .T.      //-- Control de validación del commit 
Local aErro     := {}       //-- Recibe msg de error de procesamiento

//-- Inicia el entorno
PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" USER "Administrador" PASSWORD "*" MODULO "COM"
    
nLenSCR := TamSX3("CR_NUM")[1] //-- Obtiene el tamaño del 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 operaciones posibles:
    //--    "001" // Liberado
    //--    "002" // Revertir
    //--    "003" // Superior
    //--    "004" // Transferir Superior
    //--    "005" // Rechazado
    //--    "006" // Bloqueo
    //--    "007" // Visualización

    //-- Selecciona la operación de aprobación de documentos
    A094SetOp('004')

    //-- Carga el modelo de datos y selecciona la operación de aprobación (UPDATE)
    oModel094 := FWLoadModel('MATA094') 
    oModel094:SetOperation( MODEL_OPERATION_UPDATE )
    oModel094:Activate()

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

    //-- Valida el formulario
    lOk := oModel094:VldData()

    If lOk
        //-- Si validó, graba el formulario
        lOk := oModel094:CommitData()
    EndIf

    //-- Evalúa errores
    If !lOk
        //-- Busca el Error del Modelo de Datos
        aErro := oModel094:GetErrorMessage()
                
        //-- Elabora el texto que se mostrará en la pantalla
        AutoGrLog("Id de formulario de origen:" + ' [' + AllToChar(aErro[01]) + ']')
        AutoGrLog("Id del campo de origen: "     + ' [' + AllToChar(aErro[02]) + ']')
        AutoGrLog("Id del formulario de error: "  + ' [' + AllToChar(aErro[03]) + ']')
        AutoGrLog("Id del campo de error: "       + ' [' + AllToChar(aErro[04]) + ']')
        AutoGrLog("Id de error: "                + ' [' + AllToChar(aErro[05]) + ']')
        AutoGrLog("Mensaje del error: "          + ' [' + AllToChar(aErro[06]) + ']')
        AutoGrLog("Mensaje de la solución:"        + ' [' + AllToChar(aErro[07]) + ']')
        AutoGrLog("Valor atribuido: "           + ' [' + AllToChar(aErro[08]) + ']')
        AutoGrLog("Valor anterior: "            + ' [' + AllToChar(aErro[09]) + ']')

        //-- Muestra el mensaje de error
        MostraErro()
    EndIf

    //-- Desactiva el modelo de datos
    oModel094:DeActivate()

Else
    MsgInfo("¡Documento no encontrado!", "MyExec094")
EndIf
    
//-- Finaliza el entorno
RESET ENVIRONMENT

Return Nil

Observación:Para más información consulte en el documento "ADVPL utilizando MVC"