En un Form, tomar valor de "Campo independiente" e insertarlo en Tabla NO relacionada con el Form

Te describo el contexto. Estoy desarrollando una BD para manejar el inventario de una empresa (soy nuevo en Access, solo con lo que he leído por cuenta propia en la web y un par de semestres de computación para ing electrónica en la universidad).

Entre otras, tengo una tabla para registrar el movimiento de productos llamada KARDEX (Va bien), otra para registrar los datos de las compras y otra para los datos de las ventas.

Ahora bien, he creado una tabla adicional que se llama CARGAR_DATOS, esto me permite que el usuario a través de un formulario dependiente de esta tabla, pueda cargar los datos de una factura de compra y modificarlos y volver a modificarlos, añadir o quitar productos de la factura de compra, sin que me altere la tabla COMPRAS o KARDEX. Una vez finaliza la carga y corrección de datos ejecuto consultas para enviar los datos a la tabla KARDEX y otra consulta para enviar los datos a la tabla COMPRAS (esto porque para efectos contables solo se toma el TOTAL de la factura y no interesa los productos que tenga). Al finalizar la carga de una compra ejecuto una consulta para dejar en blanco la tabla CARGAR DATOS.

La carga de la tabla KARDEX con sus cálculos va de maravilla. El inconveniente que tengo esta a la hora cargar la tabla COMPRAS.

Algunas facturas de compra vienen con descuentos de los proveedores y normalmente la suma de los totales por producto que ellos dan, resulta diferente de la suma de los datos impresos en la factura. ( Esto debe ser por los decimales que maneja internamente el sistema de inventario de los proveedores) .

La sumatoria que va a la factura COMPRAS la hago con una consulta en la que sumo los montos de los productos de la tabla CRGAR DATOSy pues por un par de unidades o céntimos me da diferente a la factura impresa.

Ahora bien. En el formulario de carga de datos he habilitado la edición del CAMPO INDEPENDIENTE en el que sumo el total de la factura (lo tengo a modo de información para el usuario). Y deseo tomar de allí el valor que voy a introducir en la tabla COMPRAS, sólo que al crear una consulta para tomar este valor no encuentro una tabla para relacionarla.

Esto es porque la tabla CARGAR DATOS puede tener 2 o mas registros y sólo quiero tomar los datos del total de la factura, la fecha y el numero de factura para cargarlos a la tabla COMPRAS.

En pocas palabras, necesito saber como puedo tomar el valor de un CAMPO INDEPENDIENTE que está dentro de un Formulario dependiente de la TABLA CARGAR DATOS. Para luego tomar este valor y llevarlo a la tabla COMPRAS.

De nuevo gracias por tu atención y disculpa lo extenso, solo me parecido oportuno mostrarte el contexto.

1 Respuesta

Respuesta
1

Por desgracia no se puede hacer de forma directa cuando los formularios están vinculados a tablas, la única solución es usar formularios independientes y realizar todo el proceso por medio de VBA y SQL.

Tienes que crear el código que emule el comportamiento de un formulario vinculado, creando un recordset por medio de SQL y cargando los datos desde este recordset.
Luego, por medio de un botón, haces que los datos se graben en la tabla usando SQL. Al ser tú quien controla los datos, puedes hacer que se escriba el valor que quieras.

No es imposible, es laborioso y lleva tiempo hacerlo que funcione de forma correcta, sobre todo cuando hay subformularios.

Cuando tengo que hacer algo similar, me suele llevar entre 1 y 2 semanas montarlo (a menos que sea algo muy sencillo, que puede ser de 1 semana o algo menos).

Siento no poder darte mejores noticias.

OK Excelente. Ya veo porque tengo tanto tiempo estancado en este tema. En realidad es lo único que me falta para colocar a funcionar el sistema de forma optima.

Podrías por favor darme alguna referencia para aprender a hacer lo que me dices. Entiendo lo que es pero no se como hacerlo. Alguna página o tutorial que me pueda ayudar?

Si lo quieres hacer tú mismo, lo mejor es que hicieras un curso de programación en VBA, o si quieres, con la ayuda de VBA que hay en Access puedes ir aprendiendo.

Te pongo los pasos que hago yo para hacer formularios como el tuyo:

Desde el formulario de selección de cliente, por medio de un botón, cargo el identificador de cliente en una variable. Abro el formulario de facturas y le paso el cliente, haciendo que por medio de un recordset cargue los datos de cliente en los cuadros de texto para visualizar la información.

Tengo una tabla auxiliar donde meteré las líneas de pedido, esa tabla la cargo desde la tabla general de lineas de pedido, correspondientes a ese cliente y factura, si hay datos se cargan, y si no, esa tabla auxiliar está vacía.

En el formulario de líneas de pedido voy añadiendo los diferentes productos, tomando los datos desde un combobox o listbox (depende de cómo quieran que sea), de forma automática me carga el precio por unidad de cada producto, y poner el número de unidades, me presenta el precio total de las unidades.

En la parte de abajo del formulario de líneas tengo un cuadro de texto donde presento el importe total de la factura.

