Crystal Report - Problema con agrupacion por Semana...

   
Vista:

Problema con agrupacion por Semana...

Publicado por Raul (2 intervenciones) el 01/02/2010 19:00:28
Mi problema es el siguiente, necesito agrupar por semana pero cuando me agrupa debo mostrar una descripcion diciendo cual es el primer dia de la semana. Por ejemplo:
tengo las siguientes fechas

21/01/2010
22/01/2010
23/01/2010

Estas fechas corresponden a la semana que comienza el dia 17/01 y termina el 23/01

Debo colocar la siguiente leyenda "SUBTOTAL 17/01/2010 – 23/01/2010".

La agrupacion esta hecha y me sale bien, la misma esta hecha mediante una formula.

Se me ocurre algo como sacar que dia de la fecha(dom, lun, mar,...) es
y dependiendo el dia si es 21/01/2010 cae jueves, por lo tanto para llegar al domingo (primer dia de la semana) tengo que restar 4. Lo mismo para llegar al sabado. Si alguien tiene una idea mejor por favor que me de una idea, o si cree que es la unica solucion que hay si no es mucha molestia tambien lo diga.

Una cosa, este debo ponerlo en una formula, para realizar la conexion la realizo mediante un xml de un Store Procedure.

Desde ya muchas gracias.
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:Problema con agrupacion por Semana...

Publicado por Jose Manuel Martinez (5 intervenciones) el 27/02/2010 08:24:46
Me es dificil entender tu problema y eso que lo he leido 10 veces.
pero a ver si esto te ayuda:

la funcion dayofWeek(d) me devuelve el numero de dia de la semana, en formato americano creo, es decir el primer dia es el domingo.

y pon algo asi
FECHA-(DAYOFWEEK(TODAY)-1)
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:Problema con agrupacion por Semana...

Publicado por Raul (2 intervenciones) el 01/03/2010 18:09:30
Si, soy conciente que es no fui demasiado claro, je.
Muchas gracias por contestar, resolvi el problema.
Paso a poner toda la funcion.

if(UpperCase ({Table1.AgrupaPorDia}) = 'D') then//Dia (D)
"TOTAL "+ToText({Table1.Fecha}, "dd/MM/yyyy")
else if(UpperCase ({Table1.AgrupaPorDia}) = 'W') then//Semana (W)
(
DateVar d := Date({Table1.Fecha});

while (DayOfWeek (d, crMonday) <> 1) Do
d := d - 1;

"TOTAL del " + ToText(d, 'dd/MM/yyyy') + ' al ' + ToText(d + 6, 'dd/MM/yyyy')
)
else if(UpperCase ({Table1.AgrupaPorDia}) = 'M') then//Mes (M)
"TOTAL "+ToText(Month({Table1.Fecha}), 0)+"/"+ToText(Year({Table1.Fecha}), "####")
else if(UpperCase ({Table1.AgrupaPorDia}) = 'T') then//Trimestre (T)
Switch (DatePart("q",{Table1.Fecha}) = 1, "SUBTOTAL 1er Trimestre del "+ToText(Year({Table1.Fecha}), "####"),
DatePart("q",{Table1.Fecha}) = 2, "SUBTOTAL 2do Trimestre del "+ToText(Year({Table1.Fecha}), "####"),
DatePart("q",{Table1.Fecha}) = 3, "SUBTOTAL 3er Trimestre del "+ToText(Year({Table1.Fecha}), "####"),
DatePart("q",{Table1.Fecha}) = 4, "SUBTOTAL 4to Trimestre del "+ToText(Year({Table1.Fecha}), "####"))
else if(UpperCase ({Table1.AgrupaPorDia}) = 'S') then//Semestre (S)
if(Month({Table1.Fecha}) >= 1 AND Month({Table1.Fecha}) <= 6) then
"TOTAL 1er Semestre "+ToText(Year({Table1.Fecha}), "####")
else
"TOTAL 2do Semestre "+ToText(Year({Table1.Fecha}), "####")
else if(UpperCase ({Table1.AgrupaPorDia}) = 'A') then//Año (A)
"TOTAL Año "+ToText(Year({Table1.Fecha}), "####")

{Table1.AgrupaPorDia} es un campo que me devuelve el Store Procedure, este solo posee una letra que es un filtro por lo que va a agrupar el reporte, la agrupacion del reporte esta en otra funcion.
Esta funcion va en el pie del grupo, y me muestra los string "TOTAL..." que es la informacion de que tipo de periodo se filtró.

La parte en cuestión es:
DateVar d := Date({Table1.Fecha});

while (DayOfWeek (d, crMonday) <> 1) Do
d := d - 1;

"TOTAL del " + ToText(d, 'dd/MM/yyyy') + ' al ' + ToText(d + 6, 'dd/MM/yyyy')

esto me genera el rango de la fecha, cuando comienza la semana y cuando se termina, "TOTAL del 17/01/2010 – 23/01/2010", donde {Table1.Fecha} es 21/01/2010 y cae jueves. Esto comienza el lunes ya que la empresa lo puso como requerimiento, pero para domingo solo hay que cambiar "crMonday" a "crSunday".
Yo habia hecho algo parecido pero era mas complicado y no lo utilice, habia quedado en stand by, hasta que esto lo hizo otro colega, el credito va EL (Alejandro).

La solucion no ha sido algo espectacular, la déjo porque tal vez a otro novato como yo, le puede llegar a servir.

Nuevamente, muchas gracias por contestar!!! ;)
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