Desde un Formulario principal poder acceder a otro segundo Formulario donde se realizan los cálculos

He de calcular una Tarifa de Precios y desde un Formulario Continuo Principal por cada una de las líneas existentes he de acceder a otro segundo Formulario donde se calculan los Precios y a la salida de este segundo formulario ha de pasar el total calculado al Formulario Principal en el campo PVP.

Respuesta
2

Debe utilizar la propiedad PARENT, pero sería bueno subiera una imagen para no improvisar con código que lo pueda es confundir. De todas maneras preparé este ejemplo.

Formulario principal

Hago en Calcular DURASNOS y obtengo:

Subformulario

Ingreso el Vr Unitario y la Cantidad, automáticamente se actualiza el Total. Para el campo Total fijo como origen del control como muestra la imagen:

Esto permite que al cambiar cualquier valor de los campos se actualice el Valor Total.

Al cerrar el Formulario regreso al formulario principal y me actualiza la cantidad y el valor de los DURASNOS

CÓDIGO DEL BOTÓN CALCULAR  FORMULARIO PRINCIPAL

Private Sub btnCalcular_Click()
  DoCmd.OpenForm "frmsubcalcular", acNormal, , , , , Me.articulo
End Sub

Observe como paso por argumento el nombre del artículo, esto para utilizarlo como título en el subformulario.

CÓDIGO DEL SUBFORMULARIO

Option Compare Database
Option Explicit
Dim mForm As Form
Private Sub Form_Close()
  If Me.ctlTotal > 0 Then
   mForm!cantidad = Me.ctlCantidad
   mForm!valor = Me.ctlTotal
   mForm.Recalc
  End If
End Sub
Private Sub Form_Open(Cancel As Integer)
  Set mForm = Screen.ActiveForm
  Me.Caption = "CALCULANDO PRECIO " & Me.OpenArgs
End Sub

Observe como defino a nivel de formulario la variable donde almaceno el nombre del formulario principal.

En el evento Al abrir almaceno en la variable mForm el nombre del formulario activo en el momento de abrir, es decir, el formulario principal. Esto me permite de una manera practica hacer referencia a las propiedades del formulario.

Asigno al título del formulario el nombre pasado como argumento, en este caso, el nombre del producto.

En el evento Al cerrar, actualizo el formulario principal, siempre que al campo ctlTotal sea mayor que cero.

Si quiere el ejemplo lo puede solicitar a [email protected], favor en el asunto hacer referencia a la consulta.

Perdón NO tenga en cuenta la propiedad PARENT en este caso no sirve

1 respuesta más de otro experto

Respuesta
2

LKo puedes hacer de muchas formas. Sería bueno que pusieras imágenes de ambos formularios. Si el formulario donde se calculan los precios es totalmente independiente del primero, puedes poner en cualquier evento de un registro del primero

Docmd. Openform"Calculos",,,,, acdialog

Así, se abrirá el formulario Cálculos en vista diálogo.

Por ejemplo, si tengo el formulario

Puedes ver que el cursor todavía está en el control Producto. Cuando pulso Enter, me abre el formulario Calculos en vista diálogo

Pongo valores y

El cursor está en texto4. En cuanto pulso Enter

Ha trasladado el resultado al formulario Otra. Como te decía, en el evento Dewspués de actualizar del control Producto le tengo puesto

Private Sub Producto_AfterUpdate()
DoCmd.OpenForm "calculos", , , , , acDialog
End Sub

Y en el ejemplo, en el evento Después de actualizar del cuadro de texto Texto4 del formulario Calculos le tengo puesto

Private Sub Texto4_AfterUpdate()
Total = Texto0 * Texto2 / Texto4
Forms!otra!Precio = Total
End Sub

Pero como tre decía lo puedes hacer del mil formas.

Lo que estoy buscando es que me recorra de forma automática cada una de las líneas de Formulario principal y que por cada producto se vaya al Formulario de Cálculos me calcule el PVP y lo traslade al Formulario Principal

Entonces, creo entender que el formulario es continuo y en ese caso vamos a suponer que tienes un botón( aunque podría ser en otro evento). No sé como hace los cálculos el otro formulario, si en función del producto, o si tienes que escribir tú unos valores, así que yo lo pondría como

Dim i as integer

docmd.gotorecord,,acfirst

for i=1 to me.recordset.recordcount

docmd.openform"calculos",,,,"Producto='" & me.producto & "'"( si el cálculo fuera en función del producto)

docmd.gotorecord,,acnext

next

Es decir, que al pulsar el botón se va al primer registro del formulario continuo. Allí abre el formulario Calculos, hace lo que tenga que hacer y se pasa al siguiente registro y así hasta el final.

Sería conveniente que pusieras una imagen de ambos formularios y dijeras que tipo de cálculos haces en el segundo, porque creo que habría una forma más sencilla de hacerlo con, por ejemplo

Docmd.runsql"update PVP from Productos where...

ó

Docmd.runsql"update Productos set PVP=.....

Y así no tendrías que estar recorriendo los registros

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas