yjyongil

结合工作实践,用户在作特殊库存移库中需要进行两次操作,即先转到非限制再进行操作。现通过分析及查询相关资料,作了两部合一部的操作。当然前面还有输入及导入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.
--------------------- 
作者:kidy_zhang 
来源:CSDN 
原文:https://blog.csdn.net/kidy_zhang/article/details/73138877 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2017-11-22
  • 2021-12-18
  • 2022-01-16
  • 2021-08-02
  • 2021-11-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-26
  • 2022-12-23
  • 2021-09-06
  • 2021-12-18
  • 2022-12-23
  • 2021-12-18
相关资源
相似解决方案