#1
|
|||
|
|||
Duda campo checkbox en ALV
Buenas, estoy intentando insertar una columna en un ALV como checkbox pero me sale el botoncito para marcar el registro no el CHECKBOX como tal. Os pongo mi código a ver, eh estado buscando por ahí y entodos los sitios esta sim9ilar a como lo he hecho pero no quiero el boton de seleccionar quiero el checkbox que se pueda marcar con "v".
El campo de la tabla interna con la que saco el alv tiene declarado el campo checkbox como char1. PERFORM asignar_campo_a_catalogo TABLES p_lt_fcat USING: 'CHECKBOX' 'X' 'X ' 'X' 'X' ' ' '', 'PERNR' ' ' ' ' ' ' ' ' ' ' 'NºEmpleado', 'ENAME' ' ' ' ' ' ' ' ' ' ' 'Nombre', 'BEGDA' ' ' ' ' ' ' ' ' ' ' 'Fecha Ini.', 'ENDDA' ' ' ' ' ' ' ' ' ' ' 'Fecha Fin.', 'IT' ' ' ' ' ' ' ' ' ' ' 'Infotipo', 'SUBTYPE' ' ' ' ' ' ' ' ' ' ' 'Subtipo', 'ANZHL' ' ' ' ' ' ' ' ' ' ' 'Cantidad', 'BETRG' ' ' ' ' ' ' ' ' ' ' 'Importe'. *&---------------------------------------------------------------------* *& Form asignar_campo_a_catalogo *&---------------------------------------------------------------------* * Asignar campo al catalogo ALV *----------------------------------------------------------------------* * -->P_FIELDNAME Nombre de campo en el reporte * -->P_KEY Indicador 'campo clave' * -->P_COL_POS N° columna *----------------------------------------------------------------------* FORM asignar_campo_a_catalogo TABLES pt_cat STRUCTURE wa_fcat USING p_fieldname LIKE wa_fcat-fieldname p_key LIKE wa_fcat-key p_col_pos TYPE c p_input LIKE wa_fcat-input p_checkbox LIKE wa_fcat-checkbox p_hotspot LIKE wa_fcat-hotspot p_reptext_ddic LIKE wa_fcat-reptext_ddic. STATICS l_col_pos LIKE sy-cucol. * Asignar atributos de campo en el catalogo de cabecera ALV CLEAR wa_fcat. READ TABLE pt_cat INTO wa_fcat WITH KEY fieldname = p_fieldname. CHECK sy-subrc EQ 0. CLEAR wa_fcat-tech. IF NOT p_reptext_ddic IS INITIAL. wa_fcat-seltext_l = wa_fcat-seltext_m = wa_fcat-seltext_s = wa_fcat-reptext_ddic = p_reptext_ddic. ENDIF. IF p_col_pos EQ 'X'. * Inicializo el cont para ordenar las columnas. l_col_pos = 1. ELSE. ADD 1 TO l_col_pos. ENDIF. wa_fcat-fieldname = p_fieldname. wa_fcat-key = p_key. wa_fcat-col_pos = l_col_pos. wa_fcat-edit = wa_fcat-input = p_input. wa_fcat-checkbox = p_checkbox. wa_fcat-hotspot = p_hotspot. MODIFY pt_cat FROM wa_fcat INDEX sy-tabix. |
#2
|
|||
|
|||
Tienes que declararte en el catálogo un campo checkbox:
CLEAR wa_catalogo. wa_catalogo-fieldname = 'CHECK'. wa_catalogo-col_pos = l_lin. wa_catalogo-checkbox = 'X'. wa_catalogo-outputlen = 2. wa_catalogo-edit = 'X'. APPEND wa_catalogo TO catalogo. ADD 1 TO l_lin. Además en el layout tienes que marcar lo siguiente: layout-no_rowmark = 'X'. Y luego para saber cuales están marcados o no después del set_table_for_first_display añades: CALL METHOD alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter. * Evento que captura los cambios realizados CALL METHOD alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified. * Instanciando el objeto que enlaza eventos y el grid CREATE OBJECT g_event_receiver. SET HANDLER g_event_receiver->handle_data_changed FOR alv. La clase lcl_event_handler es: **---------------------------------------------------------------------- *- CLASS lcl_event_handler DEFINITION. ***--------------------------------------------------------------------- PUBLIC SECTION. METHODS: handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed. ENDCLASS. **---------------------------------------------------------------------- *- CLASS lcl_event_handler IMPLEMENTATION. ***--------------------------------------------------------------------- METHOD handle_data_changed. DATA: lv_changed TYPE lvc_s_modi. LOOP AT er_data_changed->mt_good_cells INTO lv_changed WHERE fieldname = 'CHECK'. clear wa_etiquetas. READ TABLE it_etiquetas INTO wa_etiquetas INDEX lv_changed-row_id. IF sy-subrc = 0. MOVE lv_changed-value TO wa_etiquetas-check. MODIFY it_etiquetas FROM wa_etiquetas INDEX lv_changed-row_id. ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS. Espero que te sirva de algo. Saludos |
#3
|
|||
|
|||
Hola Bmamba hago exactamente lo que dices y no hay manera me sale el cuadradito para poder marcar la línea pero después de sale un campo checkbox editable en el ALV. Me estoy volviendo loco....... no tendrás por ahi un ejemplo completo para echarle un vistazo desde el principio...... Yo lo que he hecho es lo siguiente:
REPORT ZBIG_LIB_RESP_PDA. tables: ZBIG_LA_PDACLI, ZBIG_BZCAMPANIAS. data: g_zbig_la_pdacli like standard table of zbig_la_pdacli with header line. data: begin of g_datos occurs 0, check type c, kunnr like zbig_la_pdacli-kunnr, zcodcampania like zbig_la_pdacli-zcodcampania, zcodcomunicacion like zbig_la_pdacli-zcodcomunicacion, zcodcosecha like zbig_la_pdacli-zcodcosecha, zbig_clave_buzon like zbig_la_pdacli-zbig_clave_buzon, descripcion like zbig_bzcampanias-zdesccampania, end of g_datos. data: g_nombre like kna1-name1, g_wa_datos like g_datos. * Declare reference variables to the ALV grid and the container data: go_grid type ref to cl_gui_alv_grid, "ALV GRID go_custom_container type ref to cl_gui_custom_container, "Contenedor g_fieldcatalog type lvc_t_fcat, "Catálogo de campos l_layout type lvc_s_layo, "Layout lt_fcodes type ui_functions. ***************************** SELECTION SCREEN ****************************** selection-screen begin of block bl1 with frame. parameters: pa_kunnr like zbig_la_pdacli-kunnr obligatory. selection-screen end of block bl1. **---------------------------------------------------------------------- CLASS lcl_event_handler DEFINITION. **---------------------------------------------------------------------- PUBLIC SECTION. METHODS: handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid IMPORTING er_data_changed. ENDCLASS. **---------------------------------------------------------------------- CLASS lcl_event_handler IMPLEMENTATION. **---------------------------------------------------------------------- METHOD handle_data_changed. DATA: lv_changed TYPE lvc_s_modi. LOOP AT er_data_changed->mt_good_cells INTO lv_changed WHERE fieldname = 'CHECK'. clear g_wa_datos. READ TABLE g_datos INTO g_wa_datos INDEX lv_changed-row_id. IF sy-subrc = 0. MOVE lv_changed-value TO g_wa_datos-check. MODIFY g_datos FROM g_wa_datos INDEX lv_changed-row_id. ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS. DATA g_event_receiver type ref to lcl_event_handler. ***************************** START-OF-SELECTION **************************** START-OF-SELECTION. perform seleccion_datos. perform build_fieldcat. call screen 2000. END-OF-SELECTION. ***************************** END-OF-SELECTION **************************** *&---------------------------------------------------------------------* *& Form BUILD_FIELDCAT *&---------------------------------------------------------------------* * Creamos el formato del ALV *----------------------------------------------------------------------* form build_fieldcat. * Importante hay que añadir "WITH HEADER LINE data: l_fieldcatalog type lvc_t_fcat with header line. clear: l_fieldcatalog, g_fieldcatalog. refresh: l_fieldcatalog. l_fieldcatalog-fieldname = 'CHECK'. "Código Campaña l_fieldcatalog-col_pos = 1. l_fieldcatalog-outputlen = 2. l_fieldcatalog-checkbox = 'X'. l_fieldcatalog-edit = 'X'. append l_fieldcatalog to g_fieldcatalog. clear: l_fieldcatalog. l_fieldcatalog-fieldname = 'ZCODCAMPANIA'. "Código Campaña l_fieldcatalog-scrtext_l = 'Campaña'. l_fieldcatalog-col_pos = 2. l_fieldcatalog-key = 'X'. l_fieldcatalog-outputlen = 10. l_fieldcatalog-just = 'X'. append l_fieldcatalog to g_fieldcatalog. clear: l_fieldcatalog. l_fieldcatalog-fieldname = 'ZCODCOMUNICACION'. "Código Comunicación l_fieldcatalog-scrtext_l = 'Comunicación'. l_fieldcatalog-col_pos = 3. l_fieldcatalog-key = 'X'. l_fieldcatalog-outputlen = 12. l_fieldcatalog-just = 'X'. append l_fieldcatalog to g_fieldcatalog. clear: l_fieldcatalog. l_fieldcatalog-fieldname = 'ZCODCOSECHA'. "Código Cosecha l_fieldcatalog-scrtext_l = 'Cosecha'. l_fieldcatalog-col_pos = 4. l_fieldcatalog-key = 'X'. l_fieldcatalog-outputlen = 10. l_fieldcatalog-just = 'X'. append l_fieldcatalog to g_fieldcatalog. clear: l_fieldcatalog. l_fieldcatalog-fieldname = 'ZBIG_CLAVE_BUZON'. "Clave del Buzón l_fieldcatalog-scrtext_l = 'Clave Buzón'. l_fieldcatalog-col_pos = 5. l_fieldcatalog-key = 'X'. l_fieldcatalog-outputlen = 16. l_fieldcatalog-just = 'X'. append l_fieldcatalog to g_fieldcatalog. clear: l_fieldcatalog. l_fieldcatalog-fieldname = 'DESCRIPCION'. l_fieldcatalog-scrtext_l = 'Descripción'. l_fieldcatalog-col_pos = 6. l_fieldcatalog-outputlen = 150. l_fieldcatalog-just = 'X'. append l_fieldcatalog to g_fieldcatalog. clear: l_fieldcatalog. endform. " BUILD_FIELDCAT *&---------------------------------------------------------------------* *& Form load_data_into_grid *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* form load_data_into_grid. call method go_grid->set_table_for_first_display exporting is_layout = l_layout changing it_outtab = g_datos[] it_fieldcatalog = g_fieldcatalog[]. * Para saber si se han marcado la líneas. CALL METHOD go_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter. * Evento que captura los cambios realizados CALL METHOD go_grid->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_modified. * Instanciando el objeto que enlaza eventos y el grid CREATE OBJECT g_event_receiver. SET HANDLER g_event_receiver->handle_data_changed FOR go_grid. endform. " load_data_into_grid *&---------------------------------------------------------------------* *& Module STATUS_2000 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module status_2000 output. if not go_custom_container is initial. * Limpiar referencia al objeto call method go_grid->free. call method go_custom_container->free. * Limpiar variables clear go_grid. clear go_custom_container. endif. case sy-ucomm. when 'BACK'. perform clear_variables. clear g_datos. refresh g_datos. leave to screen 0. exit. when 'CANC'. perform clear_variables. clear g_datos. refresh g_datos. leave to screen 0. exit. when 'EXIT'. perform clear_variables. clear g_datos. refresh g_datos. leave to screen 0. exit. endcase. set pf-status 'STATUS_2000'. * SET TITLEBAR 'xxx'. * Creamos el contenedor del ALV y llamamos al ALV if go_custom_container is initial. create object go_custom_container exporting container_name = 'ZTABLA'. create object go_grid exporting i_parent = go_custom_container. perform load_data_into_grid. * Layout * l_layout-cwidth_opt = 'X'. l_layout-zebra = 'X'. l_layout-cwidth_opt = 'X'. l_layout-no_rowmark = 'X'. else. * Refrescar la tabla ALV * l_layout-cwidth_opt = 'X'. l_layout-zebra = 'X'. l_layout-cwidth_opt = 'X'. l_layout-no_rowmark = 'X'. call method go_grid->refresh_table_display. perform load_data_into_grid. endif. endmodule. " STATUS_2000 OUTPUT *&---------------------------------------------------------------------* *& Module USER_COMMAND_2000 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module user_command_2000 input. endmodule. " USER_COMMAND_2000 INPUT *&---------------------------------------------------------------------* *& Form CLEAR_VARIABLES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* form clear_variables. if not go_custom_container is initial. * Limpiar referencia al objeto call method go_grid->free. call method go_custom_container->free. * Limpiar variables * clear gv_event_receiver. clear go_grid. clear go_custom_container. endif. endform. " CLEAR_VARIABLES Y el resultado que obtengo es que mando en la foto adjunta.... No sé que tengo que hacer para quitar ese checkbox y sólo dejar el cuadradito para poder seleccionar la línea entera o no.......... Gracias por leer este mensaje y un saludo a todo el mundo....... La verdad que tú líneas de código me han servido de mucho....... Muchas gracias..... |
#4
|
|||
|
|||
Hola a todo el mundo de nuevo.......... Ya he visto porque me salen las dos cosas a la vez es por
l_layout-no_rowmark = 'X'. Ahora sólo me sale el checkbox.... pero yo lo que quiero en realidad es tener control sobre el botón de seleccionar la línea para poder seleccionar los registro que desee el usuario y después usar esas líneas para hacer lo que sea con ellas............ Algún ejemplillo ???? Tendría que mirarme el método GET_SELECTED_ROWS de la clase CL_GUI_ALV_GRID para obtener eso ?????? Muchas gracias por leer este mensaje y un saludo a todo el mundo.... |
Herramientas | Buscar en Tema |
Desplegado | |
|
|