zoukankan      html  css  js  c++  java
  • BAPI_GOODSMVT_CREATE(调拨 收货 发货 入库 退货)

    code-gm_code取值:

    01 MB01 按采购订单的货物移动
    02 MB31 按生产订单的货物移动
    03 MB1A 货物提取(工单退料
    04 MB1B 转移过帐
    05 MB1C 其他收货
    06 MB11 货物移动
    07 MB04 "物料供应"消耗的事后调整

    itab-mvt_ind = 'B'. "移动标识
     无参考的货物移动(空)
    B 按采购订单的货物移动
    F 有关生产单的货物移动 
    L 有关交货通知的货物移动
    K 看板需求的货物移动(WM-仅限内部)
    O "提供物料"消耗的后续调整
    W 比例的后续调整/产品单位物料

    下 面  代 码 都 已 封 装 为 RFC

    调拨单(货物移动)

    FUNCTION zfunction.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(RSTYPE) TYPE  XFELD
    *"     VALUE(RSMESG) TYPE  STRING
    *"     VALUE(O_MBLNR) TYPE  MBLNR
    *"  TABLES
    *"      ZMES_TORDER_REQ_I STRUCTURE  ZMES_TORDER_REQ_I
    *"----------------------------------------------------------------------
    *输入表数据:ZMES_TORDER_REQ_I(表结构)  
    *  PSTNG_DATE type    BUDAT        凭证中的过帐日期
    *  MATERIAL    MATNR            物料号 
    *  PLANT    WERKS_D    CHAR      工厂
    *  MOVE_PLANT    UMWRK          收货/发货工厂
    *  STGE_LOC    LGORT_D          库存地点
    *  MOVE_STLOC    UMLGO          收货/发货库存地点
    *  ENTRY_QNT    ERFMG            以输入单位计的数量 
    *  BATCH    CHARG_D                批号
    *"----------------------------------------------------------------------
    
      DATA:goodsmvt_header  LIKE  bapi2017_gm_head_01,
            itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
            return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
            mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
            req_i TYPE zmes_torder_req_i.
    
    
      CLEAR:goodsmvt_header.
      goodsmvt_header-doc_date = sy-datum.    "凭证中的凭证日期
      goodsmvt_header-pr_uname = sy-datum.    "用户名
    
      LOOP AT zmes_torder_req_i INTO req_i.
        MOVE-CORRESPONDING req_i TO itab.
        goodsmvt_header-pstng_date = req_i-pstng_date.  "凭证中的过帐日期
        IF req_i-plant = req_i-move_plant.
          itab-move_type = '311'.                         "移动类型(库储存地点<->库存地点)
        ELSE.
    *      itab-move_type = '301'.                         "移动类型(工厂<->工厂)
        ENDIF.
        APPEND itab.
        CLEAR itab.
      ENDLOOP.
    
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          goodsmvt_header  = goodsmvt_header
          goodsmvt_code    = '04'
        IMPORTING
          materialdocument = mat_doc
        TABLES
          goodsmvt_item    = itab
          return           = return.
      READ TABLE return WITH KEY type = 'E'.
      IF  sy-subrc = 0.
        rstype = 'E'.
        LOOP AT return WHERE type = 'E' .
          CONCATENATE rsmesg return-message '' INTO rsmesg.
        ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        rstype = 'S'.
        o_mblnr = mat_doc.
      ENDIF.
    ENDFUNCTION.

    工单发料

    function zfunction.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(RSTYPE) TYPE  XFELD
    *"     VALUE(RSMESG) TYPE  STRING
    *"     VALUE(O_MBLNR) TYPE  MBLNR
    *"  TABLES
    *"      ZMES_ORD_REQ_I STRUCTURE  ZMES_ORD_REQ_I
    *"----------------------------------------------------------------------
    *输入表:ZMES_ORD_REQ_I(表结构)
    *  PLANT     WERKS_D      工厂
    *  ORDERID    AUFNR        订单号 
    *  MATERIAL    MATNR      物料号 
    *  ENTRY_QNT    ERFMG      以输入单位计的数量 
    *  STGE_LOC    LGORT_D    库存地点
    *"----------------------------------------------------------------------
      data:goodsmvt_header  like  bapi2017_gm_head_01,
            itab  type table of bapi2017_gm_item_create with header line,
            return  like table of bapiret2 with header line,
            mat_doc like  bapi2017_gm_head_ret-mat_doc,
            req_i type zmes_ord_req_i.
    
    
      clear:goodsmvt_header.
      goodsmvt_header-doc_date = sy-datum.    "凭证中的凭证日期
      goodsmvt_header-pstng_date = sy-datum.  "凭证中的过帐日期
      goodsmvt_header-pr_uname = sy-datum.    "用户名
    
      loop at zmes_ord_req_i into req_i.
        move-CORRESPONDING req_i to itab.
        itab-move_type = '261'. "移动类型(库存管理)
        append itab.
        clear itab.
      endloop.
    
      call function 'BAPI_GOODSMVT_CREATE'
      exporting
        goodsmvt_header  = goodsmvt_header
        goodsmvt_code    = '03'
      importing
        materialdocument = mat_doc
      tables
        goodsmvt_item    = itab
        return           = return.
      read table return with key type = 'E'.
      if  sy-subrc = 0.
        rstype = 'E'.
        loop at return where type = 'E' .
          concatenate rsmesg return-message '' into rsmesg.
        endloop.
        call function 'BAPI_TRANSACTION_ROLLBACK' .
      else.
        call function 'BAPI_TRANSACTION_COMMIT'
        exporting
          wait = 'X'.
        rstype = 'S'.
        o_mblnr = mat_doc.
      endif.
    endfunction.

    工单退料

    function zfunction.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(RSTYPE) TYPE  XFELD
    *"     VALUE(RSMESG) TYPE  STRING
    *"     VALUE(O_MBLNR) TYPE  MBLNR
    *"  TABLES
    *"      ZMES_RT_ORDER_I STRUCTURE  ZMES_RT_ORDER_I
    *"----------------------------------------------------------------------
    *输入表:ZMES_RT_ORDER_I(表结构)
    *  PLANT    WERKS_D         工厂
    *  ORDERID    AUFNR         订单号 
    *  MATERIAL    MATNR          物料号 
    *  RESERV_NO    RSNUM             预留/相关需求的编号
    *  RES_ITEM    RSPOS             预留/相关需求的项目编号
    *  ENTRY_QNT    ERFMG             以输入单位计的数量 
    *  MOVE_REAS    MB_GRBEW      移动原因
    *  STGE_LOC    LGORT_D           库存地点
    *  BATCH    CHARG_D               批号
    *"----------------------------------------------------------------------
      data:goodsmvt_header  like  bapi2017_gm_head_01,
            itab  type table of bapi2017_gm_item_create with header line,
            return  like table of bapiret2 with header line,
            mat_doc like  bapi2017_gm_head_ret-mat_doc,
            order_i type zmes_rt_order_i.
    
      clear:goodsmvt_header.
      goodsmvt_header-doc_date = sy-datum.    "凭证中的凭证日期
      goodsmvt_header-pstng_date = sy-datum.  "凭证中的过帐日期
      goodsmvt_header-pr_uname = sy-datum.    "用户名
    
      loop at zmes_rt_order_i into order_i.
        move-corresponding order_i to itab.
        itab-move_type = '262'. "移动类型(库存管理)
        append itab.
        clear itab.
      endloop.
    
      call function 'BAPI_GOODSMVT_CREATE'
      exporting
        goodsmvt_header  = goodsmvt_header
        goodsmvt_code    = '03'
      importing
        materialdocument = mat_doc
      tables
        goodsmvt_item    = itab
        return           = return.
      read table return with key type = 'E'.
      if  sy-subrc = 0.
        rstype = 'E'.
        loop at return where type = 'E' .
          concatenate rsmesg return-message '' into rsmesg.
        endloop.
        call function 'BAPI_TRANSACTION_ROLLBACK' .
      else.
        call function 'BAPI_TRANSACTION_COMMIT'
        exporting
          wait = 'X'.
        rstype = 'S'.
        o_mblnr = mat_doc.
      endif.
    endfunction.

    工单入库

    FUNCTION zfunction.
      FUNCTION zmes_order_in.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(RSTYPE) TYPE  XFELD
    *"     VALUE(RSMESG) TYPE  STRING
    *"     VALUE(O_MBLNR) TYPE  MBLNR
    *"  TABLES
    *"      ZMES_ORDER_IN_I STRUCTURE  ZMES_ORDER_IN_I
    *"----------------------------------------------------------------------
    *输入表:ZMES_ORDER_IN_I(表结构)
    *    PLANT  WERKS_D       工厂
    *    ORDERID  AUFNR       订单号
    *    ENTRY_QNT  ERFMG     以输入单位计的数量
    *    STGE_LOC    LGORT_D      库存地点
    *    BATCH  CHARG_D       批号
    *"----------------------------------------------------------------------
        DATA:header  LIKE  bapi2017_gm_head_01,
              code LIKE  bapi2017_gm_code,
              itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
              return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
              mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
              goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber,
              order_in TYPE zmes_order_in_i.
    
        CLEAR:header,code.
        header-doc_date = sy-datum.    "凭证中的凭证日期
        header-pstng_date = sy-datum.  "凭证中的过帐日期
        header-pr_uname = sy-datum.    "用户名
    
        code-gm_code = '01'.
    
        LOOP AT zmes_order_in_i INTO order_in.
          MOVE-CORRESPONDING order_in TO itab.
          itab-move_type = '101'.             "移动类型
          itab-mvt_ind = 'F'.                 "移动标识
          APPEND itab.
          CLEAR itab.
        ENDLOOP.
    
        CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
          EXPORTING
            goodsmvt_header       = header
            goodsmvt_code         = code
          IMPORTING
            materialdocument      = mat_doc
          TABLES
            goodsmvt_item         = itab
            goodsmvt_serialnumber = goodsmvt_serialnumber
            return                = return.
        READ TABLE return WITH KEY type = 'E'.
        IF  sy-subrc = 0.
          rstype = 'E'.
          LOOP AT return WHERE type = 'E' .
            CONCATENATE rsmesg return-message '' INTO rsmesg.
          ENDLOOP.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          rstype = 'S'.
          o_mblnr = mat_doc.
        ENDIF.
      ENDFUNCTION.
    ENDFUNCTION.

    PO退货

    FUNCTION zfunction.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(RSTYPE) TYPE  XFELD
    *"     VALUE(RSMESG) TYPE  STRING
    *"     VALUE(O_MBLNR) TYPE  MBLNR
    *"  TABLES
    *"      ZMES_PO_STOCK_I STRUCTURE  ZMES_PO_STOCK_I
    *"----------------------------------------------------------------------
    *输入表:ZMES_PO_STOCK_I(表结构)
    *  MOVE_TYPE  BWART   移动类型(库存管理)
    *  PO_NUMBER  BSTNR   采购订单编号
    *  PO_ITEM  EBELP     采购凭证的项目编号
    *  PLANT  WERKS_D     工厂
    *  MATERIAL    MATNR      物料号
    *  ENTRY_QNT  ERFMG   以输入单位计的数量
    *  STGE_LOC LGORT_D       库存地点
    *  MOVE_REAS  MB_GRBEW      移动原因
    *  REF_DOC  MBLNR           物料凭证编号
    *  REF_DOC_IT LFPOS       参考凭证项目
    *"----------------------------------------------------------------------
      DATA:header  LIKE  bapi2017_gm_head_01,
            itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
            return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
            mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
            stock_i TYPE zmes_po_stock_i.
    
      CLEAR:header.
      header-doc_date = sy-datum.    "凭证中的凭证日期
      header-pstng_date = sy-datum.  "凭证中的过帐日期
      header-pr_uname = sy-datum.    "用户名
    
      LOOP AT zmes_po_stock_i INTO stock_i.
        MOVE-CORRESPONDING stock_i TO itab.
        itab-mvt_ind = 'B'.                 "移动标识
        CASE stock_i-move_type.
          WHEN '102'.
            itab-move_reas = ''.            "移动原因
          WHEN '122'.
          WHEN '161'.
            itab-move_type = '101'.        "移动类型
            itab-ref_doc = ''.             "物料凭证
            itab-ref_doc_it = ''.          "物料凭证项目
            itab-move_reas = ''.           "移动原因
        ENDCASE.
        APPEND itab.
        CLEAR itab.
      ENDLOOP.
    
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          goodsmvt_header  = header
          goodsmvt_code    = '01'          "MB01 按采购订单的货物移动
        IMPORTING
          materialdocument = mat_doc
        TABLES
          goodsmvt_item    = itab
          return           = return.
      READ TABLE return WITH KEY type = 'E'.
      IF  sy-subrc = 0.
        rstype = 'E'.
        LOOP AT return WHERE type = 'E' .
          CONCATENATE rsmesg return-message '' INTO rsmesg.
        ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        rstype = 'S'.
        o_mblnr = mat_doc.
      ENDIF.
    ENDFUNCTION.

    收货

    FUNCTION zfunction.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(RSTYPE) TYPE  XFELD
    *"     VALUE(RSMESG) TYPE  STRING
    *"     VALUE(O_MBLNR) TYPE  MBLNR
    *"  TABLES
    *"      ZMES_PO_IN STRUCTURE  ZMES_PO_IN
    *"----------------------------------------------------------------------
    *输入表:ZMES_PO_IN(表结构)
    *  REF_DOC_NO    XBLNR      参考凭证编号
    *  PLANT  WERKS_D       工厂
    *  PO_NUMBER  EBELN     采购凭证号
    *  PO_ITEM  EBELP       采购凭证的项目编号
    *  ETENS  EETEN         交货计划行计数器
    *  MATERIAL MATNR     物料号
    *  STGE_LOC    LGORT_D      库存地点
    *  ENTRY_QNT  ERFMG     以输入单位计的数量
    *  VENDOR    ELIFN          供应商帐户号
    *  BATCH  CHARG_D       批号
    
    *"----------------------------------------------------------------------
      DATA:header  LIKE  bapi2017_gm_head_01,
            code LIKE  bapi2017_gm_code,
            itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
            return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
            mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
            po_in TYPE zmes_po_in.
    
      CLEAR:header,code.
      header-doc_date = sy-datum.    "凭证中的凭证日期
      header-pstng_date = sy-datum.  "凭证中的过帐日期
      header-pr_uname = sy-datum.    "用户名
      header-ref_doc_no =  zmes_po_in-ref_doc_no.    "外向交货单
    
      code-gm_code = '01'. "为 BAPI 货物移动分配事务代码  4500090063
    
      LOOP AT zmes_po_in INTO po_in.
        MOVE-CORRESPONDING po_in TO itab.
        itab-move_type = '101'.             "移动类型
        itab-mvt_ind = 'B'.                 "移动标识
        APPEND itab.
        CLEAR itab.
      ENDLOOP.
    
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          goodsmvt_header  = header
          goodsmvt_code    = code
        IMPORTING
          materialdocument = mat_doc
        TABLES
          goodsmvt_item    = itab
          return           = return.
      READ TABLE return WITH KEY type = 'E'.
      IF  sy-subrc = 0.
        rstype = 'E'.
        LOOP AT return WHERE type = 'E' .
          CONCATENATE rsmesg return-message '' INTO rsmesg.
        ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        rstype = 'S'.
        o_mblnr = mat_doc.
      ENDIF.
    ENDFUNCTION.

    IQC入库

    FUNCTION zfunction.
    *"----------------------------------------------------------------------
    *"*"Local interface:
    *"  EXPORTING
    *"     VALUE(RSTYPE) TYPE  XFELD
    *"     VALUE(RSMESG) TYPE  STRING
    *"     VALUE(O_MBLNR) TYPE  MBLNR
    *"  TABLES
    *"      ZMES_PO_IQC_I STRUCTURE  ZMES_PO_IQC_I
    *"----------------------------------------------------------------------
    *输入表:ZMES_PO_IQC_I(表结构)
    *  PLANT  WERKS_D       工厂
    *  MATERIAL    MATNR        物料号
    *  ENTRY_QNT  ERFMG     以输入单位计的数量
    *  STGE_LOC    LGORT_D      库存地点
    *  BATCH  CHARG_D       批号
    *"----------------------------------------------------------------------
      DATA:header  LIKE  bapi2017_gm_head_01,
            itab  TYPE TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
            return  LIKE TABLE OF bapiret2 WITH HEADER LINE,
            mat_doc LIKE  bapi2017_gm_head_ret-mat_doc,
            goodsmvt_serialnumber TYPE TABLE OF bapi2017_gm_serialnumber,
            iqc_in TYPE zmes_po_iqc_i.
    
      CLEAR:header.
      header-doc_date = sy-datum.    "凭证中的凭证日期
      header-pstng_date = sy-datum.  "凭证中的过帐日期
      header-pr_uname = sy-datum.    "用户名
    
      LOOP AT zmes_po_iqc_i INTO iqc_in.
        MOVE-CORRESPONDING iqc_in TO itab.
        itab-move_type = '321'.             "移动类型
        APPEND itab.
        CLEAR itab.
      ENDLOOP.
    
      CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
        EXPORTING
          goodsmvt_header       = header
          goodsmvt_code         = '04'     "为BAPI货物移动分配事务代码(MB1B 转移过帐)
        IMPORTING
          materialdocument      = mat_doc
        TABLES
          goodsmvt_item         = itab
          goodsmvt_serialnumber = goodsmvt_serialnumber
          return                = return.
      READ TABLE return WITH KEY type = 'E'.
      IF  sy-subrc = 0.
        rstype = 'E'.
        LOOP AT return WHERE type = 'E' .
          CONCATENATE rsmesg return-message '' INTO rsmesg.
        ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        rstype = 'S'.
        o_mblnr = mat_doc.
      ENDIF.
    ENDFUNCTION.
    abap菜鸟,记录学习笔记。才疏学浅,如有错误,请直接在评论区留言。
  • 相关阅读:
    SQL Prompt 5.3.4.1
    RIA(富客户端)发展态势
    XML操作:2.LINQ TO XML(http://www.cnblogs.com/AlexLiu/archive/2008/10/27/linq.html)
    XML操作:1.XML类(http://blog.csdn.net/happy09li/article/details/7460521)
    .NET的Snk使用方法
    PictureEdit中拖放图片
    CPU与内存(经典问答)
    SQL Server 2008 Data Types and Entity Framework 4
    8086、80x86(IA-32)、64(IA-64)位CPU发展
    MVC3 Razor模板引擎
  • 原文地址:https://www.cnblogs.com/freeandeasy/p/12212800.html
Copyright © 2011-2022 走看看