原因:最近同事写同屏多个表控件也碰到同样问题,数据显示不出来,但是一个就可以。
debug研究了下,并没有发现问题,只知道PBO输出的时候有问题。于是,看到大顾分享的文章,豁然开朗。
问题点:不能显示数据
解决方案:
只需要把PBO中顺序调整一下,如下代码:
-
把表控件自动生成代码loop中的表顺序调整一下
-
原PBO代码
PROCESS BEFORE OUTPUT. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB4TC' MODULE ITAB4TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB4TC_CHANGE_COL_ATTR. LOOP AT ITAB4 WITH CONTROL ITAB4TC CURSOR ITAB4TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB4TC_CHANGE_FIELD_ATTR ENDLOOP. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB3TC' MODULE ITAB3TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB3TC_CHANGE_COL_ATTR. LOOP AT ITAB3 WITH CONTROL ITAB3TC CURSOR ITAB3TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB3TC_CHANGE_FIELD_ATTR ENDLOOP. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB2TC' MODULE ITAB2TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB2TC_CHANGE_COL_ATTR. LOOP AT ITAB2 WITH CONTROL ITAB2TC CURSOR ITAB2TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB2TC_CHANGE_FIELD_ATTR ENDLOOP. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB1TC' MODULE ITAB1TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB1TC_CHANGE_COL_ATTR. LOOP AT ITAB1 WITH CONTROL ITAB1TC CURSOR ITAB1TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB1TC_CHANGE_FIELD_ATTR ENDLOOP. * MODULE STATUS_0100.
3.改后代码
PROCESS BEFORE OUTPUT. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB1TC' MODULE ITAB1TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB1TC_CHANGE_COL_ATTR. LOOP AT ITAB1 WITH CONTROL ITAB1TC CURSOR ITAB1TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB1TC_CHANGE_FIELD_ATTR ENDLOOP. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB2TC' MODULE ITAB2TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB2TC_CHANGE_COL_ATTR. LOOP AT ITAB2 WITH CONTROL ITAB2TC CURSOR ITAB2TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB2TC_CHANGE_FIELD_ATTR ENDLOOP. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB3TC' MODULE ITAB3TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB3TC_CHANGE_COL_ATTR. LOOP AT ITAB3 WITH CONTROL ITAB3TC CURSOR ITAB3TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB3TC_CHANGE_FIELD_ATTR ENDLOOP. *&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ITAB4TC' MODULE ITAB4TC_CHANGE_TC_ATTR. *&SPWIZARD: MODULE ITAB4TC_CHANGE_COL_ATTR. LOOP AT ITAB4 WITH CONTROL ITAB4TC CURSOR ITAB4TC-CURRENT_LINE. *&SPWIZARD: MODULE ITAB4TC_CHANGE_FIELD_ATTR ENDLOOP. * MODULE STATUS_0100.
4.再次运行可以看到当中值
-
源码:
REPORT Z."报告ZMULT_TCS。 TYPES: BEGIN OF T_TAB,"类型:T_TAB的开始, FIELD1(20) TYPE C, "FIELD1(20) TYPE C, FIELD2(20) TYPE C, "FIELD2(20) TYPE C, END OF T_TAB."结束T_TAB。 DATA: ITAB1 TYPE TABLE OF T_TAB WITH HEADER LINE."DATA:ITAB1 TYPE TABLE OF T_TAB WITH HEADER LINE. DATA: ITAB2 TYPE TABLE OF T_TAB WITH HEADER LINE."DATA:ITAB2 TYPE TABLE OF T_TAB WITH HEADER LINE. DATA: ITAB3 TYPE TABLE OF T_TAB WITH HEADER LINE."DATA:ITAB3类型表的T_TAB与标题行。 DATA: ITAB4 TYPE TABLE OF T_TAB WITH HEADER LINE."DATA:ITAB4类型表的T_TAB与标题行。 DATA: OK_CODE TYPE SY-UCOMM."数据:OK_CODE类型SY-UCOMM。 CONTROLS: ITAB1TC TYPE TABLEVIEW USING SCREEN 0100."控制:ITAB1TC型TABLEVIEW使用屏幕0100。 CONTROLS: ITAB2TC TYPE TABLEVIEW USING SCREEN 0100."控制:ITAB2TC型TABLEVIEW使用屏幕0100。 CONTROLS: ITAB3TC TYPE TABLEVIEW USING SCREEN 0100."控制:ITAB3TC型TABLEVIEW使用屏幕0100。 CONTROLS: ITAB4TC TYPE TABLEVIEW USING SCREEN 0100."控制:ITAB4TC型TABLEVIEW使用屏幕0100。 START-OF-SELECTION. "开始选择。 ITAB1-FIELD1 = 'Itab1-Field1'."ITAB1-FIELD1 = 'Itab1-Field1'。 ITAB1-FIELD2 = 'Itab1-Field2'."ITAB1-FIELD2 = 'Itab1-Field2'。 APPEND ITAB1."附录1. ITAB2-FIELD1 = 'Itab2-Field1'."ITAB2-FIELD1 = 'Itab2-Field1'。 ITAB2-FIELD2 = 'Itab2-Field2'."ITAB2-FIELD2 = 'Itab2-Field2'。 APPEND ITAB2."附录B 2. ITAB3-FIELD1 = 'Itab3-Field1'."ITAB3-FIELD1 = 'Itab3-Field1'。 ITAB3-FIELD2 = 'Itab3-Field2'."ITAB3-FIELD2 = 'Itab3-Field2'。 APPEND ITAB3."附录3. ITAB4-FIELD1 = 'Itab4-Field1'."ITAB4-FIELD1 = 'Itab4-Field1'。 ITAB4-FIELD2 = 'Itab4-Field2'."ITAB4-FIELD2 = 'Itab4-Field2'。 APPEND ITAB4."附录4. CALL SCREEN 100."100. BABY BABY *&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT*& 模块STATUS_0100输出 *&---------------------------------------------------------------------* MODULE STATUS_0100 OUTPUT. SET PF-STATUS '0100'."设置PF状态“0100”。 SET TITLEBAR '0100'."设置标题栏“0100”。 ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT*& 模块USER_COMMAND_0100输入 *&---------------------------------------------------------------------* MODULE USER_COMMAND_0100 INPUT."MONITOR USER_COMMAND_0100 INPUT. CASE OK_CODE. WHEN 'BACK'. "什么时候。 LEAVE PROGRAM."离开吧。 ENDCASE."结束。 ENDMODULE. *&SPWIZARD: DECLARATION OF TABLECONTROL 'ITAB1TC' ITSELF "CONTROLS: ITAB1TC TYPE TABLEVIEW USING SCREEN 0100. *&SPWIZARD: OUTPUT MODULE FOR TC 'ITAB1TC'. DO NOT CHANGE THIS LINE! *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR MODULE ITAB1TC_CHANGE_TC_ATTR OUTPUT. DESCRIBE TABLE ITAB1 LINES ITAB1TC-LINES. ENDMODULE. *&SPWIZARD: DECLARATION OF TABLECONTROL 'ITAB2TC' ITSELF *CONTROLS: ITAB2TC TYPE TABLEVIEW USING SCREEN 0100. *&SPWIZARD: OUTPUT MODULE FOR TC 'ITAB2TC'. DO NOT CHANGE THIS LINE! *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR MODULE ITAB2TC_CHANGE_TC_ATTR OUTPUT. DESCRIBE TABLE ITAB2 LINES ITAB2TC-LINES. ENDMODULE. *&SPWIZARD: DECLARATION OF TABLECONTROL 'ITAB3TC' ITSELF "CONTROLS: ITAB3TC TYPE TABLEVIEW USING SCREEN 0100. *&SPWIZARD: OUTPUT MODULE FOR TC 'ITAB3TC'. DO NOT CHANGE THIS LINE! *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR MODULE ITAB3TC_CHANGE_TC_ATTR OUTPUT. DESCRIBE TABLE ITAB3 LINES ITAB3TC-LINES. ENDMODULE. *&SPWIZARD: DECLARATION OF TABLECONTROL 'ITAB4TC' ITSELF "CONTROLS: ITAB4TC TYPE TABLEVIEW USING SCREEN 0100. *&SPWIZARD: OUTPUT MODULE FOR TC 'ITAB4TC'. DO NOT CHANGE THIS LINE! *&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR MODULE ITAB4TC_CHANGE_TC_ATTR OUTPUT. DESCRIBE TABLE ITAB4 LINES ITAB4TC-lines. ENDMODULE.
当然这是要求功能不多的情况下,如果要求功能多,还是使用多个ALV分屏展示哈。
感谢大顾分享:https://community.sap.com/t5/application-development-blog-posts/using-multiple-table-controls-in-one-screen/ba-p/12866555