ABAP开发学习知识点小记——选择屏幕

ABAP程序的Type-1类型的程序,一般称为报表程序(Report Program),也叫可执行程序(Executable Program)。 从数据库里读取所需的数据后,将数据转换格式后,以报表的形式输出。

创建程序事务码SE38或使用SE80ABAP编辑器

程序结构

标题代码部分

REPORT *** .

部分可选后缀作用

MESSAGE-ID *** "程序调用消息的来源SE93创建

NO STANDARD PAGE HEADING 去title; 

LINE-SIZE控制每行长度; 

LINE-COUNT 每多少行空一行

消息使用方法

MESSAGE s001."数字为消息号

MESSAGE s001 WITH '1' '2' .在SE91消息维护器创建每条消息内容 输出单引号内的内容在se91中要添加&1 &2。

消息类型为E、A时,程序提示错误消息,程序将自动结束,不再运行消息后续程序

MESSAGE s001 DISPLAY LIKE 'E'. "显示黄色报警但不结束程序

选择界面

单值输入

*选择画面 单值输入
SELECTION-SCREEN BEGIN OF BLOCK sc1 WITH FRAME TITLE TEXT-001."设置显示区块
*选择画面
  PARAMETERS:
    p_1 TYPE c LENGTH 1 DEFAULT 'A', "默认值
    p_2 TYPE c LENGTH 10.
    p_3 TYPE c OBLIGATORY. "必输

*搜索帮助
  PARAMETERS:
    p_4   TYPE zyt36_sch_6039-schid, "表名字-字段名字,前提条件,给表中的字段添加了对应的搜索帮助
    p_4_1 TYPE zde_yt36_schid_qb MATCHCODE OBJECT zhp_schid_6039, "用数据元素定义,指定搜索帮助
    p_4_2 TYPE mara-matnr,
    p_4_3 TYPE zyt36_sTU_6039-gender.
SELECTION-SCREEN END OF BLOCK sc1.

SELECTION-SCREEN BEGIN OF BLOCK sc2 WITH FRAME TITLE TEXT-002.
  PARAMETERS:
    p_5 TYPE c AS CHECKBOX, "创建一个checkbox复选框
    p_6 TYPE c RADIOBUTTON GROUP r1, "R1同一组,default跟谁,谁默认勾选
    p_7 TYPE c RADIOBUTTON GROUP r1 DEFAULT 'X',
    p_8 TYPE c RADIOBUTTON GROUP r2 DEFAULT 'X',
    p_9 TYPE c RADIOBUTTON GROUP r2.
  "转到文本元素更改选项的名称
SELECTION-SCREEN END OF BLOCK sc2.

点击转到->文本元素->选择文本 可以给自定义的变量添加描述并以描述文字显示。

多值输入

SELECTION-SCREEN BEGIN OF BLOCK sc3 WITH FRAME TITLE TEXT-003.
*输入值范围
  TABLES:
    zyt36_sch_6039.

  SELECT-OPTIONS:
    s_1 FOR zyt36_sch_6039-schid,"表名-字段名加后缀obligatory 必输
    s_2 FOR zyt36_sch_6039-schid NO INTERVALS,"不显示high
    s_3 FOR zyt36_sch_6039-schid NO-EXTENSION."不显示复选框
SELECTION-SCREEN END OF BLOCK sc3.

事件

*初始化:给屏幕的变量赋值
INITIALIZATION.
*给parameter赋值
  p_2 = '学生1'."字段初始值
  p_5 = 'X'." 给checkbox赋值

*给selection option赋值->内表
  s_1-sign = 'I'.
  s_1-option = 'EQ'.
  s_1-low = '0001'.
  s_1-high = '0000'.
  APPEND s_1.

屏幕检查

*做屏幕检查,当选择屏幕输入值有变化触发
AT SELECTION-SCREEN.
  IF p_4_3 <> 'F' AND p_4_3 <> 'M' AND p_4_3 IS NOT INITIAL.
    MESSAGE e003 WITH '性别'.
  ENDIF.

读取数据事件

START-OF-SELECTION.
  DATA: lt_stu TYPE TABLE OF zyt36_stu_6039.

  IF p_4_3 IS INITIAL.
    SELECT * FROM zyt36_stu_6039 INTO TABLE lt_stu.
  ELSE.
    SELECT * FROM zyt36_stu_6039 INTO TABLE lt_stu WHERE gender = p_4_3.
  ENDIF.

输出数据
END-OF-SELECTION.
  MESSAGE i005.
  cl_demo_output=>display( lt_stu )

好的,感谢你提供更详细的问题描述。以下是我为你编写的代码: ```javascript // 假设 arr5, arr3 和 arr2 分别为优先级为 5、3 和 2 的数组 const arr5 = [ { start: '2022-01-01T08:00:00', end: '2022-01-01T10:00:00', priority: 5, name: '节目1' }, { start: '2022-01-01T09:00:00', end: '2022-01-01T12:00:00', priority: 5, name: '节目2' }, { start: '2022-01-01T14:00:00', end: '2022-01-01T16:00:00', priority: 5, name: '节目3' }, ]; const arr3 = [ { start: '2022-01-01T11:00:00', end: '2022-01-01T14:00:00', priority: 3, name: '节目4' }, { start: '2022-01-01T15:00:00', end: '2022-01-01T17:00:00', priority: 3, name: '节目5' }, ]; const arr2 = [ { start: '2022-01-01T08:30:00', end: '2022-01-01T09:30:00', priority: 2, name: '节目6' }, { start: '2022-01-01T12:30:00', end: '2022-01-01T13:30:00', priority: 2, name: '节目7' }, ]; // 将所有节目按照开始时间排序 const schedule = [...arr5, ...arr3, ...arr2].sort((a, b) => a.start.localeCompare(b.start)); // 遍历排期数组,找出重叠部分并且播放高优先级的节目 for (let i = 0; i < schedule.length - 1; i++) { if (schedule[i].end > schedule[i + 1].start) { if (schedule[i].end > schedule[i + 1].end && schedule[i].priority >= schedule[i + 1].priority) { schedule.splice(i + 1, 1); } else if (schedule[i].priority < schedule[i + 1].priority) { schedule.splice(i, 1); i--; } else { schedule[i].end = schedule[i + 1].start; i--; } } } // 输出最终的排期数组 console.log(schedule); ``` 这段代码首先将所有的节目按照开始时间排序,然后遍历排期数组,找出重叠部分并且播放高优先级的节目。最后输出最终的排期数组。注意,这段代码假设所有节目的时间都是合法的 ISO 8601 格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值