结合工作实践,用户在作特殊库存移库中需要进行两次操作,即先转到非限制再进行操作。现通过分析及查询相关资料,作了两部合一部的操作。当然前面还有输入及导入EXCEL的动作,由于时间关系统不作详细说明。
1.供应商O库存转供应商O库存:
GMHEAD-PSTNG_DATE = P_BUDAT. “过帐日期
GMHEAD-DOC_DATE = P_PLDAT. "日期
GMHEAD-PR_UNAME = SY-UNAME. "操作工号
GMHEAD-HEADER_TXT = '供应商库存转供应商库存'.
GMCODE-GM_CODE = '04'. "事务代码类型
LOOP at TAB_VENDOR WHERE SEL = 'X' .
ITAB-MATERIAL = TAB_VENDOR-MATNR. "物料
ITAB-PLANT = TAB_VENDOR-WERKS. "工厂
ITAB-STGE_LOC = TAB_VENDOR-LGORT. "库存地点
ITAB-BATCH = TAB_VENDOR-CHARG. "批号
ITAB-MOVE_TYPE = '542'. "移动类型
ITAB-VENDOR = TAB_VENDOR-LIFNR. "供应商
ITAB-ENTRY_QNT = TAB_VENDOR-MENGE. "转移数量
ITAB-ENTRY_UOM = TAB_VENDOR-MEINS. “转移单位
ITAB-ENTRY_UOM_ISO = TAB_VENDOR-MEINS. “转移单位
ITAB-PO_NUMBER = TAB_VENDOR-EBELN. “参考采购订单
APPEND ITAB.
CLEAR:ITAB.
ITAB-MATERIAL = TAB_VENDOR-MATNR. “物料编码
ITAB-PLANT = TAB_VENDOR-WERKS. "工厂
ITAB-STGE_LOC = TAB_VENDOR-LGORT. "库存地点
ITAB-BATCH = TAB_VENDOR-CHARG. ”批号
ITAB-MOVE_TYPE = '541'. "移动类型
ITAB-VENDOR = TAB_VENDOR-LIFNR2. ”新供应商
ITAB-ENTRY_QNT = TAB_VENDOR-MENGE. "数量
ITAB-ENTRY_UOM = TAB_VENDOR-MEINS. “转移单位
ITAB-ENTRY_UOM_ISO = TAB_VENDOR-MEINS. “转移单位
ITAB-PO_NUMBER = TAB_VENDOR-EBELN2. “新的参考采购订单号
APPEND ITAB.
ENDLOOP.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE' “”调用BAPI
EXPORTING
GOODSMVT_HEADER = GMHEAD
GOODSMVT_CODE = GMCODE
* TESTRUN = ' '
* GOODSMVT_REF_EWM =
IMPORTING
GOODSMVT_HEADRET = MTHEAD
MATERIALDOCUMENT = MAT_DOC
* MATDOCUMENTYEAR =
TABLES
GOODSMVT_ITEM = ITAB
* GOODSMVT_SERIALNUMBER =
RETURN = ERRMSG .
LOOP AT ERRMSG.
CLEAR LOC_MSG.
IF ERRMSG-TYPE EQ 'E'.
MESSAGE ERRMSG-MESSAGE TYPE 'E'.
errflag = 'X'.
ELSE.
ENDIF.
ENDLOOP.
IF errflag is INITIAL.
COMMIT WORK AND WAIT.
CLEAR errflag.
IF sy-subrc NE 0.
MESSAGE '过帐操作出现错误,请稍后重新!' TYPE 'E'.
EXIT.
ELSE.
CONCATENATE '物料凭证:' MAT_DOC '创建成功~' INTO loc_msg.
MESSAGE loc_msg TYPE 'I'.
ENDIF.
ENDIF.
2.项目库存转供应商库存
GMHEAD-PSTNG_DATE = P_BUDAT2.
GMHEAD-DOC_DATE = P_PLDAT2. "日期
GMHEAD-PR_UNAME = SY-UNAME. "操作工号
GMHEAD-HEADER_TXT = '项目库存转供应商库存'.
GMCODE-GM_CODE = '04'. "事务代码类型
LOOP at TAB_PROJ WHERE SEL = 'X' .
ITAB-MATERIAL = TAB_PROJ-MATNR. "物料
ITAB-PLANT = TAB_PROJ-WERKS. "工厂
ITAB-STGE_LOC = TAB_PROJ-LGORT. "库存地点
ITAB-BATCH = TAB_PROJ-CHARG. "批号
ITAB-MOVE_TYPE = '411'. "移动类型
ITAB-SPEC_STOCK = 'Q'. "特殊库存
ITAB-ENTRY_QNT = TAB_PROJ-MENGE. “转出数量
ITAB-ENTRY_UOM = TAB_PROJ-MEINS. ”转出单位
ITAB-ENTRY_UOM_ISO = TAB_PROJ-MEINS. ”转出单位
ITAB-WBS_ELEM = TAB_PROJ-PSPID. "WBS元素
ITAB-VAL_WBS_ELEM = TAB_PROJ-PSPID. "WBS元素
APPEND ITAB.
CLEAR:ITAB.
ITAB-MATERIAL = TAB_PROJ-MATNR. "物料
ITAB-PLANT = TAB_PROJ-WERKS. “工厂
ITAB-STGE_LOC = TAB_PROJ-LGORT. ”库存地点
ITAB-BATCH = TAB_PROJ-CHARG. ”批次
ITAB-MOVE_TYPE = '541'. ”移动类型
ITAB-SPEC_STOCK = ''.
ITAB-VENDOR = TAB_PROJ-LIFNR2. ”新供应商
ITAB-ENTRY_QNT = TAB_PROJ-MENGE. ”数量
ITAB-ENTRY_UOM = TAB_PROJ-MEINS. ”单位
ITAB-ENTRY_UOM_ISO = TAB_PROJ-MEINS. ”单位
ITAB-PO_NUMBER = TAB_PROJ-EBELN2. ”采购订单
APPEND ITAB.
ENDLOOP.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
GOODSMVT_HEADER = GMHEAD
GOODSMVT_CODE = GMCODE
* TESTRUN = ' '
* GOODSMVT_REF_EWM =
IMPORTING
GOODSMVT_HEADRET = MTHEAD
MATERIALDOCUMENT = MAT_DOC
* MATDOCUMENTYEAR =
TABLES
GOODSMVT_ITEM = ITAB
* GOODSMVT_SERIALNUMBER =
RETURN = ERRMSG .
LOOP AT ERRMSG.
CLEAR LOC_MSG.
IF ERRMSG-TYPE EQ 'E'.
MESSAGE ERRMSG-MESSAGE TYPE 'E'.
errflag = 'X'.
ELSE.
ENDIF.
ENDLOOP.
IF errflag is INITIAL.
COMMIT WORK AND WAIT.
CLEAR errflag.
IF sy-subrc NE 0.
MESSAGE '过帐操作出现错误,请稍后重新!' TYPE 'E'.
EXIT.
ELSE.
CONCATENATE '物料凭证1:' MAT_DOC '创建成功~' INTO loc_msg.
MESSAGE loc_msg TYPE 'I'.
ENDIF.
ENDIF.