Páginas filhas
  • MsmGet

Classe: MsmGet
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] ) -->



NomeTipoDescriçãoObrigatórioReferência
cAliasCaracterTabela cadastrada no Dicionário de Tabelas (SX2) que será editada.

uPar2NuloParâmetro não utilizado.

nOpcNuméricoTipo de edição do objeto(Inclusão, Alteração, Exclusão, Visualização)X
uPar4NuloParâmetro não utilizado.

uPar5NuloParâmetro não utilizado.

uPar6NuloParâmetro não utilizado.

aAchoVetorVetor 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"

aPosVetorVetor com coordenadas para criação da enchoice no formato {"TOP","LEFT","BOTTOM","RIGHT"}

aCposVetorVetor com nome dos campos que poderão ser editados.

nModeloNuméricoSe for diferente de 1 desabilita execução de gatilhos estrangeiros.

uPar11NuloParâmetro não utilizado.

uPar12NuloParâmetro não utilizado.

uPar13NuloParâmetro não utilizado.

oWndObjetoObjeto (janela, painel, etc) onde a enchoice será criada

lF3LógicoIndica se a enchoice esta sendo criada em uma consulta F3 para utilizar variáveis de memória. Valor default é .F.

lMemoriaLógicoIndica se a enchoice utilizará variáveis de memória ou os campos da tabela na edição. Valor default é .F.

lColumnLógicoIndica se a apresentação dos campos será em forma de coluna. Valor default é .F.

caTelaCaracterNome da variável tipo "private" que a enchoice utilizará no lugar da variável aTela.

lNoFolderLógicoIndica se a enchoice não irá utilizar as Pastas de Cadastro (SXA). Valor default.F.

lPropertyLógicoIndica se a enchoice não utilizará as variáveis tipo "private" aTela e aGets, somente suas propriedades com seus respectivos nomes. Valor default .F.

aFieldVetorVetor com os campos que serão mostrados na Enchoice caso o SX3 não seja utilizado.

aFolderVetorVetor com o nome das pastas caso o SX3 não seja utilizado.

lCreateLógicoIndica se cria as pastas especificadas no parâmetro aFolder. Valor default é .F.

lNoMDIStretchLógicoDefine se o objeto não será alinhado conforme o espaço existente na janela. Valor default é .F.

uPar25CaracterCampo reservado.

lOrderAChoLógicoIndica se os campos definidos em aAcho serão exibidos na ordem criada (.T.) ou na ordem do SX3 (.F.). Valor default é .F.

lUnqFocusLógicoCaso 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
6Picture
7Valid
8Obrigat
9Nivel
10Inicializador Padrão
11F3
12When
13Visual
14Chave
15Box - Opção do combo
16Folder
17Não Alterável
18PictVar
19Gatilho




Exemplo MsMGet
#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 ( ) -->

Refresh

Método de atualização do objeto


MsmGet(): Refresh ( ) -->

SetFocus

Este método atribui o foco para o objeto.


MsmGet(): SetFocus ( ) -->

Show

Este método habilita a visualização de todos os controles do folder do objeto MsMGet ativo.


MsmGet(): Show ( ) -->




PropriedadeDescriçãoTipo


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:

  1. O formulário fica limitado a apenas duas colunas, com um espaçamento pequeno entre os campos verticalmente, o tamanho dos campos é levemente reduzido. 
    1. 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 @*
  2. 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