Función SiInm

Tengo tres campos en un consulta: un campo fecha, un campo A y un campo B. El
campo B es un campo calculado que sale de multiplicar un % al campo A. Pero este
% Va cambiando en función de la fecha: Es decir:
entre 1/06/02 y el 01/08/02 se aplica un 3% (campo B= campo A*3%)
entre 01/08/02 y el 15/08/02 se aplica un 2%(campo B= campo A*2%)
y superior al 15/08/02 se aplica un 1% (campo B= campo A*1%)
He intentado utilizar la función siInm pero no consigo que se apliquen
correctamente los %

1 respuesta

Respuesta
1
La respuesta que te propongo es para que puedas tu misma modificar, la fecha, los días de plazo o el porcentaje.
En tu formulario en la vista de diseño seleccionas el cuadro de texto fecha y seleccionas propiedades (botón derecho), en el cuadro que se abre selecciona "Después de Actualizar" y ahí eliges "procedimiento de evento" en la misma casilla pulsa el pequeño botón a la derecha con tres puntos... y se abrirá el diseñador de código.
en el mismo sitio donde te aparece el cursor (Debajo de Private Sub fecha_AfterUpdate)
Copia este código, cambiando los nombres por los de tu formulario:
----------
Dim Difdias As String
Difdias = DateDiff("d", fechaPago, Date)
If IsNull(Difdias) Then Exit Sub
If Difdias <= 30 Then
Me.campo_B = Me.campo_A - ((Me.campo_A * 3) / 100) & " ?"
ElseIf Difdias <= 60 And Difdias > 31 Then
Me.campo_B = Me.campo_A - ((Me.campo_A * 2) / 100) & " ?"
Else
Me.campo_B = Me.campo_A - ((Me.campo_A * 1) / 100) & " ?"
End If
-------------------
Puedes cambiar el valor del plazo de pago, 30, 60 o más(Else)
El porcentaje 1 , 2, 3
Como tu quieras.
Lo que hace esto es calcular los días transcurridos entre la fecha de hot y el campo fecha de tu formulario, y según los días transcurridos le aplica un porcentaje.
Bueno espero haya respondido a lo que tu querías...
Muchas gracias Félix por tu aclaración. He intentado adaptar lo que me has enviado porque tengo que aplicar los % no en función del número de días si no por intervalos de fechas. Además para complicarlo necesito aplicar un cuarto %. Te mando lo que he hecho porque no me termina de aplicar los % y no sé muy bien que estoy haciendo mal.
Un saludo
Pilar
Private Sub campo_B_Enter()
If [Fecha] <= ("02/10/2006") Then
Me.campo_B= Me.campo_A* 0.03
ElseIf [Fecha] >= ("03/10/2006") And [Fecha] <= ("20/10/2006") Then
Me.campo_B = (Me.campo_A* 0.026)
ElseIf [Fecha] > ("20/10/2006") And [Fecha] <= ("20/11/2006") Then
Me.campo_B = (Me.campo_A* 0.018)
Else
Me.campo_B = (Me.campo_A* 0.01)
End If
End Sub
Bueno creo que tu problema es el tipo de datos del campo en la tabla.
Al hacerlo con decimales, tienes que cambiar el tipo de datos de los campos A y B a "doble" pues seguro que los tienes de tipo "entero" que es el que por defecto define Access cuando se selecciona un campo de tipo número y el tipo de datos entero no acepta decimales.
Ya me dirás si hay estaba el problema.
Félix, perdona que insista pero ando un poco ya desesperada porque una cosa que debería ser sencilla se está complicando.
El caso es que el campo A y B lo tengo como Doble pero
lo que noto es que me aplica el % respetando el día pero no el mes. Es decir que cuando cambio de mes se aplican los % según el día sin respetar la fecha concreta de día, mes y año.
Es decir, según la función el 02/10/2006 se debería aplicar un 3% y el 02/11/2006 se aplicaría un 1.8% y en cambio esta última fecha se aplica el 3%. ¿Serán los formatos de fechas?
Gracias una vez más
Pilar
Pues ves, si que hay varias formas de hacerlo más sencillas, me ha picado el gusanillo...
Hay dos formas, nos evitamos los dichosos literales #números de fecha#.
La primera es con la función Format y la segunda con la función DateSerial
Con la segunda que es la más sencilla el código quedaría así sería así:
--------
Private Sub campo_B_Enter()
If IsNull([Fecha]) Then Exit Sub
If [Fecha] <= DateSerial(2006,10,02) Then
Me.campo_B= Me.campo_A* 0.03
ElseIf [Fecha] >= DateSerial(2006,10,03) And [Fecha] <= DateSerial(2006,10,20) Then
Me.campo_B = (Me.campo_A* 0.026)
ElseIf [Fecha] > DateSerial(2006,10,20) And [Fecha] <= DateSerial(2006,11,20) Then
Me.campo_B = (Me.campo_A* 0.018)
Else
Me.campo_B = (Me.campo_A* 0.01)
End If
End Sub
-----------
Bueno esta forma si que parece más efectiva y menos liosa, siento no habértela dicho desde el principio, torpe soy...
Bueno un saludo, Félix
Debopedirte disculpas, pero es que esto tiene truco y la verdad no lo había comprobado.
Resulta que por alguna extraña razón Access trata las fechas en formato Americano poniendo los meses primero y luego los días, pero eso no es todo... Hay que ponérselo primero en este formato #día en número/ Mes en letra con abreviatura en Inglés /Año en letra (en tu caso Oct para que el lo cambie a #2/10/2006# ) y entonces lo interpreta correctamente, cuando el día tiene dos dígitos no es necesario la abreviatura del mes en palabra.
Así que debes TECLEAR, NO COPIAR el código de las fechas así:
----
Private Sub campo_B_Enter()
If [Fecha] <= #02/Oct/2006# Then
Me.campo_B= Me.campo_A* 0.03
ElseIf [Fecha] >= #03/Oct/2006# And [Fecha] <= #20/10/2006# Then
Me.campo_B = (Me.campo_A* 0.026)
ElseIf [Fecha] > #20/10/2006# And [Fecha] <= #20/11/2006# Then
Me.campo_B = (Me.campo_A* 0.018)
Else
Me.campo_B = (Me.campo_A* 0.01)
End If
End Sub
-----------
Cuando lo teclees Visual cambiará al formato Americano y te funcionará sin problemas, esta vez lo he probado...
Cosas de Microsoft...
Seguro que hay alguna otra forma más sencilla de hacerlo pero la desconozco... analfabeto soy...
En fin ya me dirás.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas