ABAP标准列表和选择屏幕

来源:互联网 发布:最值得看的电影 知乎 编辑:程序博客网 时间:2024/04/30 20:19

标准列表输出

REPORT  YTEST20160527.*定义结构DATA:BEGIN OF SCHOOL,  CITY TYPE YTJAYCITY-YCT_NAME,  NO TYPE YTJAYSCHOOL-YSH_ID,  NAME TYPE YTJAYSCHOOL-YSH_NAME,  ADDRESS TYPE YTJAYSCHOOL-YSH_ADDR,END OF SCHOOL.*工作区DATA SCHOOL1 LIKE SCHOOL.*输出表头ULINE AT /(93).WRITE: / SY-VLINE,(15) '城市',SY-VLINE,(15) '学校编号', SY-VLINE,(15) '学校名称',SY-VLINE,(35) '地址',SY-VLINE.ULINE AT /(93).*输出内容SELECT YTJAYCITY~YCT_NAME YTJAYSCHOOL~YSH_ID YTJAYSCHOOL~YSH_NAME YTJAYSCHOOL~YSH_ADDR INTO SCHOOL1FROM YTJAYSCHOOLINNER JOIN YTJAYCITY ON YTJAYSCHOOL~YCT_ID = YTJAYCITY~YCT_ID.  WRITE: / SY-VLINE,(15) SCHOOL1-CITY, SY-VLINE,(15) SCHOOL1-NO, SY-VLINE,(15) SCHOOL1-NAME, SY-VLINE,(35) SCHOOL1-ADDRESS,SY-VLINE.  ULINE AT /(93).ENDSELECT.

输出结果

在上面的例子中,先输出表头,再从数据表中读取数据并输出,横竖线使用"ULINE"和"SY-VLINE"。

常见的系统变量如下:


输出无条件换页

输出无条件换页,使用语法:"NEW-PAGE"。
换页并且定义新页面的长度,使用语法:"NEW-PAGE LINE-COUNT 20"

列表颜色

语法:
FORMAT COLOR<n> [ON] INTENSIFIED [ON|OFF] INVERSE [ON|OFF]
COLOR 参数:
COL_BACKGROUND      取决于GUI
COL_HEADING         灰蓝
COL_NORMAL          淡灰
COL_TOTAL           黄
COL_KEY             黄绿
COL_POSITIVE        绿
COL_NEGATIVE        红
COL_GROUP           紫
INTENSIFIED参数:背景颜色参数
INVERSE参数:是否影响前景颜色

REPORT  YTEST20160527.*更改背景颜色FORMAT COLOR COL_HEADING.WRITE 'HELLO WORLD'.WRITE 'WELCOME!'.*更改前景颜色FORMAT COLOR COL_HEADING INVERSE ON.WRITE / 'HELLO WORLD'.WRITE 'WELCOME'.

输出结果


REPORT  YTEST20160527.*定义结构DATA:BEGIN OF SCHOOL,  CITY TYPE YTJAYCITY-YCT_NAME,  NO TYPE YTJAYSCHOOL-YSH_ID,  NAME TYPE YTJAYSCHOOL-YSH_NAME,  ADDRESS TYPE YTJAYSCHOOL-YSH_ADDR,END OF SCHOOL.*工作区DATA SCHOOL1 LIKE SCHOOL.*输出表头,背景灰蓝FORMAT COLOR COL_HEADING.ULINE AT /(93).WRITE: / SY-VLINE,(15) '城市',SY-VLINE,(15) '学校编号', SY-VLINE,(15) '学校名称',SY-VLINE,(35) '地址',SY-VLINE.ULINE AT /(93).FORMAT COLOR OFF.*输出内容*输出关键值为'北京'为红色SELECT YTJAYCITY~YCT_NAME YTJAYSCHOOL~YSH_ID YTJAYSCHOOL~YSH_NAME YTJAYSCHOOL~YSH_ADDR INTO SCHOOL1FROM YTJAYSCHOOLINNER JOIN YTJAYCITY ON YTJAYSCHOOL~YCT_ID = YTJAYCITY~YCT_ID.    IF SCHOOL1-CITY = '北京'.    FORMAT COLOR COL_NEGATIVE.  ELSE.    FORMAT COLOR OFF.  ENDIF.  WRITE: / SY-VLINE,(15) SCHOOL1-CITY, SY-VLINE,(15) SCHOOL1-NO, SY-VLINE,(15) SCHOOL1-NAME, SY-VLINE,(35) SCHOOL1-ADDRESS,SY-VLINE.  ULINE AT /(93).ENDSELECT.

输出结果


输出热点

REPORT  YTEST20160527.START-OF-SELECTION.WRITE '请按'.FORMAT HOTSPOT ON COLOR 6 INVERSE ON.WRITE '热点'.FORMAT HOTSPOT OFF COLOR OFF.AT LINE-SELECTION.  WRITE 'WELCOME!'.


输出结果

单击“热点”字符,输出“WELCOME!”

交互式列表

在单击输出行时输出第二页

REPORT  YTEST20160527.START-OF-SELECTION.  WRITE:'初始列表,SY-LSIND=',SY-LSIND.AT LINE-SELECTION.  IF SY-LSIND = 1.    WRITE: '第二列表,SY-LSIND=',SY-LSIND.  ENDIF.

输出结果

单击输出行,会输出第二行

为列表定义工具条与菜单

制作工具条按钮使用ABAP的菜单编辑器,TCODE:SE41


输入状态名称后,单击“创建”按钮

输入短文本后继续

在应用工具条栏目中,点击如下按钮,出现项目信息

在应用工具条处输入要建立的按钮名称后,双击它

选择静态文本

输入函数文本后继续

选择快捷键按钮

功能类型选择空白,为正常的应用程序功能

在功能键处的返回按钮设置有效,输入名称后,保存,激活

调用的程序代码如下

REPORT  YTEST20160527.START-OF-SELECTION.*设置已使用的状态条  SET PF-STATUS 'STA1'.  WRITE: '测试工具条按钮'.  AT USER-COMMAND.*当单击按钮时输出  CASE SY-UCOMM.    WHEN 'OWNSEL'.      WRITE: '已选择!'.  ENDCASE.

输出结果

当单击“我的按钮”之后,输出如下


在弹出窗口中显示列表

在弹出窗口上显示状态条,状态条设计如下

程序代码如下

REPORT  YTEST20160527.START-OF-SELECTION.*设置已使用的状态条SET PF-STATUS 'STA1'.WRITE: '测试工具条按钮'.AT USER-COMMAND.*当单击按钮时输出CASE SY-UCOMM.WHEN 'OWNSEL'.  IF SY-LSIND = 1.    SET PF-STATUS 'STA6'.    *定义子窗口并输出    WINDOW STARTING AT 10 10 ENDING AT 30 20.    WRITE '在子窗口输出!'.    WRITE '请注意!'.  ENDIF.ENDCASE.

输出结果


隐藏字段技术

隐藏字段是指列表中存在数据但不输出,可以读取该字段。

REPORT  YTEST20160527.TABLES: YTJAYCITY, YTJAYSCHOOL.START-OF-SELECTION.SKIP.*输出ULINE AT /(55).WRITE: / SY-VLINE,(15) '城市编号',SY-VLINE,(15) '城市名称',SY-VLINE,(15) '国家',SY-VLINE.*输出ULINE AT /(55).SELECT * FROM YTJAYCITY.  WRITE:/ SY-VLINE,(15) YTJAYCITY-YCT_ID,          SY-VLINE,(15) YTJAYCITY-YCT_NAME,          SY-VLINE,(15) YTJAYCITY-YCT_COUNTRY,          SY-VLINE.*隐藏关键字  HIDE:YTJAYCITY-YCT_ID.  ULINE AT /(55).ENDSELECT.AT LINE-SELECTION.*只输出第一页  IF SY-LSIND = 1.*输出    ULINE AT /(75).    WRITE: / SY-VLINE,(15) '学校编号',SY-VLINE,(15) '学校名称',SY-VLINE,(35) '地址',SY-VLINE.    ULINE AT /(75).*根据隐藏字段读取并打印城市对应的学校表    SELECT * FROM YTJAYSCHOOL      WHERE YCT_ID = YTJAYCITY-YCT_ID.      WRITE:/ SY-VLINE,(15) YTJAYSCHOOL-YSH_ID,SY-VLINE,(15) YTJAYSCHOOL-YSH_NAME,SY-VLINE,(35) YTJAYSCHOOL-YSH_ADDR,SY-VLINE.      ULINE AT /(75).    ENDSELECT.  ENDIF.

