[RESUELTO]Abrir otro formulario, filtrado x registro actual

Discute sobre las herramientas de la base de datos
Responder
danielmorbelli
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

[RESUELTO]Abrir otro formulario, filtrado x registro actual

Mensaje por danielmorbelli »

Hola nuevamente.
(pregunta basada en el modelo de ejemplo compartido por RMG)
Estuve probando la manera de hacerlo pero no le encontré la vuelta (me va a llevar tiempo sacarme las mañas del access).
Ejemplo de lo que quiero hacer:
Teniendo abierto un formulario "Clientes", situado en el registro de un cliente quiero abrir el formulario "forFacturasC" desde un botón , y que sólo muestre solo las "Facturas por Cliente" y los "Detalles de la factura seleccionada" pertenecientes a registro desde donde vine de "Clientes" .
También un botón que filtre de la misma manera para pero para "forFacturasA"
Desde ya muchas gracias
Daniel
Última edición por danielmorbelli el Mar Sep 21, 2010 10:28 am, editado 4 veces en total.
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Abrir otro formulario, filtrado por el registro actual

Mensaje por RMG »

Hola Daniel,

Veo que has descargado mi BD de ejemplo, si abres el formulario onsultar facturas (forFacturasC), veras que estan todos los clientes que tienen facturas, si picas dentro del registro de cualquier cliente, te seleccionara todas las facturas de ese cliente, y si picas dentro del registro de una factura, seleccionara el detalle de esta factura, que se puede modificar e imprimir de nuevo. Si solo es eso lo que necesitas, pues ya lo tienes.

Existe otra posibilidad de abrir un formulario filtrado por el campo ID del registro actual, esto tambien lo tienes como ejemplo en el formulario forArticulos con un boton de llamada para ver todos los articulos facturados. Simplemente es acloparte la macro a tus necesidades.

Espero haberte ayudado.

Ramón
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)
danielmorbelli
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Abrir otro formulario, filtrado por el registro actual

Mensaje por danielmorbelli »

RMG escribió:Hola Daniel,

Veo que has descargado mi BD de ejemplo, si abres el formulario onsultar facturas (forFacturasC), veras que estan todos los clientes que tienen facturas, si picas dentro del registro de cualquier cliente, te seleccionara todas las facturas de ese cliente, y si picas dentro del registro de una factura, seleccionara el detalle de esta factura, que se puede modificar e imprimir de nuevo. Si solo es eso lo que necesitas, pues ya lo tienes.

Existe otra posibilidad de abrir un formulario filtrado por el campo ID del registro actual, esto tambien lo tienes como ejemplo en el formulario forArticulos con un boton de llamada para ver todos los articulos facturados. Simplemente es acloparte la macro a tus necesidades.

Espero haberte ayudado.

Ramón
Ramón, estuve probando lo que me dijiste,
Respecto a picar loas facturas ya emitidas, eso funciona perfecto, no tengo duda alguna. Tiene algunas limitaciones a la hora de buscar una factura entre miles.
Probando pude avanzar logrando que mediante un subformulario inserto en el "forClientes" me muestre en cada registro "cliente" las facturas que tiene ese cliente.
Lo hice de esta manera: Teniendo en modo diseño el "formClientes", abrí el "Navegador de Formulario" (horizontal abajo a la izquierda), y dentro del navegador hice click derecho sobre "formClientes" , nuevo-Formulario (al que le di el nombre SubformFacturas), sobre este subformulario le di al boton derecho para personalizar las propiedades , y en la pestaña datos en "Tipo de de Contenido" elegí consulta , y en "Contenido" elegí "conFacturas" , luego en la misma pestaña vinculè el campo IDCliente de "conFacturas" con el campo ID_Cliente de "conClientes".
Por último,estando seleccionado el "SubFormFacturas" le di click a "mas campos de control" (barra lateral Izq), y desde ahí inserté un "Control de Tablas" eligiendo los campos que quería mostrar.

Pero..... todavía no pude lograr (pese a intentar infructuosamente adaptar una macro a partir de las que me sugeriste :"ArticulosFacturados" y
"FiltraArticulo") abrir desde un boton inserto en el "formClientes" el formulario "formFacturasA" filtrado por el cliente seleccionado (en el que me encuentro) en "formClientes". La idea es que desde el "formClientes" estando en el registro de clienteX, me abra "formFacturasA" con el clienteX seleccionado en el listado "ccoClientes", para generar una factura u orden de trabajo con un solo paso (evitando errores de búsqueda que pueden surgir a partir de clientes homónimos).


PD.:Como no iba a bajar tu base de datos de ejemplo......?
Está ESPECTACULAR!!!!! , ni bien quede prolija envío las adaptaciones con orden de trabajo y alguna que otra cosa que agregué para ampliar su utilidad.
No tengo palabras para agradecer tanta solidaridad y cooperación de tu parte.
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Abrir otro formulario, filtrado por el registro actual

Mensaje por danielmorbelli »

Hola : Pude avanzar un poquito....
pero todavía no llegué a lo que necesito
Utilicé el formulario "forClientes" donde le inserté un botón que abre el "forFacturasACli" (que es una copia exacta del "forFacturasA" renombrado)

1° Adapté el sig. código de macro para que al apretar el "botónFacturar" abra "forFacturasACli"

Código: Seleccionar todo

Option Explicit

Global iIDCliente As Integer

Sub ClientesFiltrados(Event As Object)
	Dim oForm As Object
	oForm = Event.Source.Model.Parent
	If oForm.IsNew Or oForm.IsAfterLast Then Exit Sub
	iIDCliente = oForm.Columns.GetByName("ID_Cliente").GetInt
	With ThisDatabaseDocument.FormDocuments.GetByName("forFacturasACli")
		.Close
		.Open
	End With
End Sub
2° Y esta otra para que al cargarse el formulario lo haga filtrado por "IDCliente"

Código: Seleccionar todo

