SAP 与 ABAP 关联逻辑与入门路径:业务×开发的协作指南
你已经了解了 SAP 的业务基础(第一篇)和 ABAP 的语法入门(第二篇)。但这两者之间究竟是什么关系?业务顾问 和ABAP 开发在一张采购订单背后是如何协作的?作为想入行的新人,我应该先学业务还是先写代码?本文为你打通 SAP 认知的"任督二脉",并给出可落地的入门路线图。
写在前面:为什么你必须理解这种"业务-开发"双重视角?
在 SAP 生态中,从来不存在纯粹"不懂业务的技术人员",也很难存在"完全不懂代码的业务专家"。一个典型的项目团队里,业务顾问(功能顾问)负责与客户沟通需求、设计流程、配置后台;ABAP 开发则负责将标准功能无法满足的部分通过代码实现。两者之间高效协作,是项目成功的核心。
读完本文,你将能够:
- ✅ 说明 ABAP 开发如何支撑业务需求(报表、增强、接口)
- ✅ 理解业务顾问与开发人员的协作流程与交付物
- ✅ 区分 ALV、用户出口、RFC/ODATA 三种典型开发场景
- ✅ 根据自身定位,制定 0→1 的 SAP 入门学习计划
- ✅ 避开新手最常踩的 5 个坑
第一部分:业务与开发的关联逻辑 ------ 一张采购订单背后的 ABAP
1.1 ABAP 开发如何支撑业务需求?三个典型场景
SAP 标准功能覆盖了 80% 以上的通用业务场景。但每个企业都有独特的需求,这时候就需要 ABAP 开发介入。主要集中在以下三类任务:
| 开发类型 | 业务需求举例 | ABAP 实现方式 |
|---|---|---|
| 报表开发 | "我想每月自动导出各部门的费用明细,按成本中心汇总。" | 使用 ABAP + ALV 技术从数据库读表,输出报表 |
| 增强开发 | "在创建采购订单时,如果总金额超过 100 万,必须额外填入董事会批文号。" | 通过用户出口(User Exit)/ BADI / 隐式增强实现 |
| 接口开发 | "我们的 SAP 需要和外部 WMS 仓库系统实时同步物料库存数量。" | 开发 RFC 函数或 ODATA 服务,供外部系统调用 |
一句话概括:标准功能定流程,ABAP 开发补差异。
1.2 业务顾问与 ABAP 开发者的协作流程(以增强开发为例)
下面是一个典型的项目场景:"在销售订单保存时,根据客户信用额度自动执行额外检查"。协作步骤如下:
| 步骤 | 角色 | 活动 | 产出物 |
|---|---|---|---|
| 1 | 业务顾问 | 收到客户需求,分析流程,确认标准功能不足,撰写《功能规格说明书》 | FS(Functional Spec) |
| 2 | 业务顾问 | 确定使用哪个增强点(如 BADI SD_SALES_ORDER_SAVE),定义输入输出 |
增强技术方案建议 |
| 3 | ABAP 开发 | 阅读 FS,在 DEV 环境实现代码,并编写单元测试 | 源代码 + 技术规格(TS) |
| 4 | 业务顾问 + 开发 | 在 DEV 系统进行功能测试,业务顾问验证逻辑正确性 | 测试日志 |
| 5 | 基础团队 | 通过传输请求将变更移到 QAS/PRD | 生产可用 |
| 6 | 业务顾问 | 最终用户验收,文档归档 | 用户手册 |
关键点:业务顾问不要求写代码,但必须能说清楚"在哪个事务码的哪个步骤,对哪些字段做什么规则" ;ABAP 开发不要求懂全部业务,但必须理解当前需求对应的业务流程和字段含义。
第二部分:ABAP 典型开发场景入门 ------ 三大支柱
2.1 报表开发 ------ ALV 是个什么东西?
ALV (ABAP List Viewer) 是 SAP 提供的标准报表显示工具。它封装了表格展示、排序、过滤、导出 Excel、合计等功能,让开发者只需关注数据查询和处理逻辑。
一个 ALV 报表的开发步骤(极高简化版):
- 定义内表,存放要展示的数据(结构与字段对应报表列)。
- 从数据库读取数据填入内表。
- 调用 ALV 函数(如
REUSE_ALV_GRID_DISPLAY)或 SALV 类,传递内表和布局参数。 - 用户看到可交互的表格,可点击列排序、导出等。
开发人员的关键工作 :写清楚 SELECT 语句取出哪些表的数据,按业务逻辑计算派生字段(比如"利润 = 收入 -- 成本")。
新手入门报表,建议第一个练习:从
MARA(物料主数据)表读取 10 条物料,显示物料号、物料描述、物料组。
2.2 增强开发 ------ 不动标准代码,却改变标准行为
SAP 提供了不允许直接修改标准程序(以 SAPL... 开头的程序)的原则。那如何"修改"标准功能?答案是增强。
常见的增强技术层次(从简单到复杂):
- 用户出口 (User Exit) :最老的增强方式,在标准程序中预留空子程序(
EXIT_...),开发者在里面写代码即可。事务码CMOD/SMOD。 - BADI (Business Add-In) :面向对象的增强,使用接口和多重实现。事务码
SE18/SE19。 - 隐式增强 (Enhancement Point) :SAP 在标准代码中埋的"钩子",开发者可以在特定位置插入代码。事务码
SE80可查。
业务顾问需要做什么 ?
发现标准功能不满足时,去 SAP 社区或系统内查找是否存在合适的增强点(通过事务码 SE84 或询问开发)。然后描述"在哪里放什么代码"。
入门建议:先理解"为什么不能直接改 SAP 标准代码"(因为升级会被覆盖),再试着用
CMOD为一个简单事务码添加打印逻辑。
2.3 接口开发 ------ 让 SAP 与外部世界对话
SAP 很少孤立运行。它与 MES(制造执行)、WMS(仓库)、SRM(供应商关系)、银行系统等都有数据交换需求。ABAP 常用的接口技术:
| 技术 | 全称 | 适用场景 | 简单示例 |
|---|---|---|---|
| RFC | Remote Function Call | 同步调用,轻量级,SAP 系统之间或 SAP 与 ABAP 程序 | 外部系统调用 RFC_READ_TABLE 读 SAP 表数据 |
| ODATA | Open Data Protocol | 基于 HTTP/REST,面向 Web 和移动端,支持增删改查 | Fiori 应用通过 ODATA 服务取销售订单 |
| Web Service | SOAP 或 REST | 企业级系统间标准化集成 | SAP 调用微信接口发送审批待办 |
开发人员的职责:创建函数模块(RFC)或 ODATA 服务项目,定义输入输出结构,实现逻辑。发布后提供给外部系统调用。
业务顾问的参与:定义哪些数据需要推送给外部(如"当物料主数据创建时,通知数据治理平台"),以及字段映射对应关系。
第三部分:入门学习路径规划 ------ 从迷茫到第一份工作
3.1 学习优先级:业务 vs 技术,先学哪个?
这是最常见的"先有鸡还是先有蛋"问题。我的建议分两种情况:
-
如果你将来想成为 ABAP 开发
第一阶段(0--2 个月) :70% 技术 + 30% 业务。先学会 ABAP 语法、内表、OPEN SQL、ALV 基本用法。同时了解 FI/CO/MM/SD 模块最基础的业务流程(比如采购到付款、订单到收款)。
第二阶段(2--6 个月) :50% 业务 + 50% 技术。做实际场景练习(如"库存报表""采购订单增强"),倒逼自己理解业务逻辑。
第三阶段(6 个月后):30% 技术 + 70% 业务。深入理解你所在行业的核心流程,成为懂业务的开发者。 -
如果你将来想成为业务顾问(功能顾问)
先花 2--3 周 :学习 ABAP 基础语法,掌握能看懂简单代码(例如能读懂 SELECT 语句,能理解 IF/LOOP)。不需要能独立写复杂程序。
之后:聚焦业务流程(购买 SAP 官方 PA 教材,或跟随项目学习)。但保持能理解开发人员在说什么(比如"这个 BADI 需要使用 SAVE 之前的事件")。
一个底线:不懂业务,写出的代码可能逻辑错误;完全不懂代码,无法与开发沟通效率极低。两者都要有,比例可根据目标调整。
3.2 入门学习资源推荐
🌐 免费/低成本资源
- SAP 官方 Help Portal :
help.sap.com→ 选择你的 SAP 版本 → ABAP 编程语言部分。最权威但有些枯燥。 - SAP Community (原 SCN):搜索 ABAP 标签,有大量问答和博客。
- YouTube 频道 :
SAP ABAP Tutorial for Beginners(by SmartBrains, etc.) - 在线教程网站 :
ABAP Programming (tutorialspoint)有基础语法简介。
📚 书籍推荐(经典)
- 《ABAP 开发从入门到精通》(国内出版社)-- 较全面,但建议配合系统实操
- 《100 Things You Should Know About ABAP》-- 小技巧集合
- 《SAP ABAP 实战》-- 有项目案例
🛠 练习环境获取
- 个人开发系统:下载 SAP NetWeaver AS ABAP Developer Edition(官方提供 VM 镜像,需要一定硬件配置 16GB+ RAM)
- 在线练习平台:SAP Learning Hub 免费试用(部分),或购买便宜的"迷你 SAP"虚拟机租用服务
- 企业内部:如果你入职或实习,申请开发客户端账号,在指导老师下操作
3.3 入门阶段避坑指南(全是血泪经验)
| 坑编号 | 现象 | 正确做法 |
|---|---|---|
| ❌ 1 | 一上来就啃《SAP 官方 PA 教材》,被 3000 页吓退 | 先学 ABAP 基础 + 一个简单模块的流程(比如 MM 的采购),再根据需要横向拓展 |
| ❌ 2 | 写代码只知道敲 SE38,从不用 SE80 | SE80 能帮你管理所有对象,学会对象导航是 ABAP 开发的必备技能 |
| ❌ 3 | 直接在生产机(PRD)尝试代码 | 永远只在 DEV 开发,通过传输到 QAS/PRD。生产机直接修改会被开除! |
| ❌ 4 | 报表里写超大 SELECT * FROM ... | 只 SELECT 需要的字段,尽量用 WHERE 过滤,避免性能黑洞 |
| ❌ 5 | 增强开发时复制粘贴 SAP 标准代码 | 只写必要的增量逻辑,不要复制标准代码。增强代码升级时可能会残留隐患。 |
| ❌ 6 | 孤立学习,从不加入社区 | 加入 ABAP 相关微信群、知乎专栏、Stack Overflow 标签,多看别人的问题和解答 |
读者收获自测(结合本文与之前两篇)
- 业务顾问和 ABAP 开发在"增强开发"项目中的主要分工是什么?请至少列出各两项职责。
- 如果一个需求是"每个月生成一份按销售区域统计的订单额报表",应该选用哪种开发类型(报表/增强/接口)?为什么?
- BADI 与用户出口的主要区别是什么?(提示:面向对象 vs 过程式)
- 一个希望成为 ABAP 开发的新人,在前两个月应该将学习时间的大致比例如何分配给"技术"和"业务"?
- 列出三个你计划使用的 ABAP 学习资源(可以是网站、书、视频等)。
- 为什么绝对禁止在生产客户端(PRD)直接修改代码?
结语:适合自己的路径,才是最好的路
SAP 领域不缺只会写 CRUD 的 ABAP 程序员,也不缺只会纸上谈兵的业务顾问。真正受企业欢迎的,是那些能站在业务视角设计技术方案、又能站在技术角度优化业务效率的人。
现在,你已经拥有了:
- 对 SAP 业务的基本认知(第一篇)
- ABAP 语法的入门能力(第二篇)
- 业务-开发协作的全局视图和行动路线(本篇)
接下来,只要坚持下去,在实践中不断踩坑、总结、提升,你一定能在这个稳定而高价值的生态中找到自己的位置。
📌 行动建议:
今天就在你的练习系统里,用 SE38 创建一个报表程序,从
T001(公司代码表)读取前 5 条记录,用 ALV 展示出来。完成后,试着回答自己:这个报表满足了谁的什么业务需求?
下一篇预告:ABAP 内表详解(实战篇)------从入门到数据魔法深入内表的各种高级操作:排序、删除重复、分组汇总、动态内表......让批量数据处理游刃有余。
作者 :你的学习伙伴
版本记录:2026年5月 第一版
💬 如果你对自己的学习路径选择还有困惑(想做业务还是开发?没环境怎么练?),欢迎留言,我们一起讨论。