ABAP 基础知识 BDC 记录创建单据

作者:ABAP技巧与实战 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

前言

SAPERP系统中的大部分的单据都会提供对应的BAPI函数.

通过事务代码BAPI可以查找到标准业务的BAPI函数.但有些业务单据可能无法查找对应的BAPI函数,即使小伙伴google和bing也无法帮助你.

此时BDC就成为了一个必选项

**本文主要介绍用BDC开发程序的步骤及注意事项**

定义

( BDC – Batch Data Communication)

一种调用事务代码的方式, 通过参数BDC_TAB传递调用过程中所有屏幕的内容及操作.

因为屏幕处理过程繁琐且复杂,所以SAP提供了一个工具SHDB,用于辅助用户在执行事务代码时记录处理过程.

ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图

记录

TCODE: SHDB

记录时,勾选

• **不是批处理会话**

• **模拟后台模式**

这个很重要,务必勾选,减少可能的错误.

点击开始记录时,系统会执行填写的事务代码. 在记录中尽量最简化与系统的交互过程.

ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图

完成

完成记录后, 系统会生成一个记录信息.

这份信息包含了执行事务代码过程中的所有输入内容及操作过程.

可以通过点击处理按钮验证记录是否能再次成功执行

ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图

函数

通过按钮<功能模块>可以把记录的信息创建一个函数. 后续改写函数可以完成业务动作的封装.

ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图

问题

在SHDB中执行能成功创建单据

但是通过函数调用却总会报错. 特定屏幕无批输入数据

这种问题不是一定会产生的.

问题产生的原因是标准程序在执行过程中会检查一些系统环境变量,比如 SY-BINPT(批输入处理活动) ,根据该环境变量,改变屏幕处理过程.

所以需要确保记录和执行的过程中这些环境变量一致.

ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图

分析

使用SHDB处理时, 勾选了

• **不是批处理会话**

• **模拟后台模式**

但是生成的函数没有给出这个选项.

查看CALL TRANSACTION的帮助,可以看到在OPTIONS FROM opt 子句中可以填写这些内容

ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图

改造

• 复制include bdcrecxy-> 自定义的include 名称,并使用

• 改进 CALL TRANSACTION 语句添加 options from opt 子句

• 添加参数 不是批处理会话, 模拟后台处理

• 把BDC的返回调整成BAPIRET2的返回.

ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图
ABAP 基础知识 BDC 记录创建单据 - 封面图

缺点

BDC严格按照记录的顺序执行.

如果因为填写的内容或配置改变导致了屏幕顺序的变化,或者意外的弹窗信息都会导致BDC处理失败.

实践中,非必要不采用BDC调用系统事务.

其实某些早期的BAPI函数内部也封装的BDC调用. 只是标准函数考虑了屏幕执行的所有过程,不会出现意外.

总结

尽量用标准BAPI函数,不使用BDC.

BDC处理可以处理大部分SAP标准程序,但是一些应用了OO对象(比如 ALV修改/显示数据)的事务无法处理.

因为这类事务调用了GUI的前台显示类,而BDC需要后台处理-无法和GUI交互.

BDC记录及后台处理时,最好设置参数 不是批处理会话 / 模拟后台模式. 这样才能确保记录及处理成功.

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

申请进入公众号讨论群提问或者参与话题讨论

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP基础知识BDC记录创建单据.md」整理生成,仅用于内部技术分享与学习交流。