listas en cascadas

¿Nuevo en Apache OpenOffice? ¿No sabe cómo comenzar o dónde hacer su pregunta? ¡Este es el lugar!
Reglas del Foro
Los moderadores podrían mover los temas creados aquí a un foro más apropiado.
Si usted publicó aquí y no encuentra el tema, puede buscar sus mensajes haciendo clic en la opción «Buscar sus mensajes» que se encuentra justo debajo de la cabecera de la página, junto al panel de control de usuario y al acceso a sus mensajes privados.
Responder
cruztineo
Mensajes: 13
Registrado: Jue Feb 25, 2010 1:53 pm

listas en cascadas

Mensaje por cruztineo »

Buenas tardes amigos, tengo un problema: les comento, tengo dos (2) tablas

1.- Primera tabla: nombre_usuario;
Esta posee dos (2) campos: numero_identificacion y nombre
2.- Segunda tabla: tipo_automovil
Esta posee dos (2) campos: tipo_automovil y numero_identificacion

primero relacione estas dos tablas con numero_identificacion, esto por que una misma persona puede tener mas de un automóvil. Ahora bien lo que quiero hacer es que en un formulario de búsqueda rápida, tenga dos comandos de listas; el primero para escoger el numero_identificacion (de alguna persona) y en el segundo comando de lista, solo se me desplieguen los automóviles que pertenezcan a la persona elegida en el primer comando de lista.

De ante manos les agradezco.
OpenOffice 2.4 en canaima
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: listas en cascadas

Mensaje por RMG »

Hola,

Creo que no te hacen falta dos buscadores, con uno para el usuario es suficiente. Si tienes un formulario principal con los usuarios y un subformulario con los vehiculos del usuario, cuando hagas un filtro por usuario en el principal, o cambies de registro de un usuario a otro, el subformulario te mostrara los vehiculos del mismo.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
cruztineo
Mensajes: 13
Registrado: Jue Feb 25, 2010 1:53 pm

Re: listas en cascadas

Mensaje por cruztineo »

Tienes razon Sir. RMG, se me paso explicar el por que? necesariamente tiene que ser en dos comandos de listas, esto se debe por que en el segundo comandos de listas (automóviles que pertenezcan a la persona elegida en el primer comando de lista) se le va a agregar (las veces que ocurra una infraccion) una penalizacion.
OpenOffice 2.4 en canaima
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: listas en cascadas

Mensaje por RMG »

Hola,

Lo siento, pero no te acabo de entender, puedes anexar el archivo con lo que quieres hacer.

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
cruztineo
Mensajes: 13
Registrado: Jue Feb 25, 2010 1:53 pm

Re: listas en cascadas

Mensaje por cruztineo »

Saludos RMG, adjunto envío el programa que estoy iniciando, fíjate que existen tres formularios: 1.- Para ingresar a las personas. 2.- Para asociar los automóviles a las personas ya existente en la base. y 3.- Para asociar las infracciones a los automóviles, en este ultimo formulario es que se me esta presentando el problema, debido a que lo que quiero hacer es que al seleccionar, en el primer cuadro de lista, el nombre de la persona, en el segundo cuadro de lista solo se me desplieguen los automóviles que pertenezcan a la persona seleccionada, para luego seleccionar solo el automóvil que tubo la infracción para asociarle su debida multa (infracción).
Adjuntos
Infraccion.zip
(14.45 KiB) Descargado 364 veces
OpenOffice 2.4 en canaima
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: listas en cascadas

Mensaje por RMG »

Hola,

Te adjunto el archivo con un ejemplo de como lo enfocaria, esta todo en el formulario1. Esta con controles tablas para que lo veas mejor, despues tu te lo diseñas como te guste. Si te das cuenta en la consulta1 que he creado no hace falta rellenar los campos nombre y auto de la tabla infracciones, los puedes obtener con las otra tablas. Si aun asi quieres poner esos campos en la control tabla infracciones del formulario, muestras las columnas que he ocultado y podrás hacerlo.

Saludos
Adjuntos
Infracciones1.rar
(21.05 KiB) Descargado 355 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
cruztineo
Mensajes: 13
Registrado: Jue Feb 25, 2010 1:53 pm

Re: listas en cascadas

Mensaje por cruztineo »

Saludos Sir. RMG, observe el ejemplo a seguir que me enviaste, por hay va la cosa, pero rompe la forma del resto del programa, seria bueno seguir una linea, me explico, se quiere hacer todo en forma de cascada usando cuadro de listas,
OpenOffice 2.4 en canaima
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: listas en cascadas

Mensaje por RMG »

Hola,

Pues mucho me temo que como no uses macros lo puedas conseguir. No se como estarás en esta materia, pero aqui te dejo un enlace por si lo desconoces.

http://user.services.openoffice.org/es/ ... 1545#p4404

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: listas en cascadas

Mensaje por xiseme »

Advierto :mrgreen: que de Base (como de otras cosas) sé bien poco; pero en este hilo se habla de establecer como origen del registro el resultado de una consulta filtrada por el valor del ListBox del formulario.

