Histórico da Página
...
Índice | ||||
---|---|---|---|---|
|
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).
...
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#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 := 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
Identificador | Descrição |
---|---|
FISA164 | Identificador do modelo |
FISA164 | Identificador do submodelo de cabeçalho da rotina |
FISA164PARTICIPANTE | Identificador do submodelo de grid da rotina |
04. TABELAS UTILIZADAS
Tabela | Descrição |
---|---|
F20 | Perfis Tributários |
F22 | Perfil Trib. de Participante |