Código para copiar registros desde un formulario con subformulario a otro formulario con subformulario

Utilizo el siguiente código para pasar registros desde el formulario PEDIDOS DESDE OT al formulario Entrada_almacen, y ambos tienen un subformulario que también pretendo copiar. El problema viene cuando el subformulario origen tiene varios registros solo se copia el primero. ¿Qué me falta por favor?

Private Sub Comando143_Click()
DoCmd.OpenForm "Entrada_almacen"
DoCmd.GoToRecord , , acNewRec
Forms![Entrada_almacen]![ORDEN DE TRABAJO] = Forms![PEDIDOS DESDE OT]![PARTE GESTIÓN]
Forms![Entrada_almacen]![Subformularioentradasalmacen]![Codigo_producto] = Forms![PEDIDOS DESDE OT]![Subformulario SUBFORMULARIO MATERIALES]![CÓDIGO PRODUCTO]
Forms![Entrada_almacen]![Subformularioentradasalmacen]![Artículo] = Forms![PEDIDOS DESDE OT]![Subformulario SUBFORMULARIO MATERIALES]![MATERIAL]
Forms![Entrada_almacen]![Subformularioentradasalmacen]![ENTRADA] = Forms![PEDIDOS DESDE OT]![Subformulario SUBFORMULARIO MATERIALES]![CANTIDAD]
End Sub

1 respuesta

Respuesta
1

Porque en un subformulario aunque veas varios registros sólo tiene existencial real el registro activo, que por defecto es siempre el primero. Los demás son imágenes virtuales que sólo tendrán existencia real cuando se convierta en el registro activo.

Es mucho más sencillo insertarlo en la tabla Origen del formulario y en la tabla Origen del subformulario. Vamos a suponer que tienes un formulario Ventas y un subformulario DetalleVenta relacionados ambos por Idventa, y quieres pasar el registro del formulario y los del subformulario al formulario Compras y DetalleCompra. En el formulario Ventas puedes poner un botón, aunque no sea necesario y en sus propiedades-eventos-al hacer clic poner

Docmd. Runsql"insert into compras(Campoa, campob, campoc,...)values(Nombrecliente, Fechaventa, importe, etc)"

docmd.runsql"insert into detallecompra(campoe,campof,...) select producto,precio,... from detalleventa where idventa=" & me.idventa & ""

docmd.runsql"update detallecompra set idcompra=dlast(""idcompra"",""compras"",""Idcompras is not null"")"

Si el campo IdCompra(si lo hay)fuera numérico no autonumérico podrías ponerlo como

Docmd.runsql"insert into compras(Idcompra,campoa,...)values(idventa,nombrecliente,....)

docmd.runsql"insert into detallecompra(idcompra,campof, campog,...) select *from detalleventa where idventa=" & me.idventa & ""

Muchas gracias.

He adaptado el código a mi bbdd y al final me añade todos los registros de la tabla subformulario y solo quiero los que están vinculados al formulario, algo hago mal. Me explico.

Cuando hago un pedido de material y lo recibo quiero pasarlo directamente a entradas de almacén y utilizo estos formularios con su tablas;

Desde el formulario PEDIDOS y Subformulario SUBFORMULARIO MATERIALES

Pulso PASAR A ENTRADAS 

y me pasa todos los que contiene la tabla Subformulario SUBFORMULARIO MATERIALES, y solo quiero que pase los que se encuentran en ese momento en el subformulario. El código que he adaptado es el siguiente.

DoCmd.RunSQL "insert into Entrada_almacen([Orden de trabajo], [Recepcionado por])values([PARTE GESTIÓN], OPERARIO)"

DoCmd.RunSQL "insert into Subformularioentradasalmacen(Codigo_producto,Artículo,Entrada) select CÓDIGO_PRODUCTO,MATERIAL,CANTIDAD from [Subformulario SUBFORMULARIO MATERIALES] where [Nº PARTE]=" & Me.[PARTE] & ""

DoCmd.RunSQL "update Subformularioentradasalmacen set EA=dlast(""EA"",""Entrada_almacen"",""EA"")".

Si quieres te envío la bbdd sin datos.

Efectivamente, haz una copia de la base, con dos o tres registros inventados y me la mandas a [email protected]

Acuérdate de poner en el asunto del mensaje tu alias Antonio María, ya que si no sé quien me escribe ni los abro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas