Pasar valores del subtotal del subformulario al subtotal del formulario

Quería pedir de su ayuda para poder hacer este procedimiento.

Tengo un formulario "FacturaCompra" y un subformulario "LineaFactura" y en el subfformulario agrego los artículos a vender y en uno de los campos esta el sub_total el cual se actualiza al ir llenado los campos de cantidad, descuento, etc., pero en el sub_total_principal no se cargue al ir llenando estos campos, solo lo hace al finalizar la línea y me gustaría que se cargue al momento de ir llenando cada campo para ir viendo los montos finales si cuadran y cuando presione el disquete de guardar se actualice todo.

Estos son los codigos que tengo en los campos cantidad

Private Sub CANTIDAD_FC_AfterUpdate()
Me.STOCK_FINAL.Value = Nz([STOCK]) + CANTIDAD_FC
Me.STOCK.Value = Me.STOCK_FINAL
Me.PRECIO_NETO.Value = (Nz(Me.PRECIO.Value * Me.CANTIDAD_FC.Value))
Me.SUB_TOTAL.Value = (Nz(Me.PRECIO_NETO.Value)) * -(Nz(Me.Ctl_DESCUENTO.Value)) + (Nz(Me.PRECIO_NETO.Value)) + (Nz(Me.IMP_ESP_COMB))
Me.IVA.Value = (Nz(Me.SUB_TOTAL.Value * Me.Ctl_IVA.Value))
Me.TOTAL.Value = (Nz(Me.SUB_TOTAL.Value + Me.IVA.Value))
End Sub

Private Sub CANTIDAD_FC_BeforeUpdate(Cancel As Integer)
If MsgBox("ESTA BIEN LA CANTIDAD INGRESADA", vbYesNo + vbQuestion, "ESTAS A PUNTO DE ACTUALIZAR EL STOCK") = vbYes Then
Exit Sub
ElseIf vbNo Then
DoCmd.CancelEvent
End If
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
Me.SUB_TOTAL.Value = (Nz(Me.PRECIO_NETO.Value)) * -(Nz(Me.Ctl_DESCUENTO.Value)) + (Nz(Me.PRECIO_NETO.Value)) + (Nz(Me.IMP_ESP_COMB))
End Sub

Private Sub Form_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
DoCmd.RunSQL "Update ARTICULOS set PRECIO_AR=((NZ(STOCK_AR)*NZ([PRECIO_AR]))+('" & Me.PRECIO & "'*'" & Me.CANTIDAD_FC & "'))/'" & Me.STOCK_FINAL & "',STOCK_AR=STOCK_FINAL where CODIGO_ARTICULO_A='" & Me.CODIGO_ARTICULO_FC & "'"
End Sub

1 respuesta

Respuesta
1

Vamos a suponer que el subformulario se llama DetalleCompra y depende de la tabla del mismo nombre. Vamos a suponer también que formulario y subformulario están relacionados por el campo IdFactura. En la misma instrucción donde calculas el subtotal del subformulario puedes poner

docmd.setwarnings false

docmd.runcommand accmdsaverecord

me.parent!subtotal=Dsum("subtotal","detallefactura","idfactura=" & me.idfactura & "")

me.parent!iva=dsum("iva","detallecompra","idfactura=" & me.idfactura & "")

me.parent!total=me.parent!subtotal+me.parent!iva

Es decir, en el momento que calcula el subtotal y el IVA guarda el registro y le dice que el control Subtotal del formulario padre, sea igual a la suma de los subtotales de la tabla DetalleCompra, cuyo IdFactura sea igual al del registro del formulario y por tanto de todos los registros de ese subformulario. Lo mismo para el IVA

Por ejemplo, aunque la estructura sea distinta. El cálculo lo hago en el evento Después de actualizar del cuadro de texto del subformulario

Y el código que le tengo puesto es

Private Sub Cantidad_AfterUpdate()
Subtotal = Precio * Cantidad
Despues = Nz([Antes]) + Cantidad
DoCmd.RunCommand acCmdSaveRecord
Me.Parent!Importe = DSum("subtotal", "detallecompra", "idcompra=" & Me.IdCompra & "")
Me.Parent!ImporteIVA = Me.Parent!Importe * Me.Parent!TipoIVA / 100
Me.Parent!TotalFactura = Me.Parent!Importe + Me.Parent!ImporteIVA
DoCmd.RunSQL "Update Productos set precio=((Existencias*precio)+(" & Me.Precio & "*" & Me.Cantidad & "))/" & Me.Despues & ",existencias=despues where producto='" & Me.Producto & "'"
End Sub

Funciona super bien el código en el campo cantidad, pero tuve que agregarlo a los demás campos que tengo "%descuento", "imp_esp_combustible" y "%iva" . Lamentablemente cada vez que agregaba datos en estos campos me actualizaba todo los valores guardo datos erróneos en las tablas,

asi que tube probe haciendo unos cambio, y la linea(DoCmd.RunCommand acCmdSaveRecordla agregue todos los campos que en mi caso tengo como "cantidad", %descuebto", "imp_esp_combustible" y "%iva" , asi cada vez que agrego valores a estos campos solo me calcula el subtotal iva y total del subformulario y formulario

Asi que la penultima linea del codigo(DoCmd.RunSQL "Update ARTICULOS set PRECIO_AR=((NZ(STOCK_AR)*NZ([PRECIO_AR]))+('" & Me.PRECIO & "'*'" & Me.CANTIDAD_FC & "'))/'" & Me.STOCK_FINAL & "',STOCK_AR=STOCK_FINAL where CODIGO_ARTICULO_A='" & Me.CODIGO_ARTICULO_FC & "'")la agregue a un campo adicional en el evento al perder el enfoque para actualizar la linea compelta, eso fue lo unico que se me ocurrio hacer, pero me gustaria saber que opinas si realmente es lo mejor o hay otro metodo. 

Podemos hacer una cosa, si quieres. Haz una copia con 3 ó 4 registros inventados( es para no tener que escribir yo, soy un vago) y me la mandas a [email protected] y la miro.

Si lo haces, en el asunto del mensaje pon tu alias Hector Manuel, ya que si no sé quien me escribe ni los abro.

Oka, muchas gracias por tu ayuda, un abrazo

Enviada la respuesta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas