
Los subformularios de Access
La posibilidad de insertar uno o más formularios dentro de otro es ideal para desplegar datos de facturas o remitos.
1 minuto de lectura'

Una de las funciones características en un sistema de datos es la de consultar la información en forma clara y precisa.
En anteriores entregas hemos visto el potencial de los formularios de Access 97 para realizar, entre otras, esta tarea. Esta vez analizaremos, en particular, la posibilidad de insertar un formulario dentro de otro.
Este esquema permite establecer una cabecera con datos básicos y un nivel de detalle en el subformulario. Para esto, ambos objetos deben estar combinados. Ejemplos típicos de esta estructura son las facturas, remitos, órdenes de compra y, en general, todo tipo de documento compuesto por datos generales y una serie de renglones.
En este caso, se desarrollará un formulario que expone la información de un conjunto de órdenes de compra, almacenados en dos tablas: una con los datos principales y otra con el detalle de cada orden.
Las tablas que se utilizarán son tres. La primera de ellas, llamada OrdenesDeCompra, servirá para guardar los datos primordiales de las órdenes. Para eso debe constar de los campos NroOC (Texto, 6 caracteres), Fecha (Fecha/Hora, Fecha corta) y CodProveedor (Texto, 4). La segunda tabla se utilizará para los renglones de detalle de cada orden de compra. Con el nombre de DetalleOC, debe constar de los campos NroOC (Texto, 6), Item (Numérico, Simple), CodArticulo (Texto, 4) y Cantidad (Numérico, Entero largo). La última será la tabla Artículos, de la que se necesitarán los datos CodArticulo (Texto, 4) y Descripcion (Texto, 50).
Una consulta como base
Este ejemplo es ideal, también, para introducir el concepto de utilizar una consulta ( querie ), en lugar de una tabla, como soporte de datos de un formulario.
Específicamente, generaremos una consulta para el subformulario; es decir, para desplegar la información del detalle de las órdenes de compra. Si se pregunta por qué es necesario usar una consulta, la respuesta es: porque permite capturar y amalgamar la información de dos o más tablas en un solo objeto, haciendo más simple la recuperación de los datos desde su almacenamiento físico.
Para crear esta consulta, ubíquese en el respectivo contenedor y presione el botón Nuevo . En el cuadro de diálogo Agregar tabla (superpuesto a la ventana de diseño de la consulta) seleccione las tablas DetalleOC y Articulo ; luego, toque el botón Cerrar .
Para completar la confección de la consulta, arrastre los campos NroOC , Item , CodArticulo y Cantidad de la tabla DetalleOC , y Descripcion desde la lista de Articulo . Antes de guardar esta consulta haga un clic en la casilla de verificación Mostrar del campo NroOC (que tiene una X) para desmarcarla. Así, los datos de este campo no serán exhibidos en el subformulario. Sin embargo, su presencia es fundamental para vincular el formulario principal con el subformulario insertado.
Por último, guarde la consulta con el nombre ConsultaBase .
Objetos básicos
Procederemos a elaborar los dos formularios que se necesitan. En primera instancia, se debe generar el que se considera como principal en la asociación.
Ubíquese, entonces, en el contenedor Formularios y presione la tecla Nuevo para abrir el cuadro de diálogo de creación. Despliegue la lista del combo (cuadro combinado) para elegir la fuente de los datos (tabla o consulta) y seleccione OrdenesDeCompra . Posteriormente, haga un clic en la opción Asistente para formularios y apriete Aceptar .
La primera pantalla de este asistente sirve para elegir los campos que se mostrarán en el formulario. Presione el botón identificado por una flecha doble (>) para seleccionar todos. Continúe con el botón Siguiente . En el segundo cuadro de diálogo deje marcada la opción por defecto, En columnas , y prosiga. Luego, escoja el estilo de cuadros de texto y fondo que más le agrade. Por último, salve el formulario con un nombre como FormuPpal y finalice cliqueando el botón Terminar .
Aplique el mismo método para producir el formulario que denominaremos FormuSecun . Sin embargo, esta vez elija el nombre ConsultaBase en la ventana Nuevo Formulario . Además, como esta consulta toma datos de dos bases, el asistente agregará una pantalla a las ya descriptas (que correrá en segundo término), interrogando sobre cómo se desea ver los datos. Deje la opción por DetalleOC , que es la tabla con los renglones de cada orden de compra. También, en la tercera pantalla, seleccione la distribución Hoja de datos y luego, en la siguiente, el estilo Estándar .
Un vínculo preciso
El siguiente paso consiste en insertar el subformulario (FormuSecun) en el principal (FormuPpal). Para esto, abra este último en el modo de diseño. Agrande, si es necesario, la banda Detalle, donde se encuentran, encolumnados, los tres campos de la tabla maestra de las órdenes de compra. Este espacio servirá para ubicar el formulario secundario.
Para hacer esto presione el botón Subformulario/subinforme en el Cuadro de herramientas para elaborar formularios (que se ubica en la pantalla automáticamente al editar uno). El cursor tomará la forma de una cruz con el icono de un formulario debajo. Ubíquelo y haga un clic sobre la banda de detalle y, sin soltar la tecla del mouse, forme un rectángulo del tamaño que crea conveniente. Complete la operación soltando la tecla.
En forma automática se abre un asistente para subformularios. En la primera pantalla de éste, marque la opción Formularios y despliegue la lista del combo para seleccionar FormuSecun. El segundo cuadro de diálogo permite establecer los campos que vinculan los datos de la tabla de cabecera (OrdenesDeCompra) con los que recoge la consulta que sirve de base del subformulario, de las tablas DetalleOC y Articulo.
Para esto haga un clic en la opción Definir la mía propia. Luego, en el combo titulado Campos del formulario/informe seleccione NroOC. Haga lo mismo en el combo aledaño, Campos del subformulario/subinforme, y escoja el campo del mismo nombre. Continúe con el botón Siguiente, otorgue un nombre al objeto subformulario y finalice con el botón Terminar. De esta forma, cada vez que se avance o retroceda un registro en el formulario principal, Access tomará el número de orden de compra y desplegará, en el subformulario, el detalle que le corresponda.





