Añadir muchos registros a la vez en subformulario

A ver si me podéis ayudar que ya no se por donde tirar.
Necesito crear en un formulario un "registro (Fecha)" al cual le pueda asociar cientos de productos. Intento explicarme...

Tengo la tabla clientes en la cual tengo registros con diferentes datos de clientes... Nombre, día de entrega (Lunes,, martes, etc..), Producto, Cantidad, si esta de alta o baja, ruta, etc...
De esa tabla filtro por el día Lunes, y por alta si/no para sacar los clientes que están de alta el día Lunes

El problema es que esto lo tengo que asociar a una fecha de entrega diariamente.

Por ejemplo….

El 15-01-2024, tengo 40 clientes que estén de alta.

El 16-01-2024, tengo 38 clientes que estén de alta.

El 17-01-2024, tengo 42 clientes que estén de alta.

Y lo tengo que poder guardar diariamente para futuras consultas por día.
He conseguido casi todo salvo guardarlo diariamente para poder filtrar por la fecha de entrega.

Seguro que no me he explicado bien, pero bueno, me decís y os contesto.

Respuesta
1

Que es lo que se necesita guardar, ¿Qué se completo el servicio o el servicio y sus detalles?

La lista de los servicios a efectuar cada día, sale de los datos actuales, por lo que para guardar algo extra, se necesitara una tabla que puede ser sencilla (con tres campos y posiblemente uno sobre), un campo para la fecha, otro campo para el ID del cliente y un tercer campo (que puede ser innecesario) para indicar si se finalizo con éxito el servicio o algún problema lo impidió.

Dado que ya se dispone de los datos indispensables (fecha + lista de clientes) se puede generar una consulta de datos anexados y con ella crear el histórico de los clientes atendidos diariamente.

En el caso de utilizar el tercer campo:

Si solo se desea anotar si se efectuó el servicio, un campo booleano (Sí/No) es suficiente.

Si se precisa indicar un motivo entre varias posibilidades, optaría por un campo numérico para guardar el ID de una tabla auxiliar con las parejas de ID + Detalle.

Gracias por la respuesta.

Necesito guardar el servicio y sus detalles.
Después de releer la pregunta, Igual no me explique todo lo bien que debiera, intento hacerlo otra vez, perdón...

Tengo realmente 4 tablas... TablaClientes(Nombre, diaentrega, alta o baja, etc...), TablaCategoria, TablaTipo, TablaRuta
Con esas cuatro tablas hago un formulario en el que asigno la Categoría, el tipo y la ruta a cada cliente, Por ejemplo... Cliente1, Categoria2, Tipo 2, Ruta 3, guardando los datos en la Tablaclientes. Así cientos de registros.

De esa TablaCLientes genero una consulta y la filtro según necesidad con un formulario basado en ella... Por día, por ruta, por categoría, etc..
Bien, una vez filtrado el formulario/Consulta, supongamos que se me queda en 50 clientes para entregar el día 14-01-2023 Lunes. Ese resultado es el que necesito guardarlo con la fecha de ese día.
Al día siguiente habrá clientes que se den de baja o de alta, todos los días varia la cantidad de clientes que tienen entrega.

He probado con una consulta de anexados y no he sido capaz. O me duplica los registros o si doy un cliente de baja me lo borra de todos los días anteriores.

Voy a probar nuevamente con la consulta de datos anexados porque igual he hecho algo mal.
Espero haberme explicado ahora algo mejor y perdonar por no haberlo hecho antes.

Por cierto... soy un paquete con el access como se puede comprobar :)

Un saludo.

Tengo la impresión de que sigue faltando una tabla o (si la tabla existe) no se esta utilizando de forma correcta.
La tabla: el histórico de lo que se desea guardar.

Esta tabla (el histórico) no debería borrar o sobrescribir registros ni permitir repetir el mismo registro, para llevar el control de no permitir la duplicidad de datos, se ha de crear un índice.
El índice se crea seleccionado un subconjunto de campos, cuyos valores que pueden repetirse, pero registro a registro siempre ha de existir una diferencia.

Un ejemplo clásico de índice: cliente + ruta + fecha.

Un registro 'normal' tendrá esos datos y día a día se añaden mas, los diferencia:

.- La fecha para el mismo cliente
.- El cliente con respecto a la ruta (y así las combinaciones que sean necesarias).

El resto de los campos del registro pueden tener vales apropiados y libres (como pueden ser: el chofer de la ruta o el vehículo, el éxito del servicio o las notas).

En base al histórico se pueden obtener valiosos datos, sea la relación con cada cliente (incluso en periodos determinados), incidencias del conjunto de clientes por rutas y (si fuera el caso y se añadiese el dato) rutas y repartidores, en definitiva cualquier subconjunto de datos a valorar para lograr la excelencia.

Desconociendo las tablas (sus campos requeridos) y el método que se aplica en la consulta de datos anexados, únicamente puedo refrescar las condiciones indispensables para poder insertar un nuevo registro en una tabla:
.- Es indispensable que todos los/sus campos requeridos tengan valor
.-Se han de respetar y acatar las reglas impuestas por las relaciones

De esa forma se evitan los clásicos problemas de 'hijos' huérfanos que provocan inestabilidad en las bases de datos relacionales.

uuuff... muchas gracias por la respuesta pero, o mis conocimientos no llegan a tanto (que es muy probable) o no termino de enterarme.
Que desesperación

Un saludo y gracias nuevamente.

Si aun no has llegado a dominar el entorno Access, solo puedo recomendarte que utilices los métodos básicos de Access, esto es: consultas y macros.

Si te aplicas en copiar trozos de código (VBA) sin dominarlo, solo construirás paredes de papel y suerte si el clima no es húmedo.

Si necesitas guardar datos para posteriormente analizarlos (o salvaguardar momentos puntuales) que quede claro que en Access los datos solo se guardan en las tablas y si están bien diseñadas una tabla puede contener mas información de la que aparenta.

Si para añadir datos en una tabla se utiliza el generador de consultas, este ira proponiendo soluciones a los problemas o dando indicaciones de los problemas encontrados.
Por su parte las macros harán lo que se les encomiende, eso si, creando de forma previa un entorno de seguridad para proteger los datos.

Una consulta de datos anexados, no sobrescribirá los datos existentes sin dar antes mensajes de posibles problemas (es el usuario quien tiene la ultima palabra).

La consulta que puede sobrescribir datos es una consulta de actualización y estas no dejan rastros de los valores que han sobrescrito (no son adecuadas para crear históricos).

Si día a día se crea un listado de rutas -que puede ser igual o diferente al del día anterior- y del que se desea guardar algo (sean resultados parciales o de conjunto), lo adecuado es crear una tabla con ellos, tabla que se puede listar etc. y tras prestar los servicios (recepción de los resultados) se añaden a la tabla actualizándola, de ella se extraen los datos a conservar (los que se añaden al histórico).

El día comienza con el borrado de los datos de la tabla temporal que se utiliza para obtener la lista, tras ello se la rellena con los del día para obtener un nuevo listado.

Al finalizar los servicios (o la jornada o... ) se actualiza la tabla temporal añadiéndole los resultados y de ella se extraen los datos que se añadirán a los ya existentes en el histórico.

Tras ello comienza el nuevo ciclo:
Limpieza -->> nuevo contenido -->> actualización -->> Histórico

Si no es algo similar a esto lo que deseas, intenta aclarar lo que buscas para poder concluir en algo que al final sea util.

Por lo que veo, tengo que replantearme todo lo hecho hasta ahora.
Estaba a falta de solucionar esto nada más pero bueno, creo que con las indicaciones que me habéis dado puedo plantearme las cosas de otra manera. Voy a empezar de cero intentando organizar todo y veremos. En caso de duda os vuelvo a preguntar.

De verdad, muchas gracias por la ayuda.

Un saludo.

Hola otra vez...
Me vais a perdonar pero es que estoy totalmente estancado y "desesperado"...
Ni una consulta de anexados se hacer...
Os explico lo que necesito y si podéis ayudarme os lo agradezco...

Tengo:

Una tabla clientes con... Nombre Cliente y alta (si/no)
Una Tabla Totales con... Fecha Ruta
Partimos de cero, ni están relacionadas ni nada (de momento)
Lo que necesito es, crear un formulario en el que yo ponga una fecha ruta y me añada todos los clientes que están de alta en ese día para luego ese conjunto de datos guardarlo en otra Tabla Histórico, entiendo que mediante una Consulta Anexados. (Más adelante tendré que filtrar por ruta, categoría, etc... pero por ir aclarándome)
Hay que tener en cuenta que los clientes se van dando de alta o baja
La idea es poder consultar en un futuro que clientes estaban en ruta el día X
Siento ser tan pesado.

Un saludo y gracias.

Veamos cómo construir una aplicación partiendo de esos datos (ojo: es la visión del entorno que aprecio en base a lo expuesto)

