SAP入庫自動創建采購訂單,並更新批次特征值,物料分類,批次,特征值修改


MM03分類視圖中相關表:

INOB:在內部編號和對象之間的鏈接。KLART字段對應“類別種類”,OBTAB='MARA'代表主數據配置,OBTAB=‘MCH1’代表批次數據(OBJEK=物料號&&批次)

KSSK:分配表: 對象到單個類。KSSK-OBJEK=AUSP-OBJEK,KSSK-OBJEK=INOB-CUOBJ(左邊補0)

KLAH:類表頭數據。CLASS字段對應“分配-類別”

KSML:類的特性。KSML-IMERK = AUSP-ATINN

AUSP:特征值。ATWRT字段對應“常規-特征值”

CABN:特征

CABNT:特性描述

批次相關表:

MCH1:批量(如果批次管理多工廠)。CHARG字段對應“批號”

 

相關設置操作-SAP MM批次管理(4)批次分類

https://blog.csdn.net/kangliujie/article/details/76129894

 

維護物料的批次特征值用到以下2個BAPI函數

BAPI_OBJCL_GETDETAIL
BAPI_OBJCL_CHANGE

 

如下代碼主要實現入庫自動創建采購訂單,並根據ITEM_TEXT字段值更新批次特征值。

FUNCTION zsrm_create_mb01.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     VALUE(BKERRMSG) TYPE  BKK_ERRMSG
*"  TABLES
*"      IT_ITEM STRUCTURE  ZMM_MB01 OPTIONAL
*"      IT_RESULT STRUCTURE  ZMM_MB01_RESULT OPTIONAL
*"----------------------------------------------------------------------

  DATA: BEGIN OF gmhead.
          INCLUDE STRUCTURE bapi2017_gm_head_01.
  DATA: END OF gmhead.

  DATA: BEGIN OF gmcode.
          INCLUDE STRUCTURE bapi2017_gm_code.
  DATA: END OF gmcode.

  DATA: BEGIN OF mthead.
          INCLUDE STRUCTURE bapi2017_gm_head_ret.
  DATA: END OF mthead.

  DATA: BEGIN OF itab OCCURS 100.
          INCLUDE STRUCTURE bapi2017_gm_item_create.
  DATA: END OF itab.

  DATA: BEGIN OF errmsg OCCURS 10.
          INCLUDE STRUCTURE bapiret2.
  DATA: END OF errmsg.

  DATA:
    ls_item   TYPE zmm_mb01,
    ls_result TYPE zmm_mb01_result.

  DATA:
    lv_status TYPE string VALUE 'E',
    lv_ebeln  TYPE ebeln.
  DATA:  errflag.

  DATA:
    lv_classtype       TYPE bapi1003_key-classtype,
    lv_classnum        TYPE bapi1003_key-classnum,
    lv_objectkey       TYPE bapi1003_key-object,
    lt_allocvaluesnum  TYPE bapi1003_alloc_values_num OCCURS 0,
    lt_allocvalueschar TYPE bapi1003_alloc_values_char OCCURS 0,
    lt_allocvaluescurr TYPE bapi1003_alloc_values_curr OCCURS 0,
    lt_return          TYPE bapiret2 OCCURS 0,
    ls_return          TYPE bapiret2,
    lv_obj             TYPE ausp-objek,
    lv_clint           TYPE kssk-clint,
    lv_imerk           TYPE ksml-imerk,
    ls_allocvalueschar TYPE bapi1003_alloc_values_char.

  DATA ls_ausp LIKE ausp.

  READ TABLE it_item INTO ls_item INDEX 1.

  gmhead-pstng_date = ls_item-pstng_date.
  gmhead-doc_date = ls_item-pstng_date.
  gmhead-pr_uname = sy-uname.
  gmcode-gm_code = '01'.   "01 - MB01 - Goods Receipts for Purchase Order

  LOOP AT it_item INTO ls_item.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = ls_item-material
      IMPORTING
        output = ls_item-material.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = ls_item-vendor
      IMPORTING
        output = ls_item-vendor.
    itab-move_type  = ls_item-move_type.
    itab-mvt_ind    = 'B'.
    itab-plant      = ls_item-plant.
    itab-material   = ls_item-material.
    itab-entry_qnt  = ls_item-entry_qnt.
    itab-entry_uom  = ls_item-entry_uom.
    itab-move_stloc = ls_item-move_stloc.
    itab-stge_loc   = ls_item-move_stloc.
    itab-vendor     = ls_item-vendor.
    itab-item_text  = ls_item-item_text.
    itab-batch      = ls_item-batch.

    APPEND itab.
  ENDLOOP.



  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = gmhead
      goodsmvt_code    = gmcode
    IMPORTING
      goodsmvt_headret = mthead
    TABLES
      goodsmvt_item    = itab
      return           = errmsg.

  CLEAR errflag.
  LOOP AT errmsg.
    IF errmsg-type EQ 'E'.
      errflag = 'X'.
      bkerrmsg = bkerrmsg && errmsg-message.
    ELSE.
    ENDIF.
  ENDLOOP.

  IF errflag IS INITIAL.
    COMMIT WORK AND WAIT.
    IF sy-subrc NE 0.
      bkerrmsg = bkerrmsg && 'Error in updating'.
      EXIT.
    ELSE.
      lv_status = 'S'.
      WRITE:/ mthead-mat_doc, mthead-doc_year.
      SELECT SINGLE ebeln INTO lv_ebeln
        FROM mseg
        WHERE mblnr = mthead-mat_doc
        AND mjahr = mthead-doc_year.
    ENDIF.
  ENDIF.



  LOOP AT it_item INTO ls_item.
    MOVE-CORRESPONDING ls_item TO ls_result.
    ls_result-status = lv_status.
    ls_result-mblnr = mthead-mat_doc.
    ls_result-ebeln = lv_ebeln.

    IF lv_status = 'S'.
      CLEAR: lv_classtype,lv_classnum,lv_obj.
      REFRESH: lt_allocvaluesnum,lt_allocvalueschar,lt_allocvaluescurr,lt_return.

      SELECT SINGLE klart INTO lv_classtype  FROM inob WHERE obtab = 'MARA' AND objek = ls_item-material.

      lv_objectkey = ls_item-material && ls_item-batch.

      SELECT SINGLE cuobj INTO lv_obj  FROM inob WHERE obtab = 'MCH1' AND objek = lv_objectkey.

      SELECT SINGLE clint INTO lv_clint FROM kssk WHERE objek = lv_obj AND klart = lv_classtype.

      SELECT SINGLE imerk INTO lv_imerk FROM ksml WHERE clint = lv_clint.

      SELECT SINGLE class INTO lv_classnum FROM klah WHERE klart = lv_classtype.

      IF lv_classtype > ' ' AND lv_classnum > ' '.


        CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
          EXPORTING
            objectkey       = lv_objectkey
            objecttable     = 'MCH1'
            classnum        = lv_classnum
            classtype       = lv_classtype
          TABLES
            allocvaluesnum  = lt_allocvaluesnum
            allocvalueschar = lt_allocvalueschar
            allocvaluescurr = lt_allocvaluescurr
            return          = lt_return.
        READ TABLE lt_return INTO ls_return INDEX 1.
        IF ls_return-type = 'S'.
          READ TABLE lt_allocvalueschar INTO ls_allocvalueschar INDEX 1.
          IF sy-subrc = 0.
            ls_allocvalueschar-value_char = ls_item-item_text+00(30).
            ls_allocvalueschar-value_neutral = ls_item-item_text+00(30).
            MODIFY lt_allocvalueschar FROM ls_allocvalueschar INDEX 1.

            CALL FUNCTION 'BAPI_OBJCL_CHANGE'
              EXPORTING
                objectkey          = lv_objectkey
                objecttable        = 'MCH1'
                classnum           = lv_classnum
                classtype          = lv_classtype
                status             = '1'
                keydate            = sy-datum
              TABLES
                allocvaluesnumnew  = lt_allocvaluesnum
                allocvaluescharnew = lt_allocvalueschar
                allocvaluescurrnew = lt_allocvaluescurr
                return             = lt_return.
            READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
            IF sy-subrc = 0.
              bkerrmsg = bkerrmsg && ls_return-message.
              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ENDIF.
          ELSE.
            CLEAR ls_ausp.
            ls_ausp-objek = lv_obj.
            ls_ausp-atinn = lv_imerk.
            ls_ausp-atzhl = '001'.
            ls_ausp-mafid = 'O'.
            ls_ausp-klart = lv_classtype.
            ls_ausp-adzhl = '0000'.
            ls_ausp-atwrt = ls_item-item_text+00(30).
            ls_ausp-atcod = '1'.
            INSERT INTO ausp VALUES ls_ausp.

          ENDIF.

        ENDIF.
      ENDIF.

    ENDIF.
    APPEND ls_result TO it_result.
  ENDLOOP.

ENDFUNCTION.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM