Power Builder - Numero de dias de un mes

 
Vista:
sin imagen de perfil

Numero de dias de un mes

Publicado por Denys Alberto (109 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
sin imagen de perfil

Me podrias ayudar con esa funcion

Publicado por Denys Alberto (109 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
sin imagen de perfil

Gracias por tu respuesta

Publicado por Denys Alberto (109 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
Val: 176
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Hola Denys... Aqui esta tu solucion

Publicado por Antonio (1271 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
sin imagen de perfil

Gracias Antonio por tu respuesta

Publicado por Denys Alberto (109 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