
ABAP 程序示例与语法
文章平均质量分 67
SAP学习成长之路
华为云技术专家,四年SAP开发经验,有着丰富的ABAP开发领域知识,熟悉SD/MM/FICO/HR等模块的开发,擅长探索新技术和新知识。
展开
-
ABAP开发中的前导零和末尾零
前导零和末尾零是指分别出现在数字序列中第一个非零数字之前和最后一个非零数字之后的任何零数字。原创 2025-02-07 18:42:13 · 386 阅读 · 0 评论 -
在 SALV 中创建自定义按钮和事件处理 (SAP List Viewer)
这样,您就可以定制 SAP 列表查看器,以满足特定的业务需求,并改善 SAP 应用程序中的用户体验。在部署到生产环境之前,请始终遵循 SAP 开发最佳实践,并在开发环境中彻底测试您的 SALV 增强功能。虽然 SALV 提供了一系列标准功能,但在某些情况下,你可能需要通过添加自定义按钮并处理与它们关联的事件来增强用户体验。过程:为了实现这个 首先,我们必须创建一个报告程序,然后我们必须在该本地类中创建一个本地类 create Handle click 并添加函数方法并实现该方法。原创 2025-02-06 10:48:24 · 364 阅读 · 0 评论 -
了解 ALV 中的 field catalog (ABAP List Viewer)
在 ABAP 中,字段目录是使用 ALV (ABAP List Viewer) 定义内部表中的数据显示方式的关键元素。它提供对 ALV 中显示的字段的各种属性的控制,例如列标题、对齐方式、可见性、可编辑性等。关键概念:Field Catelog 字段目录:这是一个表(对于现代 ALV 网格,通常为lvc_t_fcat类型,对于旧 ALV 网格,通常为),其中包含有关 ALV 中显示的内部表的每个字段的元数据。它定义了每列的显示方式(例如,列标题、字段对齐方式、输出长度)。原创 2025-02-04 18:22:42 · 613 阅读 · 0 评论 -
使用 ABAP 进行应用程序日志记录
注:这里我使用的是标准报文类 BPFS(报文编号:006),如果系统中没有该类报文,则使用事务代码 SE91 创建一个新的报文,或重复使用任何现有报文。因此,现在当客户提出 Ticket 时,您可以做的第一步就是:检查生产中的应用程序日志。在国家内部,只要应用程序与特定的状态相关,我就会根据状态创建子对象。您可以将下面的代码写入增强程序/用户退出程序/报告程序(任何自定义代码),以便在执行时生成日志。完成对象和子对象的创建后,就该编写实际创建应用程序日志的代码了。来监控基于对象的应用程序日志。原创 2024-12-27 23:46:27 · 769 阅读 · 0 评论 -
如何获取 ABAP 内表中的重复项
要识别 ABAP 内表中的重复项,可以结合使用排序和循环。在 ABAP 中,您可以使用简单的逻辑来识别和显示内表中的重复数据。一种常见的方法是使用。来标记或分离重复数据。,则可以使用另一种使用循环的方法。原创 2024-12-24 22:45:11 · 816 阅读 · 0 评论 -
内表中的 GROUP BY 详解
不会太复杂吧?了解了这些简单的事实后,你可以继续阅读文档,做一些更复杂的事情,例如,利用组键定义的 RHS 可以使用表达式这一事实,或者使用FOR表达式代替LOOP AT。原创 2024-12-22 01:02:09 · 312 阅读 · 0 评论 -
带标题和不带标题的内部表
什么是工作区?简单来说,工作区是单行数据。它们应具有与任何内部表相同的格式。它用于一次处理一行内部表中的数据。原创 2024-12-20 17:47:07 · 493 阅读 · 0 评论 -
何时在 ABAP 变量中使用 “Clear”、“Refresh ”或 “Delete”?
假设,编译器 ABAP 将分配相当于 1 字符大小的内存(内存 ID 为 433443)。赋值,变量或内存 ID 433443 就会包含这个 “X ”值。原创 2024-12-20 10:35:39 · 262 阅读 · 0 评论 -
ABAP SQL 取日期+时间最新的一条数据
我们 SAP 系统的表数据中日期和时间是作为主键的,那么如果通过 ABAP SQL 取到最新日期的最新时间呢。另外,通过 ABAP 取出所有数据,存到内表,然后对内表排序取第一条也能实现相同的效果。我们在系统对接的时候,外部系统可能会推送多个数据给到我们。解决方案:可以通过两个。的时间,另一个时间是。原创 2024-12-18 16:29:19 · 1111 阅读 · 0 评论 -
如何在 SALV 测试表中创建条目(ALV_CHCK、ALV_T_T2 等)
【代码】如何在 SALV 测试表中创建条目(ALV_CHCK、ALV_T_T2 等)原创 2024-12-18 16:01:24 · 227 阅读 · 0 评论 -
ABAP 7.4 新语法:使用 FOR LOOP 语法循环内表到新内表
的简单 For 循环。索引关键字在这里是可选的。这段代码只是将数据从一个表转移到另一个表。语句也称为迭代表达式。原创 2024-12-17 18:09:09 · 1245 阅读 · 0 评论 -
SAP ABAP 计算带 WHERE 条件的内表行数
在 SAP ABAP 中,从 7.40 版开始,可以使用 REDUCE 表达式计算内部表中带有条件的行数。在此之前,开发人员使用 LOOP 遍历表,并为每个匹配条件递增计数器。在 7.40 之前DATA: lv_count TYPE i.LOOP AT gt_alv INTO gs_alv WHERE sel = 'X'. lv_count = lv_count + 1.ENDLOOP.在 7.40 之后DATA(lv_count) = REDUCE i( INIT x = 0 FOR gs原创 2024-12-13 17:57:42 · 417 阅读 · 0 评论 -
刷新 ALV GRID 并保留位置和当前单元格
编辑:您可以在下面找到我的方法,但不一定非要使用它才能实现您的目标。老实说,我已经不记得为什么要创建一个单独的版本了,因为只有光标的行为与最初的版本有些不同。原文链接:https://abapblog.com/articles/tricks/22-refresh-alv-grid-and-keep-position-and-current-cell。或更改用于在 ALV 网格上显示数据的内部表时,可能会发生这样的情况:使用。这里没有特殊的编码,只是按照正确的顺序使用标准的 ALV 网格方法。原创 2024-12-12 16:56:38 · 682 阅读 · 0 评论 -
ABAP 快速入门之数据定义和动态编程
要声明字段符号,必须使用关键字。原创 2024-12-11 20:53:14 · 1292 阅读 · 0 评论 -
【译】为 SAP 表维护视图 (SM30) 创建选择屏幕
原文链接: https://www.saphub.com/abap-dictionary/sap-abap-tmg-selection-screen/原文标题:Create Selection Screen for SAP Table Maintenance View (SM30)通常,带有单个屏幕的 SAP 表维护视图 (SM30) 会显示表中的所有记录,如下所示。下面的程序可以停用 SM30 中的“新条目”、“复制”和“删除”按钮。如果我们只想根据用户选择在 SAP 表维护视图 (原创 2024-12-06 21:04:22 · 855 阅读 · 0 评论 -
ADBC 查询语法介绍:EXECUTE_QUERY
可使用该方法有一个字符串类型的强制输入参数STATEMENT,必须向其传递语法正确的SELECT语句。与 DML 语句一样,SET_PARAM方法可用于将 ABAP 数据对象绑定到占位符。查询结果将在返回值RESULT_SET中返回对类对象的引用。该对象的方法允许访问查询的结果集。为了在数据库 LUW 结束后保留结果集,可以在方法的输入参数中填入 X。结果对象的类提供了以下用于将结果集读入 ABAP 数据对象的实例方法,原创 2024-12-04 17:46:08 · 1203 阅读 · 0 评论 -
SAP HANA 上进行 ABAP 开发:简介
SAP ABAP 多年来一直在快速发展。随着 S/4HANA 的推出,ABAP 逐渐成为一门更令人印象深刻、更富有成效的语言。如果你问我 ABAP 是如何改进的,答案就是 “代码到数据 ”范式。传统的方法包括将数据从数据库引入到我们的演示服务器,进行数据密集型计算和过滤,然后将过滤后的数据呈现给用户。新的 HANA 方法是将我们的代码推送到所有数据所在的数据库层,在数据库层进行计算,然后只将相关记录带到演示服务器。原创 2024-12-02 09:46:36 · 1765 阅读 · 0 评论 -
如何定义字段符号和将数据对象分配给字段符号
字段符号使用语句声明。字段符号的名称应括在带角括号(和)中。您可以使用TYPE引用或LIKE引用定义字段符号,就像定义其他数据对象一样。你也可以通过TYPE ANY来定义通用字段符号。在定义通用.类型的字段符号时,只能将相同类型的数据对象分配给字段符号。如果您计划静态访问结构的组件,这将非常有用。例如,如果要处理物料主数据MARA结构体的各个组件,那么就应该完全定义字段符号。如果打算使用字段符号动态指向任何字段或结构,可以使用TYPE ANY附加语句将字段符号定义为通用类型,如下所示。原创 2024-11-29 14:39:34 · 1080 阅读 · 0 评论 -
深入理解 SAP ABAP 动态编程:通过动态获取表内容弹出详情ALV
文章深入探讨了 SAP ABAP 中的动态编程,先介绍静态编程在某些情况的局限性,引出动态编程概念,包括多种处理方式及相关概念,如字段符号、数据引用、RTTS 等。以通过 ALV 显示物料信息为例,阐述字段符号能使程序动态化,解决静态编程处理大量字段时的繁琐和硬编码问题。原创 2024-11-28 18:06:08 · 1325 阅读 · 0 评论 -
如何优雅的使用 SAP 日志功能:应用程序日志
本文主要介绍如何优雅使用 SAP 日志功能中的应用程序日志,包括其类型、常见的业务应用程序日志、显示方式、数据保存与删除、回调功能、自定义日志对象等,并通过示例程序加以说明,强调合理运用可提升开发效率。原创 2024-11-27 16:44:27 · 1913 阅读 · 0 评论 -
如何在 Eclipse 中调试ABAP程序
ADT 中的调试器是一个重要的诊断工具,可用于分析 ABAP 应用程序。使用调试器,您可以通过在运行时 Debug 单步执行(F5)程序来确定程序无法正常工作的原因。这使您可以看到正在执行的语句以及随着程序的进行而变量值的变化。要使用调试器,您首先决定从哪里开始调试过程。一种方法是在,运行程序并在设置的断点处停止。原创 2024-11-25 18:10:06 · 2644 阅读 · 0 评论 -
ABAP 快速入门之 Hello World 和 ALV 列表
ABAP 是 SAP 开发的一种编程语言,用于在 SAP 环境中对业务应用程序进行编程。得益于 ABAP 对象增强功能,ABAP 以前只是过程性语言,现在也是一种面向对象语言。原创 2024-11-25 18:09:01 · 1243 阅读 · 0 评论 -
填充测试数据 sflight, scarr , spfli 三个表数据
平常在写一些测试代码的时候,需要用到 SFLIGHT, SCARR, SPFLI 三个表。但是有可能在某些系统没有数据,这时候可以利用程序。进行数据生成,也可以通过事务码。原创 2024-11-21 15:55:09 · 230 阅读 · 0 评论 -
ABAP 方法声明的感叹号是怎么一回事?
感叹号是 ABAP 转义字符。它可以为任何名称添加前缀,并警告编译器它不是保留字,而是一个名称。通常不需要它们,因为编译器可以自行得出什么是名称,什么是命令和运算符。但在某些情况下,可能需要明确说明。例如,假设有人想出了一个坏主意,将 ABAP 保留字用作变量。查看 ABAP 源代码时,方法声明总是在参数前面加上感叹号。这一直让我感到困惑。现在我终于知道为什么了。这就是 SE24 使用感叹号的原因:以防万一!原创 2024-11-21 14:19:20 · 164 阅读 · 0 评论 -
交货单更新函数 WS_DELIVERY_UPDATE_2 的使用技巧
功能模块可用于在中进行更改。以下是一些供参考的示例。原创 2024-11-21 14:14:43 · 942 阅读 · 2 评论 -
交货单BADI检查增强: LE_SHP_DELIVERY_PROC 方法 DELIVERY_FINAL_CHECK
中,我正在编写最终的交货单验证。我的交货单可能无法通过多次验证,必须在交货单日志中逐渐累积显示错误消息。在这种 BADI 方法中,如果我填充,这些方法,系统出现报错后,前台所有输入框全部灰掉,无法再次输入,需要点击返回直接退出事务码,因此这些增强位置并不合适。中创建交货单之前,需要给系统做一些验证。方法中实施 BADI,这里面的检查不适合通过。做 BADI 增强,在系统中建立一个实施对象。类型的错误消息,则不会成功保交货单。,只有最后一条消息出现在屏幕底部。报错来显示,可以在表。原创 2024-11-21 12:11:25 · 821 阅读 · 0 评论 -
BUS-Screen 框架 - 消息处理
为了演示如何使用 BUS-Screen Framework 处理消息,我们将在之前定义的主屏幕 (2000) 中创建一个虚拟输入字段。注意:除了控件声明(在 OO 上下文中不受支持)之外,所有字段绑定都可以而且应该在其相应的包装类中定义为公共静态属性。为了检查属性值并抛出消息,我们将在之前定义的 HANDLE_PAI 方法中添加一个额外的 WHEN 部分。对于实际的消息显示,我们将在本地演示类的 public 部分中重新定义方法 PAI_END。基类中提供了与消息相关的函数,但消息的实际显示只应在当前。原创 2024-11-20 17:55:30 · 413 阅读 · 0 评论 -
BUS-Screen 框架 - 简介
注意:尽管类 CL_BUS_ABSTRACT_SCREEN 是基础,但实现正确的继承很重要。在这种情况下,必须使用 CL_BUS_ABSTRACT_MAIN_SCREEN,因为 2000 是普通屏幕。(对于子屏幕,应使用相应的CL_BUS_ABSTRACT_SUB_SCREEN)在 Web Dynpro 和酷炫的 UI5 库的世界里,我仍然发现自己在使用 ABAP Reports 和经典的 Dynpros。然而,我希望通过探索现代(和更好)的方法来改善开发,让它变得有趣。这几乎总结了基本功能。原创 2024-11-20 17:40:33 · 1118 阅读 · 0 评论 -
可编辑的 SALV 模型(克服 SALV 模型的限制)
我们都知道 ABAP Object 比传统的 ABAP 非常强大。在这里,我想分享我使用 ABAP 对象克服 SALV mdoel 限制的最佳实验之一。原创 2024-11-19 17:56:17 · 1130 阅读 · 0 评论 -
特殊 ABAP SQL 表达式 NULL
操作数NULL表示 null 值,可以在 SQL 表达式的许多操作数位置使用。一个著名的例子是上面介绍的。记住,ABAP 没有 null 值。相反,在 ABAP SQL、Native SQL 或 AMDP 中分配给 ABAP 数据对象的 null 值将转换为与类型相关的初始值。在此处阅读更多内容。因此,表达式NULL是处理 ABAP SQL 中 null 值的选项。其他选项包括关系表达式IS NULL和 null 指示符。NULL和IS NULL之间的区别解释如下。使用NULL。原创 2024-11-19 17:46:51 · 1079 阅读 · 0 评论 -
如何在 ABAP 中找到用户出口增强
我们将通过标准 SAP 的例子来检查各种方法来寻找用户出口。首先让我们了解一下关于用户出口的基本情况。最后,我们将检查VA02交易中的一个用户出口的例子。什么事用户出口:这是一种增强功能,使我们能够增强程序、屏幕和菜单的功能。用户出口是具有命名约定的功能模块,如,例如 SD 模块中销售订单中的客户出口使用以下语句。原创 2024-11-18 10:27:53 · 918 阅读 · 0 评论 -
如何在SM30生成的维护表中增加选择框 CheckBox
先删除原来通过系统默认生成的文本字段,然后选中 Checkbox,拉到表中,名称和表中字段名一样。很简单,先通过 SE11 定义一个 CHAR1 类型的字段名,然后通过使用程序转到。自此,这个字段也关联上了表中的字段,标题也显示了正确的名字。原创 2024-11-15 17:38:09 · 460 阅读 · 0 评论 -
如何向函数模块 FM 中传递 Range 参数
如上图,这里有很常用的 Range 结构,如订单号、发票号、公司代码等等。有时候需要在选择屏幕之后调用一个函数模块,那么如果利用。在函数模块定义 Range 参数呢。解决方法很简单,系统有很多预定义的。那么,我们就可以在函数模块的。原创 2024-11-15 11:44:55 · 419 阅读 · 0 评论 -
FB03屏幕增强实现显示/修改的转换
因为 FICO 模块增强了 CodingBlock 字段,这个 9999 子屏幕的自定义字段在 是支持修改的,但是在 事务码都是没法直接修改的,因此应财务用户要求,对屏幕增强修改功能。类似会计分配和文本一样,是空白区域,而不是灰色区域:最直观的方法就是通过增强屏幕,然后写代码去控制 PBO。以往的做法,可能在代码中用 去控制是显示和修改,但是标准程序是有个 显示/修改 的切换,即使是 FB03 先进行查看,也能通过如下图的按钮切换到修改模式:因此在这种场景下,如果只通过 Tcode 去控制,会不符合原创 2024-11-14 21:52:07 · 1659 阅读 · 0 评论 -
756 版后可编辑的 CL_SALV_TABLE
自从类发布以来,一个问题一直存在 - 如何使其可编辑?我就是使用这种方法的人之一。但随后 756 版来了。突然间,所有使用它的 ALV 突然开始报告一个又一个错误。我深入研究并调查了这个问题。令我惊讶的是,我发现这个 “edit-hack” 的基础已经不见了。类不再位于继承树中,这使它能够工作!因此,接下来梳理提供的接口,以寻找一种新的方法。瞧!我确实找到了一条路。在这篇文章中,我将与您分享我是如何在发布后的 756 环境中实现按钮可编辑、完成 F4 引用和保存功能。原创 2024-11-12 15:52:54 · 1686 阅读 · 0 评论 -
在 ALV 报表中使用 CL_SALV 类时,如何处理多行?
需要选择几行,在这种情况下,已经选择了 2 行,并使用这 2 行执行了一个调用事务。但还有其他事情要做,因为 ALV 报告中的所有行都执行了调用事务。举个例子: 我设置了显示 “全选按钮”。原创 2024-11-12 14:27:06 · 564 阅读 · 0 评论 -
SELECT 嵌套查询,使用 WITH +cte 通用表表达式
引入一个或多个通用表表达式的定义,用于主查询 SELECT … 通用表表达式的结果集由子查询子查询决定。通用表表达式(简称 CTE)在 Open SQL 语句WITH中使用进行定义。WITH语句的访问通用表表达式。引入了在最终主查询中使用的通用表表达式(简称 CTE)的定义。WITH 可以作为独立语句使用(如图所示),也可以在语句之后使用。每个通用表达式都会在子查询中创建一个表格结果集,该结果集可作为数据源用于WITH语句的后续查询。原创 2024-11-07 18:04:43 · 1075 阅读 · 0 评论 -
被 AT ... END AT 等 AT 语法搞懵了?试试这个 LOOP AT Groups 语法
在本篇文章中,您将了解到在 7.40 中引入的 LOOP AT…GROUP BY 语句。在这里,您可以获得组的索引和组的大小(即组中成员的数量)。注意指定的排序顺序。不同的是,组合中使用的字段不需要在表结构中排在第一位。请注意,我们使用了显式引用来获取数据。)和与此组合匹配的表项。要对此进行循环,需要使用。为了简单起见,让我们看看没有写入语句的代码。组合打印行李总重量的总和如下。在 ABAP 7.4 中,使用。语句,使代码更加简洁。中使用,以生成汇总数据。可以实现相同的输出。例如,下图也行得通。原创 2024-11-07 14:24:57 · 745 阅读 · 0 评论 -
不要再使用 READ TABLE 了,教你如何使用新语法读取内表
在本文章中,您将了解 ABAP 7.40 版中引入的新读取语法。该语法早在 2013 年就已引入,因此已不再新鲜。但是,如果您仍在使用 READ TABLE 关键字来读取表项,那么这篇文章绝对适合您。请看下面的示例。请注意,下面的代码是在读取语句之前编写的。如果您正在试用上述代码示例,请在这些语句之前添加以下代码块。这里需要注意的是,新表达式sy-subrc当 READ 失败时,控制将转移到 CATCH 块。您可以在 CATCH 块中处理 SY-SUBRC 0 的情况。原创 2024-11-07 13:58:09 · 1522 阅读 · 0 评论 -
ABAP 添加/删除前导零的相关方法
在最近的 ABAP 版本中,对字符串处理的重大改进使得零处理代码不再那么冗长。例如,自从 ABAP 7.4 中的字符串模板和 ABAP 7.2 中的嵌入式 ALPHA 表达式出现后,就可以在单行中实现 ALPHA 转换的结果。语句可用于填充字符串尾部的零。原创 2024-11-06 15:46:10 · 652 阅读 · 0 评论