ACCESS. Agregar un registro de Producto a la tabla factura detalle.

Tengo un formulario Factura y otro FacturaDetalle. Quiero que en el segundo (facturaDetalle) que al no saber el código IDproducto como suele pasar. Con un botón en el mismo registro me active un cuadro dialogo; por ejemplo "Buscar Producto" y que este buscador al buscar y seleccionar el producto me lo lleve al registro de ID producto del formulario FacturaDetalle.
Se como hacer el CuadroDialogo con la búsqueda de producto. Pero no logro hacer que al seleccionarlo lo lleve a facturadetalle en el campo idproducto. Tampoco sé como por ejemplo en el cuadro de Dialogo de Buscar Producto. Pueda filtrar no solo por ID Producto sino por Nombre o Código. Y que cuando seleccione por ejemplo el id filitre tanto nombre como código respectivo, o si elijo por codigo; filtre tanto el id como el nombre respectivo (Seleccionado):

2 Respuestas

Respuesta
2

José: Hace tiempo respondí una pregunta con poco acierto, pero en esa misma Icue (un saludo) dio una respuesta que creo se ajusta a lo que necesitas.

https://www.todoexpertos.com/preguntas/8wh5ud6y7tiukch8/crear-una-nueva-linea-en-un-subformulario-desde-otro-formulario?selectedanswerid=8wnoy9cob35amnjc&nid=9ou9rtugggoq9t6fgstplg4qh3w65f4ta4upvuusa8kpxrkm9ojptumdffw65&utm_source=todoexpertos&utm_medium= 

Un saludo >> Jacinto

Respuesta
2

Otra forma, más directa (sin tanta sql para insertar y actualizar) sería hacerlo directamente por código VBA.

Sería algo así:

En el evento que elijas de tu formulario diálogo (clic de un botón, al hacer doble clic sobre el id o nombre del producto...) generas este código:

Forms!Factura.DetalleFactura!Form.IdProducto=Me.IdProducto

Es decir, que en el formulario Factura, subformulario DetalleFactura, control IdProducto, te ponga el idProducto seleccionado en el formulario activo (el formulario diálogo).

Pasar dato formulario busqueda a otro formulario

Hola amigo Sveinbjorn El Rojo este codigo me parece  maravilloso si funcionara, pero m

e sale un error. te lo adjunto al presente

El código no te funciona (si lo has puesto tal cual en mi respuesta) porque probablemente no haya acertado con los nombres de tus diferentes controles y objetos (por eso decía que sería "algo así"). Te paso un enlace con la sintaxis de formularios/subformularios para que la adecues a los nombres que tú manejes:

http://www.llodax.com/Tutoriales/SintaxisSubForms.htm

Sveinbjorn El Rojo estimado, este código me funcionó perfectamente. Sin embargo si quiere ahora accionar el formulario dialogo desde desde otro formulario distinto a detalle factura, como por ejemplo DetallePedido,¿tendría que hacer otro formulario igual? ¿O hay posibilidad de que este mismo formulario me sirva para pedidos, cotización y factura? ¿

Puedes usar un único formulario "Buscar Producto", para que te funcione con más de un formulario de destino (DetalleFactura, Detalle Pedido), tienes que saber a qué formulario le quieres pasar los datos. Y aquí tienes varias opciones:

1º/ Si sabes seguro que solo vas a tener un formulario de destino abierto (es decir, que no vas a tener abiertos al mismo tiempo DetalleFactura y DetallePedido, aunque sean como subformularios), puedes comprobar si están o no abiertos y actuar en consecuencia:

    Dim Frm As AccessObject
    For Each Frm In CurrentProject.AllForms
        Select Case  Frm.Name 
            Case "DetallePedido"
                If Frm.IsLoaded = True Then
                     Forms!Pedidos.DetallePedido!Form.IdProducto=Me.IdProducto
                End If
            Case "DetalleFacturas"
                If Frm.IsLoaded = True Then
                     Forms!Facturas.DetalleFactura!Form.IdProducto=Me.IdProducto
                End If
        End Select
    Next Frm

2º/ Otra forma sería aprovechar el argumento OpenArgs al abrir el formulario diálogo y ahí indicar a qué formulario quieres pasar los datos:

DoCmd.OpenForm "BuscarProducto", , , , , acDialog, NombreFormularioDestino 

Lo que está en negrita tendrás que cambiarlo por el nombre de tu formulario de destino en cada caso (cuando ejecutes el código desde Facturas pondrás DetalleFactura, cuando lo ejecutes desde Pedidos, pondrás DetallePedido...)

Luego, en el formulario "DetallePedido", pones la condición:

    Select Case  Me.OpenArgs
       Case "DetallePedido" 
          Forms!Pedidos.DetallePedido!Form.IdProducto=Me.IdProducto
       Case  "DetalleFacturas"
          Forms!Facturas.DetalleFactura!Form.IdProducto=Me.IdProducto
       End Select
    Next Frm

Lógicamente tendrás que adaptar los códigos de ejemplo a los nombres que tú tengas.

Gracias, en el caso de la primera opcion; ¿En qué elemento o evento del formulario coloco ese código?

En donde tenías el de mi primera respuesta, has de cambiarlo por este nuevo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas