Árvore de páginas


CONTEÚDO


01. VISÃO GERAL

O Cadastro de Perfil Tributário de Produto (FISA166) é uma rotina disponível pelo Configurador de Tributos (FISA170) para agrupar todos os produtos que compartilham de características semelhantes a serem enquadradas nas operações fiscais. 

Através do sistema o usuário tem a possibilidade de ao cadastrar um novo produto utilizar do facilitador fiscal (MV_FACAUTO) para adicionar um novo produto a um Perfil de Produto já existente na base quando o parâmetro MV_FACAUTO está ativado.

Esse documento visa exemplificar como utilizar da rotina FISA166 como ExecAuto (execução automática) para efetuar o mesmo.

02. EXEMPLO DE UTILIZAÇÃO

O exemplo de utilização abaixo inicia com uma função principal que prepararia todo o ambiente e executaria todo o processamento de cadastro de fornecedor/cliente através das execuções automáticas disponíveis para esses cadastros. O foco desse exemplo não é essa função mas sim a função gravaProd que fará a gravação do novo produto em um perfil de produto já existente na base como um ExecAuto

Quando uma aplicação é desenvolvida utilizando-se o conceito de MVC e suas classes, pode-se fazer uso de seu modelo de dados em outras aplicações, similarmente ao que seria uma rotina automática no desenvolvimento tradicional. Não existe mais o uso da função MSExecAuto. A ideia básica é instanciar o modelo de dados (Model) que se deseja, atribuir os valores a ele e fazer a validação. Portanto, a função gravaProd foi desenvolvida nesse exemplo conforme o conceito do MVC.

A gravaProd só será chamada se o parâmetro MV_FACAUTO estiver ativado e se for possível encontrar na tabela F20 (Perfis Tributários) o perfil ao qual eu quero vincular meu novo produto.


Abaixo um exemplo de como utilizar a rotina em execução automática após ter cadastrado um cliente/fornecedor:

exExecAuto.prw
#INCLUDE "TBICONN.CH"
#INCLUDE "TOPCONN.ch"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"


/*/{Protheus.doc} User Function exExecAuto
    (Função que inicializa o processamento.)
    @type  Function
    @author user
    @since 04/09/2023
    @version 12.1.2210
    @return Nil, Nil, sem retorno
/*/
User Function exExecAuto()
    local lMVFACAUTO := .F.
    local nOp := 4 // Alteração
    local cCodPerfil := "200001"
    local cTipoPerf := "04" // PERFIL DE PRODUTO
    local cCodProd := "MP0000000000000000000000000002"
    local lOk := .F.

    ConOut(Repl("-",80))
    ConOut(PadC("Mensagem : Inicío do processamento " + Time(), 80))

    // preparo o ambiente
    // prepare o ambiente da maneira que achar melhor
    // para este exemplo abrirei apenas as tabelas F20 e F24
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS" TABLES "F20", "F24"


        /*
            Lógica de cadastro de produto via execAuto da rotina de
            cadastro de produto.
        */


        // Inclusão de novo produto em um perfil de produto já existente
        lMVFACAUTO := GetNewPar("MV_FACAUTO", lMVFACAUTO)
        if lMVFACAUTO // se o facilitador estiver ativado
            dbSelectArea("F20")
            F20->(dbSetOrder(1))
            // posiciono no perfil ao qual quero incluir o novo produto
            if F20->(MsSeek(xFilial("F20") + cCodPerfil + cTipoPerf))
                // chamo a função para gravar novo produto (F24)
                lOk := u_gravaProd(nOp, cCodPerfil, cTipoPerf, cCodProd)
                if !lOk
                    ConOut("Mensagem : Não foi possível a inserção de novo produto no perfil. Verificar Log.")
                else 
                    ConOut("Mensagem : Incluído produto " + cCodProd + " ao perfil " + cCodPerfil+".")
                endif
            else
                ConOut("Mensagem : Perfil de Produto inexistente!")
            endIf
        endif
        ConOut("Mensagem : Fim da Execução em - "+Time())

    RESET ENVIRONMENT

Return


/*/{Protheus.doc} User Function gravaProd
    (Grava produto em perfil de produto já existente)
    @type  Function
    @author user
    @since 05/09/2023
    @version version
    @param nOp, numeric, Opção a ser aplicada
    @param cCodPerfil, character, Código do Perfil a ser vinculado o participante
    @param cTipoPerf, character, Tipo do Perfil de participante: 1-Origem Destino; 2-Participante; 3-Operação. No nosso caso será sempre 2
    @param cCodProd, character, Código do Produto que será inserido ao perfil
    @return lOk, logical, flag que identifica se a inserção ocorreu
/*/
User Function gravaProd(nOp, cCodPerfil, cTipoPerf, cCodProd)
    local oModel as object
    local lOk := .F.

    oModel := FwLoadModel("FISA166") // carrego o modelo da rotina

    if nOp == MODEL_OPERATION_UPDATE // verifico se é alteração

        // Através da operação de update no modelo, consigo adicionar uma nova
        // linha na GRID (F24).
        oModel:SetOperation(MODEL_OPERATION_UPDATE)
        oModel:Activate() // ativo o modelo

        //Adiciona uma nova linha no grid de produto
        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("Mensagem : Opção de operação diferente da esperada: ")
        ConOut("Mensagem : Operação esperada: 4")
        ConOut("Mensagem : Operação recebida: " + str(nOp))
    endif
Return lOk



03. INFORMAÇÕES TÉCNICAS

Identificadores do modelo da rotina FISA164

IdentificadorDescrição
FISA166Identificador do modelo
FISA166Identificador do submodelo de cabeçalho da rotina
FISA166PRODUTOIdentificador do submodelo de grid de produto da rotina
FISA166ORIGEMIdentificador do submodelo de grid de origem da rotina

04. TABELAS UTILIZADAS


TabelaDescrição
F20Perfis Tributários            
F24Perfil Tributário de Produto  
F25Perfil Produto x Origem