¿Pasar automáticamente de Presupuesto a Factura?

Tengo un formulario llamado Presupuesto con varios campos (IdPresupuesto (campo autonumérico), IdCliente, Fecha). Dentro del formulario también tengo un subformulario Presupuesto1 donde introduzco los productos, (IdProducto (autonumérico), Cantidad, Precio, Descripción, IdPresupuesto (este campo relacionado con el del Presupuesto)

Luego tengo un formulario Factura, con la misma forma (IdFactura (campo numérico calculado automaticamente), IdCliente, Fecha); dentro el subformulario Factura1, con los productos (IdProducto, cantidad, Precio, Descripción e IdFactura)

Lo que quiero es que al pulsar en el comando: Pasar_a_Fra me copie los datos al formulario Factura.

Empleando este código, que he visto en enta página, he conseguido que me copie la cabeza de la factura y la última linea de los detalles, pero normalmente tiene más de una línea.

Tampoco he conseguido que me calcule el IdFactura, (por ejemplo con un "Dmax + 1) para probar le introduzco siempre el IdFactura=100:

Public Sub Pasar_a_Fra_Click()

'metemos la factura

DoCmd. OpenForm "Factura",,,, acFormAdd

Forms![Factura]![IdCliente] = Me.IdCliente

Forms![Factura]![Fecha] = Me.Fecha

Forms![Factura]![IdFactura] = 100

'METEMOS LOS DETALLES

Dim rst As DAO.Recordset

Set rst = Me.Presupuesto1.Form.RecordsetClone

rst.Move First

Do Until rst.EOF

Forms![Factura]![Factura1].Form![cantidad] = rst("cantidad")

Forms![Factura]![Factura1].Form![Descripción] = rst("Descripción")

Forms![Factura]![Factura1].Form![Precio] = rst("Precio")

Forms![Factura]![Factura1].Form![IdFactura] = 100

rst.MoveNext

Loop

rst.Close

Set rst = Nothing

End Sub

¿Alguna idea de como hacerlo?

1 respuesta

Respuesta
1

Puedes seguir lo que explico en estas otras preguntas sobre el mismo tema:

Pasar datos de un subformulario presupuesto a otro subformulario factura. Access 2010

Copiar datos de un formulario a otro

Como puedo añadir un registro de otro subform de otro forumario

La idea subyacente es usar dos consultas de datos anexados: primero una para pasar los datos del presupuesto (de la tabla presupuesto a la de factura) y luego otra para pasar los detalles del presupuesto (de la tabla detalle presupuesto a detalle factura)

Un saludo.


¡Gracias!  Al final lo he conseguido hacer así, dejo el código por si le es de utilidad a alguien. Hay cuatro tablas. Factura, FacPro, Proforma y Propro.

Public Sub Pasar_a_Fra_Click()

'MENSAJE DE CONFIRMACION

Dim Resultado As Integer
Resultado = MsgBox("¿ESTÁ SEGURO DE QUE DESEA FACTURAR ESTA PROFORMA?", vbOKCancel, "CONFIRMACION")
If Resultado = 1 Then

'CALCULO IDFACTURA
Dim cadenasql As String
Dim RScadenasql As Recordset
Dim DB As Database
Dim valorsql As String
Dim numFactura As String
Set DB = CurrentDb
cadenasql = "SELECT Max(Factura.IdFactura) AS MáxDeIdFactura FROM Factura"
Set RScadenasql = DB.OpenRecordset(cadenasql)
valorsql = RScadenasql!MáxDeIdFactura
numFactura = valorsql + 1

'INSERTO FACTURA
Dim miSQL As String
DoCmd.SetWarnings False
miSQL = "INSERT INTO Factura (IdFactura, Fecha, IdCliente, IdFormadePago, Observaciones)SELECT " & numFactura & ", Proforma.Fecha, Proforma.IdCliente, Proforma.IdFormadePago, Proforma.Observaciones FROM Proforma WHERE Proforma.IdProforma=" & Me.IdProforma
DoCmd.RunSQL miSQL

'INSERTO PRODUCTO

Dim miSQL2 As String
miSQL2 = "INSERT INTO FacPro (Cantidad, Descripción, Precio, IdFactura)SELECT Propro.Cantidad, Propro.Descripción, Propro.Precio, " & numFactura & " FROM Propro WHERE Propro.IdProforma =" & Me.IdProforma
DoCmd.RunSQL miSQL2
End If

'CERRAR Y ABRIR FORMULARIOS

DoCmd.Close acForm, "Proforma"
DoCmd.Close acForm, "BuscarProforma"

DoCmd.OpenForm "Factura", acNormal
DoCmd.GoToRecord , "Factura", acGoTo, numFactura

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas