Access. Como generar un nº x de etiquetas según el valor de un campo

Quisiera que un informe me imprima automáticamente una cantidad de etiquetas dependiendo del valor de un campo, y que además me refleje en otro campo un valor calculado

Pongo un ejemplo:

Tengo un formulario que viene de una consulta. En este, entre otros, tengo un campo "pedido", otro "cantidad por caja", otro "nº de cajas"...

Me hacen un pedido de 10.000 piezas, y estas van en cajas de 3.000 unidades. Necesito que genere 4 etiquetas (las 3 primeras que indique que son de 3.000 unidades y la cuarta de 1000).

Lo he intentado muchas veces con macros, pero nada

He buscado información, y tampoco

Y además no se escribir código.

1 respuesta

Respuesta
1

Vamos a ver si me explico. Si tengo una tabla Productos con Producto y Cantidad por caja

También tengo una tabla Pedidos con la que hago un formulario tal que

Y por último creo una tabla auxiliar AuxProductos de la forma

En el formulario Pedidos, cuando elijo el producto, en Cantidad por caja te pone su valor.

En el momento que pongo la cantidad pedida

Me pone el número de cajas completas y "lo que sobra". La tabla Aux Productos me queda

Y por último, el informe

El código del formulario es

Private Sub CantidadPedida_AfterUpdate()
If CantidadPedida / CantidadPorCaja > Int(CantidadPedida / CantidadPorCaja) Then
NCajas = Int(CantidadPedida / CantidadPorCaja)
Remanente = ((CantidadPedida / CantidadPorCaja) - Int(CantidadPedida / CantidadPorCaja)) * CantidadPorCaja
Dim i As Byte
For i = 1 To NCajas
DoCmd. RunSQL "insert into auxproductos(producto, cantidadpedida, cantidadporcaja, numerocaja) values(producto, cantidadpedida, cantidadporcaja," & i & ")"
Next
DoCmd. RunSQL "insert into auxproductos(producto, cantidadpedida, cantidadporcaja, numerocaja)values(producto, cantidadpedida, remanente, ncajas+1)"
Else
For i = 1 To NCajas
DoCmd. RunSQL "insert into auxproductos(producto, cantidadpedida, cantidadporcaja, numerocaja) values(producto, cantidadpedida, cantidadporcaja,"" & i & "")"
Next
End If
End Sub
Private Sub Producto_AfterUpdate()
CantidadPorCaja = DLookup("cantidadporcaja", "productos", "producto='" & Me.Producto & "'")
CantidadPedida.SetFocus
End Sub

Entre otras cosas comprueba si hay remanente o no y hace una cosa u otra en función de eso

Para completarlo yo le pondría un botón para que me imprimiera el informe y después borrar la tabla Aux Productos

Muchas gracias por tu respuesta
Me he puesto a ello un par de dias pero creo que me pierdo en lo más sencillo
Como información, te diré que en mi base, las casillas "NCajas", "Cantidad pedida", "cantidad por caja", "producto" están en la misma tabla (que llamo "Ficha pieza"), y que el hecho de que mi formulario venga de una consulta es porque tengo una casilla donde escribo el "ID Cliente" y el "nombre de cliente lo extrae de la tabla "clientes", y el "IdMaterial" para extraer la "denominación de material" de la tabla "materiales" (no se si será un inconveniente para el código que me has mandado).

Mis dudas son:
1.- El código del formulario donde tengo que ponerlo? No tengo ni idea

2.- No se escribir código, pero al leerlo me parece entender que calcula si el resultado de la división de "cantidad pedido"/"cantidad por caja" es superior a la "cantidad por caja", y entonces anota en "NCajas" un valor. El comando Int no se que es (puede ser que sea un valor absoluto
o algo parecido?)
Entonces, en "Remanente" anota el resto (que correspondería a cajas "incompleta")

El resto del código es el que crea la tabla "Auxproductos" con los campos que ya tenemos y le añade el campo "NumeroCajas" ?

Entiendo que una vez coloque el código en el formulario, tendré que sustituir el nombre de tablas, formulario y campos por los de mi base


Te doy de nuevo las gracias y quedo a la espera de tu nueva respuesta
Saludos

Vamos a hacer una cosa, haz una copia de la base y en la(s) tabla(s) que intervengan ponle 3 o 4 registros inventados y me la mandas a [email protected] y si esta maldita pandemia nos lo permite, la miro y te la mando.

Muchas gracias por tu ayuda, tus modificaciones han sido como un paso de gigante.

Tomo nota de todos tus consejos para aplicarlos según vaya haciendo ampliaciones en la base.

Tengo unas preguntas:

1.- Cuando pulso "EtiquetasPedido" o "EtiquetasStock", para cada registro que se pasa a la tabla auxiliar aparece una ventana emergente "Va a anexar 1 fila(s)" y me da la opción de anexar o no esa fila. Esto me lo hace tantas veces como filas anexa....si voy a generar 65 etiquetas, me lo indica 65 veces antes de abrir el informe con todas las etiquetas.
Supongamos que imprimo estas etiquetas.....Entonces pulso el botón "EtiquetasStock" y me pasa todas las filas de un tirón y sin advertencia.

He repetido el proceso a la inversa pulsando primero las de stock y me sale la advertencia por cada fila, y acto seguido pulso las de pedido y me pasa todas las filas a la vez sin advertencia

Habría manera que anexara todas las filas de una vez sin advertencia? O con una sola advertencia? Lo comento porque en ocasiones tengo pedidos en los que necesito hasta unas 200 etiquetas

2.- Si quisiera modificar los campos que aparecen en las etiquetas, imagino que los tengo que ir añadiendo en el código, encerrados entre corchetes aquellos que tienen un espacio entre palabras.

3.- Para hacer mi propio diseño de etiqueta, primero lo hago, elimino el que me has hecho tu y después lo nombro con el nombre que le pusiste...no?

4.- En mis etiquetas, las tenía numeradas como 1 de 5, 2 de 5.... 5 de 5.... Como puede hacer esto?


Gracias de nuevo por tu ayuda

Es cierto. Verás yo tengo puesto en todo Access que no me avise de las consultas de acción. Eso se hace pulsando Archivo-Opciones-Configuración de cliente y desmarcando la casilla Confirmar consultas de acción. Pero creo que en tu caso, es mejor que justo debajo de Private Sub añadas una línea

Docmd.setwarnings false

Me parece que sí te lo puse en el de etiquetas Stock

2º ¿Te refieres al diseño del informe?

3º Si me pones una imagen de como quieres las etiquetas, te lo modifico yo y te lo mando

4º Ahora mismo no me acuerdo, pero creo que mantuve los nombres de tus tablas.

5º lo de 1 de 5 te lo pongo y te lo mando. Puse lo de currentrecord porque no sabía como querías las etiquetas.

¡Gracias! 

Como ya te he dicho por correo, todas tus aportaciones me han sido totalmente útiles

Muchísimas gracias por tu ayuda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas