Power Builder - Numero de dias de un mes

   
Vista:

Numero de dias de un mes

Publicado por Denys Alberto (104 intervenciones) el 30/03/2010 17:21:42
Hola a todos y agradezco por las posibles respuestas y ayudas q me puedan brindar, bueno el problema es el siguiente: Tengo en un ddlb_1 los meses, ahora como realizo para capturar el numero de dias del mes seleccionado, y de acuerdo a ello agregar columnas en un datawindow, desde luego que el datawindow ya lo he realizado por defecto a 31 dias.

Ejemplo:
Si selecciono enero: debe dar como resultado 31 dias
Si selecciono Febrero: debe dar de 28 o 29 dias de acuerdo al año, debe ser automatico
y asi sucesivamente...y de acuero a los dias, crear el numero de columnas..

Bueno de antemano les agradezco por anticipado..Muchos saludos .:Denys Jaramillo
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

RE:Numero de dias de un mes

Publicado por JorgE (9 intervenciones) el 30/03/2010 19:04:10
Hola.

1.
Antes que nada deberás de conocer dos datos importantes.
El año que no indicas como la obtienes.
El mes que bueno seleccionas de un ddlb_

crea una función que te retorne un integer con dos argumentos (año, mes)

dentro de la función creas una fecha del primer dia del mes siguiente al ingresado.

a esta fecha lo restas un dia y el resultado será el último día del mes actual que seleccionaste en tu ddll.

y retornas el numero del último día.

2. mostrar/ocultar columnas de tu data window ya definido,

por defecto deberán estar visibles las 31 columnas correspondientes a los días.

cada vez que hagas un changed en el ddlb_ llamas a la función la cual te devolverá el último día del mes seleccionado y luego con un simple for ocultaras las ultimas columnas.

FOR li_loop = 31 TO li_UltimoDia
dw_1.Modify("dia_" + string(li_loop) + ".visible = '0'")
NEXT

asumiendo de que el nombre de columna es dia_xx donde x es el numero de dia.

Saludos.

JorgE
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

Me podrias ayudar con esa funcion

Publicado por Denys Alberto (104 intervenciones) el 30/03/2010 19:53:55
Hola JorgE, gracias por tu respuesta, sin embargo te pediría si me podrías ayudar con esa funcion. te lo agradecería bastate.

Saludos Denys
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

RE:Me podrias ayudar con esa funcion

Publicado por JorgeE (9 intervenciones) el 31/03/2010 05:23:13
global type f_getultimodiames from function_object
end type

forward prototypes
global function integer f_getultimodiames (integer ai_mes, integer ai_anio)
end prototypes

global function integer f_getultimodiames (integer ai_mes, integer ai_anio);date ld_fecha

// Obtener el mes sigueinte
IF ai_mes = 12 THEN
ai_mes = 1
ai_anio++
ELSEIF ai_mes < 12 THEN
ai_mes ++
END IF
// Primer dia del mes siguiente
ld_fecha = date('01' + '/' + string(ai_mes,"00") + '/' + string(ai_anio,'0000'))
// Ultimo día del mes actual
ld_fecha = RelativeDate(ld_fecha, -1)

return DAY(ld_fecha)
end function


El changed del ddlb_ seria mas o menos algo asi.
*********************************************************
Integer li_UltimoDia, li_loop
li_UltimoDia = f_GetUltimoDiaMes(5,2010) // mes y año como args.
FOR li_loop = 28 TO 31
IF li_loop <= li_UltimoDia THEN
dw_1.modify("dia_" + String(li_loop) + ".visible = '1'")
ELSE
dw_1.modify("dia_" + String(li_loop) + ".visible = '0'")
END IF
NEXT
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

Gracias por tu respuesta

Publicado por Denys Alberto (104 intervenciones) el 06/04/2010 16:06:15
gracias JorgeE por tu tiempo, me ha servido bastante tu ayuda..un saludo...
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 Antonio

Hola Denys... Aqui esta tu solucion

Publicado por Antonio (1114 intervenciones) el 07/04/2010 03:58:47
Hola Denys:

1.- Crea una funcion llamada f_finmes
2.- coloca los parametros que recibira de esta forma:

Pass BY Argument Type Argument Name
Value integer vr_mes
Value integer vr_axo

Esta funcion debe retornar un valor de tipo integer

3.- Coloca éste código dentro del script de la funcion f_finmes()

string ls_meses[12] = {'31','28','31','30','31','30','31','31','30','31','30','31'}
integer li_return

li_return = Integer ( ls_meses[vr_mes] )

if vr_mes = 2 then
if ( Int ( ve_axo / 4 ) - ( ve_axo / 4 ) ) = 0 then
li_return = 29
end if
end if

return li_return

4.- Llama a la funcion de cualquiera de las dos siguientes formas:

integer li_dia
date ld_fecha

ld_fecha = Date ( String ( Today(),'dd/mm/yyyy' ) )
porque convertir la fecha a date y no ponerla directamente, porque la funcion today(), tambien te devuelve un valor en cero del time().

a:
li_mes = f_finmes (Month ( ld_fecha), Year ( ld_fecha) )

b:

li_mes = f_finmes (li_mes, li_axo )

Espero que te sirva...

Saludos desde México
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

Gracias Antonio por tu respuesta

Publicado por Denys Alberto (104 intervenciones) el 07/04/2010 17:32:12
Agradezco por tu respuesta proporcionada...un saludo desde Perú
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