Páginas filhas
  • MsNewGetDados

Versões comparadas

Chave

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

...

Portuguese

Pagetitle
MsNewGetDados
MsNewGetDados

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. 


Aviso

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.

O A TOTVS disponibiliza suporte à essa arquitetura através do seu framework. Para mais informações veja:  Detalhes podem ser encontrados em:




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



NomeTipoDescriçãoObrigatórioReferência
nTopNuméricoDistancia entre a MsNewGetDados e o extremidade superior do objeto que a contém.

nLeftNuméricoDistancia entre a MsNewGetDados e o extremidade esquerda do objeto que a contém.

nBottomNuméricoDistancia entre a MsNewGetDados e o extremidade inferior do objeto que a contém.

nRight NuméricoDistancia entre a MsNewGetDados e o extremidade direita do objeto que a contém.

nStyleNuméricoEssa 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.

cLinhaOkCaracterFunção executada para validar o contexto da linha atual do aCols.

cTudoOkCaracterFunção executada para validar o contexto geral da MsNewGetDados (todo aCols).

cIniCposCaracterNome dos campos do tipo caracter que utilizarão incremento automático. Este parametro deve ser no formato “+++...”.

aAlterArray of RecordVetor com os campos que poderão ser alterados.

nFreezeNuméricoCongela 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.

nMaxNuméricoNúmero máximo de linhas permitidas. Valor padrão 99.

cFieldOkCaracterFunção executada na validação do campo.

cSuperDelCaracterFunção executada quando pressionada as teclas +.

cDelOkCaracterFunção executada para validar a exclusão de uma linha do aCols.

oWndObjetoObjeto no qual a MsGetDados será criada.

aPartHeaderArray of RecordaHeader

aParColsArray of RecordAcols

uChangeBloco de códigoBloco de execução a ser executado na propriedade bChange do Objeto.

cTelaCaracterString contendo os campos contidos no X3_TELA.

aColsSizeArrayVetor 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
    ()
  • Objeto MsNewGetDados


LinhaOk, TudoOk e outras funções      
Todas as funções (como LinhaOK e TudoOk) chamadas a partir do objeto poderão fazer referência as variáveis aCols e aHeader, pois a MsNewGetDados as cria como Private.   

Tratamento do aHeader e Acols   
aHeader --> Existe um tratamento interno que inviabiliza a sobreposição de seu   conteúdo após a criação do objeto.           
aCols --> a última coluna destinada a Deleção da Linha passa a ser obrigatória (inclusive para as opções visualização e exclusão).    


aHeader
Vetor com informações das colunas no formato:
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

aCols
Vetor com as linhas a serem editadas. As colunas devem ser construídas com base no aHeader mais uma ultima com valor lógico que determina se a linha foi excluída.

AddAction

Adiciona ação ao campo editável.


MsNewGetDados(): AddAction ( [ cCampo], [ bAction] ) --> lRet



NomeTipoDescriçãoObrigatórioReferência
cCampoCaracterNome do campo

bActionBloco de códigoBloco de execução do campo


lRet
    (logico)
  • Retorna .T. se conseguiu adicionar a ação no campo.

AddLastEdit

Adiciona na propriedade aLastEdit a última linha editada.


MsNewGetDados(): AddLastEdit ( [ nLine] ) -->



NomeTipoDescriçãoObrigatórioReferência
nLineNuméricoLinha editada


AddLine

Adiciona uma linha em branco no aCols.


MsNewGetDados(): AddLine ( [ lRepaint], [ lValid] ) --> lRet



NomeTipoDescriçãoObrigatórioReferência
lRepaintLógicoSe .T. recarrega a aCols.

lValidLógicoValida se possível adicionar linha.


