FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour GET LLAMA XBROWSE PARA SELECCIONAR-COMPARTIENDO CODIGO
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
GET LLAMA XBROWSE PARA SELECCIONAR-COMPARTIENDO CODIGO
Posted: Fri Apr 27, 2012 05:41 AM
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

Code (fw): Select all Collapse
 聽 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

聽 聽END


validacion en el GET
Code (fw): Select all Collapse
聽 聽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
Code (fw): Select all Collapse
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!
Posts: 55
Joined: Mon Feb 20, 2012 02:56 PM
Re: GET LLAMA XBROWSE PARA SELECCIONAR-COMPARTIENDO CODIGO
Posted: Sat Apr 28, 2012 02:11 PM

Joseluis esta excelente, muchas gracias.

Saludos

Ruben Fernandez

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: GET LLAMA XBROWSE PARA SELECCIONAR-COMPARTIENDO CODIGO
Posted: Sat Apr 28, 2012 03:59 PM
RuFerSo wrote:Joseluis esta excelente, muchas gracias.

Saludos

Ruben Fernandez


Comparado con lo que he recibido de este gran foro, es algo muy sencillo, alegro alguien no solo lo haya visto, sino que lo haya utilizado, estoy preparando la parte para hacer busqueda cuando muestro el xbrowse, saludos... :-)
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: GET LLAMA XBROWSE PARA SELECCIONAR-COMPARTIENDO CODIGO
Posted: Sat Apr 28, 2012 05:51 PM
Jose el xbrowse ya viene con una funcion para la busqueda incremental, del Foro saque esta funci贸n que Hace la b煤squeda sobre el recorset... Espero sirva para mejorar tu aporte.

Code (fw): Select all Collapse
//---------------------------------
STATIC FUNCTION Busca(cBuscar,oRs)
聽 聽LOCAL nLen:=Len(cBuscar)
聽 聽STATIC nLenAnt
聽 聽DEFAULT nLenAnt:=0
聽 聽IF Len(cBuscar)>1
聽 聽 聽 IF(nLenAnt>nLen,oRs:MoveFirst(),)
聽 聽 聽 //oRs:Find( "t_codigo LIKE '"+cBuscar+"*'",,1)
聽 聽 聽 oRs:Find( vOrden+" LIKE '"+cBuscar+"*'",,1)
聽 聽ELSE
聽 聽 聽 oRs:MoveFirst()
聽 聽 聽 IF !Empty(cBuscar)
聽 聽 聽 聽 聽//oRs:Find( "t_codigo LIKE '"+cBuscar+"*'",,1)
聽 聽 聽 聽 聽oRs:Find( vOrden+" LIKE '"+cBuscar+"*'",,1)
聽 聽 聽 ENDIF
聽 聽ENDIF
聽 聽nLenAnt:=nLen
RETURN !(oRs:Eof.OR.oRs:Bof)


hay que colocar esto al momento de llamar al xbrowse

Code (fw): Select all Collapse
聽oBrw:bSeek 聽 聽 聽 聽聽 聽 := { | c | Busca(c,oRs) }
聽 oBrw:oSeek 聽 聽 聽 聽 聽 聽 聽 := oSay
Saludos
LEANDRO AREVALO
Bogot谩 (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: GET LLAMA XBROWSE PARA SELECCIONAR-COMPARTIENDO CODIGO
Posted: Sat Apr 28, 2012 06:36 PM

Leandro, habia olvidao esa parte del xBrowse, tienes razon, no hace falta hacerle nada para la busqueda incremental, funciona perfectamente tal como esta, solo hay que dar alguna informacion al usuario para que sepa que debe seleccionar la columna por el cual quiera hacer la busqueda, bueno, si alguien quiere agregarle o sugerir alguna mejora, sera bienvenida, al final es para eso el aporte, para aprovecharlo todos, ya queda que los que la usen la adapten a sus beneficios, saludos... :shock:

Dios no est谩 muerto...



Gracias a mi Dios ante todo!

Continue the discussion