如何设计折叠屏幕

【转http://www.cnblogs.com/mysap/archive/2010/07/21/1782209.html】

方法1:

欢迎访问:http://myabap.cublog.cn(东园公)

类似ME23N(显示采购订单)的屏幕,收缩区域内的的屏幕,可以节省空间.

全部展开:

clip_image002

图(S-1)

收起第二个区域:

clip_image004

图(S-2)

收起第一个区域:

clip_image006

图(S-3)

设计过程如下:

1、 主屏幕(0120)

子屏幕区域控件名称:SC_0120_1

逻辑流:

PROCESS BEFORE OUTPUT.
* MODULE STATUS_0120.
*
CALL SUBSCREEN : SC_0120_1 including sy-repid sub_screen.
PROCESS AFTER INPUT.
CALL SUBSCREEN : SC_0120_1 .
MODULE USER_COMMAND_0120.

2、 全部展开子屏幕(0130)

clip_image008

图(S-4)

按钮功能码:PB_0130_1

PB_0130_2

子屏幕区域控件名称:SC_0130_1,SC_0130_2

逻辑流::

PROCESS BEFORE OUTPUT.
* MODULE STATUS_0130.
*
CALL SUBSCREEN : SC_0130_1 including sy-repid '0140',
                   SC_0130_2 including sy-repid '0141'.
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0130.
CALL SUBSCREEN : SC_0130_1,
                   SC_0130_2.

3、同样设置其它子屏幕

0131:上区域展开,下区域收起,

按钮功能码:PB_0131_1,PB_0131_2,

子屏幕区域控件:SC_0131_1,SC_0131_2

逻辑流:

PROCESS BEFORE OUTPUT.
* MODULE STATUS_0131.
*
CALL SUBSCREEN SC_0131_1 including sy-repid '0140'.
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0131.
CALL SUBSCREEN SC_0131_1 .

0132:上区域收起,下区域展开

按钮功能码:PB_0132_1,PB_0132_2,

子屏幕区域控件:SC_0132_1,SC_0132_2

逻辑流:

PROCESS BEFORE OUTPUT.
* MODULE STATUS_0132.
*
CALL SUBSCREEN SC_0132_2 including sy-repid '0141'.
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0132.
CALL SUBSCREEN SC_0132_2.

0133:上区域收起,下区域收起

按钮功能码:PB_0133_1,PB_0133_2,

子屏幕区域控件:SC_0133_1,SC_0133_2

逻辑流:

PROCESS BEFORE OUTPUT.
* MODULE STATUS_0133.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0133.

4、 显示表格的子屏幕0140,0141

clip_image010

图(S-5)

设置过程参考:Table Control多表设计<四>

5、 设置功能码事件响应:

REPORT  ZMYP_TCM.
tables:mara,t001l.
data:begin of itab occurs 0.
include structure mara.
data:mark type char1.
data:end of itab.
data:begin of item occurs 0.
include structure t001l.
data:mark type char1.
data:end of item.
DATA:     OK_CODE LIKE SY-UCOMM,
          S_OK_CODE LIKE SY-UCOMM.
data: sub_screen like sy-dynnr .
sub_screen = '0130' .

…… ……

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0120  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0120 INPUT.”将该module放在主屏幕0120的PAI中
* DATA:lv_return_code type i.
S_OK_CODE = OK_CODE.
* CALL METHOD cl_gui_cfw=>dispatch
*    IMPORTING
*      return_code = lv_return_code.
*
* CHECK lv_return_code = cl_gui_cfw=>rc_noevent.
CASE S_OK_CODE.
WHEN 'PB_0130_1'. "收起上半部分 开
        sub_screen = 0132 .
WHEN 'PB_0130_2'. "收起下半部分 开
        sub_screen = 0131 .
WHEN 'PB_0131_1'. "收起上半部分 开
        sub_screen = 0133 .
WHEN 'PB_0131_2'. "打开一下半部分 收
        sub_screen = 0130 .
WHEN 'PB_0132_1'. "打开上半部分 收
        sub_screen = 0130 .
WHEN 'PB_0132_2'. "收起下半部分 开
        sub_screen = 0133 .
WHEN 'PB_0133_1'. "打开上半部分 收
        sub_screen = 0131 .
WHEN 'PB_0133_2'. "打开下半部分 收
        sub_screen = 0132 .
ENDCASE.
ENDMODULE.                 " USER_COMMAND_0120  INPUT

------------------------------------

方法2:

=================================================================
转自:http://blog.csdn.net/CompassButton/archive/2008/07/21/2685540.aspx
在sap的应用中,我们有时会需要设计折叠样式的屏幕(类似MIGO的屏幕), 以缓解屏幕区域的太小的矛盾。折叠样式屏幕实现的基本原理是用子屏幕根据用户的输入调用不同的子屏幕来实现的。现在以放置两个子屏幕的折叠式的屏幕来说明实现的步骤。为了实现两个子屏幕的折叠式的屏幕需要设计7个屏幕(一个主屏幕,两个信息屏幕,一个全展示子屏幕,一个下半部展示子屏幕,一个上半部展示子 屏幕,一个下全关闭子屏幕)。具体步骤如下:

Step 1:设计一个主屏幕,放置一个子屏幕范围

屏幕的逻辑流为:

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN sa_2200_1 INCLUDING sy-repid &apos;2220&apos;.

*

PROCESS AFTER INPUT.

MODULE USER_COMMAND_0100.

CALL SUBSCREEN sa_2200_1.

MODULE USER_COMMAND_0100 INPUT.

  DATA lv_return_code TYPE i.

  CLEAR save_ok.

  save_ok = ok_code.

  CLEAR ok_code.

  CLEAR gv_processed.

  CALL METHOD cl_gui_cfw=>dispatch

    IMPORTING

      return_code = lv_return_code.

  CHECK lv_return_code = cl_gui_cfw=>rc_noevent.

  CASE save_ok.

    WHEN &apos;PB_2220_1&apos; OR &apos;PB_2220_2&apos; OR &apos;PB_2240_1&apos; OR &apos;PB_2240_2&apos; OR

         &apos;PB_2260_1&apos; OR &apos;PB_2260_2&apos; OR &apos;PB_2280_1&apos; OR &apos;PB_2280_2&apos;.

      PERFORM set_the_col_area_screen.

    WHEN others.

*     action code from the menus will be processed here.

      PERFORM get_screen_number USING save_ok.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*

*&      Form  set_the_col_area_screen

*&---------------------------------------------------------------------*

*       This subroutine is used to set the subscreen for the collapsible

*       areas

*----------------------------------------------------------------------*

FORM set_the_col_area_screen .

  CASE save_ok.

    WHEN &apos;PB_2220_1&apos; OR &apos;PB_2260_2&apos;. "打开下半部展开的子屏幕

      gv_subscreen_2200_1  =  2280.

    WHEN &apos;PB_2220_2&apos; OR &apos;PB_2260_1&apos;. "打开上半部展开的子屏幕

      gv_subscreen_2200_1  =  2240.

    WHEN &apos;PB_2240_1&apos; OR &apos;PB_2280_2&apos;. "打开全关闭的子屏幕

      gv_subscreen_2200_1  =  2260.

    WHEN &apos;PB_2280_1&apos; OR  &apos;PB_2240_2&apos;. "打开全打开的子屏幕

      gv_subscreen_2200_1  =  2220.

  ENDCASE.

ENDFORM.                    " set_the_col_area_screen

Step 2: 最底层的两个信息子屏幕

屏幕(2290)

clip_image001

逻辑流

PROCESS BEFORE OUTPUT.

*

PROCESS AFTER INPUT.

屏幕(2230)

clip_image002[4]

逻辑流

PROCESS BEFORE OUTPUT.

*

PROCESS AFTER INPUT.

Step 3: 定义全展示子屏幕 (2220)

clip_image003

第一个按钮的功能码:PB_2220_1

第一个按钮的功能码:PB_2220_2

屏幕逻辑流

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN SA_2220_1 including sy-repid &apos;2290&apos;.

CALL SUBSCREEN SA_2220_2 including sy-repid &apos;2300&apos;.

*

PROCESS AFTER INPUT.

CALL SUBSCREEN SA_2220_1.

CALL SUBSCREEN SA_2220_2.

Step 4:定义上半部展开的子屏幕(2240)

clip_image004[4]

第一个按钮的功能码:PB_2240_1

第一个按钮的功能码:PB_2240_2

屏幕逻辑流

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN SA_2240_1 including sy-repid &apos;2290&apos;.

*

PROCESS AFTER INPUT.

CALL SUBSCREEN SA_2240_1.

Step 5:定义下半部展开的子屏幕(2280)

clip_image005

第一个按钮的功能码:PB_2280_1

第一个按钮的功能码:PB_2280_2

屏幕逻辑流

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN SA_2280_2 including sy-repid &apos;2300&apos;.

*

PROCESS AFTER INPUT.

CALL SUBSCREEN SA_2280_2.

Step 6:定义全关闭的子屏幕(2260)

clip_image006[4]

第一个按钮的功能码:PB_2260_1

第一个按钮的功能码:PB_2260_2

屏幕逻辑流

PROCESS BEFORE OUTPUT.

*

PROCESS AFTER INPUT.

原文地址:https://www.cnblogs.com/rainysblog/p/4030157.html