当前位置: 首页 > news >正文

如何通过ABAP获取SAP生产订单的目标成本

SAP存储生产订单成本的主要底表包括:

  • COBK: CO凭证表头
  • COEP: CO凭证行项目
  • COSS: 来自CO内部的汇总数据
  • COSP: 来自CO外部部的汇总数据

先说结论:SAP 对生产订单的目标成本是没有保存到底表的。那么如何通过代码的方式获取呢?

K_KKB_KKBCS_ORDER_REPORT 函数

这个函数类似调用事务码 KKBC_ORD,对这个函数调用,只需要提供 order number,但函数自动通过 ALV 来展示数据,这就带来了调用函数的不便。

对函数的源码进行分析,可以看出,函数的主要过程为

  • 调用 K_KKB_KKBCS_CO_OBJECT_READ 函数,获取生产订单的成本数据。
  • 调用 K_KKB_2XHEADER_GET 获取表头的数据,如订单号、订单类型、工厂、物料。
  • 调用 K_KKB_CO_OBJECT_DISPLAY 函数显示生产订单数据

主体的逻辑在 K_KKB_KKBCS_CO_OBJECT_READ 函数中。函数调用后返回 4 个表参数:

G_T_COSLA 表参数:能够获取期间产出数量。我们和 KKBC_ORD 事务码界面进行对比:

G_T_COSPA 表参数,对应 COSP 表的存储数据:

G_T_COSSA 表参数,对应 COSS 表的存储数据。

既然函数的主体是调用 K_KKB_KKBCS_CO_OBJECT_READ 函数,那么我们直接调用这个函数不就可以了吗?我们来测试一下。调用这个函数,需要填写 OBART 和 AUFNR 两个参数。

运行函数之后,可以看到,函数能获取到数据。如下图所示:

但我们对数据进行查看,可以发现缺少目标成本的数据 (WRTYP = 5)。也就是说,如果我们调用 K_KKB_KKBCS_ORDER_REPORT 函数,能获取到目标成本的数据,但系统会自动以 ALV 显示出来,这个不是我们想要的。如果调用 K_KKB_KKBCS_CO_OBJECT_READ 函数,表参数只有实际成本和计划成本,但没有目标成本。

什么原因呢?怎么解决呢?解决方案还需要从源码入手。我们用 SE37 进入 K_KKB_KKBCS_ORDER_REPORT 的源码一看究竟。这个函数的代码不是那么简单,我们略过不相关的部分。先找到与计算目标成本相关的部分:

进入子例程 get_target:

这才是真正用于计算目标成本的函数。基于调试方式很容易得到这个函数的参数的用法。在这里设置断点,然后通过 K_KKB_KKBCS_ORDER_REPORT 函数进入:

这个函数提供了获取目标成本的第一种方法,调用 K_TARGETCOSTS_OBJECT_RECALC 函数,函数调用需要通过前面的函数抓取到产出数量、产出物料的计量单位等信息。以下是使用 SE37 事务码对该函数的测试:

数据已经能够正确获取:

第二个问题,为什么调用 K_KKB_KKBCS_ORDER_REPORT 函数能获取到目标成本,调用 K_KKB_KKBCS_CO_OBJECT_READ 函数不能获取目标成本?基于分析,SAP 在函数组中,有一个 g_object 参数,在调用函数之前,需要对该函数赋值 ,然后检查 g_object 是否等于 obj-auf。对代码细节有兴趣的小伙伴可以自行调试来验证。关键点贴图如下:

知道了原因,也就有了第二种解决方案:拷贝 K_KKB_KKBCS_CO_OBJECT_READ 函数为 ZK_KKB_KKBCS_CO_OBJECT_READ,并对拷贝出的 Z 函数代码进行微调。我们知道,函数必须位于函数组中,所以拷贝函数需要拷贝函数组。实际操作的步骤如下:

1、拷贝函数组 KKBC 到 ZKKBC
2、拷贝函数 K_KKB_KKBCS_CO_OBJECT_READ 到 ZK_KKB_KKBCS_CO_OBJECT_READ
3、将 ZK_KKB_KKBCS_CO_OBJECT_READ 的属性改为远程启用的模块,从而支持 RFC 外部调用
4、将函数的参数变更为值传递,这是远程调用模块的要求:

在代码中加上两行:

g_object = obj-auf.  
move-corresponding i_hcstruktur to g_global_object.

本文结论

1、SAP对生产订单的目标成本目标在底表中存储,而是基于计算获得。
2、如果需要通过代码获取生产订单的目标成本,有两种解决方案,第一种方案是调用 K_TARGETCOSTS_OBJECT_RECALC 函数,但需要提供如生产数量、计量单位等信息,也需要先调用其他函数;第二种方案是基于 K_KKB_KKBCS_CO_OBJECT_READ 函数拷贝一个新的函数,并对代码进行微调。

http://www.xdnf.cn/news/372349.html

相关文章:

  • 《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门
  • 【Web前端开发】HTML基础
  • Go语言——goflow工作流使用
  • WPF之集合绑定深入
  • 计算机网络:什么是Mesh组网以及都有哪些设备支持Mesh组网?
  • drf 使用jwt
  • cv_connection (像halcon一样对区域进行打散)
  • .Net Mqtt协议-MQTTNet(一)简介
  • 养生:为健康生活筑牢根基
  • 路由重发布
  • 软件测试——用例篇(3)
  • 嵌入式与物联网:C 语言在边缘计算时代的破局之道
  • OSPF不规则区域划分
  • Win10无法上网:Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目找不到域 TEST 的域控制器DNS 解析存在问题
  • 大节点是选择自建机房还是托管机房
  • 数据结构与算法分析实验12 实现二叉查找树
  • 深入理解 TCP:重传机制、滑动窗口、流量控制与拥塞控制
  • 考研408《计算机组成原理》复习笔记,第三章数值数据的表示和运算(定点数篇)
  • Ping 不通外网,Ping 得通主机问题解决小记
  • BUUCTF——Cookie is so stable
  • 《C++探幽:模板从初阶到进阶》
  • Docker Desktop安装在其他盘
  • [面试]SoC验证工程师面试常见问题(七)低速接口篇
  • rust-candle学习笔记13-实现多头注意力
  • Skyvern:用 AI+视觉驱动浏览器自动化
  • FreeTex v0.2.0:功能升级/支持Mac
  • Ubuntu 22.04(WSL2)使用 Docker 安装 Zipkin 和 Skywalking
  • 【含文档+PPT+源码】基于微信小程序的社区便民防诈宣传系统设计与实现
  • 基本句子结构
  • 前端取经路——现代API探索:沙僧的通灵法术