ABAP标准列表和选择屏幕

标准列表输出

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 SCHOOL1
FROM YTJAYSCHOOL
INNER 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 SCHOOL1
FROM YTJAYSCHOOL
INNER 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
*定义子窗口800
SELECTION-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.
*定义子窗口900
SELECTION-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.
*初始窗口为800
DATA: 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“按钮后,子窗口发生了切换,输出结果如下
点击”退出“按钮,则退出程序

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP幫助文檔,中文版 第一部份,ABAP/4基础 ABAP/4用户指南的第一部分描述了ABAP/4编程语言的基本组件。它们允许用户编写并运行包括所有主要操作的ABAP/4 程序。用户可以使用这些知识编写应用程序。 在第一部分的下列章节中,您将学习: 一、 ABAP/4程序结构: (一)、创建简单的ABAP/4程序 (二)、ABAP/4程序语法和格式 二、 数据处理: (一)、声明数据 (二)、将数据输出到屏幕 (三)、处理文本摘要 (四)、处理数据 三、 流控制:控制ABAP/4程序流 四、 特殊编程技术: (一)、创建和处理内表 (二)、模块化ABAP/4程序 (三)、使用字段符号 五、 存储数据: (一)、读取并处理数据库表 (二)、以簇方式存储数据对象 (三)、使用文件 一、ABAP/4程序结构 (一)、创建简单的APAP/4程序 本节描述如何创建简单的ABAP/4程序。了解如何创建ABAP/4程序将有助于了解本指南中的其它主题。 创建简单的ABAP/4程序涉及下列基本步骤: 命名程序=>指定程序属性=>编写程序代码=>测试程序 另外,本节也描述如何显示或更改现有程序以及如何从编辑器中启动程序。 此处描述的创建新ABAP/4程序的过程适用于报表和短培训程序。在开始编写报表程序之前,用户也许想先创建报表和短培训程序以熟悉ABAP/4语法。要为新事务创建模块存储,可以采用不同于报表程序的方式进行。关于如何为事务创建模块存储的详细信息,参见《ABAP/4模块池》。 关于ABAP/4编辑器和调试过程的详细信息,参见文档ABAP/4工作台工具。 本节讲述下列主题: 1) 命名程序 2) 指定程序属性 3) 编写程序 4) 测试程序 5) 显示或更改程序 6) 将事务代码分配给程序 1)、命名程序 要创建ABAP/4程序,步骤如下:  在“SAP R/3”初始屏幕选择“工具->ABAP/4工作台”。出现“ABAP/4开发工作台”屏幕选择ABAP/4编辑器”,“ABAP/4编辑器初始屏幕”如下所示:  为在“程序”字段中创建的程序输入名称(关于创建程序名称的详细信息,参见《命名程序规则》)。  选择“创建”。 不论在“对象组件”下选择什么,都出现“ABAP/4:程序属性”屏幕。当命名并创建程序后,可以定义其属性(关于定义程序属性的详细信息,参见《指定程序属性》)。 创建ABAP/4程序还有其它过程。例如,可以:  选择ABAP/4开发工作台”屏幕上的“对象浏览”。  选择“对象列表”下的“程序”。  选择“单一对象”下的“程序对象”。  输入程序名并单击“显示”。如果程序不存在,则询问是否要创建它。关于对象浏览器及创建程序其它过程的详细信息,参见文档《ABAP/4工作台工具》。 命名程序规则:当创建程序名称时请遵循如下规则:  使用至少1个但不超过8个字符。  不要使用下列字符: 句点(.);逗号(,);空格( );括号'('')';单引号(');双引号("); 等号(=);星号(*);元音变音( , , , , , )和' ';百分号(%)和下划线(_): 因为这些符号是SQL语句的通配符,所以也会导致问题(参见《在程序中为行选择指定条件》)。 SAP建议在程序名称中不要使用它们。 创建程序名称时请遵守这些命名约定:  报表程序(以列表格式输出数据分析):Yaxxxxxx或Zaxxxxxx。用应用程序区的分类字母替换a。任何有效字符替换x。注意SAP报表程序遵守相似的命名约定:Raxxxxxx。  任何其它ABAP/4程序(培训程序或事务程序):SAPMYxxx或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4程序遵守相似的命名约定:SAPMaxxx,其中a代表某应用程序区。 2)、指定程序属性 程序属性决定程序属于哪种应用程序以及程序所链接的逻辑数据库。必须谨慎输入属性以便系统能正确处理程序(有关程序属性的详细信息,参见《重要的程序属性》)。 已经将名称分配给程序并选择ABAP/4编辑器初始屏幕”上的“创建”时,出现“ABAP/4:程序属性”屏幕,要输入程序属性,请进行如下操作:  在字段“标题”中输入程序标题。选择描述程序功能的标题。系统自动将标题与文本摘要合并。如果以后要更改标题,请按如下操作进行:  选择ABAP/4编辑器初始屏幕”上的“文本摘要”或“属性”。  选择“更改”。  完成两个强制字段:  如果创建报表程序,则在“类型”字段中输入1,如果创建模块存储,则在“类型”字段中输入M。关于可能类型的列表,请单击可能条目箭头。  在“应用程序”字段中为应用程序输入分类字母,如财务会计输入F。  如果创建报表(类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值