从ECC升级到S4 HANA后,业务伙伴(BP)框架的引入彻底改变了传统供应商和客户主数据的管理方式。许多原本在ECC中运行良好的增强逻辑突然失效,让不少SAP顾问措手不及。付款条件一致性检查就是其中一个典型场景——在采购组织和公司代码数据中,确保付款条件设置一致对财务流程至关重要。本文将手把手带你完成整个配置流程,并提供可直接复用的代码。
S4 HANA的BP框架不是简单地将原有供应商和客户主数据迁移到新表,而是彻底重构了数据模型。传统ECC中的增强方式(如USEREXIT)在新框架下大多不再适用。SAP为此提供了一套完整的配置型增强机制,通过字段组和检查规则实现业务逻辑。
关键变化点:
提示:在开始配置前,建议先在测试环境完整走通流程,避免直接在生产系统操作。
付款条件字段分布在供应商主数据的不同视图中。我们需要先确定这些字段所属的字段组,这是后续配置的基础。
对于采购组织数据(FLVN01),我们通常会发现字段组是2025;而公司代码数据(FLVN00)对应的字段组可能是CVIV40-1992。
当BUS2中的搜索结果不明确时,可以直接查询TBZ3R表:
sql复制SELECT * FROM TBZ3R
WHERE FIELDNAME = 'ZTERM'
这将返回所有包含ZTERM字段的字段组信息。
找到字段组后,需要确定它属于哪个视图,这是创建检查规则的前提。
对于采购组织付款条件字段组(2025),对应的视图通常是CVIV86。
为确保准确性,可以交叉检查TBZ3S表:
sql复制SELECT * FROM TBZ3S
WHERE FIELDGROUP = '2025'
有了视图和字段组信息后,就可以创建实际的检查规则了。
注意:如果检查需要特定条件才触发,可以不勾选"总是调用",而是通过函数内部逻辑控制。
检查函数是实际业务逻辑的实现部分。以下是完整的付款条件一致性检查函数示例:
abap复制FUNCTION Z_BP_CHECK_ZTERM.
*"--------------------------------------------------------------------
*"*"局部接口:
*"--------------------------------------------------------------------
DATA: lt_lfm1 TYPE TABLE OF lfm1.
DATA: lt_lfb1 TYPE TABLE OF lfb1.
DATA: ls_lfb1 TYPE lfb1.
DATA: ls_lfm1 TYPE lfm1.
DATA: lv_message TYPE char200.
" 仅在非直接输入模式下执行检查
CHECK cvi_bdt_adapter=>is_direct_input_active( ) = abap_false.
" 从缓存中获取采购组织数据
cvi_bdt_adapter=>get_current_bp_data(
EXPORTING i_table_name = 'LFM1'
IMPORTING e_data_table = lt_lfm1 ).
SORT lt_lfm1 BY lifnr ekorg.
" 从缓存中获取公司代码数据
cvi_bdt_adapter=>get_current_bp_data(
EXPORTING i_table_name = 'LFB1'
IMPORTING e_data_table = lt_lfb1 ).
SORT lt_lfb1 BY lifnr bukrs.
" 比较两个数据源中的付款条件
LOOP AT lt_lfm1 INTO ls_lfm1.
READ TABLE lt_lfb1 INTO ls_lfb1
WITH KEY lifnr = ls_lfm1-lifnr
bukrs = ls_lfm1-ekorg
BINARY SEARCH.
IF sy-subrc = 0.
IF ls_lfm1-zterm <> '' AND
ls_lfb1-zterm <> '' AND
ls_lfm1-zterm <> ls_lfb1-zterm.
" 构造错误消息
lv_message = ls_lfm1-ekorg &&
'采购组织数据与' &&
ls_lfb1-bukrs &&
'公司代码数据中的付款条件不一致,请检查!'.
" 存储错误消息
CALL FUNCTION 'BUS_MESSAGE_STORE'
EXPORTING
arbgb = 'ZYH'
msgty = 'E'
txtnr = '000'
msgv1 = lv_message.
ENDIF.
ENDIF.
ENDLOOP.
ENDFUNCTION.
关键点解析:
cvi_bdt_adapter类方法获取当前BP数据,这是S4 HANA中访问BP数据的标准方式BUS_MESSAGE_STORE存储错误消息,这是BP框架中显示验证错误的标准方式完成配置后,必须进行全面测试以确保检查按预期工作。
测试步骤:
常见问题排查:
get_current_bp_data调用是否正确对于大型实施项目,检查性能可能成为瓶颈。以下是几个优化方向:
缓存策略:
并行处理:
CL_ABAP_PARALLEL类实现选择性检查:
cvi_bdt_adapter=>get_changed_fields( )识别变更abap复制DATA(lt_changed_fields) = cvi_bdt_adapter=>get_changed_fields( ).
READ TABLE lt_changed_fields WITH KEY fieldname = 'ZTERM' TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
RETURN. " 付款条件未变更,无需检查
ENDIF.
同样的配置模式可以应用于其他字段的检查:
银行信息一致性:
税务信息验证:
合作伙伴功能检查:
配置模式对比表:
| 检查类型 | 字段组查找 | 视图确定 | 函数复杂度 |
|---|---|---|---|
| 付款条件 | BUS2/TBZ3R | BUS3/TBZ3S | 中等 |
| 银行信息 | BUS2/TBZ3R | BUS3/TBZ3S | 高 |
| 税务信息 | BUS2/TBZ3R | BUS3/TBZ3S | 低 |
| 合作伙伴功能 | BUS2/TBZ3R | BUS3/TBZ3S | 高 |