代码案例:
1.单元格是否可编辑
多个字段的时候,使用INSERT…INTO…INDEX…
使用append会提示索引的错误

或者使用新语法

*&---------------------------------------------------------------------*
*& Report ZPPR012
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zppr012.
TABLES: aufk.
INCLUDE zcommon.
DATA: BEGIN OF gt_itab OCCURS 0,
aufnr TYPE aufnr,
werks TYPE werks,
xh(20),
sel(1),
ctrl TYPE lvc_t_styl,
END OF gt_itab.
DATA: gs_itab LIKE LINE OF gt_itab.
DATA: ls_styl TYPE lvc_s_styl.
SELECTION-SCREEN FUNCTION KEY 1."模板下载
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: bu11 RADIOBUTTON GROUP but DEFAULT 'X' USER-COMMAND sel_type."导入
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_file TYPE localfile MODIF ID a.
SELECTION-SCREEN SKIP 1.
PARAMETERS: bu12 RADIOBUTTON GROUP but."查询
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS:
s_aufnr FOR aufk-aufnr MODIF ID b,
s_werks FOR aufk-werks MODIF ID b.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file."搜索帮助按钮
PERFORM frm_getfilename USING p_file.
AT SELECTION-SCREEN OUTPUT.
PERFORM frm_change_text.
START-OF-SELECTION.
IF bu11 IS NOT INITIAL.
"1.导入: 获取模板数据
ELSEIF bu12 IS NOT INITIAL.
"2.查询: 获取日志表最新数据
gt_itab-aufnr = '1'.
gt_itab-werks = '1000'.
gt_itab-xh = '2'.
APPEND gt_itab.
gt_itab-aufnr = '2'.
gt_itab-werks = '1000'.
gt_itab-xh = '3'.
APPEND gt_itab.
CLEAR gs_itab.
ls_styl-fieldname = 'XH'.
ls_styl-style = cl_gui_alv_grid=>mc_style_disabled."不可编辑
APPEND ls_styl TO gs_itab-ctrl.
MODIFY gt_itab FROM gs_itab TRANSPORTING ctrl WHERE aufnr <> ''.
ENDIF.
PERFORM frm_display.
FORM frm_change_text."控制显示隐藏
IF bu12 IS NOT INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'A'.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF bu11 IS NOT INITIAL.
LOOP AT SCREEN.
IF screen-group1 = 'B'.
screen-active = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDFORM.
FORM frm_display.
DATA lv_title TYPE lvc_title.
DATA lv_edit(1).
IF bu11 IS NOT INITIAL.
lv_title = '工单创建'.
ELSEIF bu12 IS NOT INITIAL.
lv_edit = abap_true.
lv_title = '工单修改'.
wa_layout-stylefname = 'CTRL'."控制参数
add_fieldcat 'SEL' '选择' lv_edit 'X' '' '' '' '' ''.
ENDIF.
add_fieldcat 'AUFNR' '工单号' '' '' '' '' '' '' ''.
add_fieldcat 'WERKS' '工厂' '' '' '' '' '' '' ''.
add_fieldcat 'XH' '序号' lv_edit '' '' '' '' '' ''.
"wa_layout-box_fname = 'SEL'."选择框的字段名
wa_layout-no_rowmark = 'X'."禁用行选择 如果自定义了选择框字段 可以隐藏掉自带的
wa_layout-zebra = 'X'."颜色交替
wa_layout-cwidth_opt = 'X' . " 自动优化列宽
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
is_layout_lvc = wa_layout "属性
it_fieldcat_lvc = gt_fieldcat "字段
i_callback_program = sy-repid "当前程序
i_callback_pf_status_set = 'ALV_PF_STATUS_SET'
i_callback_user_command = 'ALV_USER_COMMAND'
i_grid_title = lv_title
TABLES
t_outtab = gt_itab
EXCEPTIONS
program_error = 1.
ENDFORM.
FORM alv_pf_status_set USING rt_extab TYPE slis_t_extab.
DATA: l_extab TYPE LINE OF slis_t_extab.
IF bu11 IS INITIAL.
l_extab-fcode = '&CO01'.
APPEND l_extab TO rt_extab.
ELSEIF bu12 IS INITIAL.
l_extab-fcode = '&EDIT'.
APPEND l_extab TO rt_extab.
l_extab-fcode = '&SAVE'.
APPEND l_extab TO rt_extab.
ENDIF.
SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING rt_extab."显示/隐藏对应的GUI按钮
ENDFORM. "alv_pf_status_set
*&---------------------------------------------------------------------*
*& Form alv_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->LS_SELFIELD text
*----------------------------------------------------------------------*
FORM alv_user_command USING r_ucomm TYPE sy-ucomm
ls_selfield TYPE slis_selfield.
"alv的刷新 获取更新后的值
IF lr_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = lr_grid.
ENDIF.
IF lr_grid IS NOT INITIAL.
CALL METHOD lr_grid->check_changed_data.
ENDIF.
"
CASE r_ucomm.
WHEN '&CO01'."创建工单
WHEN '&EDIT'."修改: 序号列->可编辑
IF r_ucomm <> '&CO01'.
IF line_exists( gt_itab[ sel = 'X' ] ).
ELSE.
MESSAGE e000(zgl01) WITH '未选择行项目!'.
ENDIF.
ENDIF.
"
CLEAR gs_itab.
ls_styl-fieldname = 'XH'.
ls_styl-style = cl_gui_alv_grid=>mc_style_enabled."可编辑
APPEND ls_styl TO gs_itab-ctrl.
MODIFY gt_itab FROM gs_itab TRANSPORTING ctrl WHERE sel = 'X'.
WHEN '&SAVE'."保存修改记录:: 序号列->不可编辑
IF r_ucomm <> '&CO01'.
IF line_exists( gt_itab[ sel = 'X' ] ).
ELSE.
MESSAGE e000(zgl01) WITH '未选择行项目!'.
ENDIF.
ENDIF.
"
CLEAR gs_itab.
ls_styl-fieldname = 'XH'.
ls_styl-style = cl_gui_alv_grid=>mc_style_disabled."不可编辑
APPEND ls_styl TO gs_itab-ctrl.
MODIFY gt_itab FROM gs_itab TRANSPORTING ctrl WHERE sel = 'X'.
WHEN 'ALL'.
gs_itab-sel = 'X'.
MODIFY gt_itab FROM gs_itab TRANSPORTING sel WHERE sel = ''.
WHEN 'SAL'.
gs_itab-sel = ''.
MODIFY gt_itab FROM gs_itab TRANSPORTING sel WHERE sel = 'X'.
ENDCASE.
"刷新alv内表!!!!!!!!!!!!!!!!!!!!
wa_layout-cwidth_opt = 'X'.
CALL METHOD lr_grid->set_frontend_layout
EXPORTING
is_layout = wa_layout.
DATA: ls_stbl TYPE lvc_s_stbl.
ls_stbl-row = 'X'.
ls_stbl-col = 'X'.
CALL METHOD lr_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl.
ENDFORM.
zcommon代码
*&---------------------------------------------------------------------*
*& Include ZCOMMON
*&----------------------

最低0.47元/天 解锁文章
1662

被折叠的 条评论
为什么被折叠?



