Duda relación campo combinado- consulta Microsoft Access

Mi pregunta en la siguiente:

Yo tengo una base de datos de Inventario, basada en la que viene por defecto en Access (Nortwhind traders).

El problema viene a la hora realizar un nuevo pedido cliente.

En la base original seleccionas los productos y listo, pero en mi base de datos yo estoy comercializando packs de productos, es decir Digamos que PACK 1 esta compuesto de Producto 1 y Producto 2.

He realizado una consulta (Como criterio le pongo que me lo filtre por el cuadro combinado) y consigo que si le doy el valor PACK1 a un campo combinado, automáticamente me realiza una consulta de selección filtra y solo me deja elegir los productos que entran dentro de ese pack, es decir Producto 1 y Producto2, los cuales yo ya pongo la cantidad etc y me los retira del inventario,

El problema viene cuando actualizo ese campo combinado y selecciono PACK2, automáticamente me actualiza la consulta y me borra los Productos que yo había puesto y me deja elegir los productos que conforman el PACK2. Siendo imposible realizar un pedido consistente en varios PACKS.

No se como hacer que una vez que la consulta me ha dado un resultado yo bloquearlo y que al cambiar de valor el cuadro combinado me respete ese registro que ya me había dado.

La consulta me devuelve los datos en formato Hoja de datos por medio de un subformulario, los cuales luego al dar ya a un botón se guardan en otras tablas.

3 respuestas

Respuesta

En el 100% de los casos en que pasa eso, es porque, o bien los cuadros de texto donde pones el producto, o bien el subformulario, llamémosle Detalle de pedido, no tiene Origen de datos. Sin saber como la tienes construida, pero suponiendo que tienes una tabla Productos con, por ejemplo Idloquesea, pack, producto, precio, etc. Y suponiendo que en el subformulario Detalle de Pedido, tengas los campos, Pack, Producto, precio, cantidad, subtotal, etc, si cambias el cuadro de texto Pack, por un combinado, que en Origen de la fila te coja los PACKS de la tabla Productos, puedes hacer varias cosas(suponiendo que Producto también va a ser un combinado)

O bien en las propiedades de este combinado, en eventos-Después de actualizar

nombrecomboproducto.rowsource="select producto from productos where pack=forms!nombredelformulario!nombredelsubformulario.form!nombrecombopack"

Así cuando en el combinado elijas un pack, el origen de la fila del combinado Producto serán aquellos productos de la tabla cuyo pack sea el que has elegido

Otra forma, es que en el combinado productos, en el origen de la fila, le añadas en campo Pack y abajo en Criterios le pones

Forms! Nombredelformulario! Nombredelsubformulario.form! Nombrecombopack"

Si el combinado donde eliges el pack estuviera fuera del subformulario, el criterio seria

Forms! Nombredelformulario! Nombredelcombo

En fin si pudieras concretar un poco más.

De todas formas, si quieres, repito, si quieres, mándame un mensaje(para que no se vea aquí tu correo) a [email protected] y te mando un par de ejemplos.

Hola muchas gracias por la respuesta. En principio tenía por un lado la tabla Packs y en otro lado la tabla productos y mediante la consulta  de selección  los relacionaba. Si es mas sencillo en una sola tabla lo hago así. 

Te comento un poco mas en detalle como esta montada la base de datos en el aspecto de pedidos, la cual para mis conocimientos es compleja:

Formulario Detalle pedidos: Dentro de el hay controles para elegir cliente etc, y luego hay incrustado un subformulario (Subformulario para detalle pedidos) con Origen de datos tabla Detalle pedidos y el campo en cuestión es ID producto,con Origen de datos Id producto de la tabla Detalle de Pedidos el cual como origen de la fila es una consulta que selecciona del Inventario el nombre del producto (El cual a su vez es otra consulta) Vamos, para mi un poco lío.

La cuestión es que tengo que conseguir que esa consulta de Inventario (la cual se muestra como hoja de datos) al cambiarla no me modifique los productos que ya había insertado en las lineas anteriores o bien otra solución que me propongas.

En la consulta original no había problema porque simplemente listaba todos los productos ya que Inventario es una consulta que saca los productos de la tabla Productos.

Si prefieres que te mande imágenes o te pase la base de datos por el otro medio de contacto sin problema.

No hace falta que hagas una tabla sola, lo dije por si era así. Lo normal es como tu lo tienes. Una tabla Pack con (por ejemplo) IdPack(autonumerico y clave) y Pack y una tabla Productos con Idpack(numérico y relacionado con el otro Uno a Varios y con integridad referencial, Producto,¿Precio?, etc.

Una Tabla Clientes, con los datos que no varían nunca o casi nunca de los clientes, como puede ser nombre, CIF, dirección, teléfono, etc. Como un cliente te puede hacer varios pedidos, una tabla Pedidos, con Idpedido(autonumerico y clave) y con los datos "fijos" que puede haber en un Pedido como puede ser FechaPedido, Cliente( que lo eliges de un combinado basado en la tabla Clientes, dirección de envio, Subtotal( que te sume los importes de los diferentes Productos), IVA y Total.

Una tabla DetalledePedido, con los campos que cambian, como puede ser el PackQue lo recoge de la tabla Pack, producto que lo recoge de la tabla Productos, Precio que lo recoge de la misma tabla, Cantidad, y Subtotal.

Ahora bien, que quieres que al vender un producto determinado te reste de las existencias la cantidad vendida, pues en vez de hacer la tabla Productos puedes llamarla Existencias donde pondrías las existencias iniciales y que desde el subformulario te fuera restando las vendidas con una instrucción tipo

Docmd. Runsql"Insert into Existencias( pack, producto, existencias, etc) values(forms!nombredelformulario!nombredelsubformulario, form!pack...

O bien poner en la tabla Productos las existencias iniciales y en una consulta con las tablas, por ejemplo Detalle de Compra, productos y detalle de venta que te vaya calculando las existencias que te quedan.

Como ves hay muchísimas formas, y para darte un consejo habría que concretar todo lo que se pueda. Por eso te decía que me mandaras un email a mi dirección y te mandaba un par de ejemplos, y si no, haz una copia vacía de las tablas y los formularios y me la mandas.

Aquí estamos para aprender.

Respuesta

Yo creo que el fallo es de concepto:

Si vendes por packs, es de suponer que cada pack siempre lleve los mismos productos y en la misma cantidad, por lo que sólo sería necesario seleccionar el pack y el número de unidades de ese pack, y automáticamente te debería descontar las unidades de los productos.

Independientemente de eso, si como dices los datos de la consulta los pasas a otras tablas por medio de un botón, lo que has de hacer (la forma sencilla) es ir pasando los productos a esas tablas cada vez que elijas un pack. Es decir, siguiendo tu ejemplo: elijes el pack 1, pones las unidades de producto 1 y 2 y las pasas a tu tabla de "ventas", elijes pack 2, sus productos y cantidades y los pasas a "ventas", obviamente dentro de la misma venta.

Por último, hecha un vistazo a este ejemplo, en el que igual encuentras una forma de solucionar tu problema, pues explico distintas formas de trabajar con cuadros combinados: http://siliconproject.com.ar/neckkito/index.php/component/content/article/96-ejemplos-explicados/ejemplos-de-controles/279-cuadros-combinados 

Un saludo.


Efectivamente para mi eso sería lo ideal, poner el PACK de producto y  que el solo me calculara las cantidades que tengo disponibles de cada producto individual ,los quitara del inventario etc, porque lo que me interesa es saber cuantos productos individuales me quedan y no Packs, pero tal como esta montada la base de datos (Todo "gira" en torno a productos) lo he visto muy difícil para mis escasos conocimientos de acces.

Un saludo y gracias

Dime una cosa, ¿comprobaste qué en la tabla los detalles de los pedidos están correctos? Es decir, tu seleccionas un pack y luego los productos, y al cambiar el pack, los productos te "desaparecen" del subformulario, ¿pero de la tabla también desaparecen?

Lo que comentas es típico de trabajar con cuadros combinados dependientes de otros en un subformulario continuo (como no los uso en vista hoja de datos no puedo asegurar que pase lo mismo), pero si los datos se guardan en la tabla (el segundo cuadro combinado tiene su origen de control en un campo de la tabla) aunque no los veas, siguen estando ahí.

Si la BD ya la tienes en marcha, igual es mucho lío rehacerla de nuevo. En este caso, yo te propondría (de nuevo) que si esto te funciona:

"He realizado una consulta (Como criterio le pongo que me lo filtre por el cuadro combinado) y consigo que si le doy el valor PACK1 a un campo combinado, automáticamente me realiza una consulta de selección filtra y solo me deja elegir los productos que entran dentro de ese pack, es decir Producto 1 y Producto2, los cuales yo ya pongo la cantidad etc y me los retira del inventario,"

Vayas pasando los datos "parcialmente" al pedido para cada pack. Sólo tendrías que modificar ese procedimiento/macro que tengas.

Si no te importa rehacer la BD a fondo, yo no relacionaría las tablas Packs y Productos como te propone Icue, sino que lo haría por medio de una tercera tabla, suponiendo que un mismo producto puede formar parte de varios packs distintos.

Las tablas serían estas, con los campos mínimos:

TPacks: IDPack (Clave), Pack, ...

TProductos:IDProd(Clave), Producto, Unidades,...

TDetallePack: Pack (Relacionado con IDPack), Producto (relacionado con IDProd), Unidades (unidades de cada producto dentro del pack)

Luego, al seleccionar un pack y sus unidades en el detalle de pedidos, ya no te haría falta seleccionar los productos individualmente, pues en la tabla TDetallePack ya tienes los que lo integran (en varios registros, eso sí).

Para descontarlos de TProductos, harías una consulta de actualización restando las unidades del pack/s seleccionados multiplicado por las unidades del producto que va en cada pack.

Esa sería la idea en general.

Muchas gracias por la sugerencia. Si veo que probando otras opciones con 2 tablas no me funcionan realizaré esa que me sugieres porque este Base de datos es mas de consultas que de Tablas.

He comprobado que efectivamente aunque me desaparezca de la pantalla, si queda registrada en la tabla correspondiente la transacción.

Vayas pasando los datos "parcialmente" al pedido para cada pack. Sólo tendrías que modificar ese procedimiento/macro que tengas.

¿Como podría hacer la modificación y con que parámetros de ese procedimiento?

¿Cómo lo haces actualmente? Necesito saberlo para poder decirte qué has de modificar

Respuesta

Pensando en contribuir y para que puedas tener otro punto de vista, si quieres mira el Ejemplo que tengo en éste enlace y que justo hace referencia a la confección de Artículos a partir de Productos.

Como podrás apreciar está eco de forma que puedas confeccionar desde una Cesta de Navidad hasta Artículos Industriales.

Si declaras por Ejemplo Horas de Trabajo como un Producto más podrás incorporar Mano de Obra.

Mis saludos y Feliz año

Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas