#1
|
||||
|
||||
Campo obligatorio en ALV OO
Hola:
Tengo un ALV OO, en el hay un campo editable, quiero que ese campo sea obligatorio, que el usuario no pueda salir del alv si no rellena este campo. El problema que el alv tiene muchos eventos. Alguien ha echo algo parecido. Gracias de antemano. |
#2
|
|||
|
|||
utiliza el metodo siguiente.
class lcl_event_receiver definition. public section. METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive. . . . methods handle_data_changed "metodo para saber si has hecho una entrada al " alv for event data_changed of cl_gui_alv_grid endclass. class lcl_event_receiver implementation. METHOD handle_toolbar. PERFORM handle_toolbar CHANGING e_object. ENDMETHOD. "handle_toolbar method handle_data_changed. perform data_changed using er_data_changed. ENDMETHOD. endclass. "lcl_event_receiver IMPLEMENTATION **** FORM data_changed USING p_data_changed TYPE REF TO cl_alv_changed_data_protocol. DATA: d_mod_cells TYPE lvc_s_modi. DATA: w_buenas TYPE i. DATA: w_modif TYPE i. DATA: NRCONST LIKE ZTFCONSTDET-NRCONST. data: d_stable like lvc_s_stbl. DATA: S_ROW TYPE LVC_S_ROW, S_COL TYPE LVC_S_COL, S_ROI TYPE LVC_S_ROID, T_ROW TYPE LVC_T_ROW, T_ROID TYPE LVC_T_ROID, CELL TYPE LVC_T_CELL. S_ROW = 3. *------verifica si habido algun cambio en las celdad * Clear: L_NRCE, L_FCER , L_IMRT, L_DMBTR. LOOP AT p_data_changed->mt_mod_cells INTO d_mod_cells WHERE NOT value IS INITIAL. EXIT. ENDLOOP. ** CHECK sy-subrc EQ 0. *--identifica el campo q ha recibido una entrada CASE d_mod_cells-fieldname. WHEN 'NRCONST'. *----se evalua el valor del campo ingresado CALL METHOD p_data_changed->get_cell_value EXPORTING i_row_id = d_mod_cells-row_id i_fieldname = d_mod_cells-fieldname IMPORTING e_value = NRCONST. IF NRCONST IS INITIAL OR NRCONST = 0. . CALL METHOD p_data_changed->add_protocol_entry EXPORTING i_msgid = '0K' i_msgno = '000' i_msgty = 'E' i_msgv1 = text-m01 i_fieldname = d_mod_cells-fieldname i_row_id = d_mod_cells-row_id. ELSE. READ TABLE TI_ZTFACTRET INDEX d_mod_cells-row_id. IF SY-SUBRC EQ 0. CONCATENATE 'CD|' NRCONST '/' p_fecde+6(2) '.' p_fecde+4(2) '.' p_fecde(4) INTO TI_ZTFACTRET-BKTXT. replace '|' WITH ' ' INTO TI_ZTFACTRET-BKTXT. TI_ZTFACTRET-ICON = ICON_GREEN_LIGHT. MODIFY TI_ZTFACTRET INDEX d_mod_cells-row_id. * Inicio IBF02 31.08.2007 d_stable-row = 'X'. d_stable-col = 'X'. CALL METHOD grid1->refresh_table_display EXPORTING is_stable = d_stable i_soft_refresh = 'X'. ENDIF. ERROR = 0. LOOP AT TI_ZTFACTRET ASSIGNING <ZTFACTRET>. IF <ZTFACTRET>-BKTXT = ''. ERROR = 1. ENDIF. ENDLOOP. ENDIF. ENDCASE. ENDFORM. "data_changed |
#3
|
||||
|
||||
CALL METHOD p_data_changed->get_cell_value
EXPORTING i_row_id = d_mod_cells-row_id i_fieldname = d_mod_cells-fieldname IMPORTING e_value = NRCONST. ?¿? Esto que significa que el campo no esta relleno IF NRCONST IS INITIAL OR NRCONST = 0. . ?¿? !!! Este método te muestra un error, y el campo en un cuadro rojo, pero te deja continuar haciendo otros eventos, yo quiero que se me que de pillado hasta que lo rellene. L oque es un campo obligatorio. !!! CALL METHOD p_data_changed->add_protocol_entry EXPORTING i_msgid = '0K' i_msgno = '000' i_msgty = 'E' i_msgv1 = text-m01 i_fieldname = d_mod_cells-fieldname i_row_id = d_mod_cells-row_id. ?¿?¿? Si el campo esta relleno, que es lo que hace aquí(podrías explicarlo), podrías poner la declaración de la variables que se utiliza ELSE. ¿?¿??¡ READ TABLE TI_ZTFACTRET INDEX d_mod_cells-row_id. IF SY-SUBRC EQ 0. CONCATENATE 'CD|' NRCONST '/' p_fecde+6(2) '.' p_fecde+4(2) '.' p_fecde(4) INTO TI_ZTFACTRET-BKTXT. replace '|' WITH ' ' INTO TI_ZTFACTRET-BKTXT. TI_ZTFACTRET-ICON = ICON_GREEN_LIGHT. MODIFY TI_ZTFACTRET INDEX d_mod_cells-row_id. * Inicio IBF02 31.08.2007 d_stable-row = 'X'. d_stable-col = 'X'. CALL METHOD grid1->refresh_table_display EXPORTING is_stable = d_stable i_soft_refresh = 'X'. ENDIF. ERROR = 0. LOOP AT TI_ZTFACTRET ASSIGNING <ZTFACTRET>. IF <ZTFACTRET>-BKTXT = ''. ERROR = 1. ENDIF. ENDLOOP. ENDIF. ENDCASE. ENDFORM. "data_changed Muchas gracias por todos |
#4
|
|||
|
|||
esto es un ejmplo no significa que lo debes hacer igual.
NRCONST es una varible x que he declarado. ¿? Esto que significa que el campo no esta relleno IF NRCONST IS INITIAL OR NRCONST = 0. . *--> asi significa que la variable no esta llena *-- y si no esta llena mandas un mensaje de error y punto Saludos |
Herramientas | Buscar en Tema |
Desplegado | |
|
|