Page 1 of 1
Cómo resetear oBrw:oseek [SOLUCIONADO]
Posted: Mon Nov 30, 2020 9:08 pm
by Ramón J.
Hola a todos
Veréis tengo dos base de datos relacioandas: Proveedores y productos y se muestran los datos en un Folderex, por una parte los datos del proveedors y en el otro los productos.
Al principio se muestran en xbrowse todo los proveedores por orden de código y he puesto un cuadro de búsqueda incremental por código y por nombre. El de código me da error y, si bien el del nombre me funciona a la hora salir de la edición se queda en el mismo registro y no se resetea el filtro. ¿Sabéis cómo se puede resetear? Otra cosa: ¿hay alguna manera de que en los obrw:oseek el cursor?
El código es el siguiente:
#include "FiveWin.ch"
#include "ord.ch"
#include "XBrowse.Ch"
function TELEM()
local oDlg, obrw
USE PROVEEDOR NEW SHARED alias "PROVE"
index on PROVE->CODIGO_PRO to CODPROVE
Set index to CODPROVE
USE PRODUCTOS NEW SHARED alias "PRODU"
index on PRODU->CODIGO_PRO to CODPRODU
Set index to CODPRODU
SELE PROVE
SET RELATION TO PROVE->CODIGO_PRO INTO PRODU
DEFINE DIALOG oDlg FROM 3, 3 TO 33, 100 TITLE "PROVEEDORES"
@ 1,1 XBROWSE oBrw SIZE 360, 160;
COLUMNS "CODIGO_PRO", "NOMBRE", "PROVINCIA" OF oDlg alias "PROVE";
HEADERS "Código", "Denominación", "Provincia";
COLSIZES 200, 300, 70 NOBORDER FASTEDIT FOOTERS
@ 2,10 SAY "Búsqueda por código:" SIZE 100,10 PIXEL OF oDlg
@ 2,70 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 100,10 PIXEL OF oDlg COLOR CLR_HRED,CLR_YELLOW
@ 2,178 SAY "Búsqueda por nombre:" SIZE 100,10 PIXEL OF oDlg
@ 2,250 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 100,10 PIXEL OF oDlg COLOR CLR_HRED,CLR_YELLOW
/*
oBrw:lIncrFilter := .t.
oBrw:lSeekWild := .t.
oBrw:cFilterFld := "CODIGO_PRO"
oBrw:bChange := {|| oBrw:oSeek:Refresh() <--- da error
*/
oBrw:lIncrFilter := .t.
oBrw:lSeekWild := .t.
oBrw:cFilterFld := "NOMBRE"
oBrw:bChange := {|| oBrw:oSeek:Refresh() }
oBrw:CreateFromCode()
@ 11, 15 BUTTON "Nuevo " OF oDlg ACTION oBrw:EditSource( .t. )
@ 11, 25 BUTTON "Editar " OF oDlg ACTION EditPro(oBrw)
@ 11, 35 BUTTON "Eliminar" OF oDlg ACTION oBrw:Delete()
@ 11, 45 BUTTON "&Imprimir" OF oDlg ;
ACTION oBrw:Report( "Listado ", .t. ) ; // .t. --> wants preview
SIZE 40, 12
@ 11,55 BUTTON "&Terminar" OF oDlg ACTION oDlg:End() SIZE 40, 12
ACTIVATE DIALOG oDlg CENTERED
return nil
//***************** EDICION CON FOLDER---------------
Function editPro(oBrw)
Local oDlg, oFld, oLbx
local nProve, oProve, cNombre, oNombre,cProvincia, oProvincia
NProve :=PROVE->CODIGO_PRO
cNombre :=PROVE->NOMBRE
cProvincia:=PROVE->PROVINCIA
DEFINE DIALOG oDlg FROM 3, 3 TO 20,70 TITLE "Mantenimiento"
@ 10, 5 FOLDEREX oFld PIXEL PROMPT "&Proveedor", "&Datos mercancías" SIZE 250,100
@ 20, 5 SAY "Código:" OF oFld:aDialogs[ 1 ] SIZE 60,10 PIXEL
@ 20, 100 SAY oProve var nProve OF oFld:aDialogs[ 1 ] SIZE 60,10 PIXEL
@ 30, 5 SAY "Razón social" OF oFld:aDialogs[ 1 ] SIZE 60,10 PIXEL
@ 30, 100 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] SIZE 100,10 PIXEL
@ 40, 5 SAY "Provincia" OF oFld:aDialogs[ 1 ] SIZE 60,10 PIXEL
@ 40, 100 GET oProvincia VAR cProvincia OF oFld:aDialogs[ 1 ] SIZE 100,10 PIXEL
@ 60, 50 BUTTON "Grabar" OF oFld:aDialogs[1] SIZE 40,10 PIXEL action oDlg:end()
@ 60, 150 BUTTON "Salir" OF oFld:aDialogs[1] SIZE 40,10 PIXEL ACTION oDlg:End()
sele produ
produ->(ordscope(0, nProve))
produ->(ordscope(1, nProve))
produ->(DBSKIP(0))
if produ->(ordKeyCount())==0
MsgInfo("No se encontraron productos")
endif
@ 1,1 XBROWSE oLbx SIZE 250, 65 PIXEL;
COLUMNS "CODIGO_PRO", "PRODUCTO", "PRECIO" OF oFld:aDialogs[ 2 ] alias "PRODU";
HEADERS "Código proveedor", "Producto", "Precio";
COLSIZES 70,300,140;
JUSTIFY AL_RIGHT, AL_LEFT, AL_RIGHT;
PICTURES , , "@E 9,999,999.99" LINES NOBORDER FASTEDIT
oLbx:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED
Return nil
Re: Cómo resetear oBrw:oseek
Posted: Mon Nov 30, 2020 9:55 pm
by Ramón J.
Re: Cómo resetear oBrw:oseek
Posted: Tue Dec 01, 2020 12:58 pm
by karinha
Comente, porfa:
Code: Select all
#include "FiveWin.ch"
#include "ord.ch"
#include "XBrowse.Ch"
FUNCTION TELEM()
LOCAL oDlg, obrw, nKey := VK_RETURN
USE PROVEEDOR NEW SHARED ALIAS "PROVE"
INDEX ON PROVE->CODIGO_PRO TO CODPROVE
SET INDEX TO CODPROVE
USE PRODUCTOS NEW SHARED ALIAS "PRODU"
INDEX ON PRODU->CODIGO_PRO TO CODPRODU
SET INDEX TO CODPRODU
SELE PROVE
SET RELATION TO PROVE->CODIGO_PRO INTO PRODU
DEFINE DIALOG oDlg FROM 3, 3 TO 33, 100 TITLE "PROVEEDORES"
@ 1, 1 XBROWSE oBrw SIZE 360, 160;
COLUMNS "CODIGO_PRO", "NOMBRE", "PROVINCIA" OF oDlg ALIAS "PROVE";
HEADERS "Código", "Denominación", "Provincia";
COLSIZES 200, 300, 70 NOBORDER FASTEDIT FOOTERS
@ 2, 10 SAY "Búsqueda por código:" SIZE 100, 10 PIXEL OF oDlg
@ 2, 70 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 100, 10 PIXEL OF oDlg COLOR CLR_HRED, CLR_YELLOW
@ 2, 178 SAY "Búsqueda por nombre:" SIZE 100, 10 PIXEL OF oDlg
@ 2, 250 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 100, 10 PIXEL OF oDlg COLOR CLR_HRED, CLR_YELLOW
/*
oBrw:lIncrFilter := .t.
oBrw:lSeekWild := .t.
oBrw:cFilterFld := "CODIGO_PRO"
oBrw:bChange := {|| oBrw:oSeek:Refresh() <--- da error
*/
oBrw:lIncrFilter := .T.
oBrw:lSeekWild := .T.
oBrw:cFilterFld := "NOMBRE"
// oBrw:bChange := {|| oBrw:oSeek:Refresh() }
oBrw:bChange := {|| oBrw:oSeek( "" ) }
oBrw:bKeyChar := { |nKey| If( nKey == VK_ESCAPE, ( oBrw:Seek( "" ), oDlg:End() ), nil ) }
oBrw:CreateFromCode()
@ 11, 15 BUTTON "Nuevo " OF oDlg ACTION oBrw:EditSource( .T. )
@ 11, 25 BUTTON "Editar " OF oDlg ACTION EditPro( oBrw )
@ 11, 35 BUTTON "Eliminar" OF oDlg ACTION oBrw:Delete()
@ 11, 45 BUTTON "&Imprimir" OF oDlg ;
ACTION oBrw:Report( "Listado de SAT", .T. ) ; // .t. --> wants preview
SIZE 40, 12
@ 11, 55 BUTTON "&Terminar" OF oDlg ACTION oDlg:End() SIZE 40, 12
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( oBrw:cSeek( "" ), oBrw:SetFocus(), .F. )
RETURN nil
//***************** EDICION CON FOLDER---------------
FUNCTION editPro( oBrw )
LOCAL oDlg, oFld, oLbx
LOCAL nProve, oProve, cNombre, oNombre, cProvincia, oProvincia
NProve := PROVE->CODIGO_PRO
cNombre := PROVE->NOMBRE
cProvincia := PROVE->PROVINCIA
DEFINE DIALOG oDlg FROM 3, 3 TO 20, 70 TITLE "Mantenimiento"
@ 10, 5 FOLDEREX oFld PIXEL PROMPT "&Proveedor", "&Datos mercancías" SIZE 250, 100
@ 20, 5 SAY "Código:" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 20, 100 SAY oProve var nProve OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 5 SAY "Razón social" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 100 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 40, 5 SAY "Provincia" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 40, 100 GET oProvincia VAR cProvincia OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 60, 50 BUTTON "Grabar" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL action oDlg:end()
@ 60, 150 BUTTON "Salir" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL ACTION oDlg:End()
SELE produ
produ->( ordscope( 0, nProve ) )
produ->( ordscope( 1, nProve ) )
produ->( DBSKIP( 0 ) )
IF produ->( ordKeyCount() ) == 0
MsgInfo( "No se encontraron productos" )
ENDIF
@ 1, 1 XBROWSE oLbx SIZE 250, 65 PIXEL;
COLUMNS "CODIGO_PRO", "PRODUCTO", "PRECIO" OF oFld:aDialogs[ 2 ] ALIAS "PRODU";
HEADERS "Código proveedor", "Produto", "Precio";
COLSIZES 70, 300, 140;
JUSTIFY AL_RIGHT, AL_LEFT, AL_RIGHT;
PICTURES , , "@E 9,999,999.99" LINES NOBORDER FASTEDIT
oLbx:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED
RETURN nil
Saludos.
Re: Cómo resetear oBrw:oseek
Posted: Tue Dec 01, 2020 9:09 pm
by Ramón J.
Gracias,
Lo que buscaba es que al salir de la edición del registro se reseteara el obrw:cseek y se mostraran de nuevo todos los registros.
Es decir, lo que está en rojo:
FUNCTION editPro( oBrw )
LOCAL oDlg, oFld, oLbx, Lsalir:=.f.
LOCAL nProve, oProve, cNombre, oNombre, cProvincia, oProvincia
NProve := PROVE->CODIGO_PRO
cNombre := PROVE->NOMBRE
cProvincia := PROVE->PROVINCIA
DEFINE DIALOG oDlg FROM 3, 3 TO 20, 70 TITLE "Mantenimiento"
@ 10, 5 FOLDEREX oFld PIXEL PROMPT "&Proveedor", "&Datos mercancías" SIZE 250, 100
@ 20, 5 SAY "Código:" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 20, 100 SAY oProve var nProve OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 5 SAY "Razón social" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 100 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 40, 5 SAY "Provincia" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 40, 100 GET oProvincia VAR cProvincia OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 60, 50 BUTTON "Grabar" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL action oDlg:end()
@ 60, 150 BUTTON "Salir" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL ACTION (lSalir:=.t., oDlg:End())
SELE produ
produ->( ordscope( 0, nProve ) )
produ->( ordscope( 1, nProve ) )
produ->( DBSKIP( 0 ) )
IF produ->( ordKeyCount() ) == 0
MsgInfo( "No se encontraron productos" )
ENDIF
@ 1, 1 XBROWSE oLbx SIZE 250, 65 PIXEL;
COLUMNS "CODIGO_PRO", "PRODUCTO", "PRECIO" OF oFld:aDialogs[ 2 ] ALIAS "PRODU";
HEADERS "Código proveedor", "Produto", "Precio";
COLSIZES 70, 300, 140;
JUSTIFY AL_RIGHT, AL_LEFT, AL_RIGHT;
PICTURES , , "@E 9,999,999.99" LINES NOBORDER FASTEDIT
oLbx:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED valid lSalir
if lsalir
oBrw:cSeek( "" )
OBrw:refresh()
oBrw:SetFocus()
endif
RETURN nil
Re: Cómo resetear oBrw:oseek
Posted: Sat Dec 05, 2020 11:39 am
by Ramón J.
Hola, de nuevo
Hace unos días, planteé un tema de cómo refrescar el oBrw:oseek después de editar un registro. Me ayudó mucho João, pero me da la impresión de que en mi respuesta posterior a una parte de mi planteamiento no me expliqué bien y puse en rojo el código que yo pretendía que funcionara. También planteé cómo hacer que se vea el cursor en cuando está el foco en SAY oBrw: oBuscar VAR oBrw: cBuscar
Es decir, que después de buscar un registro con SAY oBrw: oBuscar VAR oBrw: cBuscar , editarlo con editPro(oBrw) y después, al terminar de editarlo, volver a oBrw con todos los registros, no solo los buscados:
El código es el siguiente:
#include "FiveWin.ch"
#include "ord.ch"
#include "XBrowse.Ch"
FUNCTION TELEM()
LOCAL oDlg, obrw, nKey := VK_RETURN
USE PROVEEDOR NEW SHARED ALIAS "PROVE"
INDEX ON PROVE->CODIGO_PRO TO CODPROVE
SET INDEX TO CODPROVE
USE PRODUCTOS NEW SHARED ALIAS "PRODU"
INDEX ON PRODU->CODIGO_PRO TO CODPRODU
SET INDEX TO CODPRODU
SELE PROVE
SET RELATION TO PROVE->CODIGO_PRO INTO PRODU
DEFINE DIALOG oDlg FROM 3, 3 TO 33, 100 TITLE "PROVEEDORES"
@ 1, 1 XBROWSE oBrw SIZE 360, 160;
COLUMNS "CODIGO_PRO", "NOMBRE", "PROVINCIA" OF oDlg ALIAS "PROVE";
HEADERS "Código", "Denominación", "Provincia";
COLSIZES 200, 300, 70 NOBORDER FASTEDIT FOOTERS
@ 2, 10 SAY "Búsqueda por código:" SIZE 100, 10 PIXEL OF oDlg
@ 2, 70 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 100, 10 PIXEL OF oDlg COLOR CLR_HRED, CLR_YELLOW
@ 2, 178 SAY "Búsqueda por nombre:" SIZE 100, 10 PIXEL OF oDlg
@ 2, 250 SAY oBrw:oSeek VAR oBrw:cSeek SIZE 100, 10 PIXEL OF oDlg COLOR CLR_HRED, CLR_YELLOW
/*
oBrw:lIncrFilter := .t.
oBrw:lSeekWild := .t.
oBrw:cFilterFld := "CODIGO_PRO"
oBrw:bChange := {|| oBrw:oSeek:Refresh() <--- da error
*/
oBrw:lIncrFilter := .T.
oBrw:lSeekWild := .T.
oBrw:cFilterFld := "NOMBRE"
// oBrw:bChange := {|| oBrw:oSeek:Refresh() }
oBrw:bChange := {|| oBrw:oSeek( "" ) }
oBrw:bKeyChar := { |nKey| If( nKey == VK_ESCAPE, ( oBrw:oSeek( "" ), oDlg:End() ), nil ) }
oBrw:CreateFromCode()
@ 11, 15 BUTTON "Nuevo " OF oDlg ACTION oBrw:EditSource( .T. )
@ 11, 25 BUTTON "Editar " OF oDlg ACTION EditPro( oBrw )
@ 11, 35 BUTTON "Eliminar" OF oDlg ACTION oBrw:Delete()
@ 11, 45 BUTTON "&Imprimir" OF oDlg ;
ACTION oBrw:Report( "Listado de SAT", .T. ) ; // .t. --> wants preview
SIZE 40, 12
@ 11, 55 BUTTON "&Terminar" OF oDlg ACTION oDlg:End() SIZE 40, 12
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( oBrw:cSeek( "" ), oBrw:SetFocus(), .F. )
RETURN nil
//***************** EDICION CON FOLDER---------------
FUNCTION editPro( oBrw, oDlg )
LOCAL oDlg1, oFld, oLbx, Lsalir:=.f.
LOCAL nProve, oProve, cNombre, oNombre, cProvincia, oProvincia
NProve := PROVE->CODIGO_PRO
cNombre := PROVE->NOMBRE
cProvincia := PROVE->PROVINCIA
DEFINE DIALOG oDlg1 FROM 3, 3 TO 20, 70 TITLE "Mantenimiento"
@ 10, 5 FOLDEREX oFld PIXEL PROMPT "&Proveedor", "&Datos mercancías" SIZE 250, 100
@ 20, 5 SAY "Código:" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 20, 100 SAY oProve var nProve OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 5 SAY "Razón social" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 30, 100 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 40, 5 SAY "Provincia" OF oFld:aDialogs[ 1 ] SIZE 60, 10 PIXEL
@ 40, 100 GET oProvincia VAR cProvincia OF oFld:aDialogs[ 1 ] SIZE 100, 10 PIXEL
@ 60, 50 BUTTON "Grabar" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL action oDlg1:end()
@ 60, 150 BUTTON "Salir" OF oFld:aDialogs[1] SIZE 40, 10 PIXEL ACTION (lSalir:=.t., oDlg1:End())
SELE produ
produ->( ordscope( 0, nProve ) )
produ->( ordscope( 1, nProve ) )
produ->( DBSKIP( 0 ) )
IF produ->( ordKeyCount() ) == 0
MsgInfo( "No se encontraron productos" )
ENDIF
@ 1, 1 XBROWSE oLbx SIZE 250, 65 PIXEL;
COLUMNS "CODIGO_PRO", "PRODUCTO", "PRECIO" OF oFld:aDialogs[ 2 ] ALIAS "PRODU";
HEADERS "Código proveedor", "Produto", "Precio";
COLSIZES 70, 300, 140;
JUSTIFY AL_RIGHT, AL_LEFT, AL_RIGHT;
PICTURES , , "@E 9,999,999.99" LINES NOBORDER FASTEDIT
oLbx:CreateFromCode()
ACTIVATE DIALOG oDlg1 CENTERED valid lSalir
if lsalir
oBrw:oSeek( "" )
oBrw:refresh()
oBrw:Update()
oBrw:SetFocus()
endif
RETURN nil
Lo que está en rojo es lo que pretendo que haga al salir de la edición del registro, es decir, que se muestre el oBrw con todos los registros y no los buscados y que el cursor se vuelva a poner en el campo de búsqueda y además, como comentaba antes, que se vea el cursor, porque con say confunde mucho y parece que el cursor se ha perdido.
No sé si me he explicado bien.
Re: Cómo resetear oBrw:oseek
Posted: Sat Dec 05, 2020 12:30 pm
by karinha
Ramon, haga un ZIP ó RAR con los bancos de datos y ponga en:
https://mega.nz/
Y post el link para download para que los usuários hagan pruebas, si?
Regards, saludos.
Re: Cómo resetear oBrw:oseek
Posted: Sun Dec 06, 2020 2:36 pm
by Marc Venken
Re: Cómo resetear oBrw:oseek
Posted: Sun Dec 06, 2020 9:38 pm
by Ramón J.
Muchas gracias, João y Marc.
Creo que ya lo tengo. Es un poco casero, pero funciona. Os dejo el enlace de descarga de los ficheros prg, exe y dbf de ejemplo de búsqueda incremental.
Me gustaría que el cursor se visualizara cuando está el foco en cseek, pero por lo demás funciona bien.
https://mega.nz/file/p1pVmIyQ#5_ZFaiqK2 ... w-tbhfSDr0
Un saludo
Re: Cómo resetear oBrw:oseek
Posted: Wed Dec 09, 2020 3:42 am
by nageswaragunupudi
Cancel oSeek
Code: Select all
@ 2,250 SAY oBrw: oSeek VAR oBrIZE: cSeek 100,10 PIXEL OF oDlg COLOR CLR_HRED, CLR_YELLOW
This is a SAY control and so can not get focus and does not have cursor.
It is possible if this is a Get control, but this is possible in the next version yet to be released.
http://forums.fivetechsupport.com/viewt ... =3&t=39723
Re: Cómo resetear oBrw:oseek
Posted: Thu Dec 10, 2020 4:21 pm
by Ramón J.
Muchas gracias, Nageswaragunupudi
Tengo la versión FWH1804 y mi situación económica no me permite efectuar un desembolso de 170 euros para actualizarla a la versión más reciente, solo por, en principio, hacer una búsqueda incremental con get en lugar de say.
De todas maneras se agradece la respuesta.
Un saludo