Bootstrap

关于ABAP选择屏幕部分,定义框架与不定义框架两种写法

https://dxldev.blog.csdn.net/article/details/121419141?spm=1001.2014.3001.5502

我们要实现的功能有:

1.单值选择
2.区间选择
3.复选框
4.单选框

第一种方法: 定义框架

SELECTION-SCREEN  BEGIN OF  BLOCK blc_001 WITH  FRAME  TITLE TEXT-001.

	parameters:		p_bukrs  LIKE  ekko-bukrs.				"单值输入,参照数据表字段
	SELECT-OPTIONS s_ebeln  for  ekko-ebeln.		"区间输入  需要提前声明表TABLES:ekko.

SELECTION-SCREEN END  OF  BLOCK  blc_001.

*	定义不用框架
SELECTION-SCREEN BEGIN OF BLOCK  blc_002  WITH  FRAME  TITLE TEXT-002.

	PARAMETERS:  p_flag  as CHECKBOX  DEFAULT 'X' .		"复选框 DEFAULT  'X'  默认勾选
	SELECTION-SCREEN  SKIP.
	PARAMETERS:	p_flag1  RA

选择屏幕开发

SAP的屏幕开发一般分为两种
一种是通过SAP ABAP语法创建屏幕元素,称之为选择屏幕(我们现在学习这种)
第二种是通过SAP的屏幕编辑器开发,同构屏幕编辑器可以实现多种展现模式。(暂时不学)

屏幕基本输入域对象的创建以及相关属性

SAP中可以通过ABAP来创建屏幕元素,共分为两种模式,一种是通过SELECT-OPTIONS语法来建议数据输入域,另一种则是通过PARAMETERS语法来创建数据输入域。
即一种是定义框架,另一种是不定义框架

屏幕元素创建的基本语法

SELECT-OPTIONS 与PARAMETERS 的属性有很多相似之处,但是SELECT-OPTIONS创建的是一个输入的区间,其定义时必须指定参考表及参考字段,SELECT-OPTIONS <对象名> FOR <参考对象>

PARAMETERS 通常用于简历一个单一的屏幕输入对象,其参考对象比较灵活,可以参考数据表的字段,也可以参考具体的数据元素。 PARAMETERS<对象名> LIKE/TYPE<参考对象>

例如下面例子:

tables: mara. "参考表
SELECT-OPTIONS : s_matnr FOR mara-matnr. "参考字段
PARAMETERS : s_matnr1 LIKE mara-matnr.
PARAMETERS: s_matnr2 TYPE matnr.

可以看到结果如下
SELECT-OPTIONS : 代表选择范围

而parameters 则代表单选框 ,且分别有LIKE 和 TYPE

在这里插入图片描述

屏幕输入域显示参数控制

SELECT-OPTIONS 和  PARAMETERS 的显示参数控制机制基本类似。

1.OBLIGATORY 必输项控制
控制该屏幕元素是否为必输项,SELECTIONS-OPTIONS一般只对下限值字段(LOW字段)有效。
2.NO-DISPLAY 显示控制
程序运行后不显示该对象,SELECT-OPTIONS 与PARAMETERS属性一致。
3. VISIBLE LENGTH vlen显示长度控制
控制对象的显示长度,其取值范围为1-18
4. NO-EXTENSION多行输入控制
SELECT-OPTIONS 和 PARAMETERS 所定义的对象都可以输入多行数值,加上该参数后,限制只能输入单一行,在屏幕对象后面的多行输入控制按钮将隐藏
5.NO-INTERVALS 输入范围值控制
该属性针对于SELECTION-OPTIONS 所定义的对象是输入范围值,上限值到下限值,在内表中分别为 “LOW” 和 “HIGH” 两个字段,加上该参数后,在屏幕上只会显示上限值输入字段。
6. MODIFY ID modid 编辑组控制
该参数可以将定义的屏幕对象进行分组,以方便在程序运行中对分组的对象属性进行统一修改以及控制,例如控制某组对象为不可输入,如下代码中将G2中的对象在屏幕输入中设置为不可输入(即将input属性设置为0),该属性在SELECT-OPTIONS 和PARAMETERS中的操作基本一致。

REPORT ZALVTEST051.


TABLES : mara.
SELECT-OPTIONS:  p1  FOR mara-matnr MODIF ID g1,
                 p2  FOR mara-matnr MODIF ID g1,
                 p3  FOR mara-matnr MODIF ID g2,
                 p4  FOR mara-matnr MODIF ID g2.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF NOT screen IS INITIAL.
      IF SCREEN-GROUP1 = 'G2'.
        SCREEN-INPUT = 0.
        SCREEN-INVISIBLE = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
 ENDLOOP.

在这里插入图片描述

SAP输入值的控制

	SAP提供数据输入控制参数来控制屏幕对象的输入值,包括如下。

1.	控制输入默认值
		DEFAULT  vall [TO val2] [OPTION opt][SIGN  sgn]控制输入默认值范围
		该参数针对 SELECTI-OPTIONS 所定义对象屏幕加载后所显示的默认值,其中vall [TO val2]为输入值的上下限,OPTION  代表数据关系,SIGN 代表输入类型,具体如下表:

栏目名 参考值 描述
SIGN I 或者 E 输入类型, I表示包括,E表示排除
OPTION NB或者 BT 表示前后输入栏关系,NB(不包括),BT(包括)

default vall 即默认值,
控制PARAMETERS所对应输入对象的默认值范围:该参数定义对象在屏幕加载后所显示的默认值,输入默认值范围也可以在程序加载时进行更改

2.LOWER CASD 允许输入小写字母
SAP所有屏幕字段输入后都会将字母默认转换为大写,加上该参数允许输入小写字母。

3.MATCHCODE OBJECT search help 屏幕对象F4帮助
为屏幕对象加上指定的F4帮助,F4帮助功能会在数据字典章节做具体介绍,系统也提供了很多已经定义好的F4帮助对象,如下图所示。

4.MEMORY ID pid 定义 SELECT-OPTIONS 内存参数
可以将屏幕对象输入的值保存到指定的内存参数 ,通过 GET PARAMETERS的方法可以直接从内读取该对象的值,如以下代码,将内存值取到指定字段并输出。

输入默认值范围也可以在程序加载时进行更改,代码如下:

TABLES:  syst.
DATA:  s_date  TYPE d.
SELECT-OPTIONS : dl  for syst-datum  default s_date  to sy_datum option bt sign I .
*以上代码的意思即默认选择框中的日期为dl 到 sy-datum   

INITIALIZATION.
	s_date = sy-datum - 1.
	dl-low  = s_date.
	MODIFY  dl  INDEX 1. 

在这里插入图片描述

SAP屏幕框架的创建

SAP页面设计中的框架不但可以保证SAP程序外观设计的美观大方,并且可以提供诸如按钮,页签等功能组件。
基本框架的创建语法如下:
SELECTION-SCREEN BEGIN OF BLOCK block [WITH FRAME[TITLE title][NO INTERVALS]]
  • 限制所创建的框架只有一个输入项
    SELEDTION-SCREEN END OF BLOCK block.

案例:

SELECTION-SCREEN BEGIN OF BLOCK 100 WITH FRAME TITLE mytitle.	"定义为字符串变量

PARAMETERS : name  TYPE syuname.

SELECTION-SCREEN END OF BLOCK 100.

INITIALIZATION.
	mytitle = '输入用户编号:'.

在这里插入图片描述

实现屏幕元素质检的换行

通过在框架结构中嵌入代码: SELECTION-SCREEN SKIP[n],能实现屏幕元素间的换行,n表示换行数目

在这里插入图片描述
在这里插入图片描述

在屏幕上输出直线

	通过语句SELECTION-SCREEN ULINE  1(79)[/] [pos] (len) 可以实现在屏幕上画出一条直长度直线,其中[/]表示换行,[pos] 表示直线起始的位置,(len) 表示长度。
SELECTION-SCREEN BEGIN OF BLOCK 100 WITH FRAME TITLE mytitle.

SELECTION-SCREEN ULINE1(79).
SELECTION-SCREEN ULINE /1(50).

SELECTION-SCREEN END OF BLOCK 100.

PARAMETERS : name LIKE sv-uname.

在这里插入图片描述

在屏幕中实现按钮功能

 很多桌面程序的设计习惯通过按钮来实现与用户动作的交互。在SAP选择开发中也可以实现按钮功能。
 SELECTION-SCREEN PUSHBUTTON [ \ ] [ pos ] ( len ) button_text  "按钮的位置
                                                                            USER-COMMAND fcode      "为按钮分配事件功能代码
                                                                            [ VISIBLE LENGTH vlen ]      "输出长度
                                                                            [ MODIFY ID modid ]               "编辑组ID号码

在屏幕上创建页签,实现分页功能

SAP允许直接通过ABAP代码在屏幕上创建一个页签。
语法: SELECTION-SCREEN BEGIN OF TABBED BLOCK FOR n lines
每个页签都是由一个单独的子屏幕控制,n代表分页控件的高度,屏幕载入时必须先通过INITIALIZATION事件对其初始化。

TABLES : mara.
 
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.  "定义子屏幕100
 
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.
 
SELECT-OPTIONS : mat1 FOR mara-matnr NO INTERVALS.
 
SELECTION-SCREEN SKIP 1.
 
PARAMETERS chk1 AS CHECKBOX DEFAULT 'X'.
 
SELECTION-SCREEN END OF BLOCK a1.
 
SELECTION-SCREEN END OF SCREEN 100.
*定义子屏幕200
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
 
PARAMETERS : mat2 LIKE mara-matnr.
 
SELECTION-SCREEN END OF SCREEN 200.
 
*定义一个TAB空间,取名为MYTAB,空间高度为5,共分为两个页签,BUTTON1,BUTTON2.
*两个也签的功能代码分别为PUSH1,PUSH2
 
SELECTION-SCREEN : BEGIN OF TABBED BLOCK mytab FOR 5 LINES,
 
    TAB (20) button1 USER-COMMAND push1,
    TAB (20) button2 USER-COMMAND push2,
                   END OF BLOCK mytab.
 
*为TAB控件分配初始化值,引用TEXT element定义为本
INITIALIZATION.
 
  button1 = TEXT-010.
  button2 = TEXT-020.
  mytab-prog = sy-repid.
  mytab-dynnr = 100.
 
*为TAB控件页签单击事件,选择不同的页签显示不同的子屏幕
 
AT SELECTION-SCREEN.
 
  CASE sy-ucomm.
    WHEN 'PUSH1'.
      mytab-dynnr = 100.
      mytab-activetab = 'BUTTON1'.
    WHEN 'PUSH2'.
      mytab-dynnr = 200.
      mytab-activetab = 'BUTTON2'.
  ENDCASE.
;