El Registro de perfil tributario de producto (FISA166) es una rutina disponible por el Configurador de tributos (FISA170) para agrupar todos los productos que comparten características semejantes que se encuadran en las operaciones fiscales.
Por medio del sistema, el usuario tiene la posibilidad de, al registrar un nuevo producto, utilizar el facilitador fiscal (MV_FACAUTO) para agregar un nuevo producto a un Perfil de producto existente en la base cuando esté activado el parámetro MV_FACAUTO.
Este documento busca ejemplificar cómo utilizar la rutina FISA166 como ExecAuto (ejecución automática) para realizarlo.
El siguiente ejemplo de utilización se inicia con una función principal que prepararía todo el entorno y ejecutaría todo el procesamiento de registro de proveedor/cliente por medio de las ejecuciones automáticas disponibles para estos registros. El enfoque de este ejemplo no es esta función, si no la función gravaProd que grabará el nuevo producto en un perfil de producto existente en la base como un ExecAuto.
Cuando una aplicación se desarrolla utilizando el concepto de MVC y sus clases, puede hacerse uso de su modelo de datos en otras aplicaciones, similarmente a lo que sería una rutina automática en el desarrollo tradicional. Ya no existe uso de la función MSExecAuto. La idea básica es instanciar el modelo de datos (Model) que se desea, atribuir los valores a este y hacer la validación. Por lo tanto, la función gravaProd se desarrolló en este ejemplo, de acuerdo con el concepto del MVC.
La gravaProd solo se llamará si el parámetro MV_FACAUTO estuviera activado y si fuera posible encontrar en la tabla F20 (Perfiles tributarios) el perfil al cual quiero vincular mi nuevo producto.
A continuación, un ejemplo de cómo utilizar la rutina en ejecución automática después de haber registrado un cliente/proveedor:
#INCLUDE "TBICONN.CH" #INCLUDE "TOPCONN.ch" #INCLUDE "PROTHEUS.CH" #INCLUDE "FWMVCDEF.CH" /*/{Protheus.doc} User Function exExecAuto (Función que inicia el procesamiento.) @type Function @author user @since 04/09/2023 @version 12.1.2210 @return Nil, Nil, sin devolución /*/ User Function exExecAuto() local lMVFACAUTO := .F. local nOp := 4 // Modificación local cCodPerfil := "200001" local cTipoPerf := "04" // PERFIL DE PRODUCTO local cCodProd := "MP0000000000000000000000000002" local lOk := .F. ConOut(Repl("-",80)) ConOut(PadC("Mensajem : Inicio del procesamiento " + Time(), 80)) // preparo el entorno // prepare el entorno como mejor le parezca // para este ejemplo solo abriré las tablas F20 y F24 PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS" TABLES "F20", "F24" /* Lógica de registro de producto por el execAuto de la rutina de registro de producto. */ // Inclusión de nuevo producto en un perfil de producto existente lMVFACAUTO := GetNewPar("MV_FACAUTO", lMVFACAUTO) if lMVFACAUTO // si el facilitador estuviera activado dbSelectArea("F20") F20->(dbSetOrder(1)) // voy al perfil en el cual quiero incluir el nuevo producto if F20->(MsSeek(xFilial("F20") + cCodPerfil + cTipoPerf)) // llamo la función para grabar un nuevo producto (F24) lOk := u_gravaProd(nOp, cCodPerfil, cTipoPerf, cCodProd) if !lOk ConOut("Mensaje : No fue posible la inclusión de un nuevo producto en el perfil. Verificar Log.") else ConOut("Mensaje : Se incluyó producto " + cCodProd + " ao perfil " + cCodPerfil+".") endif else ConOut("Mensaje : Perfil de producto inexistente") endIf endif ConOut("Mensaje : Final de la ejecución en - "+Time()) RESET ENVIRONMENT Return /*/{Protheus.doc} User Function gravaProd (Graba producto en perfil de producto existente) @type Function @author user @since 05/09/2023 @version version @param nOp, numeric, Opción que se aplicará @param cCodPerfil, character, Código del perfil al que se vinculará el participante @param cTipoPerf, character, Tipo de perfil de participante: 1-Origen destino; 2-Participante; 3-Operación. En nuestro caso siempre será 2 @param cCodProd, character, Código del producto que se incluirá al perfil @return lOk, logical, flag que identifica si ocurrió la inclusión /*/ User Function gravaProd(nOp, cCodPerfil, cTipoPerf, cCodProd) local oModel as object local lOk := .F. oModel := FwLoadModel("FISA166") // cargo el modelo de la rutina if nOp == MODEL_OPERATION_UPDATE // verifico si es modificación // Por medio de la operación de update en el modelo, consigo agregar una nueva // línea en la GRID (F24). oModel:SetOperation(MODEL_OPERATION_UPDATE) oModel:Activate() // activo el modelo //Agrega una nueva línea en el grid de producto oModel:GetModel("FISA166PRODUTO"):AddLine() oModel:SetValue("FISA166PRODUTO", "F24_CODIGO", cCodPerfil) oModel:SetValue("FISA166PRODUTO", "F24_CDPROD", cCodProd) oModel:SetValue("FISA166PRODUTO", "F24_TIPOPF", cTipoPerf) If oModel:VldData() oModel:CommitData() lOk := .T. Else VarInfo("",oModel:GetErrorMessage()) EndIf oModel:DeActivate() else ConOut("Mensaje : Opción de operación diferente de la esperada: ") ConOut("Mensaje : Operación esperada: 4") ConOut("Mensaje : Operación recibida: " + str(nOp)) endif Return lOk
Identificadores del modelo de la rutina FISA164
Identificador | Descripción |
---|---|
FISA166 | Identificador del modelo |
FISA166 | Identificador del submodelo de encabezado de la rutina |
FISA166PRODUTO | Identificador del submodelo de grid de producto de la rutina |
FISA166ORIGEM | Identificador del submodelo de grid de origen de la rutina |
Tabla | Descripción |
---|---|
F20 | Perfiles tributarios |
F24 | Perfil tributario de producto |
F25 | Perfil Producto vs. Origen |