输出结果

双击城市表的某一行数据,显示该城市下所有的学校信息

选择屏幕

选择屏幕操作

以表YTJAYCITY数据查询为例,输入TCODE:SE16,表名YTJAYCITY,数据查询屏幕如下

最大命中数量指返回记录的最大数量。
以YCT_NAME字段为例,两个输入框是查询数据的起始值和终止值,
(1)如果不输入值,表示全部数据
(2)仅输入起始输入框,表示YCT_NAME=输入值
(3)仅输入终止输入框,表示查询数据YCT_NAME<=输入值
对每个输入框,还有模糊匹配等功能,进入输入框,单击右键菜单,屏幕显示选择项,如下图

表示排除当前选择范围,当输入选择条件,输入框右边会有提示

右边的按钮,表示单值和范围选择

选择屏幕程序语法

选择屏幕有单个栏位检索(PARAMETERS)和范围筛选(SELECT-OPTION)两种。
单个栏位检索(PARAMETERS)
语法:
PARAMETERS<P>[DEFAULT <D>][LOWER CASE][OBLIGATORY][AS CHECKBOX][RADIOBUTTON GROUP <RG>]
[DEFAULT <D>]:默认值
[LOWER CASE]:大小写
[OBLIGATORY]:必须输入
[AS CHECKBOX]:以复选框形式
[RADIOBUTTON GROUP<RG>]:以单选按钮形式

下面例子是选择屏幕输入值,将值输出至屏幕

REPORT  YTEST20160527.PARAMETERS: A1(10) TYPE C,            A2     TYPE I.WRITE:/ A1,/ A2.

输出结果:点击执行按钮,输出刚才输入的值



范围筛选

使用SELECT-OPTIONS进行多值和多范围检索

REPORT  YTEST20160527.DATA DATA1(20) TYPE C.SELECT-OPTIONS D1 FOR DATA1.LOOP AT D1.  WRITE: / 'SIGN:',    D1-SIGN,           'OPTION:',  D1-OPTION,           'LOW:',     D1-LOW,           'HIGH:',    D1-HIGH.ENDLOOP.
输出结果:点击执行按钮,输出刚才输入的范围值


调整输入提示

编写完程序时,查询条件的提示默认是变量名,需要调整为中文提示,选择菜单“转到”-->“文本元素”-->“选择文本”


修改参数D1的提示


单击按钮保存,然后单击按钮激活,单击按钮退回上一屏,单击按钮测试运行,结果如下


选择屏幕实例设计

1、定义选择屏幕
REPORT  YTEST20160527.SELECTION-SCREEN BEGIN OF SCREEN 500.PARAMETERS DATA1(20) TYPE C.SELECTION-SCREEN END OF SCREEN 500.CALL SELECTION-SCREEN 500.
输出结果
2、定义多个输入字段一行输出
REPORT  YTEST20160527.SELECTION-SCREEN BEGIN OF LINE.*预设*SELECTION-SCREEN POSITION 28.SELECTION-SCREEN COMMENT 1(10) S2.PARAMETERS: A1(1) TYPE C,            A2(4) TYPE C,            S3(9) TYPE C.SELECTION-SCREEN END OF LINE.*为预设值赋值INITIALIZATION.S2 = '测试输入'.
输出结果

3、单选框
REPORT  YTEST20160527.SELECTION-SCREEN BEGIN OF BLOCK RDG1 WITH FRAME TITLE S2.PARAMETERS A1 RADIOBUTTON GROUP RG1.PARAMETERS A2 RADIOBUTTON GROUP RG1.PARAMETERS A3 RADIOBUTTON GROUP RG1.SELECTION-SCREEN END OF BLOCK RDG1.INITIALIZATION.S2 = '请选择'.
输出结果
4、为选择窗口定义按钮并响应
该例子是一个比较复杂的程序,包括窗口、按钮定义、事件驱动等内容
REPORT  YTEST20160527.TABLES SSCRFIELDS.DATA DONE(2) TYPE C.SELECTION-SCREEN:BEGIN OF SCREEN 500 TITLE TIT,  BEGIN OF LINE,    PUSHBUTTON 2(10) S1 USER-COMMAND C1,    PUSHBUTTON 12(10) S2 USER-COMMAND C2,  END OF LINE,END OF SCREEN 500.AT SELECTION-SCREEN.  CASE SSCRFIELDS-UCOMM.    WHEN 'C1'.      DONE = 'C1'.    WHEN 'C2'.      DONE = 'C2'.  ENDCASE.  LEAVE TO SCREEN 0.START-OF-SELECTION.  CALL SCREEN 500.  WRITE: '您按了:',DONE.INITIALIZATION.  S1 = '按钮1'.  S2 = '按钮2'.  TIT = '为选择窗口定义按钮并响应'.
输出结果
当单击按钮2,输出如下

5、Selection-Screen子窗口
本例用到了Screen技术内容
输入TCODE:SE51,进入屏幕设计,输入程序名,屏幕号120,单击“创建”按钮
输入描述后单击保存按钮,然后单击工具条的“格式”按钮
在屏幕上添加“子屏幕范围”控件,添加“子窗口1”、“子窗口2”、“退出”按钮,并定义名称、文本、功能码等属性



单击工具条的逻辑流按钮
逻辑流程序
PROCESS BEFORE OUTPUT.  CALL SUBSCREEN A1 INCLUDING SY-REPID NUM1.PROCESS AFTER INPUT.  CALL SUBSCREEN A1.  MODULE USER_COMMAND-0100.
加入返回码“OK_CODE"

保存并激活后,在SE38里面编辑程序YTEST20160527
REPORT  YTEST20160527.*子定义真实的子窗口120*定义子窗口800SELECTION-SCREEN BEGIN OF SCREEN 800 AS SUBSCREEN.  PARAMETERS: A1(10) TYPE C,              A2(10) TYPE C,              A3(10) TYPE C.SELECTION-SCREEN END OF SCREEN 800.*定义子窗口900SELECTION-SCREEN BEGIN OF SCREEN 900 AS SUBSCREEN.  PARAMETERS: B1(10) TYPE C,              B2(10) TYPE C,              B3(10) TYPE C.SELECTION-SCREEN END OF SCREEN 900.*返回码DATA: OK_CODE TYPE SY-UCOMM,      SAVE_OK TYPE SY-UCOMM.*初始窗口为800DATA: NUM1(4) TYPE N VALUE '800'.*启动120窗口START-OF-SELECTION.  CALL SCREEN 120.*处理按钮事件MODULE USER_COMMAND-0100 INPUT.  SAVE_OK = OK_CODE.  CASE SAVE_OK.*每一个按钮调用800窗口    WHEN 'S1'.      NUM1 = 800.*每三个按钮调用900窗口    WHEN 'S2'.      NUM1 = 900.    WHEN 'EXIT'.      LEAVE PROGRAM.  ENDCASE.ENDMODULE.
输出如下
当点击”子窗口2“按钮后,子窗口发生了切换,输出结果如下
点击”退出“按钮,则退出程序

0 0
原创粉丝点击