通过FM CO_VB_ORDER_POST更新生产订单的Components数据

来源:互联网 发布:易阳指手机炒股软件 编辑:程序博客网 时间:2024/05/17 02:08

Function module: CO_VB_ORDER_POST 是在用T-Code: CO02更新生产订单数据时被调用的。

那么我们自开发的程序如何通过FM: CO_VB_ORDER_POST 来更新生产订单呢?下面我跟大家分享一下我的经验,其中主要是对Components数据的更新,包括Batch split。

这个操作主要是通过FM的Table参数RESBTAB和RESBTAB_OLD来实现。至于参数RESBTAB中的字段的用法,其中的大部分字段可以直接通过它的描述推测出它的用处,或者可以直接和生产订单的维护屏幕中的Components表里的描述一一对应,但有几个比较重要的字段还是值得注意的。下面我针对两个不同的需求给大家阐述一下一些重要字段的用法:

需求1: 针对已经存在的Components的行项目做数据更新:

与数量相关的:

>> BDMNG:需求数量。

>> VMENG:可交付的数量。如果需求数量被修改了,那么我的建议是,先把这个数量清0,然后重新运行Availability Check以确定新的可交付数量。

>> ENMNG:已经发料的数量。正常情况下,当要修改需求数量时,修改后的数量应该要大于已经发料的数量,否则的话,就应该报错以阻止修改的进行。

>> ERFMG:不同单位下的需求数量。如果单位只有一个,那应该和字段BDMNG的值是一样的。

>> ESMNG:不同单位下的需求数量。用法同ERFMG。

程序控制相关的:

>> VBKZ: 如果是”U”的话,就表示这条行项目是需要被修改的。

 除了对上述字段的操作,还需要把将当前行项目更新前的数据存入内表并传递给另一个Table参数RESBTAB_OLD。

 需求2: 对已有的行项目做批次拆分(Batch split)

那些与数量相关的字段,应该大体上和需求1中描述的用法相同。

对于VBKZ,那就应该是”I”,表示插入一条新的行项目。

另外,我们在这里可以把被分拆的行项目称之为父行,分拆后的新的批次的行项目称之为子行

下面阐述一下其他一些重要的字段:

>> SPLKZ (Batch key) : 这个字段对于Batch split比较重要。如果它的值是”1″,表示这个行项目已经发生过批次拆分(Batch split)了,并者这是一个父行;如果是”2″,则表示这一行是子行;如果是”X”,则表示这一行从未发生过批次拆分。所以我们在用程序对行项目进行拆分的时候,那么首先就要把当前行的字段SPLKZ的值设成”1″,然后对于新插入的子行,那字段SPLKZ的值应该被设成”2″。

>> CHARG (Batch#) :批次号。子行上的新批次号就应该放在这个字段上。同时父行的批次号应该被设成空值。

>> RSNUM:预留号 (Reservation#) 。 这个字段的值不需要任何变化。

>> RSPOS:预留号明细行号 (Reservation item#) 。对于子行,这个明细行号应该被分配一个新的号码。这个字段的值应该在所有的Components行中是唯一的。

>> SPLRV:被拆分的父行的行号,也就是父行预留行项目号 (REPOS) 。这个字段只在被分拆出来的子行上赋值。

 还有一些需要注意的事项:

Components的数据应该是从数据表RESB中读取出来的。

生产订单中的物料号和行项目号是可以重复的,但是预留明细号是唯一的。看下图:

  co02

 当生产订单中的Components数据被更新后,预留中的数据也将同时被更新,这个通过T-Code:MB23可以看到。


原创粉丝点击