#1
|
|||
|
|||
Comparar campos en un alv
Buenas, estoy haciendo un ALV y necesito comparar el contenido de dos campos. Puesto que solamente puede estar informado uno de los dos campos.
*------------------------------------------------------------------ * CLASS lcl_event_hadler DEFINITION *------------------------------------------------------------------ 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. "lcl_event_handler DEFINITION *------------------------------------------------------------------ * CLASS lcl_event_handler IMPLEMENTATION *------------------------------------------------------------------ CLASS lcl_event_handler IMPLEMENTATION. *------------------------------------------------------------------ * METHOD handle_data_changed *------------------------------------------------------------------ METHOD handle_data_changed. PERFORM handle_data_changed USING er_data_changed. ENDMETHOD. "handle_data_changed ENDCLASS. "lcl_event_handler IMPLEMENTATION *--------------------------------------------------------------------- * Form HANDLE_DATA_CHANGED *--------------------------------------------------------------------- * text *---------------------------------------------------------------------- * -->P_ER_DATA_CHANGED text *---------------------------------------------------------------------- FORM handle_data_changed USING ir_data_changed TYPE REF TO cl_alv_changed_data_protocol. DATA: ls_mod_cell TYPE lvc_s_modi, lv_value TYPE lvc_value, lv_value1 TYPE lvc_value. * SORT ir_data_changed->mt_mod_cells." BY row_id. LOOP AT ir_data_changed->mt_mod_cells INTO ls_mod_cell WHERE fieldname = 'CAMPO2'. CALL METHOD ir_data_changed->get_cell_value EXPORTING i_row_id = ls_mod_cell-row_id i_fieldname = 'CAMPO2' IMPORTING e_value = lv_value1. ENDLOOP. LOOP AT ir_data_changed->mt_mod_cells INTO ls_mod_cell WHERE fieldname = 'CAMPO1'. IF it_prueba-clase IS INITIAL. CALL METHOD ir_data_changed->modify_cell EXPORTING i_row_id = ls_mod_cell-row_id i_fieldname = ls_mod_cell-fieldname i_value = campo_prueba. ENDIF. CALL METHOD ir_data_changed->get_cell_value EXPORTING i_row_id = ls_mod_cell-row_id i_fieldname = 'CAMPO1' IMPORTING e_value = lv_value. IF lv_value = lv_value1. CALL METHOD ir_data_changed->add_protocol_entry EXPORTING i_msgid = 'SU' i_msgno = '000' i_msgty = 'E' i_msgv1 = 'Solo un campo informado ' i_fieldname = ls_mod_cell-fieldname i_row_id = ls_mod_cell-row_id. ENDIF. ENDLOOP. ENDFORM. " HANDLE_DATA_CHANGED ******************************************************* Con este codigo he coseguido que me chequee el campo una vez, y solo cuando el que informo es el campo 1 o 2. Si borro el campo 2, pulso intro y vuelvo a rellenar el campo no entra en la parte del codigo para recuperar el campo 2. Hay alguna otra manera de hacerlo? Gracias por a delantado! |
#2
|
|||
|
|||
Holas,
FORM handle_data_changed USING ir_data_changed TYPE REF TO cl_alv_changed_data_protocol. DATA: e_modi TYPE lvc_s_modi. LOOP AT ir_data_changed->mt_good_cells INTO e_modi. CASE e_modi-fieldname. WHEN 'CAMPO1. If e_modi-value ne space. CALL METHOD ir_data_changed->modify_cell EXPORTING i_row_id = e_modi-row_id i_tabix = e_modi-tabix i_fieldname = 'CAMPO2' i_value = ''. Endif. WHEN 'CAMPO2'. If e_modi-value ne space. CALL METHOD ir_data_changed->modify_cell EXPORTING i_row_id = e_modi-row_id i_tabix = e_modi-tabix i_fieldname = 'CAMPO1' i_value = ''. Endif. ENDCASE. ENDLOOP. ENDFORM. " HANDLE_DATA_CHANGED Saludos; |
Herramientas | Buscar en Tema |
Desplegado | |
|
|