No recoge bien el valor de un campo al pasarlo a otro Formulario

Tengo un proceso en que actúan varios Formularios encadenados en si.

Tengo el problema que un Campo numérico al ser trasladado a otro Form no recoge bien el valor.

Este campo sirve para interrogarlo y en función de su valor realiza unos cálculos,

Parte del Formulario donde actúa:

...

Me.Unidades = [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]
Me.Unid = Me.Unidades
Me.Cal1 = [Forms]![COSTOSBAREMOSFAMILIASPRECIOSULTIMOLOTES]![A1] - [Forms]![COSTOSBAREMOSFAMILIASPRECIOSULTIMOLOTES]![DE1]
Me.Tot1 = Me.Cal1
If Me.Cal1 >=Me.Unidades Then
Me.Cal1 = [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]
Exit Sub
Else
End If

...

En la interrogación:

If Me.Cal1 >= Me.Unidades Then

No puedo controlarlo porque mo actúa bien y pasa a la salida del Else teniendo el Campo Unidades un valor correcto

He cambiado las instrucciones de esta forma y me sigue dando el mismo problema

If Me.Cal1 > [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades] Then

sigue pasandose al Else 

2 Respuestas

Respuesta
2

Por lo que parece entender, hay tres formularios abiertos. ¿Has probado a poner en el tercero

If currentproject.allforms("ARTICULOSPRESUPUESTOSUNIDADESLOTES").isloaded and currentproject.allforms("el otro formulario"), is loaded then

Me.Unidades = [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]

Me.Unid = Me.Unidades
Me.Cal1 = [Forms]![COSTOSBAREMOSFAMILIASPRECIOSULTIMOLOTES]![A1] - [Forms]![COSTOSBAREMOSFAMILIASPRECIOSULTIMOLOTES]![DE1]
Me.Tot1 = Me.Cal1
If Me.Cal1 >=Me.Unidades Then
Me.Cal1 = [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]
Exit Sub
Else
End If

Pero no veo que le digas nada en else

En el segundo isloaded en vez de coma(por error al escribir) es un punto

Esta compuesto por tres Formularios:

1.- Form.  ARTICULOSPRESUPUESTOSUNIDADESLOTES

      2.- Form.  COSTOSBAREMOSFAMILIASPRECIOSULTIMOLOTES

         3.- subform costos baremos familias precios ultimo lotes

En el ELSE no le digo nada porque el programa continua buscando otros cálculos en el programa.

Esta instrucción no se exactamente donde ha de ir .. en que evento he de colocarla

If currentproject.allforms("ARTICULOSPRESUPUESTOSUNIDADESLOTES").isloaded and currentproject.allforms("el otro formulario"), is loaded then

He intentado adaptar esta instrucción de esta forma:

If currentproject.allforms("ARTICULOSPRESUPUESTOSUNIDADESLOTES").isloaded and currentproject.allforms("ARTICULOSPRESUPUESTOSUNIDADESLOTES").is loaded then

y me  da este error en la linea:

Te explico que hace el proceso:

Son calculos de Descuentos Graduales en funcion a la Compra de esta forma:

Familia: Bombillas Lets

Baremos:  De 1  A  5 --> 5%

                   De 6   A 10 -> 8%

                   De 11  A 25 -> 10%

                   De 26 A 50 -> 15% 

                   ................

en una compra de 30 Unidades son calculados los descuentos de esta forma:

       5 Bombillas al 5%

      10 Bombillas al 8%

15 Bombillas al 10%

Son descuentos graduales por cada Familia y tabla de descuentos no son totales sobre la compra. No calcula el 15% sobre las 30 Unidades.

Y esto va en función del tipo de Familia y la forma que tiene que aplicar el descuento Total o Gradual.

Si doy directamente: Me .Unidades = 30 me hace los cálculos perfectamente.

El valor lo tiene porque lo tiene y lo veo en el Campo Unidades pero NO actúa bien en los If...

Jobe, dos cositas. Primero, ¿por qué no les pones nombres más largos? Segundo, me pasa lo mismo que a Svein, por más vueltas que le doy no entiendo la mitad de los campos(la otra mitad, ya dejé de intentarlo). Por lo que dices, no son tres formularios. Es un formulario y otro formulario con su subformulario. En es caso cambia. Mira, he intentado reproducir tus formularios. Si tengo el primero

Cuando relleno unos valores y pulso el botón

Se abre, en vista diálogo, el otro formulario con su subformulario. Si pongo valores en Cliente, A1 y D1

Siguiendo lo que escribías, en Unidades del primer formulario hay 50. En el segundo formulario la diferencia entre a1 y d1 sería de 80. Como 80 es mayor que 50, en Cal1(siempre según tu instrucción) te pondrá 50, y como Unid tiene que ser igual a Unidades

En el evento Al activar registro del subformulario Costos Baremos.....le pongo

Private Sub Unidades_GotFocus()
If Me.NewRecord Then
If CurrentProject.AllForms("articulospresupuestosunidadeslotes").IsLoaded Then
Unidades = Forms!articulospresupuestosunidadeslotes!Unidades
End If
Unid = Unidades
Cal1 = Me.Parent!a1 - Me.Parent!d1
Tot1 = Cal1
If Cal1 >= Unidades Then
Cal1 = Unidades
End If
End If
End Sub

Le digo lo de If me.newrecord por si te desplazaras por los registros que no te haga ningún cálculo a menos que sea en un registro nuevo.

Respuesta
2

¿Realmente necesitas pasar el mismo valor a dos cuadros de texto del mismo formulario? Lo digo porque no me parece "normal" hacer esto:

Me.Unidades = [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]
Me.Unid = Me.Unidades
pudiendo hacer directamente:

Me.Unid = [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]
Y lo mismo con las dos líneas siguientes...

Para controlar los valores en el If, lo mejor sería que guardases los datos en variables, así, al interrumpir la ejecución del código y colocar el cursor encima de ella, verás el valor que toma y podrás ver si es el correcto o no. Es decir, haz algo así (declarando las dos variables del tipo más adecuado a los datos que van a contener):

Dim vUnidades AS Long, vCalculo as Long
vUnidades=[Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]
vCalculo = [Forms]![COSTOSBAREMOSFAMILIASPRECIOSULTIMOLOTES]![A1] - [Forms]![COSTOSBAREMOSFAMILIASPRECIOSULTIMOLOTES]![DE1]
If vCalculo >= vUnidades Then
  Me.Cal1=vUnidades
Else
  Me.Cal1=vCalculo
End If

Me esta dando este error de ejecución:

en esta instruccion:

vUnidades = [Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades]

Pues si te da ese error, es que en el formulario "ARTICULOSPRESUPUESTOSUNIDADES LOTES", el campo "Unidades" no tiene un valor (en Nulo). Si unidades puede estar vacío, resuelves fácilmente usando Nz() :

vUnidades = Nz([Forms]![ARTICULOSPRESUPUESTOSUNIDADESLOTES]![Unidades],0)

Si no es posible, tendrás que ver qué esa pasando para que te coja un Nulo y no el valor de ese campo...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas