Necesito crear una matriz de controles en un formulario abierto en vista formulario. ¿Es posible?

<h1>lechuza01</h1>

necesito crear una serie de controles, algo parecido a una matriz de controles, en un formulario y su subformulario abierto en vista formulario. Se trata de controles que realizaran la suma del valor de un campo determinado de un subformulario por una parte y controles que en el formulario padre tomarán ese valor desde los controles del subformulario. Por ejemplo, la suma del valor de iva calculado (o sea suma del campo calculado IVA: [importe]*[%IVA]). En mi caso pueden existir varios % de iva a aplicar según el producto seleccionado en cada línea del subformulario, por eso no me basta con un sólo control en el pie del subformulario y otro control en el pie del formulario, sino que en función de la cantidad de valores distintos de % de iva tengo que crear la misma cantidad de controles que me calculen la suma del campo IVA usando la función DSUMA.

He intentado con CreateControl pero por lo visto solo funciona en la vista Diseño del formulario. Tampoco me deja con Dim clt as textBox: Set ctl = New textbox

Me puedes indicar si hay alguna otra forma, o necesito tener insertado previamente al menos uno de los controles textbox en el formulario.

Respuesta
1

Te paso unos links donde se explica bien este tema.

Tendrías que adaptar los códigos a tu base, claro.

http://support.microsoft.com/kb/137119/es

otra de todoexpertos:

http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/microsoft-access/respuestas/228850/matrices-de-controles

Por mi parte me parece mejor que crees tablas para los porcentajes de iva, si me das un ejemplo, por ahí no necesitas de crear controles en tiempo de ejecución.

Bueno, me temo que eso ejemplos no me valen porque en mi caso tenían que crearse en tiempo de ejecución, y la cantidad de controles a crear dependería de una variable cuyo valor depende del resultado de una consulta. Por ejemplo, necesito crear tantos controles como valores distintos de % de IVAS tenga en una tabla de Familia o Categorías de productos. De modo que si mañana una categoría cambia de IVA, con un valor distinto a los existentes, tengo que crear un textBox para ese nuevo IVA.

Te comento, la solución que he encontrado: He creado un un tipo de datos con type/End type con dos campos: PorcentIVA y CuotaIVA. Luego he creado un array dinámico del tipo igual al type. Y al cargar el formulario de compras o de ventas, meto en ese array, por una parte todos los valores distintos de IVA existentes y también almaceno en el array el valor del producto [importe]*[IVA], (el CuotaIVA). Luego este array lo vuelco en un listBox que aparece en el pie del formulario y ya está. Cada vez que se produce el evento Current en el Formulario padre llamo al Procedimiento que me recalcula los datos para los nuevos detalles de compra o de venta en el subformulario y ya está.

El único problema es que cuando añado un nuevo registro de detalle de venta o de compra en el subformulario no hay manera de que el listbox se actualice inmediatamente. He probado a llamar el procedimiento desde el evento AfterUpdate del subformulario, pero no me pasa por ahí, es como si Visual Basic no detectara cuando se produce dicho evento, o que a pesar de moverme a otra fila o de comenzar a rellenar otra fila, la fila que acabo de editar no se ha guardado aún. Sabes ¿porqué Visual Basic no detecta la ocurrencia del evento AfterUpdate en un subformulario, al rellenar un registro y pasar a otro, o simplemente pulsar Enter?

Un saludo, y gracias por tu rápida respuesta. Te agradecería que me aclararas esta nueva duda que me ha surgido.

Creo que para que se actualize el formulario podrías colocar algo así:

En el evento "Al salir" o "Al entrar" de cualquier celda o textbox del subFormulario podes poner este código:

Forms! FormularioPrincipal. Refresh.

O también:

Forms! FormularioPrincipal. Recalc.

Con eso tiene que actualizarte el formulario.

Muchas gracias Lechuza01, he mandado a refrescar el control listBox situado en el formulario haciendo una llamada al mismo Sub que rellena el mismo listbox, desde el subformulario, al salir de uno de los controles (cmbPrecio) del formulario tal como me indicabas:

Private Sub cmbPrecio_AfterUpdate()

Me.Parent.ActualizaCuotasIVAS

End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas