
要求在点击修改数量按钮时 如果订单数量为0 的不可编辑其余可编辑
创建动态内表时 加入控制字段 ![]()
其中 WTY_PARTNER_DYNPRO为系统标准结构 STYL 为 控制表
在ALV 显示之前将 fieldcatalog 表中的 STYLE 删掉 要不然会DUMP
![]()
代码
WHEN 'BJ_SL'. "修改数量
CLEAR p_e_ucomm.
DATA lt_styl TYPE lvc_t_styl.
DATA ls_styl LIKE LINE OF lt_styl.
FIELD-SYMBOLS <ft_styl>.
TYPES :BEGIN OF ty_style,
fieldname TYPE lvc_s_styl-fieldname,
style TYPE lvc_s_styl-style,
style2 TYPE lvc_s_styl-style2,
style3 TYPE lvc_s_styl-style3,
style4 TYPE lvc_s_styl-style4,
maxlen TYPE lvc_s_styl-maxlen,
tabix TYPE sy-tabix,
END OF ty_style.
DATA lt_style TYPE TABLE OF ty_style. " 记录每行不可编辑字段
DATA ls_style TYPE ty_style.
LOOP AT it_field_lvc INTO wa_field_lvc.
CASE wa_field_lvc-fieldname+0(2).
WHEN 'S_' OR 'B_'.
wa_field_lvc-edit = 'X'.
WHEN OTHERS.
wa_field_lvc-edit = ''.
ENDCASE.
MODIFY it_field_lvc FROM wa_field_lvc.
IF wa_field_lvc-fieldname+0(2) = 'S_' OR wa_field_lvc-fieldname+0(2) = 'B_'.
LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_alv>).
ASSIGN COMPONENT wa_field_lvc-fieldname OF STRUCTURE <fs_alv> TO FIELD-SYMBOL(<fv_zb>).
IF <fv_zb> = 0 .
ls_style-tabix = sy-tabix.
ls_style-fieldname = wa_field_lvc-fieldname.
ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND ls_style TO lt_style.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR wa_field_lvc.
ENDLOOP.
LOOP AT <dyn_table> ASSIGNING FIELD-SYMBOL(<fs_alv1>).
" 定义临时表
DATA(lt_style_ls) = lt_style.
" 删除不是当前行的
DELETE lt_style_ls WHERE tabix <> sy-tabix.
IF lt_style_ls IS NOT INITIAL.
ASSIGN COMPONENT 'STYLE' OF STRUCTURE <fs_alv1> TO <ft_styl>.
<ft_styl> = lt_style_ls.
ENDIF.
CLEAR lt_style_ls.
ENDLOOP.
CALL METHOD g_grid->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = it_field_lvc.
IF g_grid->is_ready_for_input( ) EQ 0.
CALL METHOD g_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
ENDIF.
这里注意我们不能直接定义一个内表为 <ft_styl> 添加值 会报错 <ft_styl>不是内部表
不能使用 ASSIGNING FIELD-SYMBOL(<ft_styl>) 来定义 控制表 要单独定义
FIELD-SYMBOLS <ft_styl>.
然后将统计好的数量为零的列给到控制表 <ft_styl>
效果图:

1458

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