Sub FiltraCliente(Event As Object)
	Dim oForm As Object
	oForm = Event.Source
	oForm.ApplyFilter=True
	oForm.Filter="""IDCliente""=" & iIDCliente
	oForm.Reload
End Sub
Esto abre perfectamente "forFacturasACli" filtrado por el registro desde "forClientes" , y me muestra las facturas pertenecientes al cliente por el que es filtrado, pero el inconveniente es que filtra unicamente al cliente si tiene emitida una factura.

Desde ya muchas gracias
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
RMG
Mensajes: 3879
Registrado: Mar Nov 17, 2009 6:59 am
Ubicación: Valencia - España

Re: Abrir otro formulario, filtrado por el registro actual

Mensaje por RMG »

Hola Daniel,

Y es como debe ser, si no tiene facturas emitidas no te puede presentar nada, pues todo esta relacionado. Tambien decirte que en formulario consultar facturas de mi BD aunque salgan todos los registros, visualmente solo ves los del cliente seleccionado, esto es lo que tu estas haciendo pero desde otro enfocque, esto es sin entrar en el formulario de los clientes. Todas las opciones son validas ya que solo son sistemas de trabajo.

NOTA: Veo que te lo estas currando, asi se hace aprendiendo poco a poco.

Saludos
Ramón
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)
danielmorbelli
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Abrir otro formulario, filtrado por el registro actual

Mensaje por danielmorbelli »

RMG escribió:Hola Daniel,

Y es como debe ser, si no tiene facturas emitidas no te puede presentar nada, pues todo esta relacionado. Tambien decirte que en formulario consultar facturas de mi BD aunque salgan todos los registros, visualmente solo ves los del cliente seleccionado, esto es lo que tu estas haciendo pero desde otro enfocque, esto es sin entrar en el formulario de los clientes. Todas las opciones son validas ya que solo son sistemas de trabajo.

NOTA: Veo que te lo estas currando, asi se hace aprendiendo poco a poco.

Saludos
Ramón
Hola , muchas gracias Ramón.
Por lo que me decís entonces nunca podría lograr lo que necesito con el método utilizado hasta ahora, pero sigo encaprichado en que debe haber alguna manera para resolver mi dilema, ya que es comprensible que presente solo las facturas emitidas, pero la idea es también poder generar desde ahí una nueva factura.
A continuación pego los códigos en VB que funcionan perfectamente en access (abriendo un formulario filtrado), lo que sucede es que no encuentro la manera (no tengo idea ya que soy muy bruto y no entiendo) de hacer un código en el Basic de Oo para que haga lo mismo.
Nota : El "forClientes" tiene inserto un subformulario "subforFacturasClientes" , con sus campos vinculados por IDCliente
el "forFacturas" tiene inserto un subformulario "subforDetallesFactura" con sus campos vinculados por IDFactura

Código del botón botonFactura inserto en "forClientes":

Private Sub botonFacturas_Click()
On Error GoTo Err_botonFacturas_Click
If IsNull(Me![IDCliente]) Then
MsgBox "Introduzca la información sobre el cliente antes de generar la Factura."
Else
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.OpenForm "forFacturas", , , , acEdit
End If

Exit_botonFacturas_Click:
Exit Sub

Err_botonFacturas_Click:
MsgBox Err.Description
Resume Exit_botonFacturas_Click
End Sub

SQL para establecer el "Origen del registro" del "forFacturas" mediante una [Instrucción SQL: Generador de Consultas] :
SELECT DISTINCTROW tabFacturas.*, tabClientes.Cliente
FROM tabClientes INNER JOIN tabFacturas ON tabClientes.IDCliente = tabFacturas.IDCliente
WHERE (((tabFacturas.IDCliente)=[forms]![forClientes]![IDCliente]));

En "Eventos" del forClientes:

Al activar registro (Operador, viene de una tabla donde están quienes operan el ordenador):
Private Sub Form_Current()
If IsNull(Me![IDFactura]) Then
DoCmd.GoToControl "IdOperador"
End If
End Sub

Al abrir:
Private Sub Form_Open(Cancel As Integer)
If Not IsLoaded("forClientes") Then
MsgBox "Abra el formulario forFacturas usando el botón botonFacturas del formulario forClientes."
Cancel = True
End If
End Sub

Al activar:
Private Sub Form_Activate()
On Error GoTo Err_Form_Activate
Me.Requery
If IsLoaded("forClientes") Then
If Forms![forClientes]![Subformulario subforClientes].Form.RecordsetClone.RecordCount > 0 Then
DoCmd.GoToControl "IDFactura"
DoCmd.FindRecord Forms![forFacturas]![Subformulario subforClientes].Form![IDFactura]
End If
End If

Exit_Form_Activate:
Exit Sub

Err_Form_Activate:
MsgBox Err.Description
Resume Exit_Form_Activate
End Sub

Bueno , disculpen tanto rollo y brutalidad de mi parte.
Desde ya muchas gracias
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
Cascabel
Mensajes: 283
Registrado: Mié Nov 11, 2009 10:53 am

Re: Abrir otro formulario, filtrado por el registro actual

Mensaje por Cascabel »

Hola, Daniel. Examina el archivo adjunto e intenta adaptarlo a lo que necesitas.
Adjuntos
Abre.Formulario.Filtrado.odb.zip
(16.16 KiB) Descargado 3138 veces
OOo 3.3.0: OOO330m20 (Build:9567) en WXP+SP3 y en Ubuntu 10.10
danielmorbelli
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

Re: Abrir otro formulario, filtrado por el registro actual

Mensaje por danielmorbelli »

Cascabel escribió:Hola, Daniel. Examina el archivo adjunto e intenta adaptarlo a lo que necesitas.
Cascabel: ESPECTACULAR!!!!
Es eso exactamente lo que necesitaba, ni bien lo adapte y haga funcionar pongo el tema como resuelto.
Muchas gracias :bravo:
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
danielmorbelli
Mensajes: 116
Registrado: Vie May 21, 2010 1:53 pm

[RESUELTO] Re: Abrir otro formulario filtrado x registro act

Mensaje por danielmorbelli »

danielmorbelli escribió:
Cascabel escribió:Hola, Daniel. Examina el archivo adjunto e intenta adaptarlo a lo que necesitas.
Cascabel: ESPECTACULAR!!!!
Es eso exactamente lo que necesitaba, ni bien lo adapte y haga funcionar pongo el tema como resuelto.
Muchas gracias :bravo:
Daniel
:bravo: :bravo: :bravo:
Muchas gracias a todos!!!
Realmente adaptando las macros que compartió Cascabel, y la base de ejemplo de Ramón (RMG), pude obtener algo aún mejor que lo que pretendía lograr para abrir un formulario filtrado.Para que funcione correctamente agregué controles con barra de navegación al subformulario inserto en "forClientes" que me muestra las facturas (y ordenes de trabajo, en mi caso) para llenar los campos "fecha", y otros con algunos detalles útiles para que se genere una nueva factura pre llenada haciendo que el "formFacturas" se abra filtrado por el cliente desde donde me encuentro
Día a día me sorprendo (al comprender como funciona) al ver lo que se puede hacer con Oo Base respecto de MSOFF
Daniel
Openoffice 3.2 (Preferentemente Linux Ubuntu 10.04) también W XP SP3
Responder