En el formulario de facturas tengo un cuadro de texto para poner los descuentos que se quieran aplicar y otros 2 para el IVA (que se pone de forma automática pero se puede modificar) y para otros recargos.

El IVA (Impuesto sobre el Valor Añadido) es un impuesto que se aplica a todos los productos y servicios en España.

Cuando termino, pulso en un botón y entonces calculo el Id_Factura, traslado los datos de la factura (id_Cliente, Id_Factura, Descuento, Impuestos, Recargos) a la tabla Facturas; y los datos de Lineas pedido (Id_Factura, Id_Linea, Id_Producto, Cantidad) a la tabla de Lineas_Factura.
Cuando tengo que imprimir la factura, calculo los importes y aplico los descuentos, el IVA y los otros recargos a la suma de importes de los productos.

Siempre trabajo con formularios independientes de las tablas finales, y si necesito que estén vinculados a una tabla, uso tablas auxiliares y luego paso la información a las tablas finales si se han de guardar los cambios.

Como podrás suponer, me dedico profesionalmente a la programación con Access.

Ok muy bien. Muchas gracias por tu tiempo y la guía de pasos que me dejas. Desde ayer mismo estoy estudiando vba para access.

Por ahora aplicaré un truco que tengo:

Voy cargando el acumulado de totales en cada linea de pedido, al final tendré un acumulado de totales por cada linea de pedido. y en el ultimo registro el total general.

Al activar la edición de totales (cuando un descuento lo amerite) me devuelvo al ultimo registro y guardo allí la edición. Luego en la consulta que envía los datos para la tabla COMPRA le digo que tome el ultimo registro.

Es una solución muy forzada y voy a tener un montón de información (temporalmente porque al final de cada pedido limpio la tabla auxiliar CARGAR DATOS) innecesaria. Ademas de ser poco elegante :)

Con lo que me has dicho daré el siguiente paso en esto de programar. Lo había retrasado porque no me había hecho falta hasta ahora. Solo uso el vba para validaciones, ejecutar consultas y realizar cálculos.

Antes de seguir adelante con esto de aprender programación de base tengo otra consulta. ¿ME quedo en ACCESS o me voy a mysql, mariaDb o algún otro SGBD? Quiero que mis sistemas sean robustos y tengan buena pinta. He leído demasiadas opciones pero no se cual elegir.... ¿Cuál SGBD usas normalmente? Ademas de ACCESS. Por como veo que dominas el tema tu opinión es importante para mi.

Saludos.

Pdta: Soy de San Antonio del Táchira - Venezuela.

Yo siempre sigo unos pasos, sencillos, pero que desde que empecé me han servido para hacer las aplicaciones, y la verdad es que me ha funcionado siempre.

Antes de decidir qué SGBD utilizar y ponerme a crear tablas, consultas, formularios, cojo un papel y lápiz y empiezo a dibujar... Si, dibujar; escribo los datos que tengo, qué información quiero guardar, cual quiero mostrar, cómo tiene que funcionar (reglas de negocio)...

Luego miro qué información va a ser común, para poder plantear las relaciones y por consiguiente las tablas (entidades) y los campos (propiedades), así creo el modelo de datos Entidad-Relación.

Por ejemplo, en un sistema de facturación tengo la entidad Cliente, la entidad Factura, la entidad Producto, la entidad Pedido... y empiezo a crear las relaciones: 1 cliente tendrá por facturas, 1 factura tendrá por pedidos, 1 pedido tendrá por productos...

Después, como ya tengo pintados qué formularios voy a tener, empiezo a montar las tablas adicionales que pueda necesitar para el proceso de negocio. Muchas veces terminan sobrando unas y faltando otras, pero esto ya no es importante, las creo o borro según necesite.

Luego empiezo a montar los formularios de altas, bajas y modificaciones maestros, por ejemplo Clientes, Productos, Proveedores...

Después empiezo con los formularios de tratamiento y gestión, como los de facturación, control de stock, etc.

Creo los módulos y clases para el tratamiento de los datos, reglas de negocio, que son los que hacen el trabajo.

Termino con los informes y documentos de impresión y el código asociado.

Respecto al SGBD que uso, pues depende de cada cliente, algunos quieren que sea Access, otros MySQL, Oracle, SQL Server... a mi me da igual, y si no me especifican nada, depende del volumen de datos que vayan a utilizar, si es pequeño suelo dejar Access o MSDE, si es mediano, suelo usar Access, MySQL o MSDE, y si es grande, ya suelen pedirme ellos el que quieren. Pero siempre pregunto el que quieren (me he encontrado muchas veces que apps con pocos datos los quieren sobre Oracle, ya que luego ellos trabajarán con esos datos desde otra app.)

También en muchas ocasiones tengo acceso a varios sistemas, como Oracle, MySQL y Access, recogiendo información en unos sistemas y almacenando resultados en otros.

Por esto no recomiendo ninguno en particular.

Un cordial saludo, y mi enhorabuena por empezar a aprender VBA.

P.D. Yo vivo en un pueblo de la provincia de Toledo, en España.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas