Access - Condicional según Opción Seleccionada

   
Vista:
Imágen de perfil de Osen

Condicional según Opción Seleccionada

Publicado por Osen (29 intervenciones) el 26/11/2015 13:57:00
Amigos de Access 2010

Solicito de quien desee ayudarme, conseguir hacer la formula Condicional para lo siguiente:

Opciones:

Gramos - Kilo - Libra - Mililitro - Unidad

Condicional

Si ("Gramos" Entonces multiplicar "Precio" *1) Si ("Kilo" Entonces Dividir "Precio"/1000) Si ("Libra" Entonces "Precio"/500 ) Si("Unidad" Dividir "Precio"/1) Si("Mililitro" Entonces Dividir "Precio" / 1000)

No sé cómo se hace.


Gracias de antemano por su colaboración.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Condicional según Opción Seleccionada

Publicado por Enrique Heliodoro (1663 intervenciones) el 26/11/2015 15:09:58
Lo primero es analizar lo que se tiene y lo que se desea, hay dos posibles operaciones innecesarias (dividir o multiplicar por la unidad) lo que reduce las variables a tres.

La función IIF (de a que se ha comentado algo recientemente) creo que seria una opción valida.
IIF ===> Comparación , parte verdadera , parte falsa

La primera:
Resultado = IIF ([lo que sea] = "Kilo", [UnValor]/1000,[un valor])

en ella se aprecia que si se trata de kilos (en alguna parte estará reflejada esa variable) se aplica la parte verdadera (la división) y si no se cumple, la parte falsa (el valor sin manipular)

Pero pudieran ser mililitros (que también se dividen por mil en ese calculo), no vale la pena repetirlo, se añade a la comparación inicial:
Resultado = IIF ([lo que sea] = "Kilo" OR [lo que sea] = "Mililitro", [UnValor]/1000,[un valor])

Si la unidad de medida fueran Kilos o Mililitros, se aplicaría la parte verdadera, en cualquier otro caso, la falsa

Pero si es falsa pueden ser Libras, gramos o unidades y las libras necesitan recalculo, asi que otro IIF en lugar de la parte falsa (la que se ejecutaría si no se cumple la primera comparación)
Vamos a sustituir la parte falsa:
Resultado = IIF ([lo que sea] = "Kilo" OR [lo que sea] = "Mililitro", [UnValor]/1000,[un valor])

Validamos si son libras
IIF ([lo que sea] = "Libra", [UnValor]/500,[un valor])

Y lo aplicamos en la sustitución:
Resultado = IIF ([lo que sea] = "Kilo" OR [lo que sea] = "Mililitro", [UnValor]/1000,IIF ([lo que sea] = "Libra", [UnValor]/500,[un valor]))

Espero que entiendas la lógica y (sustituyendo las referencias por mi inventadas por las reales de esa aplicación), te sea de utilidad, en cualquier caso que 'entiendas' el funcionamiento de la lógica planteada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Osen

Condicional según Opción Seleccionada

Publicado por Osen (29 intervenciones) el 27/11/2015 03:39:35
Enrique Muchas Gracias.
Estoy tratando de entender, pero aun no doy.
Revisando realmente lo que quiero, lo resumo así:

Esta es tu explicación
IIF ([lo que sea] = "Kilo" OR [lo que sea] = "Mililitro", [UnValor]/1000,IIF ([lo que sea] = "Libra", [UnValor]/500,[un valor]))


Esta sería traducida a lo que busco:

Private Sub PrecioUnidadMedida_BeforeUpdate(Cancel As Integer)
IIF ([UnidadMedidasIngredientes] = "Gramos" OR [UnidadMedidasIngredientes] = "Mililitro/Cms3" OR ([UnidadMedidasIngredientes] = "Libra"), ([PrecioIngredientes]/[CantidadIngredientes]),[1])

End Sub

Pero me dice: Error de Compilación: Se esperaba =

Gracias nuevamente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condicional según Opción Seleccionada

Publicado por Enrique Heliodoro (1663 intervenciones) el 27/11/2015 05:48:34
No, NO y NO.

Fijate en la primera (que es la básica de como funciona el IIF):
Resultado = IIF ([lo que sea] = "Kilo", [UnValor]/1000,[un valor])

IIF devolverá (si se cumple) lo marcado en negrita:
Resultado = IIF ([lo que sea] = "Kilo", [UnValor]/1000,[un valor])

Y si no se cumple lo marcado ahora en negrita:
Resultado = IIF ([lo que sea] = "Kilo",[UnValor]/1000,[un valor])

Supongamos que en '[UnidadMedidasIngredientes] ' (resumido: UMI) hay un texto tal como 'Kilo' y en (según el primer mensaje) 'Precio' un valor tal como 1425

Ejecutamos esto:
Resultado = IIF ([UMI] = "Kilo",[Precio]/1000,[Precio])

Access lo traduciría asi:
Resultado = IIF (Kilo = Kilo, 1425/1000, 1425)
Se cumple la igualdad, asi que devuelve el segundo parámetro: (1425/1000)
Con lo que al final tenemos:
Resultado = (1425/1000)
Resultado = 1,425 (uno coma cuatrocientos veinticinco)

Si UMI no fuera 'Kilo' sino 'Gramo' tendríamos

Ejecutamos esto:
Resultado = IIF ([UMI] = "Kilo",[Precio]/1000,[Precio])

Access lo traduciría asi:
Resultado = IIF (Gramos= Kilo, 1425/1000, 1425)
evidentemente NO se cumple la igualdad, asi que devuelve el tercer parámetro: (1425)
Con lo que al final tenemos:
Resultado = (1425)
Resultado = 1425 (mil cuatrocientos veinticinco)

Según el primer mensaje (al que sigo fiel) tenemos que se trata de igual forma a los 'Kilo' y a los 'Mililitro', podemos crear una nueva comparación

¿una nueva para hacer lo mismo?.... ¡¡ que desperdicio !!

Le añadimos esa comparación a lo anterior y ganamos tiempo y recursos:
Resultado = IIF ([UMI] = "Kilo" OR [UMI] = "Mililitro",[Precio]/1000,[Precio])

Si hay condiciones diferentes, es cuando entra en juego lo de sustituir 'Precio' (el tercer parámetro) por otro IIF (que 'es mas de lo mismo, pero sin 'Resultado =' ya que el destino no cambia:

Lo nuevo:
IIF ([UMI] = "Libra", [Precio] / 500, [Precio])
(no lo desglosare, lo considero aprendido en lo antes desgranado)

Asi que aplicare la sustitución
Original:
Resultado = IIF ([UMI] = "Kilo" OR [UMI] = "Mililitro",[Precio]/1000,[Precio])

Le quitamos el tercer parámetro:
Resultado = IIF ([UMI] = "Kilo" OR [UMI] = "Mililitro",[Precio]/1000, ???????? )
(utilizo interrogantes, porque el editor del foro compacta el espacio en aras del ahorro)

En ese hueco, la segunda comparación generada (las libras)
Resultado = IIF ([UMI] = "Kilo" OR [UMI] = "Mililitro",[Precio]/1000, IIF ([UMI] = "Libra", [Precio] / 500, [Precio]))

Y asi se concatenan las comparaciones: razonando y siguiendo la lógica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Osen

Condicional según Opción Seleccionada

Publicado por Osen (29 intervenciones) el 28/11/2015 15:48:34
Muchísimas gracias por la orientación.

Al fin se logró que funcionara...!

Access me reemplazó, por su cuenta, el IIF por el SiInm. Lo dejé para ver qué pasaba.
La coma (,) no me la aceptaba, si no el punto y coma (;).

Puse a prueba mi paciencia en "Ensayo y error" con el Generador de Expresiones... y Bingoooo..!

=SiInm([UnidadMedidasIngredientes]="Gramos" O [UnidadMedidasIngredientes]="Mililitro/Cms3";([PrecioIngredientes]/[CantidadIngredientes]);[PrecioIngredientes])


Ahora tengo otro problema que está difícil para mi: Este resultado no funciona en el autorrelleno en otro formulario.

Formularios que Interactúan:
"Ingredientes" e "IngredientesPorReceta"

El Formulario "IngredientesPorReceta" debe traer por autollenado a su campo "PrecioIngredientesIngred" el resultado de la formula Condicional en cuestión, pero no funciona.

Pero si yo borro la fórmula condicional, que está en el campo "PrecioUnidadMedida" del formulario "Ingredientes" y escribo directamente un valor, el autollenado absorbe el valor escrito......Si regreso y pongo la fórmula, y otra vez el campo "PrecioIngredientesIngred" se pone vacío.

A ver si la imagen es más explicativa......

http://s23.postimg.org/5rqjpliln/Formula_Condicional_Access.jpg

Formula_Condicional_Access




El Autollenado funciona así

Private Sub IngredienteIngredientes_Click()
Me.UnidadDeMedidaIngredientes = Nz(IngredienteIngredientes.Column(4), "")
Me.PrecioIngredientesIngred = Nz(IngredienteIngredientes.Column(6), "")
End Sub
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Condicional según Opción Seleccionada

Publicado por Enrique Heliodoro (1663 intervenciones) el 28/11/2015 16:25:17
Es lo mismo, solo interviene la configuración regional cuando se trabaja 'fuera' de la ventana de VBA (traducción automática al cambiar de VBA a fuera de VBA), lo de las comas o punto y coma .... es el separador de listas (se tendrá que aplicar el adecuado a la configuración regional), en VBA no hay esos inconvenientes, se trabaja 'en guiri'.

Lo ético (para que sea de utilidad a cualquier participante), es iniciar con cada nuevo problema un nuevo hilo, la 'atención personalizada' generalmente suele ser de pago (y este foro es gratuito).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Osen

Condicional según Opción Seleccionada

Publicado por Osen (29 intervenciones) el 28/11/2015 18:41:55
Hola Enrique
Entiendo que hay muchas personas muy generosas, que colaboran en forma gratuita.

Pido disculpas si he sido descortés en este foro. Si lo he sido, ha sido por distraido.

Les comparto a quienes hayan tenido el mismo tropiezo que yo, que la fórmula condicional que me funcionó adecuadamente a mi pretensión, es la siguiente:

=SiInm([UnidadMedidasIngredientes]="Gramos" O [UnidadMedidasIngredientes]="Mililitro/Cms3";([PrecioIngredientes]/[CantidadIngredientes]);[PrecioIngredientes])

Esa formula está en el Generador de Expresiones.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Osen

Condicional según Opción Seleccionada

Publicado por Osen (29 intervenciones) el 29/11/2015 17:03:19
Enrique
Muchas gracias nuevamente.

Al fin he resuelto el problema:.... Tocó convertir en la Tabla "Ingredientes", a Campo Calculado, el campo "PrecioUnidadMedida" . Es decir, directamente en la Tabla y allí puse la fórmula condicional:

=SiInm([UnidadMedidasIngredientes]="Gramos" O [UnidadMedidasIngredientes]="Mililitro/Cms3";([PrecioIngredientes]/[CantidadIngredientes]);[PrecioIngredientes])

Funciona exquisito..!

Muchas gracias nuevamente...!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar