- Criado por Marcia Junko Doi, última alteração por Marizete Salatiel Teixeira em 09 set, 2024
Cria um objeto visual para edição de campos baseado no Dicionário de Campos (SX3) ou em um array.
New
Contrutor da Classe MsMGet. Retorna uma nova instância do Objeto da Classe MsMGet.
MsmGet(): New ( [ cAlias], [ uPar2], < nOpc>, <lUnqFocus>, [ uPar5], [ uPar6], [ aAcho], [ aPos], [ aCpos], [ nModelo], [ uPar11], [ uPar12], [ uPar13], [ oWnd], [ lF3], [ lMemoria], [ lColumn], [ caTela], [ lNoFolder], [ lProperty], [ aField], [ aFolder], [ lCreate], [ lNoMDIStretch], [ uPar25] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
cAlias | Caracter | Tabela cadastrada no Dicionário de Tabelas (SX2) que será editada. | ||
uPar2 | Nulo | Parâmetro não utilizado. | ||
nOpc | Numérico | Tipo de edição do objeto(Inclusão, Alteração, Exclusão, Visualização) | X | |
uPar4 | Nulo | Parâmetro não utilizado. | ||
uPar5 | Nulo | Parâmetro não utilizado. | ||
uPar6 | Nulo | Parâmetro não utilizado. | ||
aAcho | Vetor | Vetor com nome dos campos que serão exibidos. Os campos de usuário sempre serão exibidos se não existir no parametro um elemento com a expressão "NOUSER" | ||
aPos | Vetor | Vetor com coordenadas para criação da enchoice no formato {"TOP","LEFT","BOTTOM","RIGHT"} | ||
aCpos | Vetor | Vetor com nome dos campos que poderão ser editados. | ||
nModelo | Numérico | Se for diferente de 1 desabilita execução de gatilhos estrangeiros. | ||
uPar11 | Nulo | Parâmetro não utilizado. | ||
uPar12 | Nulo | Parâmetro não utilizado. | ||
uPar13 | Nulo | Parâmetro não utilizado. | ||
oWnd | Objeto | Objeto (janela, painel, etc) onde a enchoice será criada | ||
lF3 | Lógico | Indica se a enchoice esta sendo criada em uma consulta F3 para utilizar variáveis de memória. Valor default é .F. | ||
lMemoria | Lógico | Indica se a enchoice utilizará variáveis de memória ou os campos da tabela na edição. Valor default é .F. | ||
lColumn | Lógico | Indica se a apresentação dos campos será em forma de coluna. Valor default é .F. | ||
caTela | Caracter | Nome da variável tipo "private" que a enchoice utilizará no lugar da variável aTela. | ||
lNoFolder | Lógico | Indica se a enchoice não irá utilizar as Pastas de Cadastro (SXA). Valor default.F. | ||
lProperty | Lógico | Indica se a enchoice não utilizará as variáveis tipo "private" aTela e aGets, somente suas propriedades com seus respectivos nomes. Valor default .F. | ||
aField | Vetor | Vetor com os campos que serão mostrados na Enchoice caso o SX3 não seja utilizado. | ||
aFolder | Vetor | Vetor com o nome das pastas caso o SX3 não seja utilizado. | ||
lCreate | Lógico | Indica se cria as pastas especificadas no parâmetro aFolder. Valor default é .F. | ||
lNoMDIStretch | Lógico | Define se o objeto não será alinhado conforme o espaço existente na janela. Valor default é .F. | ||
uPar25 | Caracter | Campo reservado. | ||
lOrderACho | Lógico | Indica se os campos definidos em aAcho serão exibidos na ordem criada (.T.) ou na ordem do SX3 (.F.). Valor default é .F. | ||
lUnqFocus | Lógico | Caso o msmget tenha apenas um campo indica se ele receberá foco. Valor default .T. (Disponível a partir da LIB Label 20220502) |
Parâmetro nOpc
Caso a variável Private aRotina tenha sido declarada no fonte, o parâmetro nOpc deverá ser informado com o número da linha do vetor aRotina. Caso contrário utilizará sua propriedade com o mesmo nome com seguinte formato:
- 1ª linha: Pesquisar
- 2ª linha: Visualizar
- 3ª linha: Incluir
- 4ª linha: Alterar
- 5ª linha: Exclui
- aRotina
Vetor com as rotinas que serão executadas na MBrowse e que definira o tipo de operação que esta sendo executada (inclusão, alteração, exclusão, visualização, pesquisa, ...) no formato:
Elemento Conteúdo 1 Título 2 Rotina 3 Reservado 4 Operação (1 - pesquisa; 2 - visualização; 3 - inclusão; 4 - alteração; 5 - exclusão) 5 Acesso relacionado a rotina, se esta posição não for informada nenhum acesso será validado
Parâmetro aField
Quando o desenvolvedor não utilizar a MsmGet baseada no SX3, deverá informar o parâmetro aField com a seguinte estrutura:
Elemento | Conteúdo |
1 | Título |
2 | Campo |
3 | Tipo |
4 | Tamanho |
5 | Decimal |
6 | Picture |
7 | Valid |
8 | Obrigat |
9 | Nivel |
10 | Inicializador Padrão |
11 | F3 |
12 | When |
13 | Visual |
14 | Chave |
15 | Box - Opção do combo |
16 | Folder |
17 | Não Alterável |
18 | PictVar |
19 | Gatilho |
#include "protheus.ch" #include "msmgadd.ch" //------------------------------------------------------------------- /*/{Protheus.doc} MyMrbwEnch MsMget sample @author totvs @since 31/07/2019 //-----------------------------------------------------------------*/ User Function MyMrbwEnch() Private cCadastro := "Cadastro de Clientes" Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},; {"Visualizar" , "U_MyMsmGet" , 0, 2}} DbSelectArea("SA1") DbSetOrder(1) MBrowse(6,1,22,75,"SA1") Return //------------------------------------------------------------------- /*/{Protheus.doc} MyMsmGet Função de manutenção do cadastro @author totvs @since 31/07/2019 //-----------------------------------------------------------------*/ User Function MyMsmGet(cAlias,nReg,nOpc) Local oDlg Local oEnch Local lMemoria := .T. Local lCreate := .T. Local lSX3 := .T. //verifica se irá criar a enchoice a partir do SX3 ou a partir de um vetor. Local aPos := {000,000,400,600} //posição da enchoice na tela Local aCpoEnch := {} //campos que serão mostrados na enchoice Local aAlterEnch := {"A1_COD", "A1_NOME"} //habilita estes campos para edição Local aField := {} Local aFolder := {"Cadastrais","Adm/Fin.", "Fiscais", "Vendas"} Local cSvAlias := Alias() DbSelectArea("SX3") DbSetOrder(1) DbSeek(cAlias) // Exemplo da estrutura do array aField //Aadd(aField, {"Codigo", "A1_COD", "C", 6, 0, "@!", 'IIF(Empty(M->A1_LOJA),.T.,ExistChav("SA1",M->A1_COD+M->A1_LOJA,,"EXISTCLI"))', .F., 1, "", "", "", .F., .F., "", 1, .F., "", "S"}) //Aadd(aField, {"campo 1", "CAMPO_1", "N", 6, 2, "@E 999.99", '', .F., 1, "", "", "", .F., .F., "", 1, .F., "", "S"}) //M->CAMPO_1 := 156 While !Eof() .And. SX3->X3_ARQUIVO == cAlias If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. X3Uso(SX3->X3_USADO) AADD(aCpoEnch,SX3->X3_CAMPO) EndIf IF Alltrim(SX3->X3_CAMPO) $ "A1_COD|A1_NOME|A1_DESC|A1_COND|A1_ENDCOB|A1_ENDENT" Aadd(aField, {X3TITULO(),; // [1] - Titulo SX3->X3_CAMPO,; // [2] - campo SX3->X3_TIPO,; // [3] - Tipo SX3->X3_TAMANHO,; // [4] - Tamanho SX3->X3_DECIMAL,; // [5] - Decimal SX3->X3_PICTURE,; // [6] - Picture SX3->X3_VALID,; // [7] - Valid .F.,; // [8] - Obrigat SX3->X3_NIVEL,; // [9] - Nivel SX3->X3_RELACAO,; // [10]- Inicializador Padrão SX3->X3_F3,; // [11]- F3 SX3->X3_WHEN,; // [12]- when .F.,; // [13]- visual .F.,; // [14]- chave SX3->X3_CBOX,; // [15]- box Val(SX3->X3_FOLDER),; // [16]- folder .F.,; // [17]- nao alteravel SX3->X3_PICTVAR,; // [18]- pictvar SX3->X3_TRIGGER}) // [19]- gatilho EndIf DbSkip() End DEFINE MSDIALOG oDlg TITLE "Teste MsmGet" FROM 0,0 TO 355,600 PIXEL oDlg:lMaximized := .T. RegToMemory(cAlias, If(nOpc==3,.T.,.F.)) If lSX3 //exemplo de utilização da enchoice lendo as informações do SX3 - quando a variável lSX3 for .T. oEnch := MsmGet():New(cAlias,nReg,nOpc,/*aCRA*/,/*cLetras*/,/*cTexto*/,aCpoEnch,aPos,aAlterEnch,; /*nModelo*/,/*nColMens*/,/*cMensagem*/, /*cTudoOk*/,oDlg,/*lF3*/,lMemoria,/*lColumn*/,; /*caTela*/,/*lNoFolder*/,/*lProperty*/,/*aField*/,/*aFolder*/,/*lCreate*/,; /*lNoMDIStretch*/,/*cTela*/) Else //exemplo de utilização da enchoice por array oEnch := MsmGet():New(,,nOpc,/*aCRA*/,/*cLetras*/,/*cTexto*/,aCpoEnch,aPos,aAlterEnch,/*nModelo*/,; /*nColMens*/,/*cMensagem*/, /*cTudoOk*/,oDlg,/*lF3*/,lMemoria,/*lColumn*/,/*caTela*/,; /*lNoFolder*/,/*lProperty*/,aField,aFolder,lCreate,/*lNoMDIStretch*/,/*cTela*/) EndIf oEnch:oBox:align := CONTROL_ALIGN_ALLCLIENT ACTIVATE MSDIALOG oDlg CENTER ON INIT EnchoiceBar(oDlg,{|| oDlg:End()},{|| oDlg:End()},,,,.F.,.F.) If !Empty(cSvAlias) DbSelectArea(cSvAlias) EndIf return
Disable
Este método desabilita a edição de todos os controles do folder do objeto MsMGet ativo.
MsmGet(): Disable ( ) -->
Enable
Este metodo habilita a edição de todos os controles do folder do objeto MsMGet ativo.
MsmGet(): Enable ( ) -->
Hide
Este método inibe a visualização de todos os controles do folder do objeto MsMGet ativo.
MsmGet(): Hide ( ) -->
Show
Este método habilita a visualização de todos os controles do folder do objeto MsMGet ativo.
MsmGet(): Show ( ) -->
Propriedade | Descrição | Tipo |
Array of Record |
A validação dos campos criados na enchoice é executada na seguinte ordem: validação de usuario (X3_VLDUSER) , depois validação do sistema (X3_VALID) e por último a trigger.
MV_ENCHOLD
O parâmetro MV_ENCHOLD permite mudar a forma como os campos são exibidos na Msmget, seu conteúdo pode ser visualizado/alterado no Configurador.
Ele recebe os valores 1 e 2:
- O formulário fica limitado a apenas duas colunas, com um espaçamento pequeno entre os campos verticalmente, o tamanho dos campos é levemente reduzido.
- Vale ressaltar que o valor 1 está em obsolescência, por se tratar de método antigo de construção e por isso não oferta os mesmos tratamentos que o valor 2, a exemplo proteção de dados com uso de picture @*
- O formulário não tem limites de colunas (respeitando o limite da tela horizontalmente), com espaçamento médio entre os campos verticalmente, o tamanho dos campos é médio, padrão do guia de estilo atual do Protheus.
Esse parâmetro influencia somente a classe Msmget, rotinas criadas em MVC não fazem a leitura desse parâmetro.
- Sem rótulos