Fabian, te paso una rutina (bastante desprolija) donde en cada caracter de la cola le doy color y marco el comienzo y fin de una estadia. El color indica el estado, no se puede colocar en un solo caracter mucha info
, pero se podria hacer algo mas grande para cada mesa. Son porciones de codigo como para que tengas una idea y adaptarlo.
cargacola ROUTINE
SETCURSOR(CURSOR:WAIT)
CLEAR(DayQue)
FREE(DayQue)
LOOP i# = 0 TO 30
?List1{PROPLIST:Header ,i#+2} = FORMAT(DAY(LOC:FechaDesde+i#),@N02)
! ?List1{PROPSTYLE:BackColor, i#+2} = COLOR:Red
END
Loc:Any &= WHAT(DayQue,1)
Loc:Any = ''
Loc:Any &= WHAT(DayQue,2)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,3)
Loc:Any = COLOR:Silver
Loc:Any &= WHAT(DayQue,4)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,5)
Loc:Any = COLOR:none
LOOP i# = 2 TO 32
Loc:Any &= WHAT(DayQue,i#*5-4)
Loc:Any = CHOOSE(((LOC:FechaDesde+i#-2) % 7) + 1,'Do','Lu','Ma','Mi','Ju','Vi','Sa')
Loc:Any &= WHAT(DayQue,i#*5-3)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,i#*5-2)
setnull(Res:c1)
Respuesta{PROP:SQL}='select count(*) from Feriados where CONVERT(NVARCHAR(10),Fecha,120)='''&format(LOC:FechaDesde+i#-2,@D10-)&''' '
NEXT(Respuesta)
! message(Res:c1&'|'&format(LOC:FechaDesde,@D10-)&'|'&Respuesta{PROP:SQL})
IF Res:c1=1
Loc:Any = COLOR:Red
ELSE
IF CHOOSE(((LOC:FechaDesde+i#-2) % 7) + 1,true,False,False,False,False,False,True)
Loc:Any = COLOR:Blue
ELSE
Loc:Any = COLOR:Silver
END
END
Loc:Any &= WHAT(DayQue,i#*5-1)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,i#*5)
Loc:Any = COLOR:none
END
ADD(DayQue)
UniH:IdHotel=LOC:IdHotel
SET(UniH:PorHotel2,UniH:PorHotel2)
LOOP UNTIL Access:Unidades.Next()
IF UniH:IdHotel<>LOC:IdHotel THEN BREAK.
IF UniH:Activo
Loc:Any &= WHAT(DayQue,1)
Loc:Any = CHOOSE(LOC:Real=0, UniH:Descripcion, UniH:DescripcionReal)
Loc:Any &= WHAT(DayQue,2)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,3)
Loc:Any = 0dfec94H
Loc:Any &= WHAT(DayQue,4)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,5)
Loc:Any = COLOR:none
LOOP i# = 2 TO 32
Loc:Any &= WHAT(DayQue,i#*5-4)
Loc:Any = ' '
Loc:Any &= WHAT(DayQue,i#*5-3)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,i#*5-2)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,i#*5-1)
Loc:Any = COLOR:none
Loc:Any &= WHAT(DayQue,i#*5)
Loc:Any = COLOR:none
END
ADD(DayQue)
END
END
CLEAR(RES:RECORD)
Respuesta{PROP:SQL}='select v.Llegada,datediff(dd,v.Llegada,v.Salida) as cant,v.IdUnidad,u.Descripcion,v.IdServicio,e.Descripcion Estado, '&|
choose(LOC:EligeEoA='Estado','ev.Descripcion EstVou,ev.NormalFG,ev.NormalBG,ev.SelectedFG,ev.SelectedBG','ta.Descripcion EstVou,ta.NormalFG,ta.NormalBG,ta.SelectedFG,ta.SelectedBG')&',v.bloqueo,v.idvoucher,u.DescripcionReal from voucher v, unidades u,EstadoUnidad e,EstadoVoucher ev, TipoAgente ta '&|
'where (('&LOC:Real&'=1 and v.idUnidadcomplejo=u.idUnidad) or ('&LOC:Real&'=0 and v.idUnidad=u.idUnidad)) and salida>='''&FORMAT(LOC:FechaDesde,@D06)&''' and llegada<='''&FORMAT(LOC:FechaDesde+30,@D06)&''' and e.IdestadoUnidad=u.IdEstadoUnidad '&|
'and ta.IdTipoAgente=v.IdTipoAgente and ev.IdEstadoVoucher=v.IdEstadoVoucher and u.IdHotel='&LOC:IdHotel&' and u.activo=1 and v.activo=1 '&|
'order by v.idunidad,v.bloqueo Desc '
IF ERRORCODE() THEN STOP (FILEERROR()). !FILEERROR ES EL ERROR DEL SQL
LOOP
NEXT(Respuesta)
IF ERRORCODE() THEN BREAK.
! LOC:FechaInicio=deformat(sub(res:c1,1,10),@D10-)-deformat(LOC:FechaDesde,@D10-)+1
IF deformat(sub(res:c1,1,10),@D10-)-LOC:FechaDesde>=0
LOC:FechaInicio=deformat(sub(res:c1,1,10),@D10-)-LOC:FechaDesde+1
cantdias#=RES:C2
ELSE
LOC:FechaInicio=1
cantdias#=RES:C2-ABS(deformat(sub(res:c1,1,10),@D10-)-LOC:FechaDesde)
END
!'-deformat('05/01/2008',@D2)+1
Unidad=CHOOSE(LOC:Real=0, RES:C4, RES:C14)
GET(DayQue,Unidad)
IF ERRORCODE()
message('mal!!!: no encuentra unidad'&CHOOSE(LOC:Real=0, RES:C4, RES:C14))
ELSE
!Para marcar el comienzo de la reserva
LOOP I#=1 TO cantdias#
Loc:Any &= WHAT(DayQue,(LOC:FechaInicio+I#)*5-4)
IF I#=1
Loc:Any = '['
ELSIF I#=cantdias#
Loc:Any = ' '
ELSE
Loc:Any = ' '
.
IF LOC:FechaInicio+I#=TODAY()
Loc:Any = 'X'
END
Loc:Any &= WHAT(DayQue,(LOC:FechaInicio+I#)*5-3)
Loc:Any = res:c8
Loc:Any &= WHAT(DayQue,(LOC:FechaInicio+I#)*5-2)
Loc:Any = res:c9
Loc:Any &= WHAT(DayQue,(LOC:FechaInicio+I#)*5-1)
Loc:Any = res:c10
Loc:Any &= WHAT(DayQue,(LOC:FechaInicio+I#)*5)
Loc:Any = res:c11
put(DayQue)
END
END
END
DISPLAY
SETCURSOR
Despues para ubicar la posicion
GET(DayQue,CHOICE(?List1))
IF ?List1{prop:column}>1
....
....
LOC:FechaD=LOC:FechaDesde+?List1{prop:column}-2
end
Suerte!
Anibal