Operaciones con varios registros de un subformulario

Tengo un formulario llamado "albaran", que contiene un subformulario llamado "lineas_albaran". Hasta hace poco, cuando se registraba la línea del albarán en el subformulario y se introducían las unidades del artículo, entonces con el código introducido en "después de actualizar" restaba la cantidad de ese artículo del almacén. Ahora, el procedimiento es diferente, por razones de producción no puede restar del almacén cuando introduzco los metros, sinó que tiene que hacerlo cuando yo introduzca una fecha en un campo del formulario.

Si el subformulario solo tiene una línea introducida, el código funciona perfectamente, pero cuando hay más de una línea, entonces solo me resta del almacén la primera línea y no las siguientes.

Qué puedo hacer para que introduciendo una fecha en un campo del formulario, el código que contiene ese campo tenga en cuenta todas las líneas que hay introducidas en ese subformulario, ¿y no solo la primera?

He probado con el Loop y do while pero no lo sé programar correctamente.

Respuesta
1

Sin saber la estructura del formulario y del subformulario es difícil dar una opinión, pero supongamos que el formulario y el subformulario están relacionados por un campo, por ejemplo, IdVenta. En el evento Después de actualizar del cuadro de texto donde escribes la fecha, y al que por comodidad llamaremos Fecha puedes poner algo así como

docmd.runsql"Update albaran set metros=loquesea where idventa=" & me.idventa & ""

Donde digo loquesea es la operación de cálculo que quieras hacer. No sé, por ejemplo

Docmd.runsql"update albaran set metros=entradas-salidas where...

Hola,

Gracias por la aportación.

Correcto, ambos formularios estan relacionados por un campo llamado "Codi_OTP". Mejor le detallo lo que tengo escrito en código.

Explicación de lo escrito en código:

 - La parte "Dbb.Execute "INSERT INTO MAGATZEM_sor" lo que hace es enviar a una tabla los datos del subformulario, igual que con la "INSERT INTO MAGATZEM_ART".

 - El formulario se llama "FOR_OTP" y el subformulario "SUBFOR_LINIES_OTP"

Private Sub data_otp_AfterUpdate()
Me.Recalc
Dim Dbb As Database
Set Dbb = CurrentDb
Dbb.Execute "INSERT INTO MAGATZEM_sor (CODI_ARTICLE,METRES,CODI_COLOR,CODI_PRESENTACIO) VALUES ('" & Me.SUBFOR_LINIES_OTP!codi_article.Column(2) & "','" & Me.SUBFOR_LINIES_OTP!metres_que_volen & "','" & Me.SUBFOR_LINIES_OTP!color_inicial & "','" & Me.SUBFOR_LINIES_OTP!codi_presentacio & "')"
Dbb.Execute "INSERT INTO MAGATZEM_ART (CODI_ARTICLE,METRES,CODI_COLOR,CODI_PRESENTACIO_ART) VALUES ('" & Me.SUBFOR_LINIES_OTP!codi_article.Column(2) & "','" & 0 & "','" & Me.SUBFOR_LINIES_OTP!color_inicial & "','" & Me.SUBFOR_LINIES_OTP!codi_presentacio & "')"
End Sub

El código anterior se encuentra en el formulario "FOR_OTP" en el campo "fecha" en después de actualitzar, y debería hacer el INSERT INTO de cada una de las líneas del subformulario, no solo de la primera, teniendo en cuenta que en el campo "metros" del subformulario ya no se ejecuta ningún código, lo comento por la parte que ha escrito de "...set metros=loquesea where idventa..."

Muchas gracias de nuevo. Saludos.

Joer, mira que os gusta poner nombres complicados. Hay cosas que nunca he entendido, me refiero a lo Dim bb as database y lo de set dbb= currentdb. Si ya estás en una base de datos y ¿para qué decirle que la base en la que estas es la base actual? Es como si voy a tu casa, me abres la puerta y me dices Hola estoy en casa, ya lo sé, te estoy viendo.

Mira tengo una tabla llamada Una, por comodidad le he puesto los campos A, B, C, D y otra tabla llamada Otra y también por comodidad los mismos campos

.

Si tengo un formulario, más o menos como

Cuando escribo una fecha y pulso enter, como en la imagen

Me pasa a las tablas

En el evento después de actualizar del cuadro de texto fecha le he puesto

DoCmd.SetWarnings False
DoCmd.RunSQL "insert into una(a,b,c,d) select producto,precio,cantidad,total from detalleventa where idventa=" & Me.IdVenta & ""
DoCmd.RunSQL "insert into otra(a,b,c,d) select producto,precio,cantidad,total from detalleventa where idventa=" & Me.IdVenta & ""

La tabla Ventas y detalleVenta están relacionadas por Idventa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas