Ver Mensaje Individual
  #5  
Viejo 03/04/08, 08:42:15
vickxo vickxo is offline
Senior Member
 
Fecha de Ingreso: nov 2006
Localización: Madrid, Espaņa
Mensajes: 118
Hola, una vez q le hayas no es tan complicado ...

Mira, son varias cosas

1. La tabla interna q manejas en el ALV tiene que tene runa estructura parecida a esta:
DATA: BEGIN OF it_report OCCURS 0,
icono TYPE icon-id, "Semaforo
lights, "Semaforo
check(1), "Check box
...
END OF it_report.

Icono y lights es la q maneja los colores, check es donde le das

2. Hacer q se vea como un semaforo
FORM fill_layout USING e05_ls_layout TYPE slis_layout_alv.
** e05_ls_layout-f2code = '&ETA'.
e05_ls_layout-zebra = 'X'.
e05_ls_layout-colwidth_optimize = 'X'.
e05_ls_layout-no_min_linesize = 'X'.
e05_ls_layout-cell_merge = ''.
e05_ls_layout-box_fieldname = 'ICONO'.
e05_ls_layout-no_input = ''.
e05_ls_layout-no_vline = ''.
e05_ls_layout-no_colhead = ''.
e05_ls_layout-lights_fieldname = 'LIGHTS'.
e05_ls_layout-lights_condense = 'X'.
e05_ls_layout-totals_text = ''.
e05_ls_layout-subtotals_text = ''.
e05_ls_layout-totals_only = ''.
e05_ls_layout-key_hotspot = ''.
e05_ls_layout-detail_popup = 'X'.
e05_ls_layout-group_change_edit = ''.
e05_ls_layout-group_buttons = space.
ENDFORM. " FILL_LAYOUT


3. Actualizar ALV, yo lo hago con reuse...

FORM call_function.
DATA : li_grid_setting TYPE lvc_s_glay.
li_grid_setting-edt_cll_cb = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZFI_CARGA_MERCANCIAS'
is_layout = gs_layout
it_fieldcat = ct_fieldcat
i_save = g_save
is_variant = g_variant
it_events = gt_events[]
i_callback_user_command = 'USER_COMMAND'
it_sort = gt_sort[]
i_callback_pf_status_set = 'ALV_STATUS'
i_grid_settings = li_grid_setting
IMPORTING
e_exit_caused_by_caller = g_exit_caused_by_caller
es_exit_caused_by_user = gs_exit_caused_by_user
TABLES
t_outtab = it_report
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = 0.
IF g_exit_caused_by_caller = 'X'.
ELSE.
IF gs_exit_caused_by_user-back = 'X'. "F3
ELSE.
IF gs_exit_caused_by_user-exit = 'X'. "F15
ELSE.
IF gs_exit_caused_by_user-cancel = 'X'. "F12
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
ENDIF.

ENDFORM. " CALL_FUNCTION



4. Editar el check ...
FORM modif_catalog.
DATA: temp_fieldcat TYPE slis_fieldcat_alv OCCURS 0 WITH HEADER LINE.
LOOP AT ct_fieldcat INTO temp_fieldcat.

CASE temp_fieldcat-fieldname.
WHEN 'ICONO'.
temp_fieldcat-no_out = 'X'.

WHEN 'CHECK'.
temp_fieldcat-checkbox = 'X'.
temp_fieldcat-edit = 'X'.
temp_fieldcat-outputlen = 1.
temp_fieldcat-col_pos = 2.


WHEN 'BLDAT'.
temp_fieldcat-no_out = 'X'.

....
endcase y balblabla.
endform modif...


Para irlo manejando, usas esto:

IF wa_fichero-indi = 'X'.
wa_report-lights = '1'.
ENDIF.
IF wa_fichero-indi = 'Y'.
wa_report-lights = '2'.
ENDIF.
IF wa_fichero-indi = space.
wa_report-lights = '3'.

indi, es una variable que yo cargo en base a unas validaciones q hago, el uno carga el color rojo, el 2 el amarillo y el 3 el verde...bueno igual y es 3 rojo pero no lo recuerdo bien ya...

Lo q si es bartante relevante es q en tu user_comando tengas esto:


FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: w_answer TYPE c.
rs_selfield-refresh = 'X'. "Esto es lo q le da vida a tu ALV

CASE r_ucomm.
WHEN 'EXEC'.
...
LOOP AT it_report INTO wa_report WHERE check = 'X' AND lights = 3. "Aqui es donde puedo procesar las marcas y con semaforo verde
mas choro....
enform


Para hacer editable tu check pueba con poner ese campo como editable.......y si no pos haber se podemos hacer vale, saludos!
Supongo yo q con solo darle edit a los dos check ya tendrias puerta abierta para tratarlo...en mi caso solo use un check...

Nota: En OO se puede sin embargo no considero pertinente usar OO si la solucuon estructurada es factible y facil de implementar. Usaria OO para arboles o poner dos ALV en la misma pantalla, etc Usario OO para desarrollos q sean dificiles de visualizar con estructurado. Dos ALV en la misma pantalla no me imagino q lio te generarian en un codigo estructurado :s!
__________________
el tema esta en hacer la pregunta correcta...

Úlima edición por vickxo fecha: 03/04/08 a las 09:26:12.
Responder Con Cita