Histórico da Página
...
Portuguese | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Classe: MsNewGetDadosObjeto 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.
NewCria 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
Objeto
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:
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. AddActionAdiciona ação ao campo editável.MsNewGetDados(): AddAction ( [ cCampo], [ bAction] ) --> lRet
lRet
AddLastEditAdiciona na propriedade aLastEdit a última linha editada.MsNewGetDados(): AddLastEdit ( [ nLine] ) -->
AddLineAdiciona uma linha em branco no aCols.MsNewGetDados(): AddLine ( [ lRepaint], [ lValid] ) --> lRet
lRet
ChkObrigatVerifica se todos os campos obrigatórios da linha passada como parâmetro foi preenchido.MsNewGetDados(): ChkObrigat ( [ nAt] ) --> lRet
lRet
DelOkRetorna a execução do bloco de código bDelOk.MsNewGetDados(): DelOk ( ) --> uRet uRet
EditActionEdita a ação do campo editávelMsNewGetDados(): EditAction ( [ cCampo] ) --> uRet
uRet
EditcellRetorna .T. se célula é editável.MsNewGetDados(): Editcell ( ) --> lRet lRet
ExecuteExecuta um bloco de execução.MsNewGetDados(): Execute ( [ bBlock], [ lDeclared] ) --> uRet
uRet
FindActionVerifica se o campo possui alguma ação.MsNewGetDados(): FindAction ( [ cCampo] ) --> lRet
lRet
ForceRefreshAtualiza a aCols do Browse e atualiza o browse.MsNewGetDados(): ForceRefresh ( ) --> GoToManda o cursor para a linha passada como parâmetro no browse.MsNewGetDados(): GoTo ( [ nGo] ) -->
LinhaOkRetorna .T. se linha está ok.MsNewGetDados(): LinhaOk ( [ lUp], [ lDeclared] ) --> lRet
lRet
OnChangeRetorna a execução do bloco de código bChange.MsNewGetDados(): OnChange ( ) --> uRet uRet
RefreshAtualiza o objeto.MsNewGetDados(): Refresh ( [ lSetArray] ) -->
RemoveActionRemove a ação do campo.MsNewGetDados(): RemoveAction ( [ cCampo] ) --> lRet
lRet
SetArraySeta array do aCols do Objeto.MsNewGetDados(): SetArray ( [ aArray], [ lGoTop] ) -->
SetEditLineSeta se linha pode ser editável ou nãoMsNewGetDados(): SetEditLine ( [ lSet] ) --> lVar
lVar
SetWtDisableSeta 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] ) -->
SuperDelRetorna a execução do bloco de código bSuperDel.MsNewGetDados(): SuperDel ( ) --> uRet uRet
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:
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 |