ABAP LOOP AT 中AT FIRST,AT NEW ,AT END OF ,AT LAST的用法
本文主要介绍一下ABAP中的关于内表操作中的一些特殊用法。
AT FIRST ,AT NEW,AT END OF,AT LAST 都是ABAP中内表循环的事件块。
LOOP AT itab result ... AT FIRST. ... ENDAT. AT NEW comp1. ... ENDAT. AT NEW comp2. ... ENDAT. .... .... AT END OF comp2. ... ENDAT. AT END OF comp2. ... ENDAT. AT LAST. ... ENDAT. ENDLOOP.
AT FIRST : 循环内表的第一行时触发执行的代码。只执行一次。
AT LAST : 循环内表的最后一行数据时执行代码。即在LOOP 里把该执行的都执行完了才执行它。
AT NEW F : 如果字段F 及F 的左侧全部字段的数据,与上一行数据不一致,则执行代码。
就比如: AAA AAA AAB 那么在第一个AAA和AAB的时候就会触发事件。
AT END OF F: 如果字段F 及F 的左侧全部字段的数据,与下一行数据不一致,则执行代码。
所以AT NEW F 和AT END OF F都是不用考虑F 字段右边的字段内容的,所以在字段F 之后的字段的内容,系统将默认将设置为'*',也就是说F之后的内容不管相同与否,都视为'*'.
我们举个例子来看:
在执行AT NEW F.之前的工作区是有数据。
我们看AT NEW F在实际代码中的使用。
然后我们看执行完AT NEW以后的工作区中的数据,会发现matnr后面字段的数据全部消失了。
接下来我们通过一个具体案例来解释用法。
AT NEW F1: 假设一内表: COL1 COL2 COL3 A A A A A B A B C
AT NEW COL2,一共会触发两次,并不是一次!首先先忽略COL3(COL2 后面的所有字段)的值,它并不会影响事件触发。
第一次触发就是遍历到第一行时,因为第一行COL1、COL2要和上一行的COL1、COL2做比较,但那时我们现在只是遍历到第一行,并没有上一行给我们比较。换个角度,上一行是不存在的或者说是空再或者是未初始化的,也就是说第一行的COL1、COL2和上一行COL1、COL2并不相同,一个有数据,一个没有数据,当然不同,所以此时会触发AT NEW COL2,后面的代码就会执行
但当遍历到第二行的AAB的时候,因为第二行的COL1=第一行的COL1且第二行COL2=第一行的COL2,所以不会触发AT NEW COL2,继续循环。
第二次触发是遍历到第三行的时候,虽然第三行的COL1 = 第二行的COL1 但是COL2 的值为B,不等于第二行的COL2 ,所以会触发AT NEW COL2.
***AT END OF COL2***
那么同样的例子,对于AT END OF COL2,它也会触发两次,同样忽略COL3的值。
第一次触发是遍历到第二行的时候, 因为第二行COL2的A并不等于其下一行(第三行)的COL2的B,所以会触发AT END OF COL2.
第二次触发是在遍历到最后一行的时候,第三行COL1,COL2字段要和下一行比较,但是下一行又不存在,这就类似与AT NEW COL2遍历到第一行的时候。
相关推荐
在 ABAP 程序中,内表是使用 TABLE 语句或 DATA 语句定义的。ABAP 内表可以用来存储和处理大量的数据,例如从数据库中读取的数据、用户输入的数据等。 ABAP 内表的使用方法可以分为以下几种: 1. 填充内表 fills...
### ABAP动态内表使用的例子 #### 一、引言 在ABAP编程语言中,动态内表(Dynamic Internal Tables)是一种非常灵活的数据结构,它允许程序员在运行时定义和操作内表。与静态内表相比,动态内表提供了更多的灵活性...
然后,我们使用LOOP语句遍历内表ITAB,并从EKPO表中查询数据,并将其存储到内表ITAB中。相关代码如下: ```abap LOOP AT ITAB. SELECT SUM( MENGE ) INTO ITAB-MENGE FROM EKPO WHERE EBELN EQ ITAB-EBELN. ...
在 ABAP 中,语句 `write at 12 XXX.` 会报错,因为 `write` 语句不能用 `at` 关键字指定输出位置。 2. TCODE 的作用 在 ABAP/4 的开发工作中,TCODE SE80 是用于创建程序、函数组和程序内部各种元素的。 3. 表...
在这个实例中,我们使用了 SELECT 语句来查询数据,并使用 LOOP 语句来遍历查询结果。同时,我们还使用了 INNER JOIN 语句来连接两个表,并使用了 SUM 函数来计算总和。这些语句都是 ABAP 语言中的基本语句,掌握...
在上面的示例中,我们使用 LOOP 语句来遍历屏幕上的控件,并根据组别 SC1 或 SC2 来修改屏幕的某些属性。 四、PAI 处理 PAI 处理是 ABAP 选择屏幕的核心部分,用于检查用户输入的完整性和合法性。在 PAI 处理中,...
本文旨在为初学者提供关于如何在SAP BI中使用ABAP的知识点介绍,特别是针对那些希望增强自己ABAP技能的BI顾问。 #### SAP BI中的Routines 在SAP BI中,Routines是实现自定义逻辑的关键工具之一。它们提供了在不同...
在 ABAP 中,语句 `write at 12 XXX` 将编译报错,因为 `at` 语句只能用于指定输出格式和位置,而不能用于变量赋值。 2. ABAP 试题 2:直接进入创建程序的 TCODE 在 ABAP/4 中,TCODE SE80 是直接进入创建程序、...
在 ABAP 中,读取 EXCEL 数据可以使用 OPEN DATASET 语句读取 EXCEL 文件,然后使用 LOOP 语句遍历 EXCEL 文件中的数据,并将其写入到 ABAP 内表中。下面是读取 EXCEL 数据的示例代码: ```ABAP DATA: G_DATAFILE ...
ABAP程序 通过程序中的关键字查找程序名和首次出现的行数,双击程序名进入程序
ABAP 屏幕设计中添加文本编辑器需要建立屏幕、定义屏幕的 PAI 和 PBO、使用 CL_GUI_TEXTEDIT 编辑器、使用 CONTAINER 和 PICTURE 对象、处理用户输入、输出编辑框内容和使用 REFRESH 语句刷新数据。
对于普通的屏幕元素,我们可以使用LOOP AT SCREEN来实现编辑控制。对于Table Control,也可以使用LOOP AT SCREEN来实现编辑控制。TC向导会生成如下的Screen Flow Logic: LOOP AT itab INTO wa WITH CONTROL tc_...
### ABAP SQL 使用技巧详解 在 SAP 系统开发中,ABAP 语言与 SQL 查询紧密结合,通过优化 SQL 查询方式可以显著提升程序性能。本文将详细介绍 ABAP 中 SQL 查询的各种技巧,帮助开发者更好地掌握这些技能。 #### 1...
1. **简化查询**:直接在SELECT语句中使用WHERE子句来限制结果集,而不是先执行一个全表扫描再通过CHECK语句来过滤数据。 - **示例**: - **原始写法**: ```abap Select * from zflight. Check: zflight-airln...
在上面的代码中,我们使用了LOOP语句来遍历gt_bid表,並将其转换为lt_list结构。然后,我们使用CALL FUNCTION 'VRM_SET_VALUES'来将lt_list结构传递给下拉框,以便用户可以选择相应的选项。 四、 TABSTRIP的使用 ...
ABAP(Advanced Business Application Programming)是SAP公司开发的一种编程语言,主要用于开发SAP系统中的业务应用程序。这个“ABAP中文帮助文档”包含了对ABAP基础、报表编写以及事务处理的详细指南,对于学习和...
5. 程序中执行了这么一段代码DATA it_sflight type sflight with header line.Loop at it_sflight.it_sflight-carrid = 'AA'.Modify it_sflight.Endloop.该段语法中出现了四次it_sflight,其中后三次分别代表的是? ...
在“Scenario Description”部分,作者描述了示例中使用的数据模型和参考应用。数据模型是开发的基础,而完整参考应用则是一个端到端开发过程中的重要组成部分,它反映了整个开发流程的应用场景。 CDS(Core Data ...
在ABAP中,我们可以使用SUBMIT关键字来调用另一个程序。例如: ```abap SUBMIT ZHR_UPDATE_IT0008. ``` 这将调用ZHR_UPDATE_IT0008程序。 二、传递数据 在调用程序时,需要传递数据给被调用的程序。有多种方法可以...
ABAP(Advanced Business Application Programming)是SAP公司开发的一种编程语言,主要用于开发SAP系统中的业务应用程序。这个“ABAP中文HELP”很显然是为初学者准备的一个资源,它旨在提供全面的ABAP语法教程,...