通过FM CO_VB_ORDER_POST更新生产订单的Components数据
2012-03-20 14:40
323 查看
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中读取出来的。
生产订单中的物料号和行项目号是可以重复的,但是预留明细号是唯一的。看下图:
当生产订单中的Components数据被更新后,预留中的数据也将同时被更新,这个通过T-Code:MB23可以看到。
那么我们自开发的程序如何通过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中读取出来的。
生产订单中的物料号和行项目号是可以重复的,但是预留明细号是唯一的。看下图:
当生产订单中的Components数据被更新后,预留中的数据也将同时被更新,这个通过T-Code:MB23可以看到。
相关文章推荐
- okhttp通过post发送Json数据到php 更新数据库
- httpClient通过post上传数据
- 通过Ajax post Json类型的数据到Controller
- PHP通过POST数据调用API示例及curl_init()参数介绍
- 原始ajax通过xmlHttpRequest对象的send()方法提交数据--Get方式和Post方式
- 微信支付--工具类--通过Https往API post xml数据
- BlackBerry通过全局变量的发送和接收来更新应用界面数据
- jQuery的ajax()检验用户名;通过jQuery的load()/get()/post()方法实现;使用XMLHTTPRequest对象来进行AJAX的异步数据交互
- VB.NET中DataGridView删除指定数据行,并更新数据库
- (三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
- VB.NET通过URL POST请求和GET请求
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
- 如何将表单数据从一页传递到另一个,通过使用 GET 和 POST 活动服务器页中
- 浅入浅出Flask框架:处理客户端通过POST方法传送的数据
- [SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据
- 使用Retrofit通过post提交Json数据
- 通过SQL Server的Linked Servers连接到Oracle以直接更新相关数据表
- 稳扎稳打Silverlight(57) - 4.0通信之WCF RIA Services: 概述, 通过 DomainDataSource 实现数据的添加、查询、更新和删除操作
- 稳扎稳打Silverlight(57) - 4.0通信之WCF RIA Services: 概述, 通过 DomainDataSource 实现数据的添加、查询、更新和删除操作
- hibernate通过SQL更新数据