话不多说,直接上代码,复制黏贴既可用!!!!!!!
双击某一行就会新增一行可维护空行!!!!!!!
TYPES:BEGIN OF ty_ekko, ebeln TYPE ekko-ebeln, verkf TYPE ekko-verkf, sel TYPE c, "用来标识行选择的字段 F_STYLE TYPE LVC_T_STYL, END OF ty_ekko. DATA:it_ekko TYPE STANDARD TABLE OF ty_ekko, wa_ekko TYPE ty_ekko. DATA:lt_fieldcat TYPE lvc_t_fcat, wa_fieldcat LIKE LINE OF lt_fieldcat, wa_layout TYPE lvc_s_layo. CONSTANTS: gco_callback_user_command TYPE slis_formname VALUE 'FRM_USER_COMMAND', gco_callback_status TYPE slis_formname VALUE 'FRM_USER_STATUS'. START-OF-SELECTION. SELECT ebeln verkf INTO CORRESPONDING FIELDS OF TABLE it_ekko FROM ekko UP TO 10 ROWS. APPEND INITIAL LINE TO it_ekko. PERFORM frm_set_catalog. PERFORM frm_loop_itdata. * wa_layout-zebra = 'X'. * wa_layout-box_fname = 'SEL'. "指定行选择字段 wa_layout-cwidth_opt = 'X'. wa_layout-stylefname = 'F_STYLE'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid is_layout_lvc = wa_layout it_fieldcat_lvc = lt_fieldcat i_callback_pf_status_set = gco_callback_status i_callback_user_command = gco_callback_user_command TABLES t_outtab = it_ekko[] EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc = 0. ENDIF. *&---------------------------------------------------------------------* *& Form FRM_SET_PF_STATUS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_user_status USING i_it_extab TYPE slis_t_extab. * SET PF-STATUS '*******' . ENDFORM. " FRM_SET_PF_STATUS FORM frm_user_command USING i_ucomm TYPE sy-ucomm i_wa_selfield TYPE slis_selfield. CASE i_ucomm. WHEN '&IC1'. "Double click * if click on PO field, jump to me23n * IF i_wa_selfield-fieldname = 'EBELN'. * SET PARAMETER ID 'BES' FIELD i_wa_selfield-value. * CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. * ENDIF. PERFORM frm_loop_itdata . APPEND INITIAL LINE TO it_ekko. i_wa_selfield-refresh = 'X'. WHEN OTHERS. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SET_CATALOG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_set_catalog . DEFINE mac_fieldcat. clear wa_fieldcat. wa_fieldcat-fieldname = &1. wa_fieldcat-reptext = &2. wa_fieldcat-tabname = 'IT_EKKO'. wa_fieldcat-outputlen = &3. "设置输出列宽 wa_fieldcat-edit = &4. APPEND wa_fieldcat TO lt_fieldcat. END-OF-DEFINITION. clear wa_fieldcat. wa_fieldcat-fieldname = 'SEL'. wa_fieldcat-reptext = '选择框'. wa_fieldcat-tabname = 'IT_EKKO'. wa_fieldcat-edit = 'X'. wa_fieldcat-checkbox = 'X'. wa_fieldcat-outputlen = 5. "设置输出列宽 APPEND wa_fieldcat TO lt_fieldcat. mac_fieldcat 'EBELN' '采购单号' 10 'X'. mac_fieldcat 'VERKF' '销售员' 10 'X'. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_loop_itdata *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_loop_itdata . DATA stylelin TYPE lvc_s_styl. LOOP AT it_ekko INTO wa_ekko. IF wa_ekko-ebeln IS NOT INITIAL. CLEAR :wa_ekko-f_style[]. CLEAR stylelin. stylelin-fieldname = 'EBELN'. " 需要编辑的列名 stylelin-style = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为不可编辑状态 APPEND stylelin TO wa_ekko-f_style. CLEAR STYLELIN. stylelin-fieldname = 'VERKF'. stylelin-style = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND stylelin TO wa_ekko-f_style. MODIFY it_ekko FROM wa_ekko. ENDIF. ENDLOOP. ENDFORM.
有时候会报如下异常:
解决办法如下:
问题:使用LVC_S_STYL参数赋值修改内表LVC_T_STYL表字段时,报ABAP系统错误如下: 'Error inserting into or changing a sorted table';具体代码如下: IS_STYLE-FIELDNAME = 'ZWEIZHI1'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI2'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. ................ IS_STYLE-FIELDNAME = 'ZWEIZHI9'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI10'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI11'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. 解决:ALV编辑单元格状态或控制单元格显示等可使用参数LVC_S_STYL, 参照LVC_S_STYL定义工作区,参照LVC_T_STYL定义一个表字段,放在显示内表中, 并把该表字段在layout参数中激活STYLEFNAME,即可实现。 对于表字段的具体赋值,CALL FUNCTION和CALL METHOD不同ALV方式的实现方法也不相同。 但是在表字段赋值时,一定要注意FIELDNAME字段的排序方式,按照1 10 11...2 20 21...3... 依次顺序排序,如果append进内表的字段排序顺序不对的话,就会报SORT表的排序错误。 更改后代码为: IS_STYLE-FIELDNAME = 'ZWEIZHI1'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI10'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI11'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI2'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. ................ IS_STYLE-FIELDNAME = 'ZWEIZHI9'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.