Classe: MsNewGetDados
Objeto tipo lista com uma ou mais colunas para cadastramento de dados baseado em um vetor.A consulta padrão, validação do usuário e gatilhos estarão habilitados se o campo estiver cadastrado no Dicionário de Dados (SX3/SX7) e apresentar estas opções disponíveis.
Esta classe está depreciada, e por conta disso, não recebe mais atualizações.
Para a criação de cadastros agora recomendamos utilizar a arquitetura MVC, geralmente diferente do padrão utilizado com a MsNewGetDados.
A TOTVS disponibiliza suporte à essa arquitetura através do seu framework. Detalhes podem ser encontrados em:
- Material de Apoio MVC
- Como criar uma grid em MVC: https://tdn.totvs.com/pages/viewpage.action?pageId=544183102.
New
Cria o objeto MsNewGetDados.
MsNewGetDados(): New ( [ nTop], [ nLeft], [ nBottom], [ nRight ], [ nStyle], [ cLinhaOk], [ cTudoOk], [ cIniCpos], [ aAlter], [ nFreeze], [ nMax], [ cFieldOk], [ cSuperDel], [ cDelOk], [ oWnd], [ aPartHeader], [ aParCols], [ uChange], [ cTela], [ aColsSize] ) --> Objeto
Nome | Tipo | Descrição | Obrigatório | Referência |
nTop | Numérico | Distancia entre a MsNewGetDados e o extremidade superior do objeto que a contém. | ||
nLeft | Numérico | Distancia entre a MsNewGetDados e o extremidade esquerda do objeto que a contém. | ||
nBottom | Numérico | Distancia entre a MsNewGetDados e o extremidade inferior do objeto que a contém. | ||
nRight | Numérico | Distancia entre a MsNewGetDados e o extremidade direita do objeto que a contém. | ||
nStyle | Numérico | Essa nova propriedade, passada via parâmetro, substitui a passagem das variáveis nOpc. Pode ser utilizada GD_INSERT + GD_UPDATE + GD_DELETE para criar a flexibilidade da MsNewGetdados. | ||
cLinhaOk | Caracter | Função executada para validar o contexto da linha atual do aCols. | ||
cTudoOk | Caracter | Função executada para validar o contexto geral da MsNewGetDados (todo aCols). | ||
cIniCpos | Caracter | Nome dos campos do tipo caracter que utilizarão incremento automático. Este parametro deve ser no formato “+++...”. | ||
aAlter | Array of Record | Vetor com os campos que poderão ser alterados. | ||
nFreeze | Numérico | Congela a coluna da esquerda para a direita. Se 0 não congela, se 1 congela a primeira coluna. Obs: atualmente só é possivel congelar a primeira coluna, devido a limitação do objeto. | ||
nMax | Numérico | Número máximo de linhas permitidas. Valor padrão 99. | ||
cFieldOk | Caracter | Função executada na validação do campo. | ||
cSuperDel | Caracter | Função executada quando pressionada as teclas +. | ||
cDelOk | Caracter | Função executada para validar a exclusão de uma linha do aCols. | ||
oWnd | Objeto | Objeto no qual a MsGetDados será criada. | ||
aPartHeader | Array of Record | aHeader | ||
aParCols | Array of Record | Acols | ||
uChange | Bloco de código | Bloco de execução a ser executado na propriedade bChange do Objeto. | ||
cTela | Caracter | String contendo os campos contidos no X3_TELA. | ||
aColsSize | Array | Vetor bi-dimensional com Campo e Tamanho. Os campos podem ser informados fora de ordem, e caso não exista no aHeader a informação deste campo, será descartada. Se não for informado um campo, a largura da coluna será calculada com base no tipo e tamanho do campo. Formato: [1] - Nome do campo [2] - Largura do campo |
- ()
- Objeto MsNewGetDados
Elemento | Conteúdo |
1 | Título |
2 | Campo |
3 | Picture |
4 | Tamanho |
5 | Decimal |
6 | Validação |
7 | Reservado |
8 | Tipo |
9 | Reservado |
10 | Reservado |
AddAction
Adiciona ação ao campo editável.
MsNewGetDados(): AddAction ( [ cCampo], [ bAction] ) --> lRet
Nome | Tipo | Descrição | Obrigatório | Referência |
cCampo | Caracter | Nome do campo | ||
bAction | Bloco de código | Bloco de execução do campo |
- (logico)
- Retorna .T. se conseguiu adicionar a ação no campo.
AddLastEdit
Adiciona na propriedade aLastEdit a última linha editada.
MsNewGetDados(): AddLastEdit ( [ nLine] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nLine | Numérico | Linha editada |
AddLine
Adiciona uma linha em branco no aCols.
MsNewGetDados(): AddLine ( [ lRepaint], [ lValid] ) --> lRet
Nome | Tipo | Descrição | Obrigatório | Referência |
lRepaint | Lógico | Se .T. recarrega a aCols. | ||
lValid | Lógico | Valida se possível adicionar linha. |
- (logico)
- Retorna .T. se conseguiu criar nova linha.
ChkObrigat
Verifica se todos os campos obrigatórios da linha passada como parâmetro foi preenchido.
MsNewGetDados(): ChkObrigat ( [ nAt] ) --> lRet
Nome | Tipo | Descrição | Obrigatório | Referência |
nAt | Numérico | Linha posicionada |
- ()
- Retorna .T. se todos os campos obrigatórios foram preenchidos.
DelOk
Retorna a execução do bloco de código bDelOk.
MsNewGetDados(): DelOk ( ) --> uRet
- ()
- Retorna o resultado da execução do bloco bDelOk.
EditAction
Edita a ação do campo editável
MsNewGetDados(): EditAction ( [ cCampo] ) --> uRet
Nome | Tipo | Descrição | Obrigatório | Referência |
cCampo | Caracter | Nome do campo |
- (codeblock)
- Bloco de execução do campo.
Editcell
Retorna .T. se célula é editável.
MsNewGetDados(): Editcell ( ) --> lRet
- (logico)
- Retorna .t. se celula é editavel.
Execute
Executa um bloco de execução.
MsNewGetDados(): Execute ( [ bBlock], [ lDeclared] ) --> uRet
Nome | Tipo | Descrição | Obrigatório | Referência |
bBlock | Bloco de código | Blocl de execução. | ||
lDeclared | Array of Record | Se .F. declara como private as variaveis aHeader, aCols e N. |
- ()
- Resultado da execução do bloco.
FindAction
Verifica se o campo possui alguma ação.
MsNewGetDados(): FindAction ( [ cCampo] ) --> lRet
Nome | Tipo | Descrição | Obrigatório | Referência |
cCampo | Caracter | Nome do campo |
- (logico)
- Retorna .T. se encontrou campo.
ForceRefresh
Atualiza a aCols do Browse e atualiza o browse.
MsNewGetDados(): ForceRefresh ( ) -->
GoTo
Manda o cursor para a linha passada como parâmetro no browse.
MsNewGetDados(): GoTo ( [ nGo] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
nGo | Numérico | Linha para onde vai mandar o cursor |
LinhaOk
Retorna .T. se linha está ok.
MsNewGetDados(): LinhaOk ( [ lUp], [ lDeclared] ) --> lRet
Nome | Tipo | Descrição | Obrigatório | Referência |
lUp | Lógico | |||
lDeclared | Lógico |
- ()
- Retorna .T. se linha estiver ok.
OnChange
Retorna a execução do bloco de código bChange.
MsNewGetDados(): OnChange ( ) --> uRet
- ()
- Retorna a execução do bloco de código bChange.
Refresh
Atualiza o objeto.
MsNewGetDados(): Refresh ( [ lSetArray] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
lSetArray | Lógico | Se .T. seta o aCols atual. |
RemoveAction
Remove a ação do campo.
MsNewGetDados(): RemoveAction ( [ cCampo] ) --> lRet
Nome | Tipo | Descrição | Obrigatório | Referência |
cCampo | Caracter | Nome do campo |
- (logico)
- Retorna .T. se conseguiu remover a ação do campo.
SetArray
Seta array do aCols do Objeto.
MsNewGetDados(): SetArray ( [ aArray], [ lGoTop] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
aArray | Array of Record | Novo aCols | ||
lGoTop | Lógico | Se .T. volta o cursor para a primeira linha |
SetEditLine
Seta se linha pode ser editável ou não
MsNewGetDados(): SetEditLine ( [ lSet] ) --> lVar
Nome | Tipo | Descrição | Obrigatório | Referência |
lSet | Lógico | Seta se linha pode ser editável ou não, propriedade lCanEditLine |
- (logico)
- Retorna o valor anterior da propriedade lCanEditLine.
SetWtDisable
Seta a propriedade lWtDisable se o valor do parâmetro for lógico ou aWtDisable se o valor do parâmetro for array.
MsNewGetDados(): SetWtDisable ( [ uValue] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência |
uValue | Array of Record | Valor lógico ou array |
SuperDel
Retorna a execução do bloco de código bSuperDel.
MsNewGetDados(): SuperDel ( ) --> uRet
- ()
- Retorna a execução do bloco de código bSuperDel.
Propriedade | Descrição | Tipo |
Array of Record |
Elemento | Conteúdo |
1 | Título |
2 | Campo |
3 | Picture |
4 | Tamanho |
5 | Decimal |
6 | Validação |
7 | Reservado |
8 | Tipo |
9 | Reservado |
10 | Reservado |
#include "protheus.ch"User Function MrbwGtCl()Private cCadastro := "Pedidos de Venda"Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},; {"Visualizar" , "U_ModGtd" , 0, 2},; {"Incluir" , "U_ModGtd" , 0, 3}}DbSelectArea("SC5")DbSetOrder(1)MBrowse(6,1,22,75,"SC5")ReturnUser Function ModGtd(cAlias,nReg,nOpc)Local nX := 0Local nUsado := 0Local aButtons := {}Local aCpoEnch := {}Local cAliasE := cAliasLocal aAlterEnch := {}Local aPos := {000,000,080,400}Local nModelo := 3Local lF3 := .F.Local lMemoria := .T.Local lColumn := .F.Local caTela := ""Local lNoFolder := .F.Local lProperty := .F.Local aCpoGDa := {}Local cAliasGD := "SC6"Local nSuperior := 081Local nEsquerda := 000Local nInferior := 250Local nDireita := 400Local cLinOk := "AllwaysTrue"Local cTudoOk := "AllwaysTrue"Local cIniCpos := "C6_ITEM"Local nFreeze := 000Local nMax := 999Local cFieldOk := "AllwaysTrue"Local cSuperDel := ""Local cDelOk := "AllwaysFalse"Local aHeader := {}Local aCols := {}Local aAlterGDa := {}Private oDlgPrivate oGetDPrivate oEnchPrivate aTELA[0][0]Private aGETS[0]DbSelectArea("SX3")DbSetOrder(1)DbSeek(cAliasE)While !Eof() .And. SX3->X3_ARQUIVO == cAliasE If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoEnch,SX3->X3_CAMPO) EndIf DbSkip()EndaAlterEnch := aClone(aCpoEnch)DbSelectArea("SX3")DbSetOrder(1)MsSeek(cAliasGD)While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoGDa,SX3->X3_CAMPO) EndIf DbSkip()EndaAlterGDa := aClone(aCpoGDa)nUsado:=0dbSelectArea("SX3")dbSeek("SC6")aHeader:={}While !Eof().And.(x3_arquivo=="SC6") If X3USO(x3_usado).And.cNivel>=x3_nivel nUsado:=nUsado+1 AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,; x3_tamanho, x3_decimal,"AllwaysTrue()",; x3_usado, x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip()EndIf nOpc==3 // Incluir aCols:={Array(nUsado+1)} aCols[1,nUsado+1]:=.F. For nX:=1 to nUsado IF aHeader[nX,2] == "C6_ITEM" aCols[1,nX]:= "0001" ELSE aCols[1,nX]:=CriaVar(aHeader[nX,2]) ENDIF NextElse aCols:={} dbSelectArea("SC6") dbSetOrder(1) dbSeek(xFilial()+M->C5_NUM) While !eof().and.C6_NUM==M->C5_NUM AADD(aCols,Array(nUsado+1)) For nX:=1 to nUsado aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2])) Next aCols[Len(aCols),nUsado+1]:=.F. dbSkip() EndEndifoDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)RegToMemory("SC5", If(nOpc==3,.T.,.F.))oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,; aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,; cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,; cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,; cDelOk, oDLG, aHeader, aCols)// Tratamento para definição de cores específicas,// logo após a declaração da MsNewGetDadosoGetD:oBrowse:lUseDefaultColors := .F.oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}oDlg:lCentered := .T.oDlg:Activate()Return// Função para tratamento das regras de cores para a grid da MsNewGetDadosStatic Function GETDCLR(aLinha,nLinha,aHeader)Local nCor2 := 16776960 // Ciano - RGB(0,255,255)Local nCor3 := 16777215 // Branco - RGB(255,255,255)Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})Local nUsado := Len(aHeader)+1Local nRet := nCor3If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado] nRet := nCor2ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado] nRet := nCor3EndifReturn nRet