Power Builder - Obtener semana de un mes

 
Vista:

Obtener semana de un mes

Publicado por wend (95 intervenciones) el 16/08/2010 19:07:50
Saludos a todos.

Alguien conoce una función en PB para obtener la semana de un mes la cual me devolvería un valor entre 1 y 5
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
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

RE:Obtener semana de un mes

Publicado por JeinnerH (646 intervenciones) el 17/08/2010 21:01:09
Hola Wend. Yo estoy realizando una función similar, pero no puede regresarte sólo el número de la semana. Porque dependiendo de la fecha que se le pase por parámetro, para determinar el número de semana, es posible que la semana no corresponda al mes en curso, sino a la última del mes anterior. Esto da pie a que se pueda hasta cambiar de año, por tanto el resultado de la función sería:

El lunes que da inicio a la semana, y recibe otros parámetros por referencia, que retornan la semana, el mes y el año.

Apenas la tenga lista la pongo aquí.

Saludos.
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
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

RE:Obtener semana de un mes

Publicado por JeinnerH (646 intervenciones) el 17/08/2010 22:13:24
Al final está la función, para que la exportes, la pruedes probar con el código que sigue:

// Este es el Código de Prueba Para el Año Completo.
DateTime ldt_fecha, ldt_lunes
Integer li_semana, li_mes, li_ano
Long ll_archivo


ll_archivo=FileOpen('C:\Semana.Txt', LineMode!, Write!, LockWrite!, Replace!)
ldt_fecha=DateTime(Date(2010, 01, 01))
Do While Year(Date(ldt_fecha)) = Year(Today())
ldt_lunes=f_num_semana_mes(DateTime(ldt_fecha), li_semana, li_mes, li_ano)
FileWrite(ll_archivo, 'Fecha:'+String(ldt_fecha)+' S:'+String(li_semana)+' m:'+String(li_mes)+' a:'+String(li_ano)+' L:'+String(ldt_lunes))
ldt_fecha=DateTime(RelativeDate(Date(ldt_fecha), 1))
Loop
FileClose(ll_archivo)

// Revisar Los Resultados en el Archivo C:\Semanas.Txt


$PBExportHeader$f_num_semana_mes.srf
global type f_num_semana_mes from function_object
end type

forward prototypes
global function datetime f_num_semana_mes (datetime adt_fecha, ref integer ai_num_semana, ref integer ai_mes, ref integer ai_ano)
end prototypes

global function datetime f_num_semana_mes (datetime adt_fecha, ref integer ai_num_semana, ref integer ai_mes, ref integer ai_ano);Integer li_dia
Date ldt_fecha_relativa


ai_num_semana=0
ai_mes=Month(Date(adt_fecha))
ai_ano=Year(Date(adt_fecha))

// Primer Día Del Mes, Según la Fecha a Procesar.
ldt_fecha_relativa=Date(Year(Date(adt_fecha)), Month(Date(adt_fecha)), 01)
li_dia=DayNumber(ldt_fecha_relativa)
// Ajustar Los Dias a Lúnes=1, Domingo=7
If li_dia = 1 Then &
li_dia=8
li_dia --
// Buscar Primer Lunes Del Mes.
If li_dia > 1 Then &
ldt_fecha_relativa=RelativeDate(ldt_fecha_relativa, (8 - li_dia))

If Date(adt_fecha) < ldt_fecha_relativa Then
// La Semana Corresponde al Mes Anterior.
ldt_fecha_relativa=Date(f_num_semana_mes(DateTime(RelativeDate(Date(Year(Date(adt_fecha)), Month(Date(adt_fecha)), 01), -1)), ai_num_semana, ai_mes, ai_ano))

Else
ai_num_semana=1
Do While Not (Date(adt_fecha) >= ldt_fecha_relativa And Date(adt_fecha) <= RelativeDate(ldt_fecha_relativa, 6))
ldt_fecha_relativa=RelativeDate(ldt_fecha_relativa, 7) // Siguiente Lunes
ai_num_semana++
Loop
End If

RETURN DateTime(ldt_fecha_relativa)
end function
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:Obtener semana de un mes

Publicado por wend (95 intervenciones) el 18/08/2010 00:48:19
Gracias por tu respuesta y tu tiempo, haré la prueba con este código a ver como me va.
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