SAP 物料信息同步接口


提示:以下是本篇文章正文内容,下面案例可供参考

SAP物料信息传递接口

在这里插入代码片

  DATA: ls_headdata             TYPE bapimathead,
        ls_clientdata           TYPE bapi_mara,
        ls_clientdatax          TYPE bapi_marax,
        ls_plantdata            TYPE bapi_marc,
        ls_plantdatax           TYPE bapi_marcx,
        ls_forecastparameters   TYPE bapi_mpop,
        ls_forecastparametersx  TYPE bapi_mpopx,
        ls_storagelocationdata  TYPE bapi_mard,
        ls_storagelocationdatax TYPE bapi_mardx,
        ls_storagetypedata      TYPE bapi_mlgt,
        ls_storagetypedatax     TYPE bapi_mlgtx,
        ls_warehousenumberdata  TYPE bapi_mlgn,
        ls_warehousenumberdatax TYPE bapi_mlgnx,
        ls_salesdata            TYPE bapi_mvke,
        ls_salesdatax           TYPE bapi_mvkex,
        ls_valuationdata        TYPE bapi_mbew,
        ls_valuationdatax       TYPE bapi_mbewx,
        ls_makt                 TYPE bapi_makt,
        ls_mlan                 TYPE bapi_mlan,
        ls_unitsofmeasure       TYPE bapi_marm,
        ls_unitsofmeasurex      TYPE bapi_marmx,
        ls_return               TYPE bapiret2,
        ls_selfields            LIKE sdibe_massfields,
        ls_mdma                 LIKE mdma,
        ls_dpop                 LIKE dpop,
        ls_return3              LIKE bapireturn1,
        lt_makt                 TYPE TABLE OF bapi_makt,
        lt_mlan                 TYPE TABLE OF bapi_mlan,
        lt_marm                 TYPE TABLE OF bapi_marm,
        lt_marmx                TYPE TABLE OF bapi_marmx,
        lt_makt_ga              TYPE TABLE OF bapi_makt_ga,
        lt_mlan_ga              TYPE TABLE OF bapi_mlan_ga,
        lt_marm_ga              TYPE TABLE OF bapi_marm_ga,
        lt_unitsofmeasure       TYPE TABLE OF bapi_marm,
        lt_unitsofmeasurex      TYPE TABLE OF bapi_marmx,
        lt_return1              TYPE TABLE OF bapiret2,
        lt_temp                 TYPE TABLE OF zsplm004.
  .
  DATA: lt_return         TYPE TABLE OF bapiret2,
        lv_matnr          TYPE bapi1003_key-object,
        lv_classtype      TYPE bapi1003_key-classtype,
        lv_classnum       TYPE bapi1003_key-classnum,
        lv_objectkeynew   TYPE bapi1003_key-object,
        lv_objecttablenew TYPE bapi1003_key-objecttable,
        lv_classnumnew    TYPE bapi1003_key-classnum,
        lv_classtypenew   TYPE bapi1003_key-classtype,
        lv_berid          LIKE mdma-berid,
        lv_temp           TYPE i,
        lv_msg            TYPE string.

  IF NOT it_data[] IS INITIAL.

    "销售组织
    SELECT
      tvkwz~vkorg,
      tvkwz~vtweg,
      t001w~werks,
      t001w~land1
    FROM
      tvkwz
    INNER JOIN t001w ON tvkwz~werks = t001w~werks
    INTO TABLE @DATA(lt_tmp)
    FOR ALL ENTRIES IN @it_data
    WHERE
      tvkwz~werks = @it_data-werks AND
      tvkwz~vtweg = @it_data-vtweg AND
      tvkwz~vkorg = @it_data-vkorg.

    "公司
    SELECT
      bukrs
    FROM
      t001k
    INTO TABLE @DATA(lt_t001k)
    FOR ALL ENTRIES IN @it_data
    WHERE
      bwkey = @it_data-werks.

    "MRP区域
    SELECT
      berid
    INTO TABLE @DATA(lt_berid)
    FROM
      mdlv
    FOR ALL ENTRIES IN @it_data
    WHERE
      werzg = @it_data-werks AND
      berty NE '01'.

    IF NOT lt_t001k IS INITIAL.

      SELECT
        t001~land1
      FROM
        t001
      INNER JOIN tvko ON t001~bukrs = tvko~bukrs
      APPENDING CORRESPONDING FIELDS OF TABLE @lt_tmp
      FOR ALL ENTRIES IN @lt_t001k
      WHERE
        t001~bukrs = @lt_t001k-bukrs.

    ENDIF.

    SORT lt_tmp BY land1.
    DELETE ADJACENT DUPLICATES FROM lt_tmp COMPARING land1.

    IF NOT lt_tmp IS INITIAL.

      SELECT
        *
      FROM
        tstl
      INTO TABLE @DATA(lt_tstl)
       FOR ALL ENTRIES IN @lt_tmp
       WHERE
         talnd = @lt_tmp-land1.

    ENDIF.

    "物料MRP范围
    SELECT
      *
    INTO TABLE @DATA(lt_mdma)
    FROM
      mdma
    FOR ALL ENTRIES IN @it_data
    WHERE
      matnr = @it_data-matnr AND
      werks = @it_data-werks
          .

    LOOP AT it_data .

      MOVE-CORRESPONDING it_data TO ot_data.

      "物料增加前导零
      CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
        EXPORTING
          input        = it_data-matnr
        IMPORTING
          output       = it_data-matnr
        EXCEPTIONS
          length_error = 1
          OTHERS       = 2.

      it_data-gewei = 'KG'.

      "header
      ls_headdata-material = it_data-matnr.  "物料
      ls_headdata-ind_sector = it_data-mbrsh."行业类型
      ls_headdata-matl_type = it_data-mtart. "物料类型

************基本视图***********

      IF i_basic = 'X'.

        ls_headdata-basic_view = 'X'.

        ls_makt-langu = 'E'.
        ls_makt-matl_desc = it_data-maktx_en. "中文物料描述
        APPEND ls_makt TO lt_makt.

        ls_makt-langu = '1'.
        ls_makt-matl_desc = it_data-maktx_zh. "英文物料描述
        APPEND ls_makt TO lt_makt.

        ls_clientdata-matl_group = it_data-matkl."物料组

        CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
          EXPORTING
            input          = it_data-meins
            language       = sy-langu
          IMPORTING
            output         = it_data-meins
          EXCEPTIONS
            unit_not_found = 1
            OTHERS         = 2.

        ls_clientdata-base_uom      =  it_data-meins."单位
        ls_clientdata-old_mat_no    =  it_data-bismt."旧物料代码
        ls_clientdata-extmatlgrp    =  it_data-extwg."外部物料组
        ls_clientdata-dsn_office    =  it_data-labor."追溯标识
        ls_clientdata-prod_alloc    =  it_data-kosch."产品分配确定程序
        ls_clientdata-prod_hier     =  it_data-prdha."产品层次
        ls_clientdata-allowed_wt    =  it_data-brgew."毛重
        ls_clientdata-net_weight    =  it_data-ntgew."净重

        CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
          EXPORTING
            input          = it_data-gewei
            language       = sy-langu
          IMPORTING
            output         = it_data-gewei
          EXCEPTIONS
            unit_not_found = 1
            OTHERS         = 2.

        ls_clientdata-unit_of_wt    =  it_data-gewei."重量单位
        ls_clientdata-size_dim      =  it_data-groes."大小/量纲
        ls_clientdata-basic_matl    =  it_data-wrkst."基本物料号
        ls_clientdata-prod_memo     =  it_data-ferth."生产/检验备忘录
        ls_clientdata-std_descr     =  it_data-normt."工业标准描述
        ls_clientdata-pageformat    =  it_data-formt."生产备忘录的页格式
        ls_clientdata-document      =  it_data-zeinr."文档编号
        ls_clientdata-doc_chg_no    =  it_data-aeszn."文档变更号(
        ls_clientdata-doc_format    =  it_data-zeifo."文档页码
        ls_clientdata-division      =  it_data-spart."产品组
        ls_clientdata-item_cat      =  it_data-mtpos_mara."普通项目类别组
        ls_clientdata-trans_grp     =  it_data-tragr."运输组

        CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
          EXPORTING
            input          = it_data-bstme
            language       = sy-langu
          IMPORTING
            output         = it_data-bstme
          EXCEPTIONS
            unit_not_found = 1
            OTHERS         = 2.

        ls_clientdata-po_unit       =  it_data-bstme."采购订单计量单位
        ls_clientdata-pur_valkey    =  it_data-ekwsl."采购价值代码
        ls_clientdata-manuf_prof    =  it_data-mprof."制造商档案
        ls_clientdata-manu_mat      =  it_data-mfrpn."制造商
        ls_clientdata-mfr_no        =  it_data-mfrnr."制造商号码
        ls_clientdata-stor_conds    =  it_data-raube."仓储类型
        ls_clientdata-stor_conds    =  it_data-raube."仓储类型

        IF sy-mandt = '890'.
          CASE it_data-mtart.
            WHEN 'YA00'.  it_data-xchpf = 'X'.                  "原材料
            WHEN 'YB00'.  it_data-xchpf = 'X'.                  "半成品
            WHEN 'YC00'.  it_data-xchpf = 'X'.                  "产成品
            WHEN 'YD00'.  it_data-xchpf = 'X'.                  "研发物料
            WHEN 'YE00'.  it_data-xchpf = ''.                   "辅料
            WHEN 'YF00'.  it_data-xchpf = ''.                   "备品备件
            WHEN 'YG00'.  it_data-xchpf = ''.                   "劳保用品
            WHEN 'YX00'.  it_data-xchpf = ''.                   "虚拟物料
            WHEN OTHERS.
          ENDCASE.
        ENDIF.

        ls_clientdata-batch_mgmt     = it_data-xchpf."批次管理

        ls_clientdatax-batch_mgmt    =   'X'.
        ls_clientdatax-matl_group    =   'X'.
        ls_clientdatax-base_uom      =   'X'.
        ls_clientdatax-old_mat_no    =   'X'.
        ls_clientdatax-extmatlgrp    =   'X'.
        ls_clientdatax-dsn_office    =   'X'.
        ls_clientdatax-prod_alloc    =   'X'.
        ls_clientdatax-prod_hier     =   'X'.
        ls_clientdatax-allowed_wt    =   'X'.
        ls_clientdatax-net_weight    =   'X'.

        IF ls_clientdata-unit_of_wt <>   ''.
          ls_clientdatax-unit_of_wt  =   'X'.
        ENDIF.
        ls_clientdatax-size_dim      =   'X'.
        ls_clientdatax-basic_matl    =   'X'.
        ls_clientdatax-prod_memo     =   'X'.
        ls_clientdatax-std_descr     =   'X'.
        ls_clientdatax-pageformat    =   'X'.
        ls_clientdatax-document      =   'X'.
        ls_clientdatax-doc_chg_no    =   'X'.
        ls_clientdatax-doc_format    =   'X'.
        ls_clientdatax-division      =   'X'.
        ls_clientdatax-item_cat      =   'X'.
        ls_clientdatax-trans_grp     =   'X'.

        IF it_data-bstme NE it_data-meins.
          ls_clientdatax-po_unit       =   'X'.
        ENDIF.

        ls_clientdatax-manuf_prof    =   'X'.
        ls_clientdatax-manu_mat      =   'X'."制造商
        ls_clientdatax-mfr_no        =   'X'."制造商号码
        ls_clientdatax-stor_conds    =   'X'."仓储类型

      ENDIF.

************销售视图***********

      IF i_sales = 'X'.

        ls_headdata-sales_view      = 'X'.

        "税相关
        LOOP AT lt_tstl INTO DATA(ls_tstl).
          ls_mlan-depcountry     = ls_tstl-talnd.
          ls_mlan-tax_type_1     = ls_tstl-tatyp.
          IF it_data-taxkm <> ''.
            ls_mlan-taxclass_1   = it_data-taxkm.
          ELSE.
            ls_mlan-taxclass_1   = '0'.
          ENDIF.
          APPEND ls_mlan TO lt_mlan.
          CLEAR: ls_tstl , ls_mlan.
        ENDLOOP.

        ls_salesdata-sales_org      =  it_data-vkorg."销售组织
        ls_salesdata-distr_chan     =  it_data-vtweg."分销渠道

        CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
          EXPORTING
            input          = it_data-vrkme
            language       = sy-langu
          IMPORTING
            output         = it_data-vrkme
          EXCEPTIONS
            unit_not_found = 1
            OTHERS         = 2.

        ls_salesdata-sales_unit     =  it_data-vrkme."销售单位
        ls_salesdata-delyg_plnt     =  it_data-dwerk."交货工厂
        ls_salesdata-mat_pr_grp     =  it_data-versg."物料定价组
        ls_salesdata-acct_assgt     =  it_data-ktgrm."科目设置组
        ls_salesdata-item_cat       =  it_data-mtpos."来自物料主文件的项目类别组
        ls_salesdata-matl_grp_3     =  it_data-mvgr3."物料组3
        ls_salesdata-matl_grp_4     =  it_data-mvgr4."物料组4


        ls_salesdatax-sales_org      =   it_data-vkorg.
        ls_salesdatax-distr_chan     =   it_data-vtweg.
        ls_salesdatax-sales_unit     =  'X'.
        ls_salesdatax-delyg_plnt     =  'X'.
        ls_salesdatax-mat_pr_grp     =  'X'.
        ls_salesdatax-acct_assgt     =  'X'.
        ls_salesdatax-item_cat       =  'X'.
        ls_salesdatax-matl_grp_3     =  'X'.
        ls_salesdatax-matl_grp_4     =  'X'.

      ENDIF.

