Árvore de páginas


CONTEÚDO


01. VISÃO GERAL

O Cadastro de Perfil Tributário de Participantes (FISA164) é uma rotina disponível pelo Configurador de Tributos (FISA170) para agrupar todos os participantes que compartilham de características semelhantes a serem enquadradas nas operações fiscais. Os participantes podem ser fornecedores ou clientes cadastrados no sistema.

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

Esse documento visa exemplificar como utilizar da rotina FISA164 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 gravaPart que fará a gravação do novo cliente/fornecedor em um perfil de participante 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 gravaPart foi desenvolvida nesse exemplo conforme o conceito do MVC.

A gravaPart 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 participante (cliente/fornecedor).


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
    local cCodPerfil := "200001"
    local cTipoPart := "1"
    local cCliFor := "SP0003"
    local cLoja := "01"
    local cTipoPerf := "02"
    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 F22
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS" TABLES "F20", "F22"


        /*
            Lógica de cadastro de cliente/fornecedor via execAuto das rotinas de
            cadastro de cliente e fornecedor.
        */


        // Inclusão de novo fornecedor/cliente em um perfil de participante 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 cliente/fornecedor
            if F20->(MsSeek(xFilial("F20") + cCodPerfil + cTipoPerf))
                // chamo a função para gravar nova linha de participante (F22)
                lOk := u_gravaPart(nOp, cCodPerfil, cTipoPart, cCliFor, cLoja, cTipoPerf)
                if !lOk
                    ConOut("Mensagem : Não foi possível a inserção de novo participante no perfil. Verificar Log.")
                else 
                    ConOut("Mensagem : Incluído participante " + cCliFor + " ao perfil " + cCodPerfil+".")
                endif
            else
                ConOut("Mensagem : Perfil de Participante inexistente!")
            endIf
        endif
        ConOut("Mensagem : Fim da Execução em - "+Time())

    RESET ENVIRONMENT

Return


/*/{Protheus.doc} User Function gravaPart
    (Grava cliente/fornecedor em perfil de participante 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 cTipoPart, character, Tipo do Participante - Fornecedor (1) Cliente (2)
    @param cCliFor, character, Código do cliente/fornecedor
    @param cLoja, character, Loja do cliente/fornecedor
    @param cTipoPerf, character, Tipo do Perfil de participante: 1-Origem Destino; 2-Participante; 3-Operação. No nosso caso será sempre 2
    @return lOk, logical, flag que identifica se a inserção ocorreu
/*/
User Function gravaPart(nOp, cCodPerfil, cTipoPart, cCliFor, cLoja, cTipoPerf)
    local oModel as object
    local lOk := .F.

    oModel := FwLoadModel("FISA164") // 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 (F22).
        oModel:SetOperation(MODEL_OPERATION_UPDATE)
        oModel:Activate() // ativo o modelo

        //Adiciona uma nova linha no 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("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
FISA164Identificador do modelo
FISA164Identificador do submodelo de cabeçalho da rotina
FISA164PARTICIPANTEIdentificador do submodelo de grid da rotina

04. TABELAS UTILIZADAS


TabelaDescrição
F20Perfis Tributários            
F22Perfil Trib. de Participante