Problema de registrar dato de un subformulario a formulario principal en access

Aquí nuevamente recurriendo a sus conocimientos... Resulta que tengo un formulario de compras y un subformulario detalle compras. Quiero registrar la suma de un textbox independiente de mi de mi subformulario a un textbox dependiente del formulario principal y no me resulta para nada, eh probado todo lo que eh visto en la red, pero no me resulta, no se que estoy haciendo mal

En mi subformulario en el "Texto10=Nz(Suma([ValorNeto]);0)", y en los eventos después de actualizar:

Private Sub Texto10_AfterUpdate()
Form_RegistroCompras.ValorNeto = Me.Texto10.Value
End Sub

Al pasar el valor neto, necesito agregar el valor impuesto y obtener el valor total

 Este es mi formulario

El porque necesito registra ese dato, en formulario principal es para registro histórico

Nota: uso Office 2013 - 64 bits

2 respuestas

Respuesta
2

Vamos a suponer que el cuadro de texto del formulario se llama tal como aparece Valor Neto, y el del subformulario lo mismo SumaValor Neto, en sus propiedades-eventos-Después de actualizar pon simplemente

Me.parent![valor neto]=[sumavalor neto]

Es decir, que el valor del control Valor Neto del formulario "Padre" sea el que figura en ese control que acabas de actualizar

Julián... gracias por responde, lo puse en practica, pero no me resulta... así lo tipie

Private Sub Suma_ValorNeto_AfterUpdate()
Me.Parent![ValorNeto] = [Suma_ValorNeto]
End Sub

Le adjunto imagen de la vista formulario, puede que halla algo que omití..

Luego te explico una forma más cómoda y "racional" de hacerlo directamente.

Si tengo un cuadro de texto en el subformulario que se llama como ves en la imagen

En mi caso le voy a decir que me haga la suma de subtotal del mi subformulario.

En el formulario tengo otro cuadro de texto con un nombre igual al tuyo. Te lo pongo de color para que se distinga

Cuando realizo las compras, en el cuadro de texto Suma ValorNeto me aparece el acumulado

Si hago clic(puedes ver que efectivamente es así, porque en la imagen se ve el cursor en Suma...)

Y lo que le tengo puesto en el código del evento al recibir el enfoque, ya que como el cálculo lo hace automáticamente no tengo porqué "tocar" el cuadro de texto del subformulario es simplemente

Private Sub Suma_ValorNeto_GotFocus()
Me.Parent![valor neto] = [suma valorneto]
End Sub

De todas formas, yo no lo haría así. Cuando escribes en un registro, realmente "lo estás guardando" en una tabla, en mi caso se llama DetalleCompra. Pues si elijo un producto, etc cuando pongo la cantidad

Y pulso Enter, además de aparecerme su valor en subtotal(no te fijes en lo de existencias), ya me aparece en el cuadro Importe del formulario la suma acumulada

Pulso Enter y

No necesitas el cuadro de texto suma valorneto, ya te lo pone directamente en el formulario. En este caso le digo, que después de actualizar el valor en Cantidad, me "guarde" el registro en la tabla y luego que el valor del cuadro Importe del formulario sea igual a la suma de los diferentes productos del subformulario.

Private Sub Cantidad_AfterUpdate()
Subtotal = Precio * Cantidad
DoCmd.RunCommand acCmdSaveRecord
Me.Parent!Importe = DSum("subtotal", "detallecompra", "idcompra=" & Me.IdCompra & "")
End Sub

Gracias... me resulto impeque la linea de comando... pero no quiero abusar de su ayuda, como puedo hacer que también me realice los cálculos automático del impuesto y resultado final de la suma de importe e impuesto... lo pude hacer a mi manera pero debo debo tabular al textbox Importe para que reciba el foco y me genere los cálculos...

Gracias...

Lo puedes hacer todo desde el subformulario. El único problema que habría es que si los impuestos son variables, caso del IVA, tendrías que "calcularlo" después de que en Importe apareciera algún valor, o que previamente hubieras puesto en el formulario el % del impuesto. Me explico, vamos a suponer que siempre va a ser un 21%. Lo mismo que en el subformulario le pones

Me.parent!importe=dsum(..... le puedes añadir

me.parent!impuesto=me.parent!importe*21/100

me.parent!valortotal=me.parent!importe+me.parent!impuesto

Por el contrario, vamos a suponer, que antes de empezar a poner productos en el subformulario decides que el tipo de impuesto va a ser de un 12%, que deberías recogerlo en un cuadro de texto al que llamaremos TipoImpuesto. Podrías poner lo del subformulario como

me.parent!ValorNeto=Dsum(.....

me.parent!impuesto=me.parent!tipoimpuesto/100*me.parent!valorneto

me.parent!valortotal=me.parent!valorneto+me.parent!impuesto

Te pongo lo de dividido por 100 porque nunca uso(jamás le he visto utilidad ninguna) y además los odio los campos porcentaje. Prefiero poner 12 y luego dividirlo por cien o por lo que me dé la gana.

De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo.

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

¡Gracias! Julián, primeramente por tus explicaciones gráficas y comando, como también tus ejemplos. Tu docencia es clara y precisa, lo felicito por eso, ya que ayuda a muchos como yo que somos ama ter en esto de programar... Muchas gracias por su ayuda...

Respuesta
2

Lo que haces mal es ponerlo en el evento "después de actualizar" del control independiente Texto10, porque al asignarle el valor por código o en su origen de control, ese evento no se produce, y por tanto ese código no se ejecuta.

Yo te daría las siguientes opciones:

.- Usar el evento "después de actualizar" del formulario que hace de subformulario.

.- Usar el evento "después de insertar" del formulario que hace de subformulario.

.- Usar el evento "después de actualizar" del campo "Cantidad" del subformulario, añadiendo una linea antes del traspaso para que guarde los cambios.

.- Si el valor de Texto10 lo asignas por código, en ese mismo evento, poner la linea que hace el traspaso al formulario.

Estimado, reilase lo indicado de los dos primeros item, pero no me resulta... creo que algo esto haciendo mal... igual te informo que me faltaba el campo subtotal, al agregarlo en el campo cantidad genere una formula de calculo y ejecute el tercer item, pero los registros no se me muestran en el formulario principal

Ahí te dejo un ejemplo, hecho con la opción del evento "después de actualizar" del campo cantidad: http://www.filebig.net/files/8GdcWNbC4r

El mismo ejemplo con el mismo código (casi) en el evento "después de insertar" del subformulario, y también funciona: http://www.filebig.net/files/UbW2XYjfRT

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas