Histórico da Página
CONTEÚDO
| Índice | ||||
|---|---|---|---|---|
|
01. VISÃO GERAL
O Cadastro de Perfil Tributário de Participantes Produto (FISA164FISA166) é uma rotina disponível pelo Configurador de Tributos (FISA170) para agrupar todos os participantes produtos 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 produto utilizar do facilitador fiscal (MV_FACAUTO) para adicionar um novo participante produto a um Perfil de ParticipanteProduto já existente na base quando o parâmetro MV_FACAUTO está ativado.
Esse documento visa exemplificar como utilizar da rotina FISA164 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 gravaPart gravaProd que fará a gravação do novo cliente/fornecedor produto em um perfil de participante 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 gravaPart gravaProd foi desenvolvida nesse exemplo conforme o conceito do MVC.
A gravaPart 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 participante (cliente/fornecedor)produto.
Abaixo um exemplo de como utilizar a rotina em execução automática após ter cadastrado um 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 // Alteração
local cCodPerfil := "200001"
local cTipoPartcTipoPerf := "104"
// PERFIL local cCliFor := "SP0003"DE PRODUTO
local cLojacCodProd := "01"
local cTipoPerf := "02MP0000000000000000000000000002"
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 F22F24
PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS" TABLES "F20", "F22F24"
/*
Lógica de cadastro de cliente/fornecedorproduto via execAuto dasda rotinasrotina de
cadastro de cliente e fornecedorproduto.
*/
// Inclusão de novo fornecedor/clienteproduto em um perfil de participanteproduto 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/fornecedorproduto
if F20->(MsSeek(xFilial("F20") + cCodPerfil + cTipoPerf))
// chamo a função para gravar novanovo linhaproduto de participante (F22F24)
lOk := u_gravaPartgravaProd(nOp, cCodPerfil, cTipoPartcTipoPerf, cCliFor, cLoja, cTipoPerfcCodProd)
if !lOk
ConOut("Mensagem : Não foi possível a inserção de novo participanteproduto no perfil. Verificar Log.")
else
ConOut("Mensagem : Incluído participanteproduto " + cCliForcCodProd + " ao perfil " + cCodPerfil+".")
endif
else
ConOut("Mensagem : Perfil de ParticipanteProduto inexistente!")
endIf
endif
ConOut("Mensagem : Fim da Execução em - "+Time())
RESET ENVIRONMENT
Return
/*/{Protheus.doc} User Function gravaPartgravaProd
(Grava cliente/fornecedorproduto em perfil de participanteproduto 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
@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 gravaPartgravaProd(nOp, cCodPerfil, cTipoPartcTipoPerf, cCliFor, cLoja, cTipoPerfcCodProd)
local oModel as object
local lOk := .F.
oModel := FwLoadModel("FISA164FISA166") // 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 (F22F24).
oModel:SetOperation(MODEL_OPERATION_UPDATE)
oModel:Activate() // ativo o modelo
//Adiciona uma nova linha no grid de produto
oModel:GetModel("FISA164PARTICIPANTEFISA166PRODUTO"):AddLine()
oModel:SetValue("FISA164PARTICIPANTEFISA166PRODUTO", "F22F24_CODIGO", cCodPerfil)
oModel:SetValue("FISA164PARTICIPANTEFISA166PRODUTO", "F22F24_TPPARTCDPROD", cTipoPartcCodProd)
oModel:SetValue("FISA164PARTICIPANTEFISA166PRODUTO", "F22_CLIFOR", cCliFor)
oModel:SetValue("FISA164PARTICIPANTE", "F22_LOJA", cLoja)
oModel:SetValue("FISA164PARTICIPANTE", "F22_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
| Identificador | Descrição |
|---|---|
| FISA164FISA166 | Identificador do modelo |
| FISA164FISA166 | Identificador do submodelo de cabeçalho da rotina |
| FISA166PRODUTO | Identificador do submodelo de grid de produto da rotinaFISA164PARTICIPANTE |
| FISA166ORIGEM | Identificador do submodelo de grid de origem da rotina |
04. TABELAS UTILIZADAS
| Tabela | Descrição |
|---|---|
| F20 | Perfis Tributários |
| F22F24 | Perfil Trib. de Participante Tributário de Produto |
| F25 | Perfil Produto x Origem |