Uma função interessante para quem desenha telas contendo um GetDados e precisa buscar itens na grade. A função se chama GdSeek(), você a encontra nas rotinas padrão como Pedido de Vendas (MATA410), Tabela de Preço (OMSA010), etc... Os campos que compõe a lista de opções (combobox) são as colunas do seu GetDados A função: GdSeek( oGetDados , cTitulo , aHeaderPar , aColsPar , lOrdena , oMdlGrid ) Onde: oGetDados : Objeto corrente da getdados cTitulo : Texto da janela aHeaderPar : aHeader ( Opcional ) aColsPar : aCols ( Opcional ) lOrdena : Ordena aCols ( Opcional ) oMdlGrid : ModelGrid ( Opcional ) Exemplificando:
User Function APCP003I() Local aACabec := {/*Campos do cabeçalho que serão alterados*/} Local nX Local aItens := {"PRODUTO","DESCRICAO","QUANTIDADE"} Local aCampos := {} Local aAItens := {"PRODUTO","QUANTIDADE"} Local aBotoes := {} Private aCabec := {} Private aHeaderEx := {} Private aColsEx := {} Private oGetItens Private oCabec Static oDlg DEFINE MSDIALOG oDlg TITLE "Titulo" FROM 000, 000 TO 500, 500 COLORS 0, 16777215 PIXEL oDlg:lMaximized := .T. RegToMemory("ZZL",.T.) oCabec := Msmget():New("ZZL",0,3,,,,aCabec,{15,1,70,315},aACabec,3,,,,oDlg,,.T.,,,,,,,,.T.) DbSelectArea("SX3") SX3->(DbSetOrder(2)) For nX := 1 to Len(aItens) If SX3->(DbSeek(aItens[nX])) Aadd(aHeaderEx, {; AllTrim(X3Titulo()),; SX3->X3_CAMPO,; SX3->X3_PICTURE,; SX3->X3_TAMANHO,; SX3->X3_DECIMAL,; SX3->X3_VALID,; SX3->X3_USADO,; SX3->X3_TIPO,; SX3->X3_F3,; SX3->X3_CONTEXT,; SX3->X3_CBOX,; SX3->X3_RELACAO}) Endif Next nX For nX := 1 to Len(aItens) If DbSeek(aItens[nX]) Aadd(aCampos, CriaVar(SX3->X3_CAMPO)) Endif Next nX Aadd(aCampos, .F.) Aadd(aColsEx, aCampos) oGetItens := MsNewGetDados():New( 130, 000, 250, 250, GD_INSERT+GD_DELETE+GD_UPDATE, "AllwaysTrue", "AllwaysTrue",, aAItens,0, 99999, "AllwaysTrue", "", "AllwaysTrue", oDlg, aHeaderEx, aColsEx) oCabec:oBox:Align := CONTROL_ALIGN_TOP oGetItens:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT AAdd(aBotoes,{"BMPCONS",{|| GdSeek(oGetItens,"Busca Itens",oGetItens:aHeader,oGetItens:aCols,If(Type("oGetItens:aIniCpos")=="A",.T.,)) },"Procurar"} ) ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,{|| Processa({|| })},{|| oDlg:End(),RollbackSX8()},,aBotoes) CENTERED Return