lRet
    (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



NomeTipoDescriçãoObrigatórioReferência
nAtNuméricoLinha posicionada


lRet
    ()
  • Retorna .T. se todos os campos obrigatórios foram preenchidos.

DelLine

Deleta linha posicionada.


MsNewGetDados(): DelLine ( ) -->

DelOk

Retorna a execução do bloco de código bDelOk.


MsNewGetDados(): DelOk ( ) --> uRet

uRet
    ()
  • Retorna o resultado da execução do bloco bDelOk.

Disable

Desabilita o objeto.


MsNewGetDados(): Disable ( ) -->

EditAction

Edita a ação do campo editável


MsNewGetDados(): EditAction ( [ cCampo] ) --> uRet



NomeTipoDescriçãoObrigatórioReferência
cCampoCaracterNome do campo


uRet
    (codeblock)
  • Bloco de execução do campo.

Editcell

Retorna .T. se célula é editável.


MsNewGetDados(): Editcell ( ) --> lRet

lRet
    (logico)
  • Retorna .t. se celula é editavel.

Enable

Ativa o objeto.


MsNewGetDados(): Enable ( ) -->

Execute

Executa um bloco de execução.


MsNewGetDados(): Execute ( [ bBlock], [ lDeclared] ) --> uRet



NomeTipoDescriçãoObrigatórioReferência
bBlockBloco de códigoBlocl de execução.

lDeclaredArray of RecordSe .F. declara como private as variaveis aHeader, aCols e N.


uRet
    ()
  • Resultado da execução do bloco.

FindAction

Verifica se o campo possui alguma ação.


MsNewGetDados(): FindAction ( [ cCampo] ) --> lRet



NomeTipoDescriçãoObrigatórioReferência
cCampoCaracterNome do campo


lRet
    (logico)
  • Retorna .T. se encontrou campo.

ForceRefresh

Atualiza a aCols do Browse e atualiza o browse.


MsNewGetDados(): ForceRefresh ( ) -->

GoBottom

Manda o cursor para a última linha do browse.


MsNewGetDados(): GoBottom ( ) -->

GoTo

Manda o cursor para a linha passada como parâmetro no browse.


MsNewGetDados(): GoTo ( [ nGo] ) -->



NomeTipoDescriçãoObrigatórioReferência
nGoNuméricoLinha para onde vai mandar o cursor


GoTop

Manda o cursor para a primeira linha do browse.


MsNewGetDados(): GoTop ( ) -->

Hide

Esconde o objeto.


MsNewGetDados(): Hide ( ) -->

LinhaOk

Retorna .T. se linha está ok.


MsNewGetDados(): LinhaOk ( [ lUp], [ lDeclared] ) --> lRet



NomeTipoDescriçãoObrigatórioReferência
lUpLógico


lDeclaredLógico



lRet
    ()
  • Retorna .T. se linha estiver ok.

OnChange

Retorna a execução do bloco de código bChange.


MsNewGetDados(): OnChange ( ) --> uRet

uRet
    ()
  • Retorna a execução do bloco de código bChange.

Refresh

Atualiza o objeto.


MsNewGetDados(): Refresh ( [ lSetArray] ) -->



NomeTipoDescriçãoObrigatórioReferência
lSetArrayLógicoSe .T. seta o aCols atual.


RemoveAction

Remove a ação do campo.


MsNewGetDados(): RemoveAction ( [ cCampo] ) --> lRet



NomeTipoDescriçãoObrigatórioReferência
cCampoCaracterNome do campo


lRet
    (logico)
  • Retorna .T. se conseguiu remover a ação do campo.

SetArray

Seta array do aCols do Objeto.


MsNewGetDados(): SetArray ( [ aArray], [ lGoTop] ) -->



NomeTipoDescriçãoObrigatórioReferência
aArrayArray of RecordNovo aCols

lGoTopLógicoSe .T. volta o cursor para a primeira linha


SetEditLine

Seta se linha pode ser editável ou não


MsNewGetDados(): SetEditLine ( [ lSet] ) --> lVar



NomeTipoDescriçãoObrigatórioReferência
lSetLógicoSeta se linha pode ser editável ou não, propriedade lCanEditLine


lVar
    (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] ) -->



NomeTipoDescriçãoObrigatórioReferência
uValueArray of RecordValor lógico ou array


Show

Exibe o objeto.


MsNewGetDados(): Show ( ) -->

SuperDel

Retorna a execução do bloco de código bSuperDel.


MsNewGetDados(): SuperDel ( ) --> uRet

uRet
    ()
  • Retorna a execução do bloco de código bSuperDel.

TudoOk

Executa o LinhaOk() e o bloco bTudoOk. Se todas as linhas estiverem Ok, permite salvar.


MsNewGetDados(): TudoOk ( ) --> lOk

lOk
    (logico)
  • Retorna .T. se estiver tudo Ok.


PropriedadeDescriçãoTipo


Array of Record




Novas Propriedades    
Os arrays aHeader e aCols passam a ser propriedades do objeto Get. Pode-se recuperar seu conteúdo
como fazemos com outras propriedades. Ex. aCols:=oGet:aCols   

A propriedade Style, passada via parâmetro, substitui a passagem das variáveis nOpc.
GD_INSERT + GD_UPDATE + GD_DELETE --> Utilize a soma das opções disponíveis para criar a flexibilidade para o NewGetdados.           

Variável N
A variável n deixa de ser atualizada pelo objeto, o que nos obriga a recuperar o conteúdo de oGet:nAT / oGet:obrow:nAt. Ou seja, se alteramos o conteúdo de aCols e n temos que atualizar as propriedades oGet:aCols e
oGet:nAt. O mesmo não se aplica a oGet:aHeader. Para novas implementações evite utilizar essa variável e passe a consultar as propriedades citadas.    

LinhaOk, TudoOk e outras funções      
Todas as funções (como LinhaOK e TudoOk) chamadas a partir do objeto poderão fazer referência as variáveis aCols e aHeader, pois a MsNewGetDados as cria como Private.   

Tratamento do aHeader e Acols   
aHeader --> Existe um tratamento interno que inviabiliza a sobreposição de seu   conteúdo após a criação do objeto.           
aCols --> a última coluna destinada a Deleção da Linha passa a ser obrigatória (inclusive para as opções visualização e exclusão).    


aHeader
Vetor com informações das colunas no formato:
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

aCols
Vetor com as linhas a serem editadas. As colunas devem ser construídas com base no aHeader mais uma ultima com valor lógico que determina se a linha foi excluída.

#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

Microsiga Protheus 8.11 , Protheus 10