Para los interesados, aca comparto un peque帽o codigo que valida en un GET lo siguiente:
- si se entra ENTER y el campo es obligatorio llamara la tabla con un xbrowse para seleccionar un valor
- si se coloca un VALOR que no existe en la tabla te hara lo mismo, asi se obliga al usuario a seleccionar un dato si es necesario y no tiene que recordar tanto...
- si se coloca un VALOR que exista en la tabla entonce trae en este caso al campo siguiente el nombre del valor colocado en el get del codigo, este ejemplo lo hice con una tabla de proveedores, el cual solo me interesa obtener el codigo para grabarlo en otra tabla, el nombre es solo para mostrarlo sin guardarlo
Esta trabajado sobre tdolphin pero se puede adaptar a DBF, ADO o lo que quieran, cualquier duda estoy a la orden, no es nada del otro mundo, pero se que a alguien le servira asi como me sirvio a mi, saludos...
abro la tabla de proveedores
validacion en el GET
funcion que muestra el xbrowse para seleccionar
luego le agregare en el xbrowse una busqueda secuencial, si alguien lo mejora, super...
espero alguien pueda sacarle provecho...

Uploaded with ImageShack.us[/img]

Uploaded with ImageShack.us[/img]

Uploaded with ImageShack.us[/img]
- si se entra ENTER y el campo es obligatorio llamara la tabla con un xbrowse para seleccionar un valor
- si se coloca un VALOR que no existe en la tabla te hara lo mismo, asi se obliga al usuario a seleccionar un dato si es necesario y no tiene que recordar tanto...
- si se coloca un VALOR que exista en la tabla entonce trae en este caso al campo siguiente el nombre del valor colocado en el get del codigo, este ejemplo lo hice con una tabla de proveedores, el cual solo me interesa obtener el codigo para grabarlo en otra tabla, el nombre es solo para mostrarlo sin guardarlo
Esta trabajado sobre tdolphin pero se puede adaptar a DBF, ADO o lo que quieran, cualquier duda estoy a la orden, no es nada del otro mundo, pero se que a alguien le servira asi como me sirvio a mi, saludos...
abro la tabla de proveedores
聽 cQryProvee := "SELECT * FROM proveedores ORDER BY pro_codigo ASC"
聽 聽TRY
聽 聽 聽oQryProvee := TDolphinQry():New( cQryProvee, oDatos:oConex )
聽 聽CATCH oError
聽 聽 聽 MSGALERT( oError:description() + CRLF + CRLF + ;
聽 聽 聽 聽 聽 聽 聽 聽"Error Ejecuci贸n de Sentencia en Tabla (proveedores): " + ;
聽 聽 聽 聽 聽 聽 聽 聽CRLF + CRLF + cQryProvee, oDatos:cTitMsg )
聽 聽 聽 RETURN
聽 聽ENDvalidacion en el GET
聽 聽REDEFINE GET aGet[2] VAR aVar[2] ID 102 OF oFldx:aDialogs[1] UPDATE PICT "@!" ; // COD.PROVEEDOR
聽 聽 聽 ACTION ( oQBtn := llamabrow( aVar[2], "proveedores", "pro_codigo" ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"pro_codigo", "pro_nombre"} ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"C贸digo", "Nombre"} ) ,;
聽 聽 聽 聽 聽 聽 聽 聽IIF( !oQBtn[1] ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 ( alert("DEBE SELECCIONAR PROVEEDOR...") ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 aVar[3] := NIL, aGet[3]:REFRESH(), .f. ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 ( aVar[2] := oQBtn[2]:pro_codigo, aGet[2]:REFRESH() ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 aVar[3] := oQBtn[2]:pro_nombre, aGet[3]:REFRESH() ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 aGet[4]:SetFocus(), .t. ) ) ) ;
聽 聽 聽 VALID ( IIF( oQryProvee:Seek(aVar[2], "pro_codigo") == 0 ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽( oQBtn := llamabrow( aVar[2], "proveedores", "pro_codigo" ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"pro_codigo", "pro_nombre"} ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽{"C贸digo", "Nombre"} ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽( IIF( !oQBtn[1] ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽( alert("DEBE SELECCIONAR PROVEEDOR...") ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽aVar[3] := NIL, aGet[3]:REFRESH(), .f. ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽( aVar[2] := oQBtn[2]:pro_codigo, aGet[2]:REFRESH() ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽aVar[3] := oQBtn[2]:pro_nombre, aGet[3]:REFRESH(), .t. ) ) ) ) ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽( alert("ENTRO VALOR QUE EXISTE") ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽aVar[2] := oQryProvee:pro_codigo, aGet[2]:REFRESH() ,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽aVar[3] := oQryProvee:pro_nombre, aGet[3]:REFRESH(), .t. ) ) )funcion que muestra el xbrowse para seleccionar
FUNCTION llamabrow( aVar, cTabla, cCampo, aCampos, aTitulos ) // FUNCION PARA LLAMAR BROWSE EN BOTON DE GET...
// DEVUELVE ARRA
// aVar -> contenedora del valor entrado (puede llegar vacio solo para seleccionar)
// cTabla -> nombre de la tabla para hacer el query
// cCampo -> nombre del campo para ordenar el query y hacer comparacion con aVar ((puede llegar vacio solo para seleccionar))
// aCampos -> contenedor de las var para el browse
// aTitulos -> contenedor de los titulos de las columnas
聽 聽LOCAL oWnd, oDlg, oBrow, cSqlCmd, oQry, oError, ;
聽 聽 聽 聽 聽aBtn[2] ,;
聽 聽 聽 聽 聽lSelec := .f.
聽 聽cSqlCmd := "SELECT * FROM " + cTabla + " ORDER BY " + cCampo + " ASC"
聽 聽TRY
聽 聽 聽oQry := TDolphinQry():New( cSqlCmd, oDatos:oConex )
聽 聽CATCH oError
聽 聽 聽 MSGALERT( oError:description + CRLF + CRLF +;
聽 聽 聽 聽 聽 聽 聽 聽 "Error en Consulta, Sentencia: " + CRLF + CRLF + cSqlCmd, oDatos:cTitMsg )
聽 聽 聽 RETURN( {.f., NIL} )
聽 聽END
聽 聽IF oQry:LastRec() = 0
聽 聽 聽 MSGINFO( "No hay Registros Cargados en Tabla..." + cTabla, oDatos:cTitMsg )
聽 聽 聽 RETURN( {.f., NIL} )
聽 聽ENDIF
聽 聽DEFINE DIALOG oDlg RESOURCE "DLG_BRW" of oWnd ;
聽 聽 聽 TITLE " Seleccione " + aTitulos[1]
聽 聽oBrow := TXBrowse():New( oDlg )
聽 聽WITH OBJECT oBrow
聽 聽 聽 :SetDolphin( oQry, .t., .t., aCampos )
聽 聽 聽 :nMarqueeStyle 聽 聽:= MARQSTYLE_HIGHLROW
聽 聽 聽 :nColDividerStyle := LINESTYLE_BLACK
聽 聽 聽 :nStretchCol 聽 聽 聽:= STRETCHCOL_LAST
聽 聽 聽 :lColDividerComplete := .t.
聽 聽 聽 :nHeaderHeight := 30
聽 聽 聽 :l2007 := .t.
聽 聽 聽 :lFooter := .t.
聽 聽 聽 :lRecordSelector := .t.
聽 聽 聽 :bClrStd := {|| IF( 聽oQry:RecNo() % 2 == 0, {CLR_BLACK, CLR_WHITE}, {0, RGB(203,226,254)} ) }
聽 聽 聽 :bKeyDown := {|nKey| IIF( nkey == 13 ,; // Si Pulsa ENTER
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ( lSelec := .t., oDlg:End() ), ) }
聽 聽 聽 :bLDblClick := {|| ( lSelec := .t., oDlg:End() ) }
聽 聽END WITH
聽 聽oBrow:aCols[1]:cHeader 聽 聽 聽 := aTitulos[1]
聽 聽oBrow:aCols[1]:bStrData 聽 聽 聽:= {|| IIF( oQry:LastRec() > 0, cValToChar( oQry:FieldGet( aCampos[1] ) ), ) }
聽 聽oBrow:aCols[1]:nHeadStrAlign := AL_LEFT
聽 聽oBrow:aCols[1]:nDataStrAlign := AL_LEFT
聽 聽oBrow:aCols[2]:cHeader 聽 聽 聽 := aTitulos[2]
聽 聽oBrow:aCols[2]:bStrData 聽 聽 聽:= {|| IIF( oQry:LastRec() > 0, cValToChar( oQry:FieldGet( aCampos[2] ) ), ) }
聽 聽oBrow:aCols[2]:nHeadStrAlign := AL_LEFT
聽 聽oBrow:aCols[2]:nDataStrAlign := AL_LEFT
聽 聽oBrow:CreateFromResource(100)
// BOTON SELECCIONAR
聽 聽REDEFINE BUTTONBMP aBtn[1] ID 201 OF oDlg UPDATE ;
聽 聽 聽 ACTION ( lSelec := .t., oDlg:End() ) ;
聽 聽 聽 BITMAP 2006 PROMPT "Seleccionar"
// BOTON CALCELAR
聽 聽REDEFINE BUTTONBMP aBtn[2] ID 202 OF oDlg UPDATE ;
聽 聽 聽 ACTION ( lSelec := .f., oDlg:End() ) ;
聽 聽 聽 BITMAP 2004 PROMPT "Cancelar"
聽 聽aBtn[2]:lCancel := .t.
聽 聽ACTIVATE DIALOG oDlg CENTER
聽 聽oQry:End()
RETURN( {lSelec, oQry} ) // FIN FUNCION PARA LLAMAR BROWSE EN BOTON DE GET...luego le agregare en el xbrowse una busqueda secuencial, si alguien lo mejora, super...
espero alguien pueda sacarle provecho...

Uploaded with ImageShack.us[/img]

Uploaded with ImageShack.us[/img]

Uploaded with ImageShack.us[/img]
Dios no est谩 muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!