El Registro de perfil tributario de participantes (FISA164) es una rutina disponible por el Configurador de tributos (FISA170) para agrupar todos los participantes que comparten características semejantes que se encuadran en las operaciones fiscales. Los participantes pueden ser proveedores o clientes registrados en el sistema.
Por medio del sistema, el usuario tiene la posibilidad de, al registrar un nuevo cliente/proveedor, utilizar el facilitador fiscal (MV_FACAUTO) para agregar un nuevo participante a un Perfil de participante existente en la base cuando esté activado el parámetro MV_FACAUTO.
Este documento busca ejemplificar cómo utilizar la rutina FISA164 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 gravaPart que grabará el nuevo producto en un perfil de participante 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 gravaPart se desarrolló en este ejemplo, de acuerdo con el concepto del MVC.
La gravaPart 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 participante (cliente/proveedor).
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 local cCodPerfil := "200001" local cTipoPart := "1" local cCliFor := "SP0003" local cLoja := "01" local cTipoPerf := "02" local lOk := .F. ConOut(Repl("-",80)) ConOut(PadC("Mensaje : Inicio del procesamiento " + Time(), 80)) // preparo el entorno // prepare el entorno de la manera que le parezca // para este ejemplo solo abriré las tablas F20 y F22 PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS" TABLES "F20", "F22" /* Lógica de registro de cliente/proveedor por el execAuto de las rutinas de registro de cliente y proveedor. */ // Inclusión de nuevo proveedor/cliente en un perfil de participante 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 cliente/proveedor if F20->(MsSeek(xFilial("F20") + cCodPerfil + cTipoPerf)) // llamo la función para grabar una nueva línea de participante (F22) lOk := u_gravaPart(nOp, cCodPerfil, cTipoPart, cCliFor, cLoja, cTipoPerf) if !lOk ConOut("Mensaje : No fue posible incluir un nuevo participante en el perfil. Verificar Log.") else ConOut("Mensaje : Se incluyó el participante " + cCliFor + " ao perfil " + cCodPerfil+".") endif else ConOut("Mensaje : Perfil de participante inexistente") endIf endif ConOut("Mensaje : Final de la ejecución en - "+Time()) RESET ENVIRONMENT Return /*/{Protheus.doc} User Function gravaPart (Graba cliente/proveedor en perfil de participante 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 cTipoPart, character, Tipo de participante - Proveedor (1) Cliente (2) @param cCliFor, character, Código del cliente/proveedor @param cLoja, character, Tienda del cliente/proveedor @param cTipoPerf, character, Tipo de perfil de participante: 1-Origen destino; 2-Participante; 3-Operación. En nuestro caso siempre será 2 @return lOk, logical, flag que identifica si ocurrió la inclusión /*/ User Function gravaPart(nOp, cCodPerfil, cTipoPart, cCliFor, cLoja, cTipoPerf) local oModel as object local lOk := .F. oModel := FwLoadModel("FISA164") // 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 (F22). oModel:SetOperation(MODEL_OPERATION_UPDATE) oModel:Activate() // activo el modelo //Agrega una nueva línea en el grid oModel:GetModel("FISA164PARTICIPANTE"):AddLine() oModel:SetValue("FISA164PARTICIPANTE", "F22_CODIGO", cCodPerfil) oModel:SetValue("FISA164PARTICIPANTE", "F22_TPPART", cTipoPart) oModel:SetValue("FISA164PARTICIPANTE", "F22_CLIFOR", cCliFor) oModel:SetValue("FISA164PARTICIPANTE", "F22_LOJA", cLoja) oModel:SetValue("FISA164PARTICIPANTE", "F22_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 |
---|---|
FISA164 | Identificador del modelo |
FISA164 | Identificador del submodelo de encabezado de la rutina |
FISA164PARTICIPANTE | Identificador del submodelo de grid de la rutina |
Tabla | Descripción |
---|---|
F20 | Perfiles tributarios |
F22 | Perfil Trib. del participante |