Valor de campo según fecha de mes actual

Como siempre agradeceros de antemano vuestra ayuda.

Tengo un formulario que recoge datos de pisos alquilados, varios de ellos de estudiantes. En julio y agosto, los que están alquilados pagan el 50% del alquiler.

En el formulario, el campo "pvp" recoge el valor introducido anteriormente en la ficha del inmueble, pero necesito que ese campo muestre el valor reducido al 50% cuando se den estas dos circunstancias:

- Otro campo del formulario (casilla de verificación) "estudiantes" está activada

- Mes actual es julio o agosto.

¿De qué manera podría establecer el valor predeterminado para que tuviera en cuenta estas dos variables?

2 respuestas

Respuesta
1

Lo mejor sería que pusieras una imagen del formulario, pero, por si te da una idea, vamos a suponer que el precio del alquiler( ya que no sé donde lo tienes) es de 1000. En el formulario, en el cuadro de texto Fecha del sistema tienes la ídem

Si pongo el cursor en el control PVP, como es Agosto y está marcada la casilla

Otro caso

Como no está marcada

En este caso, pero ya te digo que sería conveniente la imagen, le pongo, en el evento Al recibir el enfoque( aunque podría ser en cualquier otro) del cuadro de texto PVP

Private Sub PVP_GotFocus()
Select Case Month([FechaSistema])
Case 8, 9
If Verificación7 = -1 Then
PVP = 50 / 100 * 1000
Else
PVP = 1000
End If
Case Else
PVP = 1000
End Select
End Sub

Gracias a ambos por la respuesta.

En realidad el formulario es un listado que recoge datos de una consulta, no tengo que introducir manualmente el pvp porque lo trae de esa consulta y de la tabla donde se recogen los datos del alquiler del inmueble.

Entiendo que, o bien con un evento "al cargar" o similar que detectara la fecha y la condición de "estudiante" para que el valor del campo que ya aparece con una cantidad existente lo "convierta" divida entre dos.

Dejo aquí una captura parcial del formulario.

La columna "Est" indica si el piso está alquilado por estudiantes.
La columna PVP indica el precio de alquiler (que es la que necesito que se divida entre 2)

La columna "€ a liquidar" recoge la suma y/o resta de los parámetros anteriores, que varían según el mes y la vivienda.

Entiendo que si el valor de la columna PVP recoge el valor teniendo en cuenta la variable "Estudiantes" y la fecha actual, dentro del mes de julio o agosto, y lo indica a la mitad, la columna "€ a liquidar" recogerá igualmente la suma de todo, dando como resultado la cantidad final que debo ingresar al propietario.

De nuevo muchas gracias.

Por partes

1º En la imagen no se ve un campo Fecha

2º No sé como determinas que de el valor de PVP, ya que en algunos registros el valor de PrecioPt es el 5%, 6%,... 10%

3º Debes definir si los cálculos quieres que te los haga, cuando metes datos en el formulario, o si los datos los metes en otro sitio y quieres que te los muestre en el formulario.

1º Caso, por ejemplo, cuando escribes los datos en el formulario, en el evento al recibir el enfoque del cuadro de texto € a Liquidar

Select case Month(date())

case 7,8

if estudiante=-1 then

[€ a liquidar]=(Pvp/2)*(1-6/100)+PagoLuz+pagoagua+pagoelectricidad+Otros

else

[€ a liquidar]=PVP*(1-6/100)+Pagoluz+....

end if

case else

[€ a liquidar]=PVP*(1-6/100)+Pagoluz+....

end select

Por ejemplo, tengo una tabla Inquilinos con sus vicisitudes

Y una tabla Alquileres como

Con ella hago un formulario como

Selecciono un inquilino, en este caso a Alfred que si es estudiante, y automáticamente me pone su PVP

Ahora anoto la fecha del alquiler, para el caso, en Julio

Puedes ver que el cursor aún está en el control FechaAlquiler, en cuanto pulso Enter

Me pone, la mitad de PVP, menos el descuento, Anoto( o no) el gasto de Luz y agua y cuando el cursor llega a Eurospagar

Y en los demás casos

Tiene en cuenta el mes, si es estudiante, etc.

En este caso, el código es

Private Sub EurosPagar_GotFocus()
EurosPagar = PrecioPt + Nz([Luz]) + Nz([Agua])
End Sub
Private Sub FechaAlquiler_AfterUpdate()
Select Case Month([FechaAlquiler])
Case 7, 8
If DLookup("estudiante", "inquilinos", "idinquilino=" & Me.IdInquilino & "") = -1 Then
PrecioPt = (PVP / 2) * (1 - DLookup("descuento", "inquilinos", "idinquilino=" & Me.IdInquilino) / 100)
Else
PrecioPt = PVP * (1 - DLookup("descuento", "inquilinos", "idinquilino=" & Me.IdInquilino) / 100)
End If
Case Else
PrecioPt = PVP * (1 - DLookup("descuento", "inquilinos", "idinquilino=" & Me.IdInquilino) / 100)
End Select
End Sub
Private Sub IdInquilino_AfterUpdate()
PVP = DLookup("pvp", "inquilinos", "idinquilino=" & Me.IdInquilino & "")
FechaAlquiler.SetFocus
End Sub
Respuesta
1

Predeterminar es útil cuando hay un valor por defecto y se entra en un nuevo registro, como es necesario conocer datos del registro actual, lo adecuado es asignarlo de forma directa.

La fórmula seria esta si el campo PVP (aun oculto) es independiente del campo calculado (la mensualidad):

= [PVP] / (1 + ABS((Month (Date) = 7 Or Month (Date) = 8) And [Estudiantes]))

Si se cumplen las dos condiciones (Estudiantes = True y ser Julio o Agosto tomando como referencia el día del cálculo) el valor devuelto es la unidad (1), en otro caso cero (0).

El resultado si se cumplen ambas condiciones dará como divisor (1+1) = 2 
Si no se cumple alguna condición (o ninguna) el divisor será (1+0) = 1 

Gracias Enrique, he dejado una imagen del formulario y una pequeña explicación adicional, por si pudiera ayudar para tu respuesta.

Gracias de nuevo.

Hoy (6/9/2022) he visto el mensaje, ya han solucionado el problema del foro:

A los administradores ¡ Gracias !

______________________________________________
Eduardo:
No veo la imagen y ampliación que comentas en tu respuesta, si el problema sigue activo te agradecería que lo volvieses a enviar.

Estaba en otro mensaje (fallo mío).

En la suma de esa línea que recoge los gastos, lo mas probable es que se aplique como sumandos algo como :

[gasto1] + [gasto2] + .... + [PVP] + [GastoN]

Si sustituimos al actual PVP por su recalculo (y corregimos el referente  [Estudiantes] ==> [Est]

Debería resultar algo como esto:

[gasto1] + [gasto2] + .... +([PVP] / (1 + ABS((Month (Date) = 7 Or Month (Date) = 8) And [Estudiantes]))) + [GastoN]

Funcionara de forma correcta con la condición indispensable de que el calculo se efectúe en el mes real (ni por adelantado ni por atrasado) si se desea hacer 'fuera del mes', sera necesaria una fecha como referente en lugar de 'Date'.

Fecha debería haber alguna disponible (recibo del mes de xxxx) y se puede utilizar en lugar de Date.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas