Como valido dias de la semana (booleanos)

vForum público de la plataforma de desarrollo Velneo

Moderador: vCoaches

Avatar de Usuario
Wendy
vMate
vMate
Mensajes: 71
Registrado: 18 Feb 2009, 21:29

Como valido dias de la semana (booleanos)

Mensaje por Wendy »

:x Chivos ya me enoje!, espero me puedan ayudar :wink:

Estoy haciendo un Modulo para Aplicar ofertas o promociones, en la tabla tengo 7 campos booleanos cada uno un dia de la semana L, M, M, J, V, S, D.

Pues bien la idea es que al dar de alta una oferta poder decidir que dias de la semana se aplica por citar un ejemplo marco Lunes, Miercoes y Viernes.


ME comentaron que existe una funcion de velneo Subcade de formato o algo asi para saber el dia de la semana, ok, eso tambien lo entiendo o mas bien lo busco y lo estudio.

Pero! como valido?

es decir fHoy() lo trasnformo a dia de la semana con subcadea, y resulta que es un Viernes y pensemos que hoy es viernes pero para llegar a viernes tengo que pasar por los dias anteriores, Saben que creo que es la hora pues ni yo misma me entiendo :x :?:

Lo que quiero es tal vez con un if-> validar .

Perdon chicos, de verdad estoy trabada, espero que alguno de ustedes me ayude.


Saluditos y Besitos
El verdadero amor es como los espíritus: todos hablan de ellos, pero pocos los han visto...
Avatar de Usuario
Fran
vCoach
vCoach
Mensajes: 6599
Registrado: 21 Sep 2005, 08:23

Mensaje por Fran »

Buenos dias:

Podrías hacerlo con 7 ifs, comparando el día de la semana que obtienes con la cadena de formato con su correspondiente booleano:

if ('DiaDeLaSemana'="Lunes") & ( %LUNES?% = 1 )
--- Es válido para el lunes

if ('DiaDeLaSemana'="Martes") & ( %MARTES?% = 1 )
--- Es válido para el martes

etc
Un saludo,

Francisco Javier Pérez Novo
EfeUno Consultores de Gestión y Software, S.L.
fjpnovo@efeuno.org
http://www.efeuno.org
(+34) 91 519 44 86
Skype: Fran-EfeUno

Google Maps:
40.447943147972445, -3.6719655990600586
Avatar de Usuario
Cuco
vLeader
vLeader
Mensajes: 1179
Registrado: 20 Sep 2005, 20:45

Mensaje por Cuco »

Yo lo haría como dice Fran pero, como las opciones son excluyentes, has de construir las alternativas con un código como éste:

.... if condición lunes
............. instrucción set 'ok' = 1
.....elseif condición martes
............. instrucción set 'ok' = 1
.....elseif condición miércoles
............. instrucción set 'ok' = 1
.....elseif..............................................
............................................................
.....elseif condición domingo
............. instrucción set 'ok' = 1
....if 'ok'
.............instrucción 'aplicar oferta'

porque si, p.e., el día es martes ya no tienes que comprobar las otras posibilidades restantes. No es una cuestión crítica pero la lógica es mejor y lo que es mejor, es mejor.
杜鹃鸟
Juan Miguel Figueroa Dorrego

Fontanía Lógica ™, E.P.I.
Una empresa personal imaginaria
Posición:
43.532928,-5.628616
Avatar de Usuario
Wendy
vMate
vMate
Mensajes: 71
Registrado: 18 Feb 2009, 21:29

Mensaje por Wendy »

:oops: Fran y Cuco, antes que todo, quiero disculparme por tardarme tanto en responder, y sobre todo en agradecer su ayuda como siempre puntual y desinteresada.

Les prometo que en los proximos dias les dare mas lata si, jiji, pero tambien contestare lo mas rapido posible.

Chicos, volviendo con esto, y checando otros post, veo que me tengo que quitar de la cabeza los if, y comenzar a trabajar con Busquedas, o cargar listas, y sobre todo con indices.

Tomando esto en cuenta, como puedo filtrar un cargar lista, por un indice, digamos Semana que contenga los dias de la semana pero sin embargo que solo cargue los registros del dia en curso?

Mmm , lo que veo dificilin es como comparar el dia se la semana fHoy con un booleano...\

Se me ocurre a al iniciar la aplicacion mande correr un proceso que asigne valor a una variable segun el dia de la semana si se valida a que es lunes que la variable tenga el texto Lunes, y ya con esto pido:

Cargar lista-> Semana, VariableSEmana

es decir, el indice semana es Multiples claves, donde tengo todos los Booleanso Lunes, Martes, miercoles, etc,

y segun yo decir que la resolucion del indicde sea por medio de la variable, Upss! esperen pero sigo teniendo booleanos, :cry: :cry: hay tan bien que iba :arrow:

Bueno dejen le sigo pensando pero creo que si ando ya por buen camino :?:

Saluditos!!
El verdadero amor es como los espíritus: todos hablan de ellos, pero pocos los han visto...
Avatar de Usuario
Cuco
vLeader
vLeader
Mensajes: 1179
Registrado: 20 Sep 2005, 20:45

Mensaje por Cuco »

En mi tabajo dispensamos medicamentos periódicamente a pacientes externos al hospital y lo hacemos sólo 4 días a la semana, actualmente L M X y V pero puede cambiar, por lo que la aplicación que gestiona esta actividad, lo citará para la siguiente entrega poco antes de que se cumpla 1 mes, teniendo en cuenta los días de dispensación. Para ello, en una variable global tengo una cadena de caracteres como la siguiente: 1235. Cuando voy a calcular el día de la próxima entrega sumando 30 días al día de hoy, compruebo mediante una subcadena de formato, la fecha ofrecida tiene una de los números de los contenidos en la variable mediante la función fChekSet(), si es así acepta, sino resta un día y vuelve a comprobar, etc.. (También comprobamos los días festivos pero eso es otra historia)

Todo esto viene a que en vez de usar tanto booleano puedes expresar los días de oferta mediante una cadena que pueda contener todas las psibilidades y hacer luego la comparación.
Ver ayuda: 36.4.2 Subcadenas de formato

u -> Visualiza el día de la semana en número de un campo fecha (1-7; Lunes=1)

Ej.: Para que una columna muestre sólo el día de la semana del campo FECHA, escriba %FECHA#&u% -> 7.

&w -> Visualiza el número del día de la semana de un campo fecha (0-6; Domingo =0)

Ej.: Para que una columna muestre sólo el número del día de una semana de un campo FECHA, escriba %FECHA#&w% -> 0.

Autor: Velneo, S.A.
杜鹃鸟
Juan Miguel Figueroa Dorrego

Fontanía Lógica ™, E.P.I.
Una empresa personal imaginaria
Posición:
43.532928,-5.628616
Avatar de Usuario
DESARROLLADOR
vLeader
vLeader
Mensajes: 1504
Registrado: 17 Ago 2006, 17:49

Mensaje por DESARROLLADOR »

Si te sirve este proceso que yo uso.

Yo hago una campaña publicitaria, de tal fecha a tal fecha y la asigno aun grupo.

Y asigno un descuento.

Te envio una imagen que pongo al preder el foco cuando jalo el producto.

Ya lo complementas. yo creo que si pones los booleanos te podria fucnionar

pasa=0

if ('DiaDeLaSemana'="Lunes") & ( %LUNES?% = 1 )
-----set pasa=pasa+1
if ('DiaDeLaSemana'="Martes") & ( %MARTES?% = 1 )
-----set pasa=pasa+1

al final

if si pasa>0
-----Mesaje hay oferta hoy
else
-----mensaje no hay oferta

SAludos.
Adjuntos
Ofertas.JPG
(47.94 KiB) Descargado 246 veces
Avatar de Usuario
Wendy
vMate
vMate
Mensajes: 71
Registrado: 18 Feb 2009, 21:29

Mensaje por Wendy »

Cuco y Desarrollador, muchas gracias por sus comentarios, en especial a ti Cuco por tenerme paciencia :wink:

Recapitulando, y en base a este otro post donde les pedi ayuda, sobre recorrer lista.

http://forum.velneo.com/es/viewtopic.php?t=22000


Por fin me entro a la cabeza que lo que necesito son las busquedas jiji,

Ahora les pregunto, tengo ua busqueda de Ofertas, y lo que estoy haciendo es agregar los indices de los boleanos Lunes martes etc>>> y al agregar los indices en Condicion Activa es donde pongo por citar un ejemplo:

para el Indice Lunes (fFormatFecha( fHoy(), "&u" ) = 1 ) & (%ES-LUNES% = 1)

Con esto segun yo, y es en lo que les pido ayuda, si no se cumple la condicion pues no toma el indice y asi solo me mostrara una lista de registros cuando la condicion se cumpla. Cierto?

Luego sigo agregando indices con la Mezcla Añadir...

Otra duda, si tambien voy a validar un rango entre horas, pues supongamos que una oferta aplica los lunes pero solo de 9am a 11am, tambien puedo poder esta condicion en el Activo del Indice?

Cuco, mencionas que:
en una variable global tengo una cadena de caracteres como la siguiente: 1235. Cuando voy a calcular el día de la próxima entrega sumando 30 días al día de hoy, compruebo mediante una subcadena de formato, la fecha ofrecida tiene una de los números de los contenidos en la variable mediante la función fChekSet(),
Como das valor a esa variable, es decir en un formularo tienes algun ComboBox o chekc y al seleccionarlos mandas un proceso.

O esos dias son base para todos, y se dan de alta en una configuracion general?

Otra preguntita, la funcion fChekSet dice que verifica que todos los caracteres de la primera cadena pertenescan a la 2, aqui mi pregunta puede ser que en la primer cadena solo tengas un caracter igual a la segunda cadena y con esto se cumple no es necesariamente que sean todos iguales?

Saluditos, prometo ya terminar con esto que pense seria facil, pero saben he aprendido mucho con este problemita :wink:
El verdadero amor es como los espíritus: todos hablan de ellos, pero pocos los han visto...
Avatar de Usuario
Cuco
vLeader
vLeader
Mensajes: 1179
Registrado: 20 Sep 2005, 20:45

Mensaje por Cuco »

En mi caso es una condición general. Yo sólo quería que vieras una técnica que evita tener 7 campos booleanos e índices correspondientes. Si es una condición general creas una variable global de caracteres alfa40 en disco, p.e. $DIAS_OFERTA$, pones en el menú que tengas de parámetros de configuración un control para editar esa variable, con lo que la puedes modificarla por temporadas. Luego, cuando lo necesites, comparas el día de la semana de 'hoy'.

En el menú de configuración:

$DIAS_OFERTA$ = "135"

Al comienzo del proceso:

Set -> cDíaSemHoy = fFormatFecha(fhoy(), "&u")
Set -> bOferta = fChekSet('cDíaSemHoy', $DIAS_OFERTA$"


y en el momento de comprobar

if 'bOferta'
...... subproceso


Si los días de oferta dependen del artículo a vender, en la tabla de artículos debería existir un campo Alfa40, p.e., %DIAS_OFERTA%, donde le indicas para cada artículo los días que tienen oferta:

Al comienzo del proceso:

Set -> cDíaSemHoy = fFormatFecha(fhoy(), "&u")

y en el momento de comprobar:

Set 'bOferta'-> fChekSet('cDíaSemHoy', %DIAS_OFERTA%")
if 'bOferta'
...... subproceso




La función fChekSet( CadenA, Cadena B ) comprueba que todos lo caracteres de A estén en B
entonces, Si cadena A es, p.e., "3" y B, "135" (Lunes, Miércoles, Viernes), la función devuelve 1 (Sí)
Si A no es ni 1, ni 3, ni 5, devuelve 0 (No)
Es muy útil para chequear condiciones alternativas múltiples, para visibilidad, colores, etc...., en vez de enlazar condiciones sucesivas con '|' o sentencias 'if' y 'elseif' sucesivas por cada una de la condición, p.e.:
en fórmulas:
' tipoPersona' = "J" | 'tipoPersona' = "M" | 'tipoPersona' = "S"

o en procesos:
***
if 'tipoPersona' = "J"
elseif 'tipoPersona' = "M"
elseif 'tipoPersona' = "S"


es equivalente a

fChekSet( 'tipoPersona', "JMAS" )

si hay que añadir otra condición, entonces añades otra letra, p.e., "JMASQ"

Con respecto a controlar las ofertas entre horas te diré que es más complicado y exige un análisis más detallado. Lo pensaré y, si no te lo explica nadie, te lo explicaré yo, pero no ahora.

*** Insito en el uso de 'if' y 'elseif' para condiciones excluyentes: es mejor estilo.
杜鹃鸟
Juan Miguel Figueroa Dorrego

Fontanía Lógica ™, E.P.I.
Una empresa personal imaginaria
Posición:
43.532928,-5.628616
Avatar de Usuario
Cuco
vLeader
vLeader
Mensajes: 1179
Registrado: 20 Sep 2005, 20:45

Mensaje por Cuco »

Wendy, mi niña, como nadie aportó nada al respecto aun (somos gente ocupada), para el asunto del control del intervalo horario he podido hacer a esta hora lo siguiente::

1.- Usando las subcadenas de formato[ fFormatHora('cHoraSup', "$H$M" ) ], cambias las dos variables que definen el intervalo horario de forma que queden como cadenas de esta manera 9:30 -> 930 ó 12:00 -> 1200

2. Las paso las dos a números con la fórmula fValor( 'cHoraInf' )

Set -> nHoraSup, fValor( fFormatHora( $HORA_SUP$, "$H$M")
Set -> nHoraInf, fValor( fFormatHora( $HORA_INF$, "$H$M")


3.- Hago lo mismo con la hora del momento

Set -> nAhora , fValor( fAhora() )

4.- y luego comparo

if ! ( nAhora > nHoraSup | nAhora < nHoraInf )
.....Subproceso


Podría hacerse directamente comparando en formato hora, pero siempre tuve problemas con este formato y no me fío. Inténtalo tú, como ejercicio.
杜鹃鸟
Juan Miguel Figueroa Dorrego

Fontanía Lógica ™, E.P.I.
Una empresa personal imaginaria
Posición:
43.532928,-5.628616
Avatar de Usuario
Wendy
vMate
vMate
Mensajes: 71
Registrado: 18 Feb 2009, 21:29

Mensaje por Wendy »

:wink: Cuco, definitivamente estoy en deuda contigo, de verdad te agradesco mucho el que te tomes el tiempo de explicarme con detalle cada tema del que tengo alguna duda.

Prometo estudiarlo, hacer ejercicios, y claro mostrar mi trabajo final, esperando que a otros mas les ayude.


Mil gracias Cuco, besitos!
El verdadero amor es como los espíritus: todos hablan de ellos, pero pocos los han visto...
Responder