我想,搜到这篇文章的朋友,都用过,或者准备用BAPI_GOODSMVT_CREATE方法。由于时间的关系,我就不复述这个方法怎么用了。说点儿我遇到的问题。
应用场景:把已经投到生产订单1中的物料A,从生产订单1中冲销出来,直接投到生产订单2中。
起初是调用两次BAPI_GOODSMVT_CREATE方法,分别去生成冲销物料凭证和投料物料凭证。但这种方法遇到了问题,例如冲销凭证生成之后,投料凭证生成失败了。其实就是没处理好事务。
所以,就想能不能在一张物料凭证里,即生成移动类型是261的明细,又生成移动类型是262的明细。代码如下,从原来程序里复制过来的。红色粗体的那行代码是我后加的,起初没写。以为给不同的move_type就能实现我的需求。但经过测试发现,如果不写红色粗体的那句话,生成的物料凭证,明细行的移动类型都是262。加上“itab-xstob = ''.”才实现了我想要的效果。
第二个问题,如果物料A当前非限制使用的库存数量是0的话,如果物料凭证里第一条明细的移动类型是261,第二条明细的移动类型是262,是会报错的。我的解决办法是按移动类型做了降序排序。下表中蓝色粗体的那行语句。
LOOP AT pciabt. itab-move_type = '262'. itab-plant = pciabt-plant. itab-material = pciabt-material. itab-entry_qnt = pciabt-qty. itab-entry_uom = pciabt-erfme. itab-item_text = pciabt-zseq. itab-stge_loc = pciabt-issue_loc. itab-orderid = pciabt-aufnr. itab-reserv_no = pciabt-reserv_no. itab-res_item = pciabt-res_item. itab-xstob = 'X'. APPEND itab. ENDLOOP. LOOP AT pciabt2. itab-move_type = '262'. itab-plant = pciabt2-plant. itab-material = pciabt2-material. itab-entry_qnt = pciabt2-qty. itab-entry_uom = pciabt2-erfme. itab-item_text = pciabt2-zseq. itab-stge_loc = pciabt2-issue_loc. itab-orderid = pciabt2-aufnr. itab-reserv_no = pciabt2-reserv_no. itab-res_item = pciabt2-res_item. itab-xstob = ''. APPEND itab. ENDLOOP. SORT itab BY move_type DESCENDING. * SORT itab BY move_type. |