Rebajar Stock al pasar de presupuesto a factura

Quería pedir de su ayuda para saber como respecto a un problema que no me había dado cuenta. Hace un tiempo me ayudaron a crear un código para pasar todos los datos de un formulario presupuesto con su subformulario a el formulario factura de venta con su subformulario, pero como en el presupuesto no es necesario que se rebajen los artículos sino que solamente indica cuantos artículos de cada producto presupuestados hay, al momento de generar la factura me gustaría que se pudiera realizar el rebaje del stock de forma automática. Este seria el código que tengo, ¿qué tendría que agregarle para que al momento de pasar a factura me realice el rebaje de los artículos cargados y me los actualice en la tabla artículos?

Private Sub BotonCrearBeFv_Click()
Dim miSQL As String
Dim numBeFv As Long
numBeFv = Val(DLast("Numero", "Cabecera Facturas de Venta")) + 1
If Me.Facturado = True Then
MsgBox "EL PRESUPUESTO YA TIENE BOLETA O FACTURA CREADA", vbInformation, "ATENCION"
Exit Sub
End If
Beep
If MsgBox("ESTAS A PUNTO DE CREAR UNA BOLETA O FACTURA DE VENTA ¿DESEAS CONTINUAR?", vbYesNo + vbQuestion, "ATENCION") = vbNo Then Exit Sub
miSQL = "INSERT INTO [Cabecera Facturas de Venta](Numero,Fecha,Mes,Matricula,FechaFabricacion,Marcavehiculo,ModeloVehiculo,Chasis,Kilometros,Cliente,[Razon Social],Rut,Domicilio,Poblacion,Provincia,Telefono,[Fecha Entrada],Observaciones,TotalV,Costo,Ganancia) SELECT " & numBeFv & " AS OrTr,Date(),Date(),Matricula,FechaFabricacion,Marcavehiculo,ModeloVehiculo,Chasis,Kilometros,Cliente,[Razon Social],Rut,Domicilio,Poblacion,Provincia,Telefono,Date(),Observaciones,TotalV,Costo,Ganancia FROM [Cabecera Presupuestos de Venta] WHERE Numero=" & Me.Numero & ""
CurrentDb.Execute miSQL, dbFailOnError
miSQL = "INSERT INTO [Lineas Facturas de Venta](Numero,Linea,Articulo,TipoDeArticulo,Descripcion,Stock,Coste,Cantidad,Precio,Descuento,SubTotal,IVA,IvaPrecio,TotalV) SELECT " & numBeFv & " AS OrTr,Linea,Articulo,[Tipo Articulo],Descripcion,Stock,Coste,Cantidad,Precio,Descuento,SubTotal,IVA,IvaPrecio,TotalV FROM [Lineas Presupuestos de Venta] WHERE Numero=" & Me.Numero & ""
CurrentDb.Execute miSQL, dbFailOnError
Me.Facturado = True
DoCmd.OpenForm "Cabecera Facturas de Venta", , , "Numero=" & numBeFv & ""
End Sub

2 Respuestas

Respuesta
1

Habría que saber como trabajas con el formulario Factura, ya que puedes hacerlo de mil formas. Para el ejemplo, voy a usar un formulario Ventas. Si tengo una tabla con productos y sus existencias

Y tengo un formulario Ventas, que en tu caso sería Facturas, con un subformulario DetalleVenta. Puedes ver que el cursor aún está en la cantidad que vendo

Cuando pulso Enter( te dejo un cuadro de texto Después para que veas la cantidad que queda después de vender)

En Después me aparecen las nuevas y la tabla Productos me ha quedado como

De Té ya sólo quedan 95

En este caso, el código del evento Después de actualizar del cuadro de texto Cantidad es

Private Sub Cantidad_AfterUpdate()
DoCmd.SetWarnings False
Subtotal = Precio * Cantidad
Despues = Antes - Cantidad
DoCmd.RunSQL "update productos set existencias=Despues where producto='" & Me.Producto & "'"
DoCmd.RunCommand acCmdSaveRecord
End Sub

por eso te decía que sería conveniente saber como trabajas con el formulario Facturas.

Pese a lo que te diga alguien que mejor debería estar callado, claro que puedes. Si tengo una tabla Productos, donde puedes ver las existencias de los tres primeros productos

Y tengo un formulario Presupuesto

Como no sé si en la tabla Factura tienes un campo NumFactura etc, lo obvio. Si pulso el botón me deja la tabla Factura como

La tabla DetalleFactura

Y a su vez, las existencias de esos productos en la tabla Productos

Si quieres el ejemplo, mándame un mensaje(sólo el mensaje) a [email protected]

Respuesta
1

Personalmente creo que no se puede pasar de a uno, si tengo los artículos en una tabla de presupuesto a factura, SI las cantidades no cambian se debe llenar la tabla factura (para mi sería una tabla temporal) desde la tabla presupuesto y recorrer la tabla temporal y descontar las cantidades de la tabla artículos. Piense como su aplicación fuera multiusuario

Para esto puede clonar el formulario recorrerlo haciendo un UPDATE() por cada registro de la tabla de los artículos.

Si quiere envíeme su base de datos a [email protected] con datos ficticios, favor en el asunto hacer referencia a la consulta.

Sino sería bueno que subiera las tablas y así le doy una respuesta sin tantas imágenes que no tienen que ver con su aplicación.

Oka, gracias. 

Con el permiso de los estúpidos que responden incoherencias le doy respuesta a su pregunta, debe anexar este procedimiento en el botón "PAGAR FACTURA O BOLETA VENDIDA"

Sub descontar()
  On Error Resume Next
  Dim miRS As Recordset
  Dim lnNumero As Long
  Dim lnCantidad As Long
  Dim strSQL As String
  Dim strRef As String
  DoCmd.SetWarnings (False)
  Set miRS = Me.Lineas_Facturas_de_Venta.Form.RecordsetClone
  Do Until miRS.EOF
    strRef = Trim(miRS!Articulo)
    lnNumero = Nz(DLookup("[Numero]", "Articulos", "Referencia='" & Trim(miRS!Articulo) & "'"), 0)
    If lnNumero <> 0 Then
     strSQL = "UPDATE Articulos SET Stock=Stock-" & miRS!cantidad & " WHERE Numero=" & lnNumero
     CurrentDb.Execute strSQL
    End If
    miRS.MoveNext
  Loop
  Set miRS = Nothing
End Sub

No obstante, le envíe a su correo la base de datos edita. Hay muchas muchas incoherencias en su base de datos, por ejemplo, encontré Referencias en la factura si Numero en la tabla Articulos.

Gracias por su ayuda. Agregue un botón adicional con el nombre "Descontar" y coloque el código que menciona, pero da la sensación que no hace nada al presionarlo. Así que me fui a la tabla Artículos y me di cuenta que si rebaja el stock de los productos agregados a la Factura. Pero seria posible agregar algún código que permita ver el rebaje del stock en la factura. Me explico: si en el formulario presupuestos en las líneas donde cargo un articulo (Neumático)se ve reflejado el stock (5), y al momento de pasar el presupuesto a factura y presionar el botón Descontar (aparte de ya pueda  rebajar el producto en la tabla, se podría agregar un código para que se actualice el formulario de la factura mostrando el rebaje del producto cargado (Neumático) stock (4). De antemano gracias

Cambie el procedimiento por este código

Sub descontar()
  On Error Resume Next
  Dim miRS As Recordset
  Dim lnNumero As Long
  Dim lnCantidad As Long
  Dim strSQL As String
  Dim strRef As String
  DoCmd.SetWarnings (False)
  Set miRS = Me.Lineas_Facturas_de_Venta.Form.RecordsetClone
  Do Until miRS.EOF
    strRef = Trim(miRS!Articulo)
    lnNumero = Nz(DLookup("[Numero]", "Articulos", "Referencia='" & Trim(miRS!Articulo) & "'"), 0)
    If lnNumero <> 0 Then
     strSQL = "UPDATE Articulos SET Stock=Stock-" & miRS!cantidad & " WHERE Numero=" & lnNumero
     CurrentDb.Execute strSQL
      'Actualizo el stock del formulario
    miRS.Edit
    miRS!Stock = Nz(DLookup("[Stock]", "Articulos", "Referencia='" & Trim(miRS!Articulo) & "'"), 0)
    miRS.Update
    End If
    miRS.MoveNext
  Loop
  Set miRS = Nothing
  Me.Lineas_Facturas_de_Venta.Form.Requery
End Sub

Observe el código como actualizo el stock del subformulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas