关于SD_SCDS_CREATE无法指定FKART=Z003创建单据成本的技术咨询
解决SD_SCDS_CREATE传入FKART=Z003不生效的问题
这问题我之前在项目里碰到过类似的,咱们从几个方向一步步排查和解决:
1. 先确认Z003成本单据类型的基础配置是否完整
首先得确保Z003不是随便定义的,而是在SAP系统里做了正确的配置绑定:
- 用事务码
SPRO进入配置路径:后勤执行 > 装运 > 成本 > 定义成本单据类型,检查Z003是否存在,且配置了对应的科目确定、合作伙伴等必要参数。 - 接着检查装运类型与成本单据类型的分配:在SPRO的后勤执行 > 装运 > 成本 > 分配成本单据类型到装运类型里,确认你要处理的交货单对应的装运类型是否和Z003做了绑定。如果没绑定,函数大概率会 fallback 到默认的Z001。
2. 检查函数模块SD_SCDS_CREATE的参数校验逻辑
这个函数内部可能对传入的FKART有合法性检查,你可以直接在SE37里测试调用:
- 输入函数名
SD_SCDS_CREATE,点击“测试”按钮,传入FKART=Z003以及其他必填参数(比如VBELN交货单号、BUKRS公司代码等),执行后看返回的消息或者生成的单据类型。 - 如果测试时就报错或者自动改成Z001,那大概率是Z003不在函数允许的成本单据类型范围内。此时可以查看函数的源代码(点击“显示”按钮进入编辑器),搜索
FKART相关的逻辑,比如有没有类似这样的判断:
找到对应的检查表(比如可能是IF FKART IS INITIAL OR NOT EXISTS( SELECT * FROM Txxx WHERE FKART = @FKART ). FKART = 'Z001'. ENDIF.T683或自定义配置表),确认Z003是否在该表中维护。
3. 排查参数传递的正确性
有时候不是函数的问题,而是你调用时的参数传递有误:
- 确认
FKART参数的数据类型是CHAR4,你传入的Z003长度是否正确(有没有多余的空格?)。 - 检查其他关联参数是否和Z003兼容:比如交货单的销售组织、分销渠道、装运类型是否支持Z003类型的成本单据,有些配置是组织级别绑定的,Z003可能在当前组织下未激活。
4. 检查是否有增强或出口修改了参数
SAP很多标准函数都有用户出口或BADI,可能在函数执行过程中被修改了FKART的值:
- 用事务码
SE24查看函数使用的BADI,或者用SMOD搜索相关的增强点(比如和装运成本相关的增强V54A0001等),检查是否有自定义代码把传入的Z003替换成了Z001。 - 也可以用
ST05做SQL跟踪,查看函数执行过程中有没有对FKART的更新操作,定位到修改的代码位置。
5. 临时解决方案(如果配置一时无法调整)
如果上述排查都没问题,但还是无法生效,可以考虑在调用函数前,先通过BAPI或自定义逻辑创建成本单据的抬头,再调用SD_SCDS_CREATE补充明细;或者直接使用增强在函数入口强制设置FKART=Z003(注意要做合法性判断,避免影响其他业务)。
内容的提问来源于stack exchange,提问作者Arvio Bjedi
相关产品推荐
相关产品推荐

