logo资料库

abap tablecontrol 控件动态显示列.docx

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
动 态 显 示 或 隐 藏 TABLECONTROL 中 的 列 . 大家首先想到的可能是这样去写代码: LOOP AT SCREEN. IF SCREEN-GROUP1 = 'GR1'. SCREEN-ACTIVE = 0. MODIFY SCREEN. “等于0时,隐藏,等于1时,显示 ENDIF. ENDLOOP. 说明: 这样的代码只对表格外的屏幕字段起到隐藏或显示的作用, 对表格内的 不起作用. 还可能是这样写: DATA COL_NAME type SCXTAB_COLUMN. FIELD-SYMBOLS FIELD-SYMBOLS TYPE STANDARD TABLE. FIELD-SYMBOLS TYPE I. TYPE CXTAB_CONTROL. ASSIGN (P_TC_NAME) TO . “P_TC_NAME屏幕表格的名称 LOOP AT -COLS INTO COL_NAME WHERE SCREEN-GROUP1 = 'GR2'. IF P_DISPLAY = '' . “根据条件 COL_NAME-SCREEN-ACTIVE = 0. “等于0时,隐藏,等 于1时,显示
COL_NAME-SCREEN-INPUT = 0. “等于0时,不能编辑, 等于1时可 以编辑 ELSEIF P_CHANGE = 'X'. COL_NAME-SCREEN-ACTIVE = 1. COL_NAME-SCREEN-INPUT = 1. ENDIF. MODIFY -COLS FROM COL_NAME. ENDLOOP. 说明: 以上的代码对表格中的字段能否编辑可以起作用, 但是否隐藏不起作用. 只是当 ACTIVE = 0 时, 不显示数据罢了. 经研究, 以下的代码可以实现表格控件 TABLECONTROL 列的动态显示 在 PBO 模块中: DATA: dynpdef type c. data: begin of current_data occurs 100. include structure tcview. data: end of current_data. call 'AB_GET_CX_DATA' TABLECONTROL 的屏幕变式 field 'YWMMR087' id 'PROGRAM' id 'CXNAME' id 'DYNPRODEF' field dynpdef id 'TCVIEWTAB' field current_data[] field 'TAB_SCR200' "获取 "程序名称 "TABLECONTROL 控件名称 "内表里有屏幕字段的相关信 息如是否隐藏等 id 'DYNPRONR' field sy-dynnr. CURRENT_DATA-TCINVISIBL = 'X'. "将这个设为 'X',即为隐藏 MODIFY CURRENT_DATA TRANSPORTING TCINVISIBL TCFIELDNAM = 'TABPO-MMSQN' "想要隐藏掉的屏幕表格内的字段名 WHERE OR TCFIELDNAM = 'TABPO-LINEN'. call 'AB_SET_CX_DATA' "重新设置变式 "程序名称 field 'TAB_SCR200' "TABLECONTROL 控件名称 field 'YWMMR087' id 'PROGRAM' id 'CXNAME' id 'DYNPRODEF' field dynpdef id 'TCVIEWTAB' field current_data[] id 'DYNPRONR' field sy-dynnr.
分享到:
收藏