E aí, tudo bem?
Sabe aqueles cadastros das Tabelas Genéricas (SX5) que só o administrador do sistema tem acesso?
As vezes seria muito interessante que o próprio usuário tivesse acesso. Vou dar um exemplo prático: Grupo de Tributações
Abaixo segue uma rotina que você pode compilar e dar acesso via menu para o usuário responsável pela área fiscal, ao Grupo de Tributações, que na tabela SX5 é a 21.
O programa é feito utilizando MVC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
//Bibliotecas #Include 'Protheus.ch' #Include 'FWMVCDef.ch' //Variáveis Estáticas Static cTitulo := "" /*/{Protheus.doc} FBFISA1 Cadastro de tabelas SX5 @author www.fbsolutions.com.br @since 05/08/2016 @version 1.0 @param cTabela, character, Código da tabela genérica @param cTitRot, character, Título da Rotina @example u_FBFISA1("21", "Grupos de tributação") /*/ User Function FBFISA1(cTabela, cTitRot) Local aArea := GetArea() Local oBrowse Local cFunBkp := FunName() Default cTabela := "21" Default cTitRot := "Grupos de tributação" Private cTabX := cTabela //Senão tiver chave, finaliza If Empty(cTabela) Return EndIf DbSelectArea('SX5') SX5->(DbSetOrder(1)) // X5_FILIAL+X5_TABELA+X5_CHAVE SX5->(DbGoTop()) //Se vier título por parâmetro If !Empty(cTitRot) cTitulo := cTitRot EndIf //Se ainda tiver em branco, pega o da própria tabela If Empty(cTitulo) //Se conseguir posicionar If SX5->(DbSeek(FWxFilial("SX5") + "00" + cTabela)) cTitulo := SX5->X5_DESCRI Else MsgAlert("Tabela não encontrada!", "Atenção") Return EndIf EndIf //Instânciando FWMBrowse - Somente com dicionário de dados SetFunName("FBFISA1") oBrowse := FWMBrowse():New() //Setando a tabela de cadastro de Autor/Interprete oBrowse:SetAlias("SX5") //Setando a descrição da rotina oBrowse:SetDescription(cTitulo) //Filtrando oBrowse:SetFilterDefault("SX5->X5_TABELA = '"+cTabela+"'") //Ativa a Browse oBrowse:Activate() SetFunName(cFunBkp) RestArea(aArea) Return /*---------------------------------------------------------------------* | Func: MenuDef | | Autor: Fernando Bueno | | Data: 05/08/2016 | | Desc: Criação do menu MVC | *---------------------------------------------------------------------*/ Static Function MenuDef() Local aRot := {} //Adicionando opções ADD OPTION aRot TITLE 'Visualizar' ACTION 'VIEWDEF.FBFISA1' OPERATION MODEL_OPERATION_VIEW ACCESS 0 //OPERATION 1 ADD OPTION aRot TITLE 'Incluir' ACTION 'VIEWDEF.FBFISA1' OPERATION MODEL_OPERATION_INSERT ACCESS 0 //OPERATION 3 ADD OPTION aRot TITLE 'Alterar' ACTION 'VIEWDEF.FBFISA1' OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //OPERATION 4 ADD OPTION aRot TITLE 'Excluir' ACTION 'VIEWDEF.FBFISA1' OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5 Return aRot /*---------------------------------------------------------------------* | Func: ModelDef | | Autor: Fernando Bueno | | Data: 05/08/2016 | | Desc: Criação do modelo de dados MVC | *---------------------------------------------------------------------*/ Static Function ModelDef() //Criação do objeto do modelo de dados Local oModel := Nil //Criação da estrutura de dados utilizada na interface Local oStSX5 := FWFormStruct(1, "SX5") //Editando características do dicionário oStSX5:SetProperty('X5_TABELA', MODEL_FIELD_WHEN, FwBuildFeature(STRUCT_FEATURE_WHEN, '.F.')) //Modo de Edição oStSX5:SetProperty('X5_TABELA', MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, 'cTabX')) //Ini Padrão oStSX5:SetProperty('X5_CHAVE', MODEL_FIELD_WHEN, FwBuildFeature(STRUCT_FEATURE_WHEN, 'Iif(INCLUI, .T., .F.)')) //Modo de Edição oStSX5:SetProperty('X5_CHAVE', MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, 'u_zSX5Chv()')) //Validação de Campo oStSX5:SetProperty('X5_CHAVE', MODEL_FIELD_OBRIGAT, .T. ) //Campo Obrigatório oStSX5:SetProperty('X5_DESCRI', MODEL_FIELD_OBRIGAT, .T. ) //Campo Obrigatório //Instanciando o modelo, não é recomendado colocar nome da user function (por causa do u_), respeitando 10 caracteres oModel := MPFormModel():New("FBFISA1M",/*bPre*/,/*bPos*/,/*bCommit*/,/*bCancel*/) //Atribuindo formulários para o modelo oModel:AddFields("FORMSX5",/*cOwner*/,oStSX5) //Setando a chave primária da rotina oModel:SetPrimaryKey({'X5_FILIAL', 'X5_TABELA', 'X5_CHAVE'}) //Adicionando descrição ao modelo oModel:SetDescription("Modelo de Dados do Cadastro "+cTitulo) //Setando a descrição do formulário oModel:GetModel("FORMSX5"):SetDescription("Formulário do Cadastro "+cTitulo) Return oModel /*---------------------------------------------------------------------* | Func: ViewDef | | Autor: Fernando Bueno | | Data: 05/08/2016 | | Desc: Criação da visão MVC | *---------------------------------------------------------------------*/ Static Function ViewDef() //Criação do objeto do modelo de dados da Interface do Cadastro de Autor/Interprete Local oModel := FWLoadModel("FBFISA1") //Criação da estrutura de dados utilizada na interface do cadastro de Autor Local oStSX5 := FWFormStruct(2, "SX5") //pode se usar um terceiro parâmetro para filtrar os campos exibidos { |cCampo| cCampo $ 'SX5_NOME|SX5_DTAFAL|'} //Criando oView como nulo Local oView := Nil //Criando a view que será o retorno da função e setando o modelo da rotina oView := FWFormView():New() oView:SetModel(oModel) //Atribuindo formulários para interface oView:AddField("VIEW_SX5", oStSX5, "FORMSX5") //Criando um container com nome tela com 100% oView:CreateHorizontalBox("TELA",100) //Colocando título do formulário oView:EnableTitleView('VIEW_SX5', 'Dados - '+cTitulo ) //Força o fechamento da janela na confirmação oView:SetCloseOnOk({||.T.}) //O formulário da interface será colocado dentro do container oView:SetOwnerView("VIEW_SX5","TELA") //Retira o campo de tabela da visualização oStSX5:RemoveField("X5_TABELA") Return oView |
Você pode modificá-la e buscar outras tabelas no sistema e utilizar para uma outra necessidade que você tenha na empresa.
Rotina muito útil!
Fernando Bueno
Consultor em FBSOLUTIONS
Sou consultor na área de implantação de sistemas ERP, com experiência na análise e implantação de projetos de sistemas, configurando a estrutura do software, capacitando usuários-chaves, ministrando treinamentos e workshops.
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In