Me pregunto si no podría adaptarse a la manera/sintaxis del SQL de Base, algo del estilo de esto

Código: Seleccionar todo

SELECT DISTINCT tipo_automovil.tipo_automovil
FROM  tipo_automovil INNER JOIN nombre_usuario ON tipo_automovil.numero_identificacion = nombre_usuario.numero_identificacion
WHERE nombre_usuario.numero_identificacion=[forms]![asociar_infracciones]![ListBox]
P.D.: Seguro que no he entendido bien, pero creo que el orden de introducción de datos más adecuado en ingreso_infracción sería
  • 1.- el-qué: infraccion
    2.- a-qué: placa-matrícula
De ahí ya sale modelo_vehículo y el nombre_usuario; porque tienes establecido que cada vehículo tiene un único usuario (yo :ucrazy: hubiera adjudicado uno como principal y otro más como "usuario_real" pero ese es otro tema)
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
cruztineo
Mensajes: 13
Registrado: Jue Feb 25, 2010 1:53 pm

Re: listas en cascadas

Mensaje por cruztineo »

creo que la solución esta en saber como hacer (mediante SQL) una referencia de un objeto (comando de lista) que se encuentra en un formulario (actual utilizado) esto en Oo, sucede que tengo formas de hacerlo pero en Access y no he logrado adaptarme a Oo.
OpenOffice 2.4 en canaima
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: listas en cascadas

Mensaje por xiseme »

En el libro de Mauricio Aprendiendo OOo Basic, capitulo 7.8 explica código sobre ListBox. Tal vez te ayude.
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
cruztineo
Mensajes: 13
Registrado: Jue Feb 25, 2010 1:53 pm

Re: listas en cascadas

Mensaje por cruztineo »

estuve observando los apuntes que me aconsejaste xiseme, pero no se hace mencion de como hacer referencia de un lisbox de un formulario para hacer una comparacion con un campo de una tabla, tal como se hacia en ACCESS. Me pregunto si no podría adaptarse a la manera/sintaxis del SQL de Base, algo del estilo de esto (como dice xiseme) SELECT DISTINCT tipo_automovil.tipo_automovil
FROM tipo_automovil INNER JOIN nombre_usuario ON tipo_automovil.numero_identificacion = nombre_usuario.numero_identificacion
WHERE nombre_usuario.numero_identificacion=[forms]![asociar_infracciones]![ListBox]
OpenOffice 2.4 en canaima
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: listas en cascadas

Mensaje por RMG »

Hola,

Mire este otro enlace, quizás te ayude.

http://user.services.openoffice.org/es/ ... =33&t=5953

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
cruztineo
Mensajes: 13
Registrado: Jue Feb 25, 2010 1:53 pm

Re: listas en cascadas

Mensaje por cruztineo »

Gracias a los que han intentado ayudarme en resolver este hilo, pero aun no he tenido éxito con lo que real mente deseo hacer. Creo que es que no me he explicado bien. Amigos real mente deseo realizar este programa en OOo base, y deseo usar dos cuadro de listas para seleccionar los datos. donde la segunda dependa directamente de la primera selección, tal como lo explique al principio del hilo.

Mucho sabría agradecer el que me pueda ayudar hacerlo, es verdad que no tengo mucho dominio en OOo Base, pero tengo la disposición de aprender, mi rama de trabajo no tiene nada que ver con programación pero he descubierto que podría facilitar me , en tiempo de repuesta, del producto final.
OpenOffice 2.4 en canaima
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: listas en cascadas

Mensaje por RMG »

Hola,

Aunque parece sencillo lo que quieres hacer, realmente no es así para alguien que esta aprendiendo en Base, pues dependes tambien de como te dije de conocer el tema de las macros y los eventos dondes las debes aplicar. Por si este no es tu caso te remito a otro ejemplo para que lo traslades a tu trabajo.

http://user.services.openoffice.org/es/ ... =31&t=6201

Saludos
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: listas en cascadas

Mensaje por RMG »

Aqui tienes otro ejemplo del foro en ingles, este no necesita macros, solo una tabla especial para filtrar. Pero como te digo, no es tan facil.

Saludos
Adjuntos
Filtrar por listas SinMacros.rar
(87.27 KiB) Descargado 349 veces
OpenOffice 4.1.15 y LibreOffice 6.2.4.2 en W-10, y LibreOffice 4.1.6.2 en Open Suse 13.1(VirtualBox)
Fdv
Mensajes: 126
Registrado: Lun Abr 05, 2010 6:19 pm

Re: listas en cascadas

Mensaje por Fdv »

Me parece que para lo que deseas hacer puedes basarte en el formulario EJEMPLO 1 de mi base de datos http://sites.google.com/site/fdvcreatio ... oblaciones, pero con algunas diferencias (no es que lo copies, no te valdría, sino que lo tengas como referencia).

A partir del ListBox de las Personas, se deberían cargar los Vehiculos y una vez rellenados los vehiculos, con la elección se debería Filtrar el Formulario con las Infracciones.

