SD 信用模拟检查增强

作者:斌将军 约 3 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, SD, 开发, 销售分销
SD 信用模拟检查增强 - 封面图
SD 信用模拟检查增强 - 封面图

**1、业务需求**

业务流程中需要进行信用模拟检查,但逻辑梳理较为复杂,因此借用交货单创建时信用检查逻辑。但是当交货单信用检查通过时,不创建交货单,因此需要对BAPI:BAPI_OUTB_DELIVERY_CREATE_SLS进行改造,拦截创建交货单逻辑

**2、巧用BAPI实现校验**

在BAPI包含的函数SD_DELIVERY_CREDIT_CHECK中,找到信用校验逻辑,创建隐式增强

首先接收程序抛的内存,如果是校验(不创建交货单),则走以下逻辑

SD 信用模拟检查增强 - 封面图
SD 信用模拟检查增强 - 封面图

当返回消息ID为UKM_CHECK,消息号为001或034,证明信用校验不通过

SD 信用模拟检查增强 - 封面图
SD 信用模拟检查增强 - 封面图

当返回消息为其他的,则证明信用校验通过,可以返回自定义消息,但是仍然报异常,RAISE ERROR,阻止下一步创建交货单

**3、程序声明校验**

在程序中,抛内存,证明是进行信用校验,而不是创建交货单

SD 信用模拟检查增强 - 封面图
SD 信用模拟检查增强 - 封面图

程序调用创建交货单BAPI,当返回结果是自定义消息,证明信用校验通过,如果是UKM_CHECK,消息号为001或034,证明校验未通过

"-----------------------------------------@斌将军--------------------------------------------CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS' EXPORTING ship_point = lv_ship_point due_date = lv_due_date* DEBUG_FLG = ''* NO_DEQUEUE = ' ' IMPORTING delivery = lv_delivery* NUM_DELIVERIES = TABLES sales_order_items = lt_sales* SERIAL_NUMBERS =* EXTENSION_IN =* DELIVERIES =* created_items = lt_created* EXTENSION_OUT = return = lt_return. LOOP AT lt_return INTO ls_return WHERE type = 'E'. IF ls_return-id = 'UKM_CHECK' AND ( ls_return-number = '001' OR ls_return-number = '034' ). e_return-type = 'E'. e_return-message = ls_return-message. RETURN. ENDIF. IF ls_return-id = 'ZSD01' AND ls_return-number = '006'. e_return-type = 'S'. e_return-message = '信用校验通过'. RETURN. ELSE. e_return-type = 'E'. e_return-message = ls_return-message. RETURN. ENDIF. CLEAR:ls_return. ENDLOOP."-----------------------------------------@斌将军--------------------------------------------
斌将军

关于作者:斌将军

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

来源说明:本文内容由「SD信用模拟检查增强.md」整理生成,仅用于内部技术分享与学习交流。