退出继续FOR IN循环语句

2020-08-22 12:30发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,专家们,我尝试在ABAP中使用FOR循环的VALUE语句来构建新表。 FILTER语句不适合我,因为声明内部表的表键使我很费劲。 所以说那不是一个选择。

我尝试了使用FOR循环创建内部表的各种变体,以查看发生了什么。 每当条件不适合时,带有ELSE条件的最后一条语句都会添加一个空行。

那么如何防止添加空行? 我以为要添加CONTINUE关键字,但是语法检查不允许。

我的问题:是否可以有条件地退出此FOR IN循环?

 SPAN {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S31 {
 字体样式:斜体;
 颜色:#808080;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 类型:开始于ly_table,

          标记TYPE boole_d,

          category_id TYPE zdb_psets-category_id,

          文字TYPE字符串,

        ly_table的结尾。



 数据lv_category类型zdb_psets-category_id值'19210000'。

 ly_table的数据lt_table类型表。

 ly_table的数据lt_table_filtered类型表。

 数据empty_line类似于lt_table的行。



 "创建表:

 lt_table = VALUE#((flag = abap_true category_id = '19 *'text ='blabla')(flag = abap_true category_id ='1922'text ='hello world')))。

 如果lt_table是INITIAL。

   返回。

 万一。



 *"过滤器表

 lt_table_filtered = VALUE#(在lt_table中输入wa(标志EQ abap_true)(wa))。

 *

 BREAK-POINT。

 *

 "如果条件不合适,这会增加一个空行。还不错,但不是很好

 lt_table_filtered = VALUE#(在lt_table WHERE中输入(标志EQ abap_true)(cond#(当lv_category CP wa-category_id然后wa else empty_line)))。

 *

 BREAK-POINT。



 "没有其他条件

 lt_table_filtered = VALUE#(在lt_table中输入wa(标志EQ abap_true)(cond#(当lv_category CP wa-category_id然后wa)))。



 BREAK-POINT。
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,专家们,我尝试在ABAP中使用FOR循环的VALUE语句来构建新表。 FILTER语句不适合我,因为声明内部表的表键使我很费劲。 所以说那不是一个选择。

我尝试了使用FOR循环创建内部表的各种变体,以查看发生了什么。 每当条件不适合时,带有ELSE条件的最后一条语句都会添加一个空行。

那么如何防止添加空行? 我以为要添加CONTINUE关键字,但是语法检查不允许。

我的问题:是否可以有条件地退出此FOR IN循环?

 SPAN {
 字体家族:" Courier New";
 字体大小:10pt;
 颜色:#000000;
 背景:#FFFFFF;
 }
 .L0S31 {
 字体样式:斜体;
 颜色:#808080;
 }
 .L0S33 {
 颜色:#4DA619;
 }
 .L0S52 {
 颜色:#0000FF;
 }
 .L0S55 {
 颜色:#800080;
 }
 .L0S70 {
 颜色:#808080;
 }

 类型:开始于ly_table,

          标记TYPE boole_d,

          category_id TYPE zdb_psets-category_id,

          文字TYPE字符串,

        ly_table的结尾。



 数据lv_category类型zdb_psets-category_id值'19210000'。

 ly_table的数据lt_table类型表。

 ly_table的数据lt_table_filtered类型表。

 数据empty_line类似于lt_table的行。



 "创建表:

 lt_table = VALUE#((flag = abap_true category_id = '19 *'text ='blabla')(flag = abap_true category_id ='1922'text ='hello world')))。

 如果lt_table是INITIAL。

   返回。

 万一。



 *"过滤器表

 lt_table_filtered = VALUE#(在lt_table中输入wa(标志EQ abap_true)(wa))。

 *

 BREAK-POINT。

 *

 "如果条件不合适,这会增加一个空行。还不错,但不是很好

 lt_table_filtered = VALUE#(在lt_table WHERE中输入(标志EQ abap_true)(cond#(当lv_category CP wa-category_id然后wa else empty_line)))。

 *

 BREAK-POINT。



 "没有其他条件

 lt_table_filtered = VALUE#(在lt_table中输入wa(标志EQ abap_true)(cond#(当lv_category CP wa-category_id然后wa)))。



 BREAK-POINT。
 
付费偷看设置
发送
2条回答
哎,真难
1楼 · 2020-08-22 13:28.采纳回答

感谢 Sandra Rossi
设置Brekets Right需要一些时间。 但是现在它可以在不添加空行的情况下工作了。

我不知道LINES OF COND语句。


Sandra Rossi 无法奖励您,因为您的回答是评论。 :-(

这是有效的编码:

"不要添加空行

 lt_table_filtered = VALUE#(在lt_table中输入(标志EQ abap_true)

 (行数#(当lv_category CP wa-category_id然后VALUE#((wa))))

 )。
 
ZJXianG
2楼-- · 2020-08-22 13:18

我并没有确切地看您的问题,但是如果您想在每个循环中添加一行或零行,一种解决方法是使用LINES OF(每行1的itab) 或0行)。 哑巴示例,仅使用SEATSOCC

 SELECT * FROM sflight进入表@DATA(flights)。
 类型ty_flights带空密钥的sflight类型标准表。
 DATA(flights_with_seats_left)= VALUE ty_flights(FOR 航班
                 (线路#(当 -seatsocc LT  -seatsmax
                                    然后值#(((flight>))))))。

一周热门 更多>