Todo esto habría que hacerlo con macros.

Edita el formulario EJEMPLO 1 de mi base de datos y fíjate en las propiedades del Primer ListBox, el del Pais.
  • Vemos, que los datos del ListBox es una consulta SQL: "SELECT "Pais", "Id" FROM "Paises""
  • En información adicional he escrito: LstProvincias,Provincias,Provincia . Te explico que son
    • LstProvincias es el siguiente ListBox que se rellenará
    • Provincias es la tabla que deberá usar en el próximo ListBox.
    • Provincia es el campo que mostrará en el siguiente ListBox.
  • Estos valores los tomará la macro, fíjate en acontecimientos Modificado: Standard.Ejecutables.AutLstForm (document, Basic)
    Osea, que cuando se modifique el ListBox se ejecutará la macro AutLstForm. ¿ Que hace esta macro?, mira:

    Código: Seleccionar todo

    sub AutLstForm(Event as object)
    	If event.source.ImplementationName="com.sun.star.comp.forms.ODatabaseForm" then AutLstForm_Comprueba_ListBox(Event)
    	If event.source.ImplementationName="com.sun.star.comp.forms.OListBoxControl" then AutLstForm_ActLstCntl(Event.Source.Model)
    End Sub
    Esta macro, simplemente te envía a una u otra macro dependiendo si ha sido llamada desde un ListBox o desde un Formulario. Como hemos llamado desde el ListBox, miramos en AutoLstForm_ActLstCntl:

    Código: Seleccionar todo

    Private Sub AutLstForm_ActLstCntl(Control as Object, Optional Limpiar as Boolean)
    
    	Dim Control2 as Object, OForm as Object
    	Dim Argumentos() as string 'Argumentos: Control, Tabla, Campo
    		
    	OForm=Control.parent
    
    	Argumentos=Split(Control.Tag,",")
    	if Ubound(argumentos)<>2 then
    		msgbox "El campo Listado no esta bien configurado, en texto adicional debe tener los siguientes datos ""Control siguiente,Tabla,Campo"" ",64,"Error"
    		else
    		Control2=oForm.GetByName(Argumentos(0))
    		control2.enabled=false
    		Dim sSQL as string, indice as integer		
    		
    		if control.CurrentValue="" then
    			sSQL=""
    			'oForm.Columns.GetByName(control2.DataField).updateNull 'Value=-1
    			else
    			indice=Cint(Control.ValueItemList(Control.SelectedItems(0)))	
    			sSQL= "SELECT """+Argumentos(2)+""", ""Id"" FROM """+Argumentos(1)+""" WHERE ""IdPrecedente""="+STR(indice)+"  ORDER BY """+Argumentos(2)+""" ASC"
    			endif		
    		Control2.ListSource=Array(sSQL)
    		Control2.refresh()
    		if control2.CurrentValue="" and oForm.Columns.GetByName(control2.DataField).wasnull=false then oForm.Columns.GetByName(control2.DataField).updateNull
    		control2.enabled=true
    		if control2.Tag<>"" then AutLstForm_ActLstCntl(control2)	
    		endif
    End Sub
    Vemos que esta macro toma los datos introducidos en el control (informacion adicional) y los utiliza para construir la sentencia SQL para el siguiente ListBox:

    Código: Seleccionar todo

    sSQL= "SELECT """+Argumentos(2)+""", ""Id"" FROM """+Argumentos(1)+""" WHERE ""IdPrecedente""="+STR(indice)+"  ORDER BY """+Argumentos(2)+""" ASC"
    Verás, que deberás cambiar Id por el campo de la Tabla utilizado en tu BD, asi como IdPrecedente.

    Nos queda otra macro, para el Formulario en su acontecimiento "al cambiar de registro", se encarga de iniciar todo con el dato del primer ListBox:

    Código: Seleccionar todo

    Sub AutLstForm_Comprueba_ListBox(Event as Object)
    	Dim Control as Object,sSQL as string		
    	Control=Event.Source.GetByName("LstPaises")
    	AutLstForm_ActLstCntl(Control)
    End Sub
    
    Si te fijas, buscará el valor del ListBox LstPaises para iniciar la cascada de ListBox.
Luego, habría que crear otra macro nueva, para cuando se modifica el segundo ListBox, esta macro, tomará el valor del segundo ListBox y con este filtrará el formulario para mostrar el apartado de infracciones necesario.

Más o menos creo que esta explicado, si lo ves muy complicado puedo echarle un ratillo y adaptarlo a tu bd.
OOo 3.3 Corriendo en Windows 7
En mi Espacio para OpenOffice Base tienes programas, recursos y vídeos que he ido creando... visítalo
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: listas en cascadas

Mensaje por SLV-es »

Si con las respuestas obtenidas consideras que se ha dado solución a tu consulta (aunque la solución obtenida sea que no la hay :(), por favor, marca el tema como resuelto.
Si no sabes cómo, por favor, lee Como marcar como [RESUELTO] un tema.
Gracias por participar en el foro y ayudar a que todo esté ordenado.
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Responder