• [BAPI]使用BAPI_GOODSMVT_CREATE创建委外订单(subcontract)的物料移动凭证


    下面介绍一下使用bapi BAPI_GOODSMVT_CREATE为委外订单创建物料移动凭证。

    例子代码:

    *&---------------------------------------------------------------------*
    *& Report YTEST_SUBCONTRACT_MIGO
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT ytest_subcontract_migo.
    
    DATA:lt_return  TYPE STANDARD TABLE OF  bapiret2 WITH HEADER LINE,
         l_doc      TYPE mseg-mblnr,
         l_year     TYPE mseg-mjahr,
         lt_item    TYPE STANDARD TABLE OF bapi2017_gm_item_create WITH HEADER LINE,
         lwa_header TYPE bapi2017_gm_head_01,
         lwa_code   TYPE bapi2017_gm_code.
    DATA:l_line_id    TYPE mseg-line_id    VALUE '000000',
         l_parent_id  TYPE mseg-parent_id  VALUE '000000',
         l_line_depth TYPE mseg-line_depth VALUE '00'.
    
    lwa_code-gm_code = '01' .  "MB01
    
    lwa_header-pstng_date = sy-datum.        "凭证中的过帐日期
    lwa_header-doc_date   = sy-datum.        "凭证中的凭证日期
    lwa_header-pr_uname   = sy-uname.        "用户名
    lwa_header-ref_doc_no = '123456'.        "参考订单
    lwa_header-header_txt = 'Header text'.   "抬头文本
    
    
    *   物料
    lt_item-material   = '000000410000000043'.
    * 工厂
    lt_item-plant      = '1286'.
    * 批次号
    lt_item-batch      = '1808031000'.
    * 移动类型
    lt_item-move_type  = '101'.
    * 库存地点
    lt_item-stge_loc   = '1103'.
    * 基本单位数量
    lt_item-entry_qnt  =  57040.
    * 输入单位
    lt_item-entry_uom  = 'KG'.
    * 订单单位数量
    lt_item-po_pr_qnt  = 57040.
    * 订单价格单位(采购)
    lt_item-orderpr_un = 'KG'.
    * 采购订单号
    lt_item-po_number  =  4400000011.
    * 采购凭证的项目编号
    lt_item-po_item    = '00010'.
    lt_item-mvt_ind    = 'B'.
    * 凭证行的唯一标识
    l_line_id          = l_line_id + 1.
    l_parent_id        = l_line_id.
    lt_item-line_id    = l_line_id.
    APPEND lt_item.
    
    CLEAR:lt_item.
    
    lt_item-move_type = '543'.
    
    * 物料编号
    lt_item-material = '000000410000000044'.
    * 工厂
    lt_item-plant = '1286'.
    
    lt_item-spec_stock = 'O'.
    * 批次号
    lt_item-batch     = '0000000004'. 
    * 数量
    lt_item-entry_qnt = 3600.
    * 基本计量单位
    lt_item-entry_uom = 'KG'.
    * 上一行的识别码
    lt_item-parent_id = l_parent_id.
    * 凭证行的唯一标识
    l_line_id = l_line_id + 1.
    lt_item-line_id = l_line_id.
    * 凭证中行层次结构级别
    l_line_depth = '01'.
    lt_item-line_depth = l_line_depth.
    APPEND lt_item.
    
    CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
      EXPORTING
        goodsmvt_header  = lwa_header
        goodsmvt_code    = lwa_code
    *   TESTRUN          = ' '
    *   GOODSMVT_REF_EWM =
    *   GOODSMVT_PRINT_CTRL           =
      IMPORTING
    *   GOODSMVT_HEADRET =
        materialdocument = l_doc
        matdocumentyear  = l_year
      TABLES
        goodsmvt_item    = lt_item
        return           = lt_return.
    LOOP AT lt_return WHERE type CA 'AEX'.
      EXIT.
    ENDLOOP.
    IF sy-subrc = 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      WRITE:'Failed'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      WRITE:'物料凭证号:', l_doc.
    ENDIF.

    代码不复杂,需要注意的是字段line_id,parent_id,line_depth要填写正确,

    line_id是用来唯一标识行项目的,委外行要正确制定上层行项目ID,也就是把上层行项目的line_ID填到委外行的parent_ID字段中,line_depth也要按层次填入01...

    如果行项目字段填写不正确有时会出现M7 387错误。

    委外订单物料移动凭证创建成功后,通过MIGO查看一下:

    代码中委外行项目上的批次号,一定是系统中存在的批次,要不然也会报错,如下

    M7 076的错误:“这种物料的特殊库存 O 0000000005 0010000003 000000410000000044不存在”

    以上。

  • 相关阅读:
    Java程序中执行Python脚本
    hive笔记2元数据查询
    服务网格简介(转载)
    自定义hivehook(转载)
    线程池:ThreadPoolExcutor源码阅读
    Mysql 的Innodb引擎和Myisam数据结构和区别
    AQS源码阅读
    关于本博客主题设置教程
    使用dockerfile部署springboot应用
    第四章 面向对象(一)
  • 原文地址:https://www.cnblogs.com/datie/p/11429156.html
Copyright © 2020-2023  润新知