Power Builder - Colorear Celdas dinamicamente

 
Vista:

Colorear Celdas dinamicamente

Publicado por Carolina (141 intervenciones) el 07/11/2019 13:34:43
Hola a todos! tengo una consulta que es la siguiente: tengo una datawindow crosstab, que muestra el estado de las habitaciones de un hotel en un mes en particular (seleccionado por parametros).
Cada fila corresponde a una habitacion, y cada columna es un dia del mes que se esta mostrando,Ahora bien, cada celda muestra iniciales del estado de la habitacion ese dia, (O=Ocupada, R=Reservada, etc) Yo le puse diferentes colores segun el estado de la habitacion por ejemplo: O = rojo, R = verde.
Ahora me piden si puedo hacer que los colores cambien para las reservas segun el numero de reserva
Yo hice 2 arrays, en uno pongo todas las reservas diferentes (una reserva puede ocupar mas de una habitacion) y en otro tipo string asigno colores a cada reserva diferente
entonces reservas[x] = Nº de reserva y colores[x] = RGB(0, 255 + x, 0) por ej tengo algo así
Ahora tengo que ponerle el color a cada celda que tenga una R de reserva pero diferente para cada numero, pero no se como se hace dinamicamente.
Gracias al que pueda darme una mano con este problema!!!!!
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
Imágen de perfil de Leonardo Daniel A.
Val: 832
Oro
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Colorear Celdas dinamicamente

Publicado por Leonardo Daniel A. (386 intervenciones) el 09/11/2019 01:29:43
la verdad no te entendi bien.... pega una imagen de lo que tienes y como deberia quedar,, una imagen vale mas que mil palabras
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

Colorear Celdas dinamicamente

Publicado por antonio (1252 intervenciones) el 15/11/2019 19:14:55
Hola Carolina:

Entra al painter del datawindow, selecciona un campo y entra a las propiedades, despues selecciona la opción de Background y dale clic en el botoncito del lado derecho y despues en la ventana que aparece de Expression coloca este código:

if(estatus ='R',RGB(255,0,0), if(estatus='O',RGB(255,255,0),RGB(0,255,128))

estaus = es ejemplo de un campo que tiene los valores "O", "R",etc.

esto te servira para que cambie el color de fondo, lo mismo debes hacer con el color de las letras y debes ponerlo en cada campo

Espero te sirva
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

Colorear Celdas dinamicamente SOLUCIONADO!!!

Publicado por Carolina (141 intervenciones) el 21/11/2019 15:39:14
Hola chicos!! Primero Leonardo, no puedo insertar imagenes acá no me permite porque no estoy registrada.Segundo, Antonio: lo que me decís es lo que tenía hecho hasta ahora, lo que yo quería era poder hacerlo dinamicamente y poder asignarle colores a las distintas reservas.
Lo hice de esta manera, lo comparto para el que lo necesite:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
wf_color_reservas()
//Esta funcion le pone un color diferente a cada reserva diferente, cuando la reserva es de contingentes.Para los demás estados de la habitacion (Ocupada, Fuera de Uso, En Limpio, etc) los colores son unicos por cada estado (ocupada = rojo, Fuera de Uso = negro, En Limpio = amarillo, etc)
 
Long vid_Reserva, cant, v_fila, v_col, a_Reservas[ ], vid_habitacion
datetime f1, f2
String vid_estado, a_colores[ ], vtipo_reserva, v_contingente
 
Declare prox_rc cursor for
	select distinct(id_reserva), fecha_i, fecha_f, 'C' as vtipo_reserva
	From Hmv_reservas_contingentes
	where id_hotel = :vid_hotel_actual AND id_Reserva IN (Select DISTINCT(id_Reserva) From Hmv_maincouranse)
	UNION
	select distinct(id_reserva), fecha_i, fecha_f, 'P'
	From Hmv_reservas_pasajeros
	where id_hotel = 1 AND contingente = 'Y' AND id_Reserva IN (Select DISTINCT(id_Reserva) From Hmv_maincouranse)
	order by vtipo_reserva, fecha_i;
 
//En el vector a_reservas pongo cada numero de reserva distinto que se muestra en el plano ese mes.El plano es mensual, cada fila es una habitacion y cada columna es el dia del mes.
 
Open prox_rc;
cant = 0
Do while Sqlca.Sqlcode = 0
	Fetch prox_rc into :vid_reserva, :f1, :f2, :vtipo_reserva;
	If Sqlca.sqlcode = 100 then
			exit
		else
			cant = cant + 1
			a_Reservas[cant] = vid_Reserva
		End if
Loop
Close prox_rc;
 
a_colores = {'16777088', '8421631', '16754856',  '33023', '16758711', '12615935', '64000', '14862079', '6160571','4079359', '52428', '9830399', '9882571', '50372', '12648641', '16888215', '16999215', '16877215', '17777215','17877215','19777215', '14777215', '14877210', '14888215','14999210','14999225','14999315', '11777210','11777225', '11777240', '10666210', '67250', '16348711', '10665230', '67500', '14615235', '67800' ,'10666245' , '12615935', '10346245', '8761539', '6482598','15329721', '19655218', '18333215'}
 
For v_fila = 1 To datawin.rowcount()
	For v_col = 3 TO f_ultimo_diames( f_mesnum(w_maincouranse.ddlb_meses.text), Integer(ddlb_anios.text)) + 2
		vid_estado = datawin.getitemstring(v_Fila,v_col)
		If vid_estado = 'O' then
				datawin.setitem(v_fila, v_col, vid_estado + '   ' + '255')
			elseif vid_estado = 'EL' then
				datawin.setitem(v_fila, v_col, vid_estado + '   ' + '65535')
			elseif vid_estado = 'FU' then
					datawin.setitem(v_fila, v_col, vid_estado + '   ' + '0')
			elseif vid_estado = 'OA' then
					datawin.setitem(v_fila, v_col, vid_estado + '   ' + '16711935')
			elseif	Mid(vid_estado, 1, 1) = 'R' then
				vId_habitacion = datawin.getitemnumber(v_fila, 1)
				Select id_Reserva Into :vid_reserva From Hmv_maincouranse Where id_hotel = :vid_hotel_actual AND id_habitacion = :vid_habitacion AND num_dia = :v_col - 2 and substring(id_estado, 1, 1) = 'R';
				If Sqlca.sqlcode = -1 then 	Messagebox("ERROR", "Fila = " + string(v_fila) + " COLUMNA = " + string(v_col) + sqlca.sqlerrtext)
				if vid_estado <> 'RC' then
						Select MAX(contingente) INTO :v_contingente From Hmv_reservas_pasajeros where id_reserva = :vid_reserva;
						If v_contingente = 'Y' then
								vtipo_Reserva = 'P'
							else
								vtipo_reserva = 'C'
							end if
						else
							vtipo_Reserva = 'C'
				End if
				If vtipo_reserva = 'C' then
						If vid_Reserva > 0 then
								For cant = 1 To Upperbound(a_Reservas)
									If a_reservas[cant] = vid_reserva then exit
								Next
								If cant <= Upperbound(a_colores) then
										datawin.setitem(v_fila, v_col, vid_estado + '   ' + a_colores[cant])
									else
										datawin.setitem(v_fila, v_col, vid_estado + '   16777215')
								End if
							else
								Messagebox("ERROR EN LA BUSQUEDA DE LA RESERVA", string(vid_Reserva))
						End if
					else
						If vid_estado = 'RP' then
								datawin.setitem(v_fila, v_col, vid_estado + '   ' + '16711680')
							elseif vid_estado = 'RS' then
								datawin.setitem(v_fila, v_col, vid_estado + '   ' + '16744448')
							else
								datawin.setitem(v_fila, v_col, vid_estado + '   ' + '16763541')
						End if
				End if
			Else
				datawin.setitem(v_fila, v_col, vid_estado + '     ' + '12632256')
		End if
	Next
Next

Esta funcion la ejecuto siempre inmediatamente despues del retrieve del datawindow del plano.

//espero que les sirva!!!!!
Saludos y gracias! Carolina
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 Leonardo Daniel A.
Val: 832
Oro
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Colorear Celdas dinamicamente SOLUCIONADO!!!

Publicado por Leonardo Daniel A. (386 intervenciones) el 21/11/2019 16:54:42
ahh ok, muy bien.!

hace dias me tope con un problema de colorear una celda segun el estatus del campo (hasta 4 valores), entonces lo que hice fue crear una funcion :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
f_color_estatus
parametro string     as_status
 
long ll_color
choose case as_status
    case 'A'
          ll_color = gl_color_cielo
    case 'C'
          ll_color = gl_color_rojo
    case 'T'
          ll_color = gl_color_verde
    case 'L'
          ll_color = gl_color_amarillo
end choose
//  gl_color_x   son variables globales con los codigos de color,   esta simplificado porque realmente lo tengo en un nvo
return ll_color

y ya solo la llamaba en la propiedad Background - Color del control que queria colorer f_color_estatus(status)

digo te puede servir, talvez podrias tener los colores en una tabla de la b.d., no se, fui un loco y me ofusque jaja

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

Colorear Celdas dinamicamente SOLUCIONADO!!!

Publicado por Carolina (141 intervenciones) el 21/11/2019 18:20:51
Ok! No esta mal la idea, lo voy a tener en cuenta.Yo tuve que hacer un array de colores enorme! (creo que le debo haber puesto como 35, 40 colores!!!) es que en temporada hay muchas reservas de grupos diferentes!
Lo voy a tener en cuenta!
Gracias Leonardo!
Saludos, Carolina
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