***********采购视图***********

      IF i_purchase = 'X'.

        ls_headdata-purchase_view = 'X'.

        ls_plantdata-plant         = it_data-werks."工厂
        ls_plantdata-loadinggrp    = it_data-ladgr."装载组
        ls_plantdata-base_qty_plan = it_data-vbamg."在装运中有关能力计划的基准数量
        ls_plantdata-pur_group     = it_data-ekgrp."采购组
        ls_plantdata-auto_p_ord    = it_data-kautb."标识: "允许自动采购订单"
        ls_plantdata-batch_mgmt    = it_data-xchpf."批次管理
        ls_plantdata-quotausage    = it_data-usequ."配额管理
        ls_plantdata-sourcelist    = it_data-kordb."源清单
        ls_plantdata-gr_pr_time    = it_data-webaz."收货处理时间
        ls_plantdata-ind_post_to_insp_stock = it_data-insmk."过帐到检验库存
        ls_plantdata-countryori    = 'CN' .

        ls_plantdatax-countryori     = 'X'.
        ls_plantdatax-plant          = it_data-werks.
        ls_plantdatax-loadinggrp     = 'X'.
        ls_plantdatax-base_qty_plan  = 'X'.
        ls_plantdatax-pur_group      = 'X'.
        ls_plantdatax-auto_p_ord     = 'X'."
        ls_plantdatax-batch_mgmt     = 'X'.
        ls_plantdatax-quotausage     = 'X'.
        ls_plantdatax-sourcelist     = 'X'.
        ls_plantdatax-gr_pr_time     = 'X'."
        ls_plantdatax-ind_post_to_insp_stock = 'X'.

        IF NOT it_data-umren IS INITIAL AND NOT it_data-umrez IS INITIAL.
          ls_unitsofmeasure-alt_unit = it_data-bstme.       "订单单位
          ls_unitsofmeasure-alt_unit_iso = it_data-bstme.   "订单单位
          ls_unitsofmeasure-denominatr = it_data-umren.
          ls_unitsofmeasure-numerator = it_data-umrez.
          APPEND ls_unitsofmeasure TO lt_unitsofmeasure.
          CLEAR ls_unitsofmeasure.
        ELSE.
          ls_unitsofmeasure-alt_unit = it_data-bstme.       "订单单位
          ls_unitsofmeasure-alt_unit_iso = it_data-bstme.   "订单单位
          ls_unitsofmeasure-denominatr = 1.
          ls_unitsofmeasure-numerator = 1.
          APPEND ls_unitsofmeasure TO lt_unitsofmeasure.
          CLEAR ls_unitsofmeasure.
        ENDIF.

        ls_unitsofmeasurex-alt_unit = it_data-bstme.
        ls_unitsofmeasurex-alt_unit_iso = it_data-bstme.
        ls_unitsofmeasurex-denominatr = 'X'.
        ls_unitsofmeasurex-numerator = 'X'.
        APPEND ls_unitsofmeasurex TO lt_unitsofmeasurex.
        CLEAR ls_unitsofmeasurex.

        IF NOT it_data-umren1 IS INITIAL AND  NOT it_data-umrez1 IS INITIAL.
          ls_unitsofmeasure-alt_unit = it_data-bstme.       "订单单位
          ls_unitsofmeasure-alt_unit_iso = it_data-bstme.   "订单单位
          ls_unitsofmeasure-denominatr = it_data-umren.
          ls_unitsofmeasure-numerator = it_data-umrez.
          APPEND ls_unitsofmeasure TO lt_unitsofmeasure.
          CLEAR ls_unitsofmeasure.
        ENDIF.

        ls_unitsofmeasurex-alt_unit = it_data-bstme.
        ls_unitsofmeasurex-alt_unit_iso = it_data-bstme.
        ls_unitsofmeasurex-denominatr = 'X'.
        ls_unitsofmeasurex-numerator = 'X'.
        APPEND ls_unitsofmeasurex TO lt_unitsofmeasurex.
        CLEAR ls_unitsofmeasurex.

      ENDIF.

***********MRP视图***********

      IF i_purchase = 'X'.

        ls_headdata-mrp_view = 'X'.

        ls_plantdata-mrp_group             = it_data-disgr."MRP 组
        ls_plantdata-abc_id                = it_data-maabc."ABC标识
        ls_plantdata-mrp_type              = it_data-dismm."MRP类型
        ls_plantdata-reorder_pt            = it_data-minbe."再订货点
        ls_plantdata-mrp_ctrler            = it_data-dispo."MRP控制者
        ls_plantdata-lotsizekey            = it_data-disls."批量控制
        ls_plantdata-max_stock             = it_data-mabst."最大库存水平
        ls_plantdata-round_prof            = it_data-rdprf."舍入参数文件
        ls_plantdata-round_val             = it_data-bstrf."采购订单数量的舍入值
        ls_plantdata-assy_scrap            = it_data-ausss."装配报废率
        ls_plantdata-proc_type             = it_data-beskz."采购类型
        ls_plantdata-spproctype            = it_data-sobsl."特殊采购类
        ls_plantdata-iss_st_loc            = it_data-lgpro."发货存储地点
        ls_plantdata-backflush             = it_data-rgekz."是否反冲
        ls_plantdata-sloc_exprc            = it_data-lgfsb."外部采购默认仓码
        ls_plantdata-plnd_delry            = it_data-plifz."交期
        ls_plantdata-sm_key                = it_data-fhori."浮动排产时间容余码
        ls_plantdata-safety_stk            = it_data-eisbe."安全库存
        ls_plantdata-safty_t_id            = it_data-shflg."安全时间标识
        ls_plantdata-safetytime            = it_data-shzet."安全时间
        ls_plantdata-mixed_mrp             = it_data-miskz."综合MRP标识
        ls_plantdata-availcheck            = it_data-mtvfp."可用性
        ls_plantdata-dep_req_id            = it_data-sbdkz."独立/相关需求
        ls_plantdata-rep_manuf             = it_data-sauft."标识:允许的重复制造
        ls_plantdata-repmanprof            = it_data-sfepr."重复生产参数文
        ls_plantdata-comp_scrap            = it_data-kausf."组件报废率
        ls_plantdata-period_ind            = it_data-perkz."期间标识
        ls_plantdata-auto_reset            = it_data-autru."自动重置预测模式
        ls_plantdata-production_scheduler  = it_data-fevor."生产管理员
        ls_plantdata-variance_key          = it_data-awsls."差异码
        ls_plantdata-profit_ctr            = it_data-prctr."利润中心
        ls_plantdata-plan_strgp            = it_data-strgr.
        ls_plantdata-pur_status            = 'Z9'.

        ls_plantdatax-lotsizekey            = 'X'.
        ls_plantdatax-plan_strgp            = 'X'.
        ls_plantdatax-pur_status            = 'X'.
        ls_plantdatax-mrp_group             = 'X'.
        ls_plantdatax-abc_id                = 'X'.
        ls_plantdatax-mrp_type              = 'X'.
        ls_plantdatax-reorder_pt            = 'X'.
        ls_plantdatax-mrp_ctrler            = 'X'.
        ls_plantdatax-max_stock             = 'X'.
        ls_plantdatax-round_prof            = 'X'.
        ls_plantdatax-round_val             = 'X'.
        ls_plantdatax-assy_scrap            = 'X'.
        ls_plantdatax-proc_type             = 'X'.
        ls_plantdatax-spproctype            = 'X'.
        ls_plantdatax-iss_st_loc            = 'X'.
        ls_plantdatax-backflush             = 'X'.
        ls_plantdatax-sloc_exprc            = 'X'.
        ls_plantdatax-plnd_delry            = 'X'.
        ls_plantdatax-sm_key                = 'X'.
        ls_plantdatax-safety_stk            = 'X'.
        ls_plantdatax-safty_t_id            = 'X'.
        ls_plantdatax-safetytime            = 'X'.
        ls_plantdatax-mixed_mrp             = 'X'.
        ls_plantdatax-availcheck            = 'X'.
        ls_plantdatax-dep_req_id            = 'X'.
        ls_plantdatax-rep_manuf             = 'X'.
        ls_plantdatax-repmanprof            = 'X'.
        ls_plantdatax-comp_scrap            = 'X'.
        ls_plantdatax-period_ind            = 'X'.
        ls_plantdatax-auto_reset            = 'X'.
        ls_plantdatax-production_scheduler  = 'X'.
        ls_plantdatax-variance_key          = 'X'.
        ls_plantdatax-profit_ctr            = 'X'.

      ENDIF.

***********存储视图***********

      IF i_storage = 'X'.

        ls_headdata-storage_view           = 'X'.

        ls_clientdata-shelf_life           = it_data-mhdhb."总货架寿命
        ls_clientdata-minremlife           = it_data-mhdrz."最短剩余货架寿命
        ls_clientdata-batch_mgmt           = it_data-xchpf."批次管理需求

        ls_clientdatax-shelf_life          = 'X'.
        ls_clientdatax-minremlife          = 'X'.
        ls_clientdatax-batch_mgmt          = 'X'.

        ls_plantdata-plant                 = it_data-werks.               "工厂
        ls_plantdata-production_scheduler  = it_data-fevor.               "生产管理员
        ls_plantdata-batch_mgmt            = it_data-xchpf.               "批次管理
        ls_plantdata-availcheck            = it_data-mtvfp.               "可用性检查

        ls_plantdatax-plant                = it_data-werks.
        ls_plantdatax-production_scheduler = 'X'.
        ls_plantdatax-batch_mgmt           = 'X'.
        ls_plantdatax-availcheck           = 'X'.

      ENDIF.

***********质量视图***********

      IF i_quality = 'X'.

        ls_headdata-quality_view = 'X'.

        ls_plantdata-plant                   = it_data-werks. "工厂
        ls_plantdata-gr_pr_time              = it_data-webaz. "收货处理时间
        ls_plantdata-ind_post_to_insp_stock  = it_data-insmk. "过账到检验库存
        ls_plantdata-insp_int                = it_data-prfrq. "检查间隔

        ls_plantdatax-plant                  = it_data-werks.
        ls_plantdatax-gr_pr_time             = 'X'.
        ls_plantdatax-ind_post_to_insp_stock = 'X'.
        ls_plantdatax-insp_int               = 'X'.

      ENDIF.

***********仓库管理视图***********

      IF i_warehouse = 'X'.

        ls_headdata-warehouse_view       = 'X'.

        ls_plantdata-plant               = it_data-werks.   "工厂
        ls_warehousenumberdata-whse_no   = it_data-lgnum.  "仓库号
        ls_storagetypedata-whse_no       = it_data-lgnum.  "仓库号
        ls_storagetypedata-stge_type     = it_data-lgtyp.  "存储类型

        ls_plantdatax-plant              = it_data-werks.
        ls_warehousenumberdatax-whse_no  = it_data-lgnum.
        ls_storagetypedatax-whse_no      = it_data-lgnum.
        ls_storagetypedatax-stge_type    = it_data-lgtyp.

      ENDIF.

***********预测视图***********

      IF i_forecast = 'X'.

        ls_headdata-forecast_view = 'X'.

        ls_forecastparameters-fore_model = it_data-prmod."预测模型
        ls_forecastparameters-hist_vals  = it_data-peran."历史的期间数
        ls_forecastparameters-fore_pds   = it_data-anzpr."预测期间数
        ls_forecastparameters-season_pds = it_data-perio."每季节循环的期间数
        ls_forecastparameters-initialize = it_data-kzini."初始化标识
        ls_forecastparameters-tracklimit = it_data-siggr."追踪限制
        ls_forecastparameters-model_sp   = it_data-modav."模型选择过程

        ls_forecastparametersx-fore_model = 'X'.
        ls_forecastparametersx-hist_vals  = 'X'.
        ls_forecastparametersx-fore_pds   = 'X'.
        ls_forecastparametersx-season_pds = 'X'.
        ls_forecastparametersx-initialize = 'X'.
        ls_forecastparametersx-tracklimit = 'X'.
        ls_forecastparametersx-model_sp   = 'X'.

      ENDIF.

***********财务视图***********

      IF i_finance = 'X'.

        ls_headdata-account_view    = 'X'. "会计视图
        ls_headdata-cost_view       = 'X'. "成本视图

        IF it_data-mlast IS INITIAL.
          IF  it_data-bklas = '3000' OR it_data-bklas = '3010' OR it_data-bklas = '7900' OR it_data-bklas = '7920' .
            it_data-mlast = '3'.
          ENDIF.
          IF  it_data-bklas = '5000' OR it_data-bklas = '5010' OR it_data-bklas = '5020' OR it_data-bklas = '5990' .
            it_data-mlast = '2'.
          ENDIF.
        ENDIF.

        ls_valuationdata-val_area     = it_data-werks.  "bwkey
        ls_valuationdata-val_class    = it_data-bklas.  "评估类
        ls_valuationdata-price_ctrl   = it_data-vprsv.  "价格控制
        ls_valuationdata-price_unit   = it_data-peinh.  "格单位
        ls_valuationdata-ml_active    = it_data-mlmaa.  "ML作业
        ls_valuationdata-ml_settle    = it_data-mlast.  "价格确定
        ls_valuationdata-qty_struct   = it_data-ekalr.  "用QS的成本估算
        ls_valuationdata-orig_mat     = it_data-hkmat.  "源物料
        ls_valuationdata-orig_group   = it_data-hrkft_1."原始组
        ls_valuationdata-overhead_grp = it_data-kosgr.  "成本核算间接费用组
        ls_valuationdata-plndprice1   = it_data-zplp1.  "计划价格1
        ls_valuationdata-plndprdate1  = it_data-zpld1.  "计划价格日期1


        ls_valuationdatax-val_area =  it_data-werks.
        ls_valuationdatax-val_class    =  'X'.
        ls_valuationdatax-price_ctrl   =  'X'.
        ls_valuationdatax-price_unit   =  'X'.
        ls_valuationdatax-ml_active    =  'X'.
        ls_valuationdatax-ml_settle    =  'X'.
        ls_valuationdatax-qty_struct   =  'X'.
        ls_valuationdatax-orig_mat     =  'X'.
        ls_valuationdatax-orig_group   =  'X'.
        ls_valuationdatax-overhead_grp =  'X'.
        ls_valuationdatax-plndprice1   =  'X'.
        ls_valuationdatax-plndprdate1  =  'X'.

      ENDIF.

      ls_headdata-work_sched_view =  'X'.
      ls_headdata-quality_view    =  'X'.

      "创建物料主数据
      CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
        EXPORTING
          headdata             = ls_headdata
          clientdata           = ls_clientdata
          clientdatax          = ls_clientdatax
          plantdata            = ls_plantdata
          plantdatax           = ls_plantdatax
          storagelocationdata  = ls_storagelocationdata
          storagelocationdatax = ls_storagelocationdatax
          warehousenumberdata  = ls_warehousenumberdata
          warehousenumberdatax = ls_warehousenumberdatax
          forecastparameters   = ls_forecastparameters
          forecastparametersx  = ls_forecastparametersx
          valuationdata        = ls_valuationdata
          valuationdatax       = ls_valuationdatax
          salesdata            = ls_salesdata
          salesdatax           = ls_salesdatax
          storagetypedata      = ls_storagetypedata
          storagetypedatax     = ls_storagetypedatax
        IMPORTING
          return               = ls_return
        TABLES
          materialdescription  = lt_makt
          unitsofmeasure       = lt_marm
          unitsofmeasurex      = lt_marmx
          taxclassifications   = lt_mlan.

      IF ls_return-type CA 'EAX'..

        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        o_type = 'E'.
        o_msg = ls_return-message.

        ot_data-ztype = ls_return-type.
        ot_data-zmsg = ls_return-message.

      ELSE.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.

        CALL FUNCTION 'CONVERSION_EXIT_CCMAT_INPUT'
          EXPORTING
            input  = it_data-matnr
          IMPORTING
            output = lv_matnr.

***********分类视图***********

        IF ot_data-ztype NE 'E'.

          IF it_data-classtype IS NOT INITIAL.

            lv_objectkeynew = ls_headdata-material.
            lv_classtypenew = it_data-classtype.
            lv_classnumnew =  it_data-classnum.

            CALL FUNCTION 'BAPI_OBJCL_CREATE'
              EXPORTING
                objectkeynew   = lv_objectkeynew
                objecttablenew = lv_objecttablenew
                classnumnew    = lv_classnumnew
                classtypenew   = lv_classtypenew
*               STATUS         = '1'
                standardclass  = 'X' "此处务必赋值‘X’,是为了bapi执行成功之后,MM03查看物料可以看到分类视图
              TABLES
                return         = lt_return1.

            IF line_exists( lt_return1[ type = 'E' ] ) OR line_exists( lt_return1[ type = 'A' ] ).

              CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

              CLEAR lv_msg.
              LOOP AT lt_return1 INTO DATA(ls_return1).
                lv_msg = lv_msg  && ls_return1-message.
                CLEAR ls_return1.
              ENDLOOP.

              ot_data-ztype = 'E'.

              IF NOT ot_data-zmsg IS INITIAL.
                ot_data-zmsg = ot_data-zmsg && '/' && lv_msg.
              ELSE.
                ot_data-zmsg = lv_msg.
              ENDIF.

              o_type = 'E'.

              IF NOT o_msg IS INITIAL.
                o_msg = o_msg && '/' && ls_return3-message.
              ELSE.
                o_msg = lv_msg.
              ENDIF.

            ELSE.
              CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                EXPORTING
                  wait = 'X'.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.

      IF lt_mdma IS INITIAL.

        "MRP区域扩充
        LOOP AT lt_berid INTO DATA(ls_berid).

          ls_selfields-xdispo = 'X'.
          ls_selfields-xdismm = 'X'.
          ls_selfields-xdisls = 'X'.

          ls_mdma-matnr = it_data-matnr.
          ls_mdma-werks = it_data-werks.
          ls_mdma-berid = ls_berid-berid.
          ls_mdma-dispo = it_data-dispo.
          ls_mdma-dismm = 'ND'."MRP类型

          CALL FUNCTION 'MD_MRP_LEVEL_CREATE_DATA'
            EXPORTING
              i_matnr        = it_data-matnr
              i_werk         = it_data-werks
              i_mrp_area     = ls_berid-berid
              i_selfields    = ls_selfields
              i_mdma         = ls_mdma
              i_dpop         = ls_dpop
            IMPORTING
              e_error_return = ls_return3.

          IF ls_return3-type CA 'EAX'.

            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

            IF NOT o_msg IS INITIAL.
              o_msg = o_msg && '/' && ls_return3-message.
            ELSE.
              o_msg = lv_msg.
            ENDIF.

            ot_data-ztype = 'E'.

            IF NOT ot_data-zmsg IS INITIAL.
              ot_data-zmsg = ot_data-zmsg && '/' && ls_return3-message.
            ELSE.
              ot_data-zmsg = lv_msg.
            ENDIF.
          ELSE.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
          ENDIF.

          CLEAR:ls_berid,
          ls_selfields,
          ls_mdma,
          ls_dpop,
          ls_return3.

        ENDLOOP.

      ENDIF.

      APPEND ot_data.

      CLEAR: it_data,
             ot_data,
             ls_headdata,
             ls_clientdata,
             ls_clientdatax,
             ls_plantdata,
             ls_plantdatax,
             ls_forecastparameters,
             ls_forecastparametersx,
             ls_storagelocationdata,
             ls_storagelocationdatax,
             ls_storagetypedata,
             ls_storagetypedatax,
             ls_warehousenumberdata,
             ls_warehousenumberdatax,
             ls_salesdata,
             ls_salesdatax,
             ls_valuationdata,
             ls_valuationdatax,
             ls_makt,
             ls_mlan,
             ls_unitsofmeasure,
             ls_unitsofmeasurex,
             ls_return,
             ls_selfields,
             ls_mdma,
             ls_dpop,
             ls_return3,
             lt_makt,
             lt_mlan,
             lt_marm,
             lt_marmx,
             lt_makt_ga,
             lt_mlan_ga,
             lt_marm_ga,
             lt_return1,
             lt_return,
             lv_matnr,
             lv_classtype,
             lv_classnum,
             lv_objectkeynew,
             lv_objecttablenew,
             lv_classnumnew,
             lv_classtypenew,
             lv_berid,
             lv_msg.

    ENDLOOP.

    lt_temp = VALUE #( FOR ls_temp IN ot_data[] WHERE ( ztype = 'E' ) ( ls_temp ) ).
    DESCRIBE TABLE lt_temp LINES lv_temp.

    IF lv_temp GT 1.
      o_type = 'E'.
      o_msg = '物料主数据创建失败请查看明细数据'.
    ELSEIF lv_temp EQ 0.
      o_type = 'S'.
      o_msg = '物料主数据创建成功'.
    ENDIF.

  ELSE.

    o_type = 'E'.
    o_msg = '无输入数据'.

  ENDIF.
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值