Partimos de dos tablas, clientes y rutas (se presupone que solo se generan servicios, sea de transporte, de limpieza... no hay venta o fabricación)

A los clientes solo se les da de alta una vez (cuando se añaden a la tabla), después estarán activos o inactivos (un campo booleano: Sí/No)

Las rutas (T_Rutas) están en una tabla y pueden ser una o varias (en el mismo día se reparte por la mañana y la tarde)

Se crea una tabla mas (T_Servicios) que tendrá como mínimo tres campos, el ID del servicio + el ID del cliente + el ID de la ruta

T_Servicios se relaciona con T_Rutas y T_Clientes mediante sus ID y sus campos -por lo menos esos tres- son requeridos (obligatorios)

Servicios se rellena con los contratos de los clientes: un cliente puede tener varias rutas y una ruta puede tener varios clientes en una relación de todos con todos.

No hay límite de combinaciones en T_Servicios y puede añadirse un campo más si la ruta se repite en el mismo día (mañana, tarde, noche, festivos ...)

Para crear la lista diaria: una consulta basada en T_Servicios + T_Clientes, se condiciona a que el cliente este 'activo', con ella se rellena la ¿Lista diaria: T_Diario? Que es una tabla reutilizable, esto es: se vacía de datos, se rellena con la consulta (que se modificara de consulta de selección a consulta de datos anexados), T_Diario tendrá los adecuados para genera la lista y otros para el control de la actividad (si se completó, si se ...) datos que se conocerán al final del servicio y si se les asigna en diseño un valor predeterminado, solo habrá que modificar las incidencias .

Y aparece la tabla con los datos a guardar (T_Historico) que tendrá tantos campos como se necesiten y el primero debería ser la fecha, el resto: los datos a conservar teniendo en cuenta que parte de ellos pueden salir de la gestión de cobros y podrían llegar a ser redundantes (ejemplo: en base a los cobros se pueden extraer los servicios prestados)

Esto no es más que un simple bosquejo que con lo anterior permitiría una gestión básica (añadiría una tabla para incidencias como complemento a T_Servicios...) y puede generar datos para una contabilidad.

Para crear una consulta de datos anexados es sencillo: se crea una consulta de selección (con el generador grafico de consultas) y tras verificar que devuelve los datos que deseamos obtener, se cambia el tipo de consulta a 'consulta de datos anexados'.
El asistente preguntara por la tabla destino y añadirá una línea con sus campos proponiendo los que supone se relacionan (pueden tener el mismo nombre y tipo en ambas tablas), permite seleccionar en un desplegable el campo con el que relacionarse (darle contenido), tras ello se ejecuta y los datos que antes devolvía la consulta de selección, ahora aparecerán en la tabla destino.

2 respuestas más de otros expertos

Respuesta
1

Necesito guardar el servicio y sus detalles.
Después de releer la pregunta, Igual no me explique todo lo bien que debiera, intento hacerlo otra vez, perdón...

Tengo realmente 4 tablas... TablaClientes(Nombre, diaentrega, alta o baja, etc...), TablaCategoria, TablaTipo, TablaRuta
Con esas cuatro tablas hago un formulario en el que asigno la Categoría, el tipo y la ruta a cada cliente, Por ejemplo... Cliente1, Categoria2, Tipo 2, Ruta 3, guardando los datos en la Tablaclientes. Así cientos de registros.

De esa TablaCLientes genero una consulta y la filtro según necesidad con un formulario basado en ella... Por día, por ruta, por categoría, etc..
Bien, una vez filtrado el formulario/Consulta, supongamos que se me queda en 50 clientes para entregar el día 14-01-2023 Lunes. Ese resultado es el que necesito guardarlo con la fecha de ese día.
Al día siguiente habrá clientes que se den de baja o de alta, todos los días varia la cantidad de clientes que tienen entrega.

He probado con una consulta de anexados y no he sido capaz. O me duplica los registros o si doy un cliente de baja me lo borra de todos los días anteriores.

Voy a probar nuevamente con la consulta de datos anexados porque igual he hecho algo mal.
Espero haberme explicado ahora algo mejor y perdonar por no haberlo hecho antes.

Por cierto... soy un paquete con el access como se puede comprobar :)

Respuesta
1

He intentado tres veces ponerte una posible solución, pero esta mierda de página, en cuanto intento poner una línea de código no me deja. Si quieres, repito, si quieres, mándame un mensaje (sólo el mensaje) a [email protected] y te mando un ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias José José, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas