ÍNDICE


01. VISIÓN GENERAL

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.

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 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:

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
    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
  



03. INFORMACIONES TÉCNICAS

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

04. TABLAS UTILIZADAS


Tabla

Descripción

F20

Perfiles tributarios            

F22

Perfil Trib. del participante