Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.


CONTEÚDO

Índice
excludeCONTEÚDO
styleNone


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
languagejava
themeMidnight
firstline1
titleexExecAuto.prw
linenumberstrue
#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

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

04. TABELAS UTILIZADAS


TabelaDescrição
F20Perfis Tributários            
F22F24Perfil Trib. de Participante  Tributário de Produto  
F25Perfil Produto x Origem