Como convertir pedidos a Factura con un botón ACCESS

Quisiera me ayudaran con algo que estoy seguro sabrán como:

Sucede que tengo un Formulario Pedido relacionado con Subformulario pedidoDetalle, a su vez, tengo el formulario Factura con su Subformulario FacturaDetalle, quisiera que con un botón en el Formulario de Pedidos pudiéramos llamarlo: "Facturar", me copiara todos los datos del formulario y subformulario de Pedidos y los pegarta en el Formulario y Subformulario de Factura.

Opcional: A demás antes de ejecutar dicho código me saliera un mensaje como "Esta a punto de facturar este pedido, ¿Desea continuar?" Al aceptar copie los dato y al cancelar simplemente no haga nada. Luego de copiar salga un mensaje que diga : "Se ha creeado la factura Nº X".

He probado con esto:

SQL = "INSERT INTO Facturas(numero_factura,idcliente) VALUES('" & NUMERO_pedido & "','" & IdCLIENTE & "')"

DoCmd. RunSQL SQL

El problema que tengo con este código que conseguí en el foro es que:
Uno: solo copia los datos del Formulario

Dos: Tendría que poner el mismo botón para el subformulario

Tres: No copia todos las líneas de PedidoDetalle, solo la primera.

Me gustaría es que con un solo Botón en el formulario Pedido pueda copiar todos los campos y pegarlos en factura. (Como una nueva factura), etc.

Es importante porque este código lo usaré para pasar de cotizaciones a pedidos, de pedidos a factura, de cobros o pagos a movimientos de banco, etc.

2 respuestas

Respuesta
2

Veo cosas "incorrectas" en lo que intentas hacer:

1º/ Con esa SQL solo copias datos del formulario principal, en el que tienes el botón. Para copiar los datos del subformulario, tendrías que añadir otra SQL al código del botón (no te hace falta poner otro botón). Esto por lo que se refiere a los problemas uno y dos.

2º/ Con el problema tres, imagino que has probado con una SQL similar a esa (porque con la que pones en el enunciado de tu pregunta nunca te copiará detalles de pedidos). Tienes que usar una SQL de tipo INSERT INTO... SELECT, para que te inserte todo el conjunto de registros de la tabla detalle del pedido asociados al pedido que quieres facturar.

3º/ No veo sentido a que pases como numero de factura el número de pedido.

Por ejemplo, y muy simplificado, sería algo así (tendrás que adaptarlo a tu BD):

Private Sub cmdFacturar_Click()
Dim miSQL as String
If Msgbox("Esta a punto de facturar este pedido, ¿Desea continuar?",vbYesNo,"CONFIRMAR")=vbNo Then Exit Sub
miSQL = "INSERT INTO Facturas(numero_factura,idcliente) VALUES('" & NUMERO_pedido & "','" & IdCLIENTE & "')"
DoCmd. RunSQL miSQL
miSQL="INSERT INTO DetalleFacturas(campo1,campo2, ...campoX) SELECT campo1,campo2...campoY FROM DetallePedidos WHERE Pedido=" & NUMERO_pedido
DoCmd. RunSQL miSQL
MsgBox ""Se ha creado la factura Nº " & NUMERO_pedido
End Sub

Precisiones al código:

1º/ en la segunda SQL tendrás que incluir el campo que vincula las tablas facturas y detallefacturas, y darle el valor del último registro de facturas, para que te queden correctamente vinculadas cada factura con su detalle.

2º/ en el mensaje final(y en la primera SQL) he mantenido tu criterio de poner como número de factura el número de pedido). Si esto fuera así, puedes usar la función DLookUp() (o DMax o DLast) para obtener el número de factura de la tabla factura y mostrarlo, o si lo calculas previamente en el código (antes de la primera SQL), usar ese valor.

También comentarte que este tema se trató ya varias veces en este mismo foro, por ejemplo:

¿Pasar automáticamente de Presupuesto a Factura?

Access: Formulario para facturar albaranes

Un saludo.


Estimado Sveinbjorn El Rojo, en efecto creo que me expliqué mal, no quiero colocarl el numero de pedido en factura. Eso seria incongruente. Al colocar los datos del pedido en la factura. Esta ultima debe crear o sumar al ultimo registro de factura +1. En el formulario de factura la tengo, ahora; no sabría como insertarla e este código, Te soy sincero no manejo nada de programación. Me apoyo en las herramientas de access y con la ayuda de personas como tú.

Aguardo por tu siempre apoyo.

Primeramente disculpa por tardar tanto en responderte, pero ayer estuve bastante liado.

Te he preparado un ejemplo rápido (aprovechando uno que ya tenía de otro usuario) y lo he adaptado un poco a lo que tu tienes (aunque maneja presupuesto y facturas, en esencia es lo mismo que pedidos y facturas): http://www.filebig.net/files/Gn7jpRsdKa

El código lo tienes comentado linea a linea para que te sea fácil de seguir. Si mal no recuerdo, está basado en esta pregunta (que ya te indiqué antes) Copiar datos de un formulario a otro. En ella tienes explicado el desarrollo.

Muchas Gracias, por todo el apoyo. estuve asuente. aun pongo en corrida lo que enviaste. pero seguro que funciona, me he complicado con otras cosas del mismo sistema. 

Respuesta
1

Hay varias formas una es clonando el formulario algo como:

Desde el Evento AlHacerClic() del botón formulario principal

Dim miRS  AS Recordset

   Set miRS=Me.nombreSubformulario.Form.RecordSet.Clone

 DO miRS.EOF()

      SQL = "INSERT INTO Facturas(numero_factura,idcliente) VALUES('" & NUMERO_pedido & "','"        &      IdCLIENTE & "')"

DoCmd. RunSQL SQL

    miRS. MoveNext

Loop

Esta es una idea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas