Dialog同一屏幕多个Table control不能显示数据?

原因:最近同事写同屏多个表控件也碰到同样问题,数据显示不出来,但是一个就可以。

debug研究了下,并没有发现问题,只知道PBO输出的时候有问题。于是,看到大顾分享的文章,豁然开朗。

问题点:不能显示数据

解决方案:

只需要把PBO中顺序调整一下,如下代码:

  1. 把表控件自动生成代码loop中的表顺序调整一下

  2. 原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.再次运行可以看到当中值

  3. 源码:

    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值