ÍNDICE


01. VISIÓN GENERAL

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.

02. EJEMPLO DE UTILIZACIÓN

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:

exExecAuto.prw
#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



03. INFORMACIONES TÉCNICAS

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

04. TABLAS UTILIZADAS


Tabla

Descripción

F20

Perfiles tributarios            

F24

Perfil tributario de producto  

F25

Perfil Producto vs. Origen