任务描述:系统使用的可配置物料,VA01,VA02 ,销售订单维护界面,已经有功能,当保存订单时,自动为可配置物料做成本估算,但是此估算是针对订单行项的交货工厂(1000公司代码下1000工厂)做的.实际生产是在另一个工厂(2000公司代码下2000工厂)下 , 通过公司间采购订单实现需求传递的。 现在的要求是销售订单中的自动估算是做在2000工厂下,即将销售订单行项在2000工厂下做估算,实际上1000工厂已经给了物料的标准成本,不需要在销售单再做估算,将此估算移花接木到2000工厂下是不错的做法. 看了一下后台配置,好像不能实现。只好跟踪 va01 程序,找出估算的方法,再进一步想办法。中间其它试探性的调试略过。
如果进入va01,开始跟踪,代码量超多,头晕了一天,第二天感觉不行,应该返过来,从后面往前跟踪.
首先进入va01 的订单行估算界面,如下图: 调出系统状态,查看当前的屏幕号,我们知道,当要显示屏幕时 一般会用到 call screen 语句,那么只要断点到 调用屏幕的语句,然后在跟踪每个例程或bapi的返回,就能找到一条估算的运行线路了。
记住上面的屏幕号,下一个语句断点 call screen
一直F8 , 跟踪到 断点 call screen 4610 如下图,很显然,这一句就是上面屏幕被调用的指令,是 function ckdi_sd_order_calc调用的。 记下这个函数,后面再份析它的参数和使用方法,说不定可以使用.
在 function 的结束处设一个断点,然后 F8 到这个断点,再F6 ,这样就能进入调用这个function的代码里,
发现是 function ck_f_productcosting_process 调用了上面的function,看看它的参数,其中i_rk70s 里包含了很多估算要用的参数,
下面的跟踪,要注意一下这个变量的传递过程,按上面同样的方法,执行到调用此函数的地方.
跳到了 function: ckka_costing_process 里面
注意i_r70s 也是参数带进来的,继续...
进入了一 个 form ,调用了上面的函数, 参数i_rk70s 是由 da_kalki 这个变量传入的,仔细检查此变量的数据来源
不是作为参数带进来的,应该是 form内部定义的并且是在form内部取到的数据.
可以看到 form 内部由多处为此结构变量赋值,但我最关心是 bukrs , werks 公司代码和工厂这两个字段,将此处加上断点,为下次调试运行准备.. (此处可能是我们修改的地方 ...)
继续跟踪下去.
有趣的是上面有个递归的调用,
如下图 ,已经到了 pai 事件了,这里应该是能功能代码的分发处理过程.
这里已经是 pbo 事件了,直接运行完,回到了 va01 的主界面. 此次跟踪结束。
在上面步聚中,我们在对工厂和公司代码处设了断点,重新调试运行到断点,修改这两个值指定为 2000工厂,经测试完全正确的做了2000工厂的估算.
下一步的实现可以用增强来调用我们上面记录的几个 function,也可以直接修改我们设的断点处. 加一下条件过滤修改工厂.
简便起见我这里用后一种直接改标准程序的方式了:
........略....
* Buchungskreis des Werkes
da_kalki-bukrs = t001k-bukrs.
da_kalki-gsber = vbap-gsber.
da_kalki-werks = vbap-werks.
* 针对 1000 公司下销售单,需要传到 2000 公司的2000工厂生产,将销售订单的估算改为在 2000 工厂的估算.
* 增强开始 xulong 2010-06-17-------------------------------------------------------------
call function 'C160_BREAK_POINT'.
if da_kalki-bukrs = 1000 and da_kalki-werks = 1000 .
data:t_sobsk like marc-sobsk.
select single sobsk into t_sobsk from marc where matnr = vbap-matnr and werks = da_kalki-werks .
if t_sobsk = 80 .
da_kalki-bukrs = 2000.
da_kalki-werks = 2000.
endif.
endif.
* 增强结束 xulong 2010-06-17---------------------------------------------------------------------------
.....略.....
参考: sap-生产订单的成本理解
销售订单行项的成本估算及其发布
abap-如何更好的给代码添加硬断点 break-point
标签:function,kalki,估算,一例,程序调试,abap,da,2000,断点 From: https://blog.51cto.com/fangkailove/5889842