概要
本文将介绍一种可落地的实施方式参考,实现在销售流程中,将外部参考凭证编号带入 SAP ERP 云系统中的销售凭证,并随单据流传递至最终的会计凭证行项次参考字段的需求。
业务需求说明
业务背景
许多情况下,SAP ERP 云系统会作为端到端业务流程中的下游后台系统,连接上游前端业务系统。客户的采购需求会透过前端系统录入作为销售订单、报价等,再通过接口流转至 SAP ERP 云进行后续订单履约与开票结算的流程。
为了便于财务部门在统一的视角下了解到基于销售凭证衍生出的会计凭证的原始来源,需要将前端业务系统中的凭证编号通过 SAP ERP 云系统的销售单据带入会计凭证的参考字段。
场景假设
本文假定业务流程与需求为:
- 由外部系统通过 SAP ERP 云的借项凭证请求接口创建借项凭证请求(Debit Memo Request),传入三个不同的外部参考凭证编号;
- 开票专员与 SAP ERP 云内基于借项凭证请求创建借项凭证(Debit Memo),并自动过账;
- 财务专员需要在基于借项凭证产生的会计凭证中的应收类别行项次中查看到原借项凭证请求的外部系统参考凭证编号,以辅助后续的清帐操作。
范围说明
基于以上场景假设,本文将介绍以下功能范围的实施方式参考:
- 在销售凭证上新增三个自定义字段,用于维护/接收外部参考凭证编号,并支持通过 SAP ERP 云中借项凭证请求的标准接口写入这三个自定义字段值。
- 在销售开票凭证上新增对应的三个自定义字段,由销售凭证复制其值到后续的销售开票凭证中。
- 有条件地将借项凭证请求(DR)号码复制到借项凭证(L2)的参考字段。
- 有条件地将开票凭证上的客制化字段值复制到会计凭证应收条目的参考字段。
实施方式参考
1. 增强配置:创建销售凭证与开票凭证的自定义字段
1.1. 新增对象及配置内容(应用内增强)
1.1.1. 配置路径
搜索并打开应用“自定义字段”(EN: Custom Field)。

1.1.2. 配置传输方式
在开发环境(Dev)的客制化(Customizing)端口中,通过应用“导出软件集合”(EN: Export Software Collection)收集与导出相关配置。
在测试(Test)或生产环境(Production)中,通过应用“导入集合”(EN: Import Collection)导入配置集合。
1.1.3. 配置对象及内容
在“自定义字段”(EN: Custom Field)页签中点击右上角图标“+”,依次创建三个外部参考凭证编号字段。
- 业务上下文:“销售:销售凭证”
- 标签:External Reference Key 1 / External Reference Key 2 / External Reference Key 3
- 标识符:YY1_ExRefKey1 / YY1_ExRefKey2 / YY1_ExRefKey3
- 工具提示:External Reference Key 1 / External Reference Key 2 / External Reference Key 3
- 类型:文本
在字段定义详细页面中,设定主要的功能参数。
- “用户界面”页签启用:
- SD_F1848_DMR_FS_SRV
- SD_F1988_DMR_WL_SRV
- SD_F2187_CUST360_SRV
- SD_MCC_DMR_MASS_UPDATE_SRV
- C_BSORDPROCFLWDEBITMEMOREQ
- SD_SALESDOC_GUI
- “API“页签启用:
- API_DEBIT_MEMO_REQUEST_SRV
- API_DEBIT_MEMO_REQ_SIMULATION_SRV
- “业务场景“页签启用:
- 抬头级别的销售凭证-开票凭证
- 启用此场景后并保存自定义字段设定后,系统将自动为业务上下文“销售:开票凭证”创建对应的字段,并激活将对应字段值从销售凭证复制到后续开票凭证的功能。
保存后,发布六个字段(其中三个为“业务场景”启用后自动产生的开票凭证字段)。
1.2. 调整 Fiori 应用的显示(应用内增强)
1.2.1. 配置路径
搜索并打开应用“管理借项凭证请求”(EN: Manage Debit Memo Requests)

在“管理借项凭证申请”页签中,搜索并打开任一借项凭证申请的页面。

1.2.2. 配置传输方式
在开发环境(Dev)的客制化(Customizing)端口中,通过应用“导出软件集合”(EN: Export Software Collection)收集与导出相关配置。
在测试(Test)或生产环境(Production)中,通过应用“导入集合”(EN: Import Collection)导入配置集合。
1.2.3. 配置对象及内容
在借项凭证申请的展示页面中,点击右上角的用户个性化设定按钮中的“调整UI”,进入页面调整模式。

在“基本信息”页签下的单据抬头信息区块的空白处,右键单击,选择“创建:组”。

填入新的组名:“外部参考凭证”,并右键单击选择“添加:字段”,依次将新增的三个自定义字段选中并确认,再通过重命名的方式修改三个字段显示的翻译。

点击页面左上角激活按钮。

输入新的版本标题,并确认。

激活后,点击发布版本,后续即可传输。

2. 集成配置:通过接口创建借项凭证请求,并传入客制化外部参考编号字段值
2.1. 配置对接的外部系统(通信系统配置)
2.1.1. 配置路径
搜索并打开应用“通信系统“(EN: Communication System)。

2.1.2. 配置传输方式
非跨环境可传输的配置,需要在各环境中分别手动配置。
2.1.3. 配置对象及内容
出于测试目的,本文档配置 SAP ERP 云系统的当前环境为通信系统,供接口调测工具进行调试。

创建“入站通信的用户”,“验证方法”选择“用户名和密码”,
真实项目中建议使用安全等级更高的验证方法。

保存“通信系统”的设定。
2.2. 配置集成场景(通信安排配置)
2.2.1. 配置路径
搜索并打开应用“通信安排”(EN: Communication Arrangement)。

2.2.2. 配置对象及内容
创建“场景标识”为“SAP_COM_0159”的通信安排。

2.3. 测试及结果
通过 Postman 调用接口在 SAP ERP 云中创建一张借项凭证请求,并传入三个外部凭证参考值。

在 SAP ERP 云系统中查看刚通过接口创建的凭证,三个自定义外部凭证参考字段如期望赋值成功。

3. 增强开发:有条件地将借项凭证请求号码复制到借项凭证的参考字段
3.1. 增强点 SD_BIL_DATA_TRANSFER(应用内增强)
增加抬头级别的客制化复制逻辑,将销售凭证号字段从 DR 带到 L2 的“参考”字段
3.1.1. 增强代码实施路径
搜索并打开应用“自定义逻辑”(EN: Custom logic app)。

3.1.2. 增强传输方式
在开发环境(Dev)的客制化(Customizing)端口中,通过应用“导出软件集合”(EN: Export Software Collection)收集与导出相关配置。
在测试(Test)或生产环境(Production)中,通过应用“导入集合”(EN: Import Collection)导入配置集合。
3.1.3. 增强对象及内容
创建一段新的“实施”,选择对应扩展点及业务上下文:
- 业务上下文:“销售:开票凭证”(EN "Sales: Billing Document")
- 扩展点描述: 开票凭证的自定义数据传输(EN "Custom Data Transfer for Billing Documents")
实施属性添加过滤条件:
- DATA_TRANSFER = 3001310(该值为自定义历程的编码,与后续 CBC 配置对应)
添加逻辑后,“发布”代码。
参考代码:
* Mandatory step for all implementations:
* Copy the importing parameters to the changing parameters.
IF bil_doc-salesorganization = '1310'.
MOVE-CORRESPONDING bil_doc TO bil_doc_res.
MOVE-CORRESPONDING bil_doc_item TO bil_doc_item_res.
MOVE-CORRESPONDING bil_doc_item_contr TO bil_doc_item_contr_res.
* Copy sales document number to document reference field of billing document.
bil_doc_res-documentreferenceid = bil_doc_item-salesdocument.
ENDIF.
3.2. 注册客制化历程编号(CBC配置)
3.2.1. 特别说明
实现销售凭证编号带入开票凭证的参考字段的实施方式有很多种,其中最直接的方式是通过配置活动 102762 "Define Copying Control for Sales Document to Billing Document" ,修改复制控制组抬头级别的参数“Reference Number” 实现。但这种方式会对环境中所有销售组织下的单据生效。
本文提供了一种按需细化控制复制控制的方式。
3.2.2. 配置路径
CBC Configuration Activities
- ID:102865
- Title:Define Custom Routines for Data Transfer to Billing Documents
3.2.3. 配置传输方式
在开发环境(Dev)的客制化(Customizing)端口中,通过应用“导出定制传输”(EN: Export Customizing Transport)释放相关配置传输请求。
在测试(Test)或生产环境(Production)中,通过应用“导入集合”(EN: Import Collection)导入配置传输请求。
3.2.4. 配置内容

3.3. 测试及结果
打开“创建开票凭证”应用,选中前序借项凭证请求,点击“创建开票凭证”。
查看结果,前序借项凭证请求号被复制在了借项凭证的“参考”字段。

4. 增强开发:有条件地将开票凭证上的客制化字段值复制到会计凭证应收条目的参考字段
4.1. 增强点 FIN_ACDOC_ITEM_SUBSTITUTION(应用内增强)
基于前序销售开票上的 External Ref. Key1/2/3 的值,修改应收分录上的 General Data 中 Reference Key1/2/3 的值。
4.1.1. 增强路径
搜索并打开应用“自定义逻辑”(EN: Custom logic app)。
4.1.2. 增强传输方式
在开发环境(Dev)的客制化(Customizing)端口中,通过应用“导出软件集合”(EN: Export Software Collection)收集与导出相关配置。
在测试(Test)或生产环境(Production)中,通过应用“导入集合”(EN: Import Collection)导入配置集合。
4.1.3. 增强对象及内容
创建一段新的“实施”,选择对应扩展点及业务上下文:
- 业务上下文: “会计:日记账分录”(EN "Accounting: Journal Entry")
- 扩展点描述: “日记账分录项目替换”(EN "Journal Entry Item Extension Fields Substitution")
实施属性添加过滤条件:
添加逻辑后,“发布”代码。
参考代码
*--------------------------------------------------------------------*
*** BAdI usage
*-- Substitute accounting document item
*
*** SUBSTITUTIONDONE:
*-- Please always set this flag when implementing this BAdI.
*-- Substitutions take effect only when true (‘X’) is set.
*--------------------------------------------------------------------*
MOVE-CORRESPONDING accountingdocitem TO accountingdocitemout.
IF accountingdocitem-reference1idbybusinesspartner = '' AND
accountingdocitem-reference2idbybusinesspartner = '' AND
accountingdocitem-reference3idbybusinesspartner = ''.
DATA(lv_vbeln) = |{ CONV vbeln( accountingdocheader-accountingdocexternalreference
) ALPHA = IN }|. "Add leading zeros.
SELECT SINGLE *
INTO @DATA(ls_salesdoc)
FROM i_salesdocument
WHERE salesdocument = @lv_vbeln.
IF sy-subrc = 0.
accountingdocitemout-reference1idbybusinesspartner = ls_salesdoc-yy1_exrefkey1_sdh.
accountingdocitemout-reference2idbybusinesspartner = ls_salesdoc-yy1_exrefkey2_sdh.
accountingdocitemout-reference3idbybusinesspartner = ls_salesdoc-yy1_exrefkey3_sdh.
substitutiondone = abap_true.
ENDIF.
ENDIF.
考虑到自动过账的操作场景下,日记账分录被创建并触发上述扩展点的时机,前序开票凭证的数据并未提交到数据库中,故代码中通过日记账分录的“参考”字段获得数据源销售凭证的编号,再借助销售凭证的标准 CDS 视图查询自定义字段信息,而不是直接取前序开票凭证上的字段数据。
4.2. 测试及结果
打开“创建开票凭证”应用,选中前序借项凭证请求,点击“创建开票凭证”,“保存”并自动过账。
在“流程流”中,点击查看新的日记账分录。
在日记账分录中,点击查看应收账款的行项目:前序借项凭证请求中的三个自定义外部凭证参考字段只被依次写入了“参考代码 1”、“参考代码 2”、“参考代码 3”字段上。

总结
本文描述的实施方式均为应用内增强与标准开放的配置,不涉及复杂的开发者增强或并随式外围系统开发。该路径为类似需求的实现手段之一,欢迎大家探索交流不同的路径,服务于不同的目的。