最近项目老TMD苦逼了,每天早八点到晚九点,周末还无休,要持续一个多月,客户要求做dialog功能程序动态显示,根据条件隐藏tablecontrol的某些列,或者根据权限对象去隐藏按钮、输出字段、文本等等。
Tablecontrol 双击
在状态里面把F2设置为PICK
DATA: l_row TYPE i.
DATA: l_field TYPE char30.
DATA:n TYPE i.
DATA:m TYPE i.
CASE ok_code.
WHEN 'PICK'.
CLEAR l_row.
GET CURSOR LINE l_row. ”获取鼠标所在位置
l_row = l_row + ZSLFI001_02-top_line - 1. 获取内表的行
GET CURSOR FIELD l_field. “获取双击的字段名
READ TABLE gt_out INTO gx_out INDEX l_row. "根据行号读取内表
IF sy-subrc = 0.
t_index = l_row.
IF gx_out-ztype_qk = '1 预付款'.
PERFORM gt_data_300.
ELSE.
PERFORM gt_data_yf.
ENDIF.
CALL SCREEN 0300.
CLEAR: gt_0101[],gx_0101,gx_head.
ENDIF.
列隐藏实际上是将Tablecontrol的列的长度设置为0,不多说,直接上代码
MODULE authory_init OUTPUT.
DATA: tc_col LIKE LINE OF zslfi001_03-cols.
IF gx_out-ztype_qk = '2 应付款'.
LOOP AT zslfi001_03-cols INTO tc_col .
IF tc_col-screen-name = 'GX_0101-KZWI2'. "列名称
* tc_col-invisible = '1'.
tc_col-vislength = 0. "tablecontrol列长度设置为0
MODIFY zslfi001_03-cols FROM tc_col.
ENDIF.
IF tc_col-screen-name = 'GX_0101-NETWR'. “列名称
tc_col-vislength = 0.
MODIFY zslfi001_03-cols FROM tc_col.
ENDIF.
if tc_col-screen-name = 'GX_0101-AUGBL'. "列名称
if GX_HEAD-ZSTATUS_QK <> '5'.
tc_col-vislength = 0.
else.
tc_col-vislength = 12.
endif.
MODIFY zslfi001_03-cols FROM tc_col.
endif.
clear tc_col.
ENDLOOP.
ENDIF.
IF gx_head-ernam <> sy-uname.
LOOP AT SCREEN.
IF screen-group1 = 'RP1'. "按钮组,当不是本用户操作的时候,按钮组隐藏。设置按钮组下图
screen-active = '0'.