当前位置: 首页 > article >正文

别再死记硬背了!用这3个真实业务场景,彻底搞懂SAP ABAP里的AT NEW和AT END

3个真实业务场景解锁SAP ABAP控制级语句的精髓每次看到ABAP代码里那些AT NEW、AT END控制块是不是总觉得像在解数学题明明知道语法规则一到实际业务就手忙脚乱。今天我们不谈枯燥的理论直接进入三个真实业务场景——从销售订单汇总到财务凭证处理让你在解决实际问题的过程中真正掌握这些控制级语句的实战用法。1. 销售订单分组汇总AT NEW的实战解析假设我们手头有一个销售订单明细表需要按客户和产品类别生成分组小计。传统做法可能是先排序再用循环累加但这样代码会变得冗长且难以维护。这时候AT NEW就派上用场了。我们先看原始数据结构TYPES: BEGIN OF ty_order_detail, kunnr TYPE kunnr, 客户编号 matkl TYPE matkl, 产品类别 werks TYPE werks_d, 工厂 menge TYPE menge_d, 数量 netwr TYPE netwr, 净金额 END OF ty_order_detail.当我们需要按客户和产品类别汇总时可以这样处理DATA: lt_orders TYPE TABLE OF ty_order_detail, lv_total TYPE netwr. SORT lt_orders BY kunnr matkl. LOOP AT lt_orders ASSIGNING FIELD-SYMBOL(fs_order). AT NEW matkl. 新类别开始时重置累计值 lv_total 0. WRITE: / 客户:, fs_order-kunnr, 类别:, fs_order-matkl. ENDAT. lv_total lv_total fs_order-netwr. AT END OF matkl. 类别结束时输出小计 WRITE: / 小计金额:, lv_total. ENDAT. ENDLOOP.这里有几个关键点需要注意字段选择AT NEW matkl表示当matkl及其左侧所有字段这里只有kunnr发生变化时触发工作区状态在AT NEW/END块内matkl右侧的字段会被系统自动填充为初始值字符型为***数值型为0排序必须使用前必须确保数据按触发字段及其左侧字段正确排序提示在实际项目中建议将汇总逻辑封装到专门的子例程中而不是直接在循环中处理业务逻辑这样更利于代码复用和维护。2. 物料批次状态变更统计AT FIRST/LAST的特殊应用在批次管理系统中经常需要统计某个时间段内批次状态的变更情况。比如我们需要生成一个报表显示每天第一个和最后一个状态变更的批次。假设我们有如下批次状态变更记录表TYPES: BEGIN OF ty_batch_change, batch TYPE charg_d, 批次号 date TYPE datum, 变更日期 time TYPE uzeit, 变更时间 status TYPE char20, 状态 END OF ty_batch_change.处理这种需求时AT FIRST和AT LAST就特别有用DATA: lt_changes TYPE TABLE OF ty_batch_change. SORT lt_changes BY date time. LOOP AT lt_changes ASSIGNING FIELD-SYMBOL(fs_change). AT FIRST. 处理第一天第一条记录 WRITE: / 最早变更:, fs_change-date, fs_change-time, fs_change-batch. ENDAT. AT LAST. 处理最后一天最后一条记录 WRITE: / 最近变更:, fs_change-date, fs_change-time, fs_change-batch. ENDAT. ENDLOOP.实际业务中我们可能还需要按日期分组处理DATA: lv_prev_date TYPE datum. SORT lt_changes BY date time. LOOP AT lt_changes ASSIGNING fs_change. AT NEW date. 新日期开始时处理 lv_prev_date fs_change-date. WRITE: / 日期:, fs_change-date. ENDAT. AT END OF date. 日期结束时处理 WRITE: / 当日最后变更批次:, fs_change-batch. ENDAT. ENDLOOP.这个场景展示了AT FIRST/LAST在整个循环中只执行一次的特性如何结合AT NEW和AT END实现更复杂的分组处理在实际业务中这些控制块经常用于生成报表的页眉页脚信息3. 财务凭证行项目小计AT END OF的复杂应用财务系统中经常需要按科目或其他维度对凭证行项目进行小计。这是一个AT END OF发挥作用的典型场景。假设我们有如下凭证行项目数据TYPES: BEGIN OF ty_account_item, bukrs TYPE bukrs, 公司代码 belnr TYPE belnr_d, 凭证编号 gjahr TYPE gjahr, 会计年度 buzei TYPE buzei, 行项目号 hkont TYPE hkont, 科目 wrbtr TYPE wrbtr, 金额 END OF ty_account_item.当需要按公司代码和科目生成小计时DATA: lt_items TYPE TABLE OF ty_account_item, lv_subtotal TYPE wrbtr. SORT lt_items BY bukrs hkont. LOOP AT lt_items ASSIGNING FIELD-SYMBOL(fs_item). AT NEW hkont. 新科目开始时重置小计 lv_subtotal 0. WRITE: / 公司代码:, fs_item-bukrs, 科目:, fs_item-hkont. ENDAT. lv_subtotal lv_subtotal fs_item-wrbtr. AT END OF hkont. 科目结束时输出小计 WRITE: / 科目小计:, lv_subtotal. 这里可以添加更复杂的逻辑如检查借贷平衡等 IF lv_subtotal 0. WRITE: / 警告: 科目余额不平衡!. ENDIF. ENDAT. ENDLOOP.在更复杂的场景中我们可能需要多级小计DATA: lv_company_total TYPE wrbtr, lv_account_total TYPE wrbtr. SORT lt_items BY bukrs hkont. LOOP AT lt_items ASSIGNING fs_item. AT NEW bukrs. 新公司代码开始时重置公司级合计 lv_company_total 0. WRITE: / 公司代码:, fs_item-bukrs, . ENDAT. AT NEW hkont. 新科目开始时重置科目级小计 lv_account_total 0. WRITE: / -- 科目:, fs_item-hkont. ENDAT. lv_account_total lv_account_total fs_item-wrbtr. lv_company_total lv_company_total fs_item-wrbtr. AT END OF hkont. 科目结束时输出科目小计 WRITE: / 科目小计:, lv_account_total. ENDAT. AT END OF bukrs. 公司代码结束时输出公司合计 WRITE: / 公司合计:, lv_company_total. ENDAT. ENDLOOP.这个案例展示了如何实现多级分组汇总在AT END OF块中可以加入业务逻辑检查控制块嵌套使用的实际应用4. 避坑指南控制级语句的常见陷阱即使理解了基本原理在实际使用这些控制级语句时仍然会遇到各种问题。以下是开发者常踩的几个坑陷阱1未正确排序导致逻辑错误 错误示例未按触发字段排序 LOOP AT lt_data. AT NEW field1. 这里的逻辑可能不会按预期执行 ENDAT. ENDLOOP. 正确做法必须先排序 SORT lt_data BY field1 field2. 包含AT NEW/END中使用的所有字段及其左侧字段陷阱2误解字段作用范围LOOP AT lt_data ASSIGNING fs. AT NEW field1. 在这里field1右侧的所有字段值已被系统重置 如果这里需要使用field2的值会得到***或0 ENDAT. ENDLOOP.陷阱3性能问题控制级语句虽然方便但在处理大数据量时可能影响性能。对比表格方法优点缺点适用场景AT NEW/END代码简洁逻辑清晰需要完整排序大数据量性能差中小数据量需要快速开发手动分组灵活性高可优化性能代码复杂容易出错大数据量性能关键场景SQL分组数据库端处理性能好功能受限无法复杂处理简单汇总统计陷阱4忽略初始和结束条件LOOP AT lt_data. AT NEW field1. 第一行总会触发因为上一行不存在 ENDAT. AT END OF field1. 最后一行总会触发因为下一行不存在 ENDAT. ENDLOOP.注意在AT NEW/END块内修改工作区内容不会影响实际内表数据但可能影响后续处理逻辑。如果需要基于分组结果更新数据建议先收集分组信息再单独处理。在实际项目中我遇到过因为误解这些特性而导致的bug。比如有一次报表总是多出一行汇总花了半天时间才发现是AT LAST使用不当造成的。从那以后我都会在复杂逻辑处加上详细注释注明为什么这样使用控制语句。

相关文章:

别再死记硬背了!用这3个真实业务场景,彻底搞懂SAP ABAP里的AT NEW和AT END

3个真实业务场景解锁SAP ABAP控制级语句的精髓 每次看到ABAP代码里那些AT NEW、AT END控制块,是不是总觉得像在解数学题?明明知道语法规则,一到实际业务就手忙脚乱。今天我们不谈枯燥的理论,直接进入三个真实业务场景——从销售订…...

n8n与LLM集成实战:构建智能自动化工作流指南

1. 项目概述:当自动化遇上大语言模型如果你正在寻找一种方法,将日常繁琐的流程自动化,同时又希望这些流程能“理解”上下文、处理非结构化信息,甚至能进行简单的推理和决策,那么你很可能已经接触过 n8n 和各类大语言模…...

【官方官宣】Claude 全量限额调整详情:算力扩容落地,编程额度翻倍,API 速率最高涨 16 倍

本文完整拆解 2026 年 5 月 Anthropic Claude 限额调整的全部细节,覆盖免费版、Pro/Max 个人版、Team 团队版、企业版、API 开发者全场景,同时解析调整背后的算力支撑、用户争议与行业影响。 一、事件开篇:从限流吐槽到额度放开,C…...

WorldMM:动态多模态记忆系统在长视频分析中的应用

1. 项目概述:当视频理解遇上记忆宫殿去年处理一段30分钟的监控视频时,我深刻体会到传统视频分析工具的局限性——它们要么像金鱼一样只有7秒记忆,要么像老式录像带需要反复倒带检索。这正是WorldMM试图解决的问题:让AI像人类侦探一…...

PCEP-30-02认证一次过!我的60天备考计划与实战笔记(附免费资源)

PCEP-30-02认证60天通关秘籍:从零基础到满分的实战路线图 1. 为什么选择PCEP认证作为Python入门第一步? 在编程学习的海洋里,Python无疑是最友好的起点之一。而PCEP(Certified Entry-Level Python Programmer)认证作…...

5个简单步骤:用Windows Cleaner彻底解决C盘爆红问题

5个简单步骤:用Windows Cleaner彻底解决C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款完全免费的开源系统优化工具…...

别再一帧帧画框了!用CVAT的Track模式,5分钟搞定视频目标追踪标注

别再一帧帧画框了!用CVAT的Track模式,5分钟搞定视频目标追踪标注 视频标注是计算机视觉项目中最耗时的环节之一。想象一下,你需要标注一段30分钟的道路监控视频,其中包含数十辆移动的汽车和行人。如果采用传统逐帧标注的方法&…...

告别玄学调参:用STM32 CubeMX和逻辑分析仪调试SX1262 LoRa通信

告别玄学调参:用STM32 CubeMX和逻辑分析仪调试SX1262 LoRa通信 在物联网设备开发中,LoRa技术因其长距离、低功耗的特性成为热门选择。然而许多开发者在实际使用SX1262芯片时,常常陷入反复修改参数却收效甚微的困境。本文将分享如何通过STM32 …...

为AI智能体赋能视觉:zeuxis本地截图服务器的MCP协议实践

1. 项目概述:为AI智能体装上“眼睛”的本地截图服务器 如果你正在开发或使用基于MCP(Model Context Protocol)的AI智能体,并且希望它能“看见”你屏幕上的内容,那么 zeuxis 这个工具绝对值得你深入了解。简单来说&am…...

PotPlayer字幕翻译终极指南:免费实现实时双语字幕的完整教程

PotPlayer字幕翻译终极指南:免费实现实时双语字幕的完整教程 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为观看外语…...

解锁碧蓝航线全自动游戏体验:你的智能航海助手

解锁碧蓝航线全自动游戏体验:你的智能航海助手 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为每天重复的…...

Qdrant向量数据库MCP服务器:AI智能体标准化工具集成指南

1. 项目概述:向量数据库的“翻译官”如果你最近在折腾AI应用,尤其是那些需要处理大量非结构化数据(比如文档、图片、音频)的智能体(Agent)或者RAG(检索增强生成)系统,那你…...

G-Helper终极指南:华硕笔记本轻量控制工具从入门到精通

G-Helper终极指南:华硕笔记本轻量控制工具从入门到精通 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…...

基于Tauri 2构建的AI编程桌面应用opcode:从源码构建到深度定制

1. 项目概述:重新定义AI辅助编程的桌面体验如果你和我一样,是Claude Code的深度用户,那你一定经历过这样的场景:在终端里敲着claude命令,看着一行行代码生成,但总觉得少了点什么。是的,少了那种…...

在自动化工作流中集成Taotoken实现多模型智能决策

在自动化工作流中集成Taotoken实现多模型智能决策 构建复杂的AI Agent或自动化流程时,单一模型的能力边界往往成为瓶颈。面对多样化的任务类型,开发者需要一种灵活、统一的方式来调度不同的模型资源。Taotoken作为大模型聚合分发平台,其Open…...

机器视觉(MV)与机器人视觉(RV)的本质区别(2)

重磅预告:本专栏将独家连载新书《AI视觉技术:从入门到进阶》精华内容。本书是《AI视觉技术:从进阶到专家》的权威前导篇,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“AI教…...

Python 3.12+ 新变化:你的旧代码可能因‘无效转义序列’警告而需要更新了(附Matplotlib案例)

Python 3.12 版本升级必读:如何优雅处理"无效转义序列"警告 最近在升级到Python 3.12后,我的一个数据可视化项目突然开始抛出大量SyntaxWarning: invalid escape sequence警告。这些警告来自一些使用了LaTeX数学符号的Matplotlib标签代码&…...

如何3分钟将B站视频转为文字:免费开源工具bili2text完整指南

如何3分钟将B站视频转为文字:免费开源工具bili2text完整指南 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为手动记录B站视频内容而烦恼吗&…...

SAP ABAP开发避坑:BAPI_MATVAL_PRICE_CHANGE调用报‘估价未维护’的完整解决流程

SAP ABAP开发实战:BAPI_MATVAL_PRICE_CHANGE报错"估价未维护"的深度解析与系统化解决方案 在SAP物料管理模块中,价格变更操作是企业日常运营中的高频事务。作为ABAP开发人员,我们经常需要借助BAPI_MATVAL_PRICE_CHANGE函数模块实现…...

【稀缺资源】AISMM 2.1评估矩阵首次公开:12项技术品牌健康度诊断+即时生成个人IP升级路线图

更多请点击: https://intelliparadigm.com 第一章:AISMM模型与技术品牌塑造 AISMM(Artificial Intelligence Strategy Maturity Model)是一种面向AI驱动型组织的技术战略成熟度评估框架,它将技术品牌塑造视为组织能力…...

LLM动态干预技术:实时调控与合规实践

1. 项目概述 大型语言模型(LLM)正在重塑人机交互的边界,但如何让这些"黑箱"系统按照人类意图稳定输出,一直是业界痛点。去年我在参与某智能客服系统升级时,就遇到过模型突然输出不合规回复的棘手情况。动态干…...

Scroll Reverser终极指南:揭秘macOS滚动方向深度定制技术

Scroll Reverser终极指南:揭秘macOS滚动方向深度定制技术 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 在macOS生态中,滚动方向冲突是许多用户面临的共…...

多终端命令历史实时同步工具multicli的设计与部署指南

1. 项目概述:一个命令,多端同步如果你和我一样,日常开发需要在多个终端环境之间频繁切换——比如本地的 macOS 终端、远程的 Linux 服务器,甚至 Windows 上的 WSL——那你一定对“命令历史不同步”这件事深恶痛绝。在服务器上敲了…...

【AISMM+ESG融合实践手册】:全球仅12家通过奇点认证的企业都在用的6步嵌入法(附ISO/IEC 42001映射表)

更多请点击: https://intelliparadigm.com 第一章:AISMM与ESG融合的战略必然性与奇点认证背景 人工智能系统成熟度模型(AISMM)正加速与环境、社会与治理(ESG)框架深度耦合,其动因不仅源于监管趋…...

开源工具token-usage-ui:可视化监控LLM API Token用量与成本

1. 项目概述:一个为AI开发者量身打造的Token用量监控利器如果你正在开发基于OpenAI、Anthropic、Azure OpenAI等主流大语言模型API的应用,那么“Token用量”这个指标,你一定不会陌生。它直接关联着你的API调用成本、应用性能,甚至…...

终极跨平台硬件调优指南:Universal x86 Tuning Utility如何释放你的Intel/AMD设备全部潜力

终极跨平台硬件调优指南:Universal x86 Tuning Utility如何释放你的Intel/AMD设备全部潜力 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x…...

SynthID-Image:不可见数字水印技术解析与实践

1. 项目背景与核心价值在数字内容爆炸式增长的今天,图像版权保护已成为创作者和平台方最头疼的问题之一。传统水印技术要么容易被去除,要么严重影响视觉体验,而SynthID-Image的出现彻底改变了这个局面。这项由Google DeepMind团队研发的技术&…...

透明背景图片制作方法大全:从零基础到高效批量处理

前几天,一位做电商的朋友问我怎样快速处理商品图片的背景。她手里有几百张产品照片,需要换成透明背景上架到各个平台,用传统方法根本来不及。这个问题其实戳中了很多人的痛点——无论是证件照换底色、电商商品去背景,还是社交媒体…...

AI驱动硬件内核优化:从手工编码到LLM自动生成

## 1. 硬件内核技术概述:从手工编码到AI驱动的范式转变硬件内核(Hardware Kernel)是直接面向特定处理器架构编写的底层执行单元,它通过精细控制指令流水线、寄存器分配和内存访问模式来最大化硬件计算效率。在AI加速器领域&#x…...

告别手动续期!用acme.sh + Nginx搞定Let‘s Encrypt免费SSL证书(保姆级配置流程)

零门槛实现HTTPS自动化:acme.sh与Nginx的完美协作指南 第一次部署个人博客时,我盯着浏览器地址栏那个刺眼的"不安全"警告整整三天。直到发现Lets Encrypt的免费证书,才意识到原来HTTPS配置可以如此简单。但三个月后,当深…...