Page 1 of 1

visualizar listbox hijo

Posted: Thu Jul 03, 2008 11:56 am
by antonio1095
¿como puedo hacer para poder visualizar el listbox hijo de un fichero ?
quiero mostrar un fichero de compras con su cabecera y sus lineas de esa compra
tengo
*------------------------------
STATIC FUNCTION Compras()
*------------------------------
LOCAL oFont, oLbx
LOCAL o := Array( O_LON )
LOCAL v := Array( O_LON )
LOCAL cAlias := aDbf[ DBF_LINENTRA]

Comp_IniVar( o, v )

oLbx := TWBrowse():New( 50, 100 )

DEFINE FONT oFont NAME "Arial" SIZE 0, -12
DEFINE DIALOG o[ O_DLG ] RESOURCE "NUEVACOMPRA"


REDEFINE GET o[ O_NUMERO ] VAR v[ O_NUMERO ] ID 200 OF o[ O_DLG ] PICTURE '999999'
REDEFINE GET o[ O_FECHA ] VAR v[ O_FECHA ] ID 114 OF o[ O_DLG ]
REDEFINE GET o[ O_PROVEEDOR ] VAR v[ O_PROVEEDOR ] ID 115 OF o[ O_DLG ]


REDEFINE LISTBOX oLbx ;
FIELDS str(( cAlias )->articulo) , ( cAlias )->nombarti ;
HEADERS "Articulo", "Nombr. Arti" ;
ALIAS cAlias ;
ID 500 OF o[ O_DLG ]


ACTIVATE DIALOG o[ O_DLG ] CENTERED ;
ON INIT ( comp_Bar( o, v ), .f. )


_ numero , fecha y proveedor del get son del fichero compras y el listbox son del fichero hijo
¿deberia funcionar asi?
las bases de datos las abro antes con
USE ( CurDir() + "\COMPRAS" ) NEW
INDEX ON STR(COMPRAS->NUMERO) TO ( CurDir() + "\COMPRA1" )

aDbf[ DBF_COMPRAS ] := Alias()

USE ( CurDir() + "\LINENTRA" ) NEW
INDEX ON STR(LINENTRA->COMPRAS) TO ( CurDir() + "\LINENTR1" )

aDbf[ DBF_LINENTRA ] := Alias()

pero no me acaba de funcionar
para operar con las 2 podria referirme a una con
LOCAL cAlias := aDbf[ DBF_LINENTRA]

y a la otra con
LOCAL cAlias1:= aDbf[ DBF_COMPRAS]

gracias por la colaboración
saludos
Antonio

Posted: Thu Jul 03, 2008 11:41 pm
by Antonio Linares
Antonio,

Este código no es necesario:

// oLbx := TWBrowse():New( 50, 100 )

En el recurso tienes que haber declarado el browse como "TWBrowse"

Posted: Fri Jul 04, 2008 9:22 am
by antonio1095
Gracias Antonio
lo que no consigo es que el olbx, me muestre solo las lineas que necesito
solo quiero visualizar las lineas del olbx , que sean hijas del registro de cabecera

he probado con dbfilter , con select y con WHEN

declaro una variable publica m1filtro y despues intento que solo se visualicen esas lineas , pero no lo consigo

REDEFINE LISTBOX oLbx ;
FIELDS str(( cAlias )->articulo) , ( cAlias )->nombarti ;
HEADERS "Articulo", "Nombr. Arti" ;
ALIAS cAlias ;
ID 500 OF o[ O_DLG ]


lineas probadas entre ALIAS E ID


* SELECT ( cAlias )->compras FOR m1filtro ;
* WHEN (( cAlias )->compras = m1filtro ) ;

¿con que opción puedo filtrar o limitar las lineas visualizadas en el olbx?

saludos
Antonio

Posted: Fri Jul 04, 2008 9:38 am
by Antonio Linares
Usa el comando de Clipper:

SET FILTER TO ...

aunque es más eficiente usar un índice condicional:

INDEX ON ... TO ... FOR ...

Depende de la cantidad de registros que vayas a usar.

Posted: Fri Jul 04, 2008 10:18 am
by antonio1095
pero el comando SET FILTER TO
no me lo admite en el REDIFINE LISTBOX
lo tengo que poner al abrir la base de datos

¿como puede volver abrir la base de datos y hacer el filtro si he definido la base de datos con cAlias?

lo he intentado hacer son SET FILTER TO CAMPO = VARIABLE PUBLICA, pero no me funciona

este es el codigo el set filter lo hago antes en
USE ( CurDir() + "\LINENTRA" ) NEW
INDEX ON STR(LINENTRA->COMPRAS) TO ( CurDir() + "\LINENTR1" )

aDbf[ DBF_LINENTRA ] := Alias()
SET FILTER TO m1filtro = LINENTRA->COMPRAS


depues en otra funcion hago


LOCAL cAlias := aDbf[ DBF_LINENTRA]

Comp_IniVar( o, v )

DEFINE FONT oFont NAME "Arial" SIZE 0, -12
DEFINE DIALOG o[ O_DLG ] RESOURCE "NUEVACOMPRA"


REDEFINE GET o[ O_NUMERO ] VAR v[ O_NUMERO ] ID 200 OF o[ O_DLG ] PICTURE '999999'
REDEFINE GET o[ O_FECHA ] VAR v[ O_FECHA ] ID 114 OF o[ O_DLG ]
REDEFINE GET o[ O_PROVEEDOR ] VAR v[ O_PROVEEDOR ] ID 115 OF o[ O_DLG ]

m1filtro := o[ O_NUMERO ]

REDEFINE LISTBOX oLbx ;
FIELDS str(( cAlias )->articulo) , ( cAlias )->nombarti ;
HEADERS "Articulo", "Nombr. Arti" ;
ALIAS cAlias ;
ID 500 OF o[ O_DLG ]

Posted: Fri Jul 04, 2008 12:52 pm
by Antonio Linares
Antonio,

La llamada a SET FILTER TO ... la tienes que hacer despues de haber abierto la DBF con USE. Y estando situado en ese area de trabajo, no en otra area de trabajo.

Aqui puedes revisar la documentación de SET FILTER ... y de todos los demás comandos y funciones de Clipper:

http://www.ousob.com/ng/clguide/nga2c64.php

De todas formas, haz todas las preguntas que necesites que estamos aqui para ayudarte :-)