天天看點

SAP:MM03 BAPI_MATERIAL_SAVEDATA

**清空内表

    CLEAR:   it_rount,

             it_bapiret2,

             it_head,

             it_clinetdata,

             it_clinetdatax,

             it_salesdata,

             it_salesdatax,

             it_plantdata,

             it_plantdatax,

             it_storagelocationdata,

             it_storagelocationdatax,

             it_valuationdata,

             it_valuationdatax.

    it_head-material = it_matnr.       "物料号*

*基本資料錄入

    IF itab_ext-magrv <> ''.

      it_head-basic_view = 'X'.         "基本資料視圖

      it_clinetdata-mat_grp_sm = itab_ext-magrv.      "進口/國産

      it_clinetdatax-mat_grp_sm = 'X'.

    ENDIF.

    IF itab_ext-matkl <> ''.

      it_head-basic_view = 'X'.         "基本資料視圖

      it_clinetdata-matl_group = itab_ext-matkl.    "物料組*

      it_clinetdatax-matl_group = 'X'.

    ENDIF.

    IF itab_ext-spart <> ''.

      it_head-basic_view = 'X'.         "基本資料視圖

      it_clinetdata-division = itab_ext-spart.      "産品組

      it_clinetdatax-division = 'X'.

    ENDIF.

*銷售視圖錄入

    IF itab_ext-vkorg <> '' AND itab_ext-vtweg <> ''.

      it_head-sales_view = 'X'.         "銷售視圖

      it_salesdata-sales_org = itab_ext-vkorg.    "銷售組織*

      it_salesdata-distr_chan = itab_ext-vtweg.   "分銷管道*

      it_salesdata-delyg_plnt = itab_ext-dwerk.   "交貨工廠

      it_salesdata-acct_assgt = itab_ext-ktgrm.   "科目設定組

      it_salesdata-mat_pr_grp = itab_ext-kondm.     "物料定價組

      it_salesdata-matl_stats = itab_ext-versg.   "物料統計組

      it_clinetdata-trans_grp = itab_ext-tragr.   "運輸組*

      it_plantdata-loadinggrp = itab_ext-ladgr.   "裝載組*

      it_plantdata-availcheck = itab_ext-mtvfp.   "可用性檢查*

      it_salesdatax-sales_org  = itab_ext-vkorg.

      it_salesdatax-distr_chan = itab_ext-vtweg.

      it_salesdatax-delyg_plnt = 'X'.

      it_salesdatax-acct_assgt = 'X'.

      it_salesdatax-mat_pr_grp   = 'X'.

      it_salesdatax-matl_stats = 'X'.

      it_clinetdatax-trans_grp = 'X'.

      it_plantdatax-loadinggrp = 'X'.

      it_plantdatax-availcheck = 'X'.

    ENDIF.

*稅分類

    IF itab_ext-taxkm <> ''.

      it_mlan-depcountry = 'CN'.  "發貨國(由該國家發貨)

      it_mlan-tax_type_1 = 'MWSI'."稅類别(銷項稅)

      it_mlan-taxclass_1 = itab_ext-taxkm.

      APPEND it_mlan.

    ENDIF.

**&&&工廠資料維護

    IF itab_ext-werks <> ''.

      it_plantdata-plant = itab_ext-werks."工廠

      it_plantdatax-plant = itab_ext-werks.

      it_valuationdata-val_area   = itab_ext-werks.   "估價範圍(工廠)

      it_valuationdatax-val_area   = itab_ext-werks.

*6采購視圖錄入

      IF itab_ext-ekgrp <> '' OR itab_ext-kordb <> ''

      OR itab_ext-usequ <> ''.

        it_head-purchase_view = 'X'.      "采購視圖

        it_plantdata-pur_group = itab_ext-ekgrp.                "采購組

        it_plantdata-sourcelist = itab_ext-kordb.               "貨源清單

        it_plantdata-quotausage = itab_ext-usequ.               "配額

        it_plantdatax-pur_group   = 'X'.

        it_plantdatax-sourcelist  = 'X'.

        it_plantdatax-quotausage = 'X'.

      ENDIF.

*MRP錄入

      IF itab_ext-dismm <> ''.

        it_head-mrp_view = 'X'.           "物料需求計劃(MRP)視圖

        it_plantdata-mrp_type = itab_ext-dismm.      "MRP類型*_A

        it_plantdata-mrp_ctrler = itab_ext-dispo.    "MRP控制者*

        it_plantdata-lotsizekey = itab_ext-disls.    "批量*

        it_plantdata-minlotsize = itab_ext-bstmi.    "最小批量

        it_plantdata-abc_id = itab_ext-maabc.        "ABC辨別

        it_plantdata-pur_status = itab_ext-mmsta.    "特定工廠的物料狀态

        it_plantdatax-mrp_type   = 'X'.

        it_plantdatax-mrp_ctrler = 'X'.

        it_plantdatax-lotsizekey = 'X'.

        it_plantdatax-minlotsize = 'X'.

        it_plantdatax-abc_id = 'X'.

        it_plantdatax-pur_status = 'X'.

        IF itab_ext-beskz <> ''.

          it_plantdata-proc_type = itab_ext-beskz.     "擷取(采購)類型*_B

          it_plantdata-spproctype = itab_ext-sobsl.    "特殊采購類型

          it_plantdata-backflush = itab_ext-rgekz.     "反沖

          it_plantdata-iss_st_loc = itab_ext-lgpro.     "生産倉儲地點

          it_plantdata-sloc_exprc = itab_ext-lgfsb.     "外部采購倉儲地點

          it_plantdata-inhseprodt = itab_ext-dzeit.    "内部生産(自制)時間?

          it_plantdata-plnd_delry = itab_ext-plifz.    "計劃交貨時間

          it_plantdata-sm_key = itab_ext-fhori.        "計劃邊際碼

          it_plantdata-safety_stk = itab_ext-eisbe.    "安全庫存

          it_plantdatax-proc_type  = 'X'.

          it_plantdatax-spproctype = 'X'.

          it_plantdatax-backflush  = 'X'.

          it_plantdatax-iss_st_loc = 'X'.

          it_plantdatax-sloc_exprc = 'X'.

          it_plantdatax-inhseprodt = 'X'.

          it_plantdatax-plnd_delry = 'X'.

          it_plantdatax-sm_key     = 'X'.

          it_plantdatax-safety_stk = 'X'.

        ENDIF.

        IF itab_ext-vrmod <> ''.

          it_plantdata-period_ind = 'M'.             "期間辨別

          it_plantdata-availcheck = itab_ext-mtvfp.    "可用性檢查*

          it_plantdata-consummode = itab_ext-vrmod.    "消耗模式

          it_plantdata-bwd_cons   = itab_ext-vint1.    "逆向消耗模式

          it_plantdata-fwd_cons   = itab_ext-vint2.    "向前消耗模式

          it_plantdatax-period_ind = 'X'.

          it_plantdatax-availcheck = 'X'.

          it_plantdatax-consummode = 'X'.

          it_plantdatax-bwd_cons   = 'X'.

          it_plantdatax-fwd_cons   = 'X'.

        ENDIF.

        it_plantdata-dep_req_id = itab_ext-sbdkz.    "獨立/集中

        it_plantdatax-dep_req_id = 'X'.

      ENDIF.

*8工作計劃錄入

      IF itab_ext-beskz = 'E' OR itab_ext-beskz = 'X'.

        it_head-work_sched_view = 'X'.    "工作計劃視圖

        it_plantdata-serno_prof = itab_ext-sernp.    "序列号參數檔案

        it_plantdata-profit_ctr = itab_ext-prctr.    "利潤中心

        it_plantdatax-serno_prof =  'X'.

        it_plantdatax-profit_ctr = 'X'.

      ENDIF.

*9工廠資料/存儲錄入

      IF itab_ext-lgort <> ''.

        it_head-storage_view = 'X'.       "存儲視圖

        it_storagelocationdata-plant = itab_ext-werks.       "工廠

        it_storagelocationdata-stge_loc = itab_ext-lgort.    "庫存地點

        it_storagelocationdata-stge_bin = itab_ext-lgpbe.    "倉位_A

        it_storagelocationdatax-plant = itab_ext-werks.

        it_storagelocationdatax-stge_loc = itab_ext-lgort.

        it_storagelocationdatax-stge_bin = 'X'.

      ENDIF.

      IF itab_ext-sernp <> ''.

        it_head-storage_view = 'X'.       "存儲視圖

        it_plantdata-serno_prof = itab_ext-sernp.            "序列号參數檔案

        it_plantdatax-serno_prof = 'X'.

      ENDIF.

      IF itab_ext-prctr <> ''.

        it_head-storage_view = 'X'.       "存儲視圖

        it_plantdata-profit_ctr = itab_ext-prctr.    "利潤中心

        it_plantdatax-profit_ctr = 'X'.

      ELSEIF itab_ext-prctr = ''.

        it_head-storage_view = 'X'.       "存儲視圖

        it_plantdata-profit_ctr = '0000209001'.

        it_plantdatax-profit_ctr = 'X'.

      ENDIF.

**會計錄入

      IF itab_ext-bklas <> ''.

        it_head-account_view = 'X'.       "會計視圖

        it_valuationdata-val_class = itab_ext-bklas.    "評估類

        it_valuationdata-price_unit = itab_ext-peinh.   "價格機關

        it_valuationdata-std_price = itab_ext-stprs_1.    "标準價

        it_valuationdatax-val_class  = 'X'.

        it_valuationdatax-price_unit = 'X'.

        it_valuationdatax-std_price  = 'X'.

      ENDIF.

*成本錄入

      it_head-cost_view = 'X'.          "成本視圖

      it_plantdata-variance_key = itab_ext-awsls.      "差異碼A

      it_valuationdata-orig_mat = itab_ext-hkmat.      "物料來源

      it_plantdatax-variance_key = 'X'.

      it_valuationdatax-orig_mat = 'X'.

    ENDIF.

*調用函數,儲存資料

    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'

      EXPORTING

        headdata             = it_head

        clientdata           = it_clinetdata

        clientdatax          = it_clinetdatax

        salesdata            = it_salesdata

        salesdatax           = it_salesdatax

        plantdata            = it_plantdata

        plantdatax           = it_plantdatax

        storagelocationdata  = it_storagelocationdata

        storagelocationdatax = it_storagelocationdatax

        valuationdata        = it_valuationdata

        valuationdatax       = it_valuationdatax

      IMPORTING

        return               = it_bapiret2

      TABLES

        taxclassifications   = it_mlan.

    IF  it_bapiret2-type CA 'EA'.

      SUPPRESS DIALOG.

      WRITE: /'添加物料資訊出錯!物料号為:',it_matnr1,it_bapiret2-message.

      CONCATENATE '添加物料資訊出錯!物料号為:'  it_matnr1 ';' it_bapiret2-message INTO it_error-message.

    ELSE.

      COMMIT WORK.

      SUPPRESS DIALOG.

      IF ( itab_ext-zpslx = '' OR itab_ext-zpslx = '1' OR itab_ext-zpslx = '2' OR itab_ext-zpslx = '3' ).

*        UPDATE marc SET zpslx = itab_ext-zpslx

*             WHERE matnr = itab_ext-matnr AND

*                   werks = itab_ext-werks .

      ENDIF.

      WRITE: /'物料已成功導入!物料号為:',it_matnr1.

*          LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0101.

      CONCATENATE '物料已成功導入!物料号為:' it_matnr1 INTO it_error-message.

    ENDIF.

    APPEND it_error.

  ENDLOOP.