Subformularios

Estimada Marciana:En la base de ejemplo "introducción de pedidos", si cada producto tuviera 3 precios distintos, en razón del tipo de Cliente(por ejem.Mayorista/minorista/comicionista), como podría lograr, que al seleccionar en una combo el tipo de cliente, se cargara en el subformulario detalles de pedidos, los precios correspondientes a los productos de ese tipo de cliente (por ejemplo se cargaran los productos con el precio 1).

1 respuesta

Respuesta
1
Esta es una solución posible, pero no la única.
Haz lo siguiente:
En el evento afterUpdate del combo asigna usando la función Dlookup los valores a los cuadros (que deberían ser independientes, con los valores correspondientes.
Por ejemplo: Precio.value = Dlookup("Precio","TAbla", "tipocliente=" & IdTipoCliente)
En el ejemplo estoy suponiendo que en la variable IdTipoCliente tienes el dato del cliente elegido (que es una propiedad del combo), Que la tabla "Tabla" tiene un campo que identifica el tipo de cliente y otro el precio correspondiente.
Tu ejemplo será más complejo por además tiene el código de producto.
Si quieres te puedo hacer una prueba y pasarte la expresión exacta. Para ello dime como son las tablas, los nombres y tipos de datos de los campos y te enviaré el Sub completo.
Otra solución, que tal vez sea más simple es la de hacer una consulta con las dos tablas la de pedidos y otra con los precios. Ambas tablas debería estar vinculadas por producto y tipo de cliente aunque si solo hay 3 clases de clientes puedes solucionarlo más simplemente. Te decía una vez que hacer la consulta, en ella deberás ver para cada pedido el precio según el tipo de cliente.
Bueno, consúltame si esta explicación no ha sido suficiente. Cordialmente. Marciana
Tablas:
CLIENTES:idcliente/nombre/apellidos/idTipoCliente
TIPOCLIENTE:IdTipoCliente/Tipo
PEDIDOS: IdPedido/IdCliente/IdEmpleado/FechaPedido
DetallesPedidos:IdDetallePedido/IdPedido/IdProducto/Cantidad/Precio
PRODUCTOS:IdProducto/Nomb.Producto/Precio A/Precio B/PrecioC
Según creo entender, ¿mis tablas deben estar mal hechas.Hay que agregar una tabla "precios"? ¿Agregar algún campo id a otra tabla?. Gracias (de un cordobés perdido em madrid)
Prepararé la solución de acuerdo a tus datos. Suerte. Marciana
Tengo la solución a medio camino.
1) Primero una observación
Si Tipo de cliente toma solamente 3 valores posibles entonces no hace falta crear una tabla TIPOCLIENTE. Una mejor solución (a mi criterio) es declarar el campo IdTipoCliente como de texto y en la propiedad Búsqueda asignar lo siguiente:
Mostrar el control: Campo combinado
Tipo de origen de la fila: Lista de valores
Origen de la fila:Mayorista;Minorista;Comisionista (aquí pondrás, separados por ; la lista de los 3 valores posibles)
La solución que indico funciona bien, la he probado.
2) He creado las tablas como me las indicado. Con la siguiente salvedad (no me lo habías informado) Todas las variables IdCliente, IdProducto, IdTipoCliente, IdProducto, IdDetalle e IdDetallePedido son del tipo entero largo.
3) He asignado la condición de clave a las siguientes: IdCliente, IdProducto, IdTipoCliente en la tabla TipoCliente, IdDetalle en la tabla Detalle.
4) He relacionado las tablas con integridad referencial.
3) He creado 3 consultas: PrecioA, PrecioB y PrecioC. Las consultas son de actualización y tienen cuatro tablas. Te explicaré una de las 3: PrecioA
4) La consulta PrecioA tiene 4 tablas: Pedidos, DetallePedidos, Cliente, Productos.
5) Agregué solamente 2 columnas: Precio de DetallePedido e IdTipoCliente de la tabla Clientes.
6) A la consulta la convertí en consulta de actualización.
7) A la columna IdTipoCliente le asigné en el renglón Criterios el valor 1 (supongo que es el que le corresponde a PrecioA)
8) En la columna Precio, en la fila Actualizar a: coloqué [Productos].[PrecioA]
9) Al ejecutar la consulta en la tabla DetallePedido quedan asignados los valores correspondientes.
10) Hay que hacer 3 consultas una para cada precio, cambiando lo que corresponda.
11) Hay que ejecutar las tres consultas para que se carguen los datos de la columna precio.
11) Esta no es una buena solución. Para llegar a una buena solución habría que cambiar el diseño de la base.
12) En el subformulario deberás agregar algo para que se ejecuten las tres consultas cada vez que agregue un registro lo que podrías poner en una macro.
No quiero complicarte más. Dime si has llegado hasta aquí y veamos después. Cordialmente. Marciana
Estimada Marciana:al margen de no saber como agradecerte la ayuda que me estas prestando (ya se me ocurrirá algo), te quiero informar que he llegado hasta el punto 11(donde me gustaría que me informaras de los cambios que hay que hacer en el diseño de la base a los fines de llegar a una "buen solución". El punto 12 no lo se realizar. Daniel.
Sra.Marciana:He terminado con el punto 12. Lo único que no estoy seguro es en que momento tiene que ejecutarse la macro:¿Al cargarse el subformulario? ¿Al salir? Gracias.(El pesado)
Me gustaría saber que has resuelto bien los anteriores.
El punto 12 es fácil. Creas una macro y haces que tenga 3 acciones para ejecutar las 3 consultas.
Luego pones un botón en el formulario (en cualquier lado) que ejecute la macro.
Primero resuelve esto y luego te explico cómo deberías haberlo diseñado. Suerte! Marciana
Estimada Marciana:Como te comento en un segundo mensaje enviado ayer, el punto 12 esta resuelto. Daniel
Voy a prepararte un comentario sobre como hubiera diseñado la base. REclámamelo en una semana si me he olvidado. Cordialmente. Marciana

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas