通过FM CO_VB_ORDER_POST更新生产订单的Components数据
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数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SM13: 分析SAP事务提交时的FM调
- 下一篇: abap性能优化——利用凭证的numbe