物料主数据--1. BAPI_MATERIAL_MAINTAINDATA_RT的使用以及心得

本文介绍使用 SAP MM 模块进行物料主数据的创建过程,涵盖从物料基本信息到不同层级(如集团级、工厂级)的具体设置细节。通过示例代码展示了如何在 SAP 系统中实现物料主数据的批量创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

创建物料主数据,对应MM41 MM42  可进行修改和创建物料。

1、单位 ,物料名   评估类 (无库存交易)不可更改。



CLEAR headdata.


  WA_ITAB-spart '00'.

" --------------------------------------   抬头数据  -----------------

  headdata-FUNCTION   lv_bapifn.                 "009  原始的:关于处理的第一个信息
  headdata-material   WA_ITAB-matnr.
  headdata-matl_type  WA_ITAB-mtart.              "物料类型

  " 物料类型  T134


  headdata-matl_group WA_ITAB-matkl.              "物料组
  headdata-matl_cat   '00'."                      00 一般物料

 "---------------------------------------------------------------------


  headdata-basic_view 'X'.             "基本视图
  headdata-list_view  'X'.             "列表视图
  headdata-sales_view 'X'.             "销售视图
  headdata-logst_view 'X'.             "后勤视图
  headdata-no_appl_log 'X' .            "不写入应用程序的日志


*    HEADDATA-ALL_FIELDS = 'X' .



  " 维护基本视图的基本数据

  " 零售数据传输:集团级别的物料


  CLEAR clientdata.
  CLEAR clientdata[].
  CLEAR clientdatax.
  CLEAR clientdatax[].

  CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
  EXPORTING
    INPUT  WA_ITAB-meins
  IMPORTING
    OUTPUT WA_ITAB-meins
  EXCEPTIONS
    OTHERS 1.

  clientdata-FUNCTION   lv_bapifn.
  clientdata-material   WA_ITAB-matnr.
  clientdata-base_uom   WA_ITAB-meins.   "基本计量单位
  clientdata-old_mat_no WA_ITAB-bismt.   "旧物料编码
 " clientdata-extmatlgrp = WA_ITAB-matkl.    "外部物料组
  clientdata-division   WA_ITAB-spart.     "分部
  clientdata-item_cat   WA_ITAB-mtpos.      "
  clientdata-prod_hier  WA_ITAB-prdha.
  clientdata-stor_conds WA_ITAB-raube.
  clientdata-extmatlgrp WA_ITAB-extwg.   "外部物料组
  clientdata-size_dim   WA_ITAB-groes.
  clientdata-prod_alloc WA_ITAB-kosch.
  clientdata-basic_matl WA_ITAB-wrkst.   "产品层次
  clientdata-lab_design WA_ITAB-labor.
  clientdata-std_descr  WA_ITAB-normt.
  clientdata-mat_grp_sm WA_ITAB-magrv.
  clientdata-hazmatprof WA_ITAB-profl.
  clientdata-batch_mgmt WA_ITAB-xchpf.
  clientdata-net_weight WA_ITAB-ntgew.
  clientdata-prod_memo  WA_ITAB-ferth.
  clientdata-tax_class  0.
  clientdata-document   WA_ITAB-zeiAR"  ppp


  APPEND clientdata.

  CLEAR clientdatax.

  clientdatax-FUNCTION   lv_bapifn.
  clientdatax-material   WA_ITAB-matnr.
  clientdatax-base_uom   'X'.
  clientdatax-old_mat_no 'X'.
  clientdatax-extmatlgrp 'X'.
  clientdatax-division   'X'.
  clientdatax-item_cat   'X'.
  clientdatax-prod_hier  'X'.
  clientdatax-stor_conds 'X'.
  clientdatax-extmatlgrp 'X'.
  clientdatax-size_dim   'X'.
  clientdatax-prod_alloc 'X'.
  clientdatax-basic_matl 'X'.
  clientdatax-lab_design 'X'.
  clientdatax-std_descr  'X'.
  clientdatax-mat_grp_sm 'X'.
  clientdatax-hazmatprof 'X'.
  clientdatax-batch_mgmt 'X'.
  clientdatax-net_weight 'X'.
  clientdatax-prod_memo  'X'.
  clientdatax-tax_class  'X'.
  clientdatax-document   'X'.
  APPEND clientdatax.


"-------------------------         零售数据传输:基本数据的扩展  ----------------

  CLEAR addnlclientdata.
  CLEAR addnlclientdata[].

  addnlclientdata-FUNCTION   lv_bapifn.
  addnlclientdata-material   WA_ITAB-matnr.
  addnlclientdata-loadinggrp '0001'.
  addnlclientdata-val_class  WA_ITAB-bklas.        "评估类
   addnlclientdata-COMM_CODE WA_ITAB-WSTAW.         "商品代码

  APPEND addnlclientdata.

  CLEAR addnlclientdatax.
  CLEAR addnlclientdatax[].

  addnlclientdatax-FUNCTION   lv_bapifn.
  addnlclientdatax-material   WA_ITAB-matnr.
  addnlclientdatax-loadinggrp 'X'.
  addnlclientdatax-val_class  'X'.
     addnlclientdata-COMM_CODE ='X'." wa_itab-WA_ITAB-WSTAW'.
  APPEND addnlclientdatax.




  "工厂级别数据
  CLEAR plantdata.
  CLEAR plantdata[].
  CLEAR plantdatax.
  CLEAR plantdatax[].


  " 对应系统中所有用户定义的工厂同时创建
  SELECT  WERKS INTO corresponding FIELDS OF  TABLE GT_WERKS
  FROM T001W
  WHERE     WERKS NOT IN ('0001','0002','0003','ZZ88'AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').
  .

  LOOP AT GT_WERKS.


    plantdata-FUNCTION  lv_bapifn.
    plantdata-material  WA_ITAB-matnr.
    plantdata-plant     GT_WERKS-werks.
    plantdata-pur_group WA_ITAB-wekgr.          "采购组
    plantdata-comm_code WA_ITAB-stawn.          "商品代码
*    PLANTDATA-EXPIMPGRP = WA_ITAB-MTVER.
    plantdata-AVAILCHECK 'KP'.                    "0  可用性检查的检查组

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  WA_ITAB-prctr
    IMPORTING
      OUTPUT WA_ITAB-prctr
    EXCEPTIONS
      OTHERS 1.

    plantdata-profit_ctr WA_ITAB-prctr.
    plantdata-loadinggrp WA_ITAB-wladg.
    plantdata-batch_mgmt WA_ITAB-xchpf.
    plantdata-mrp_type   =  'ND'." WA_ITAB-dismm.

    " plantdata-availcheck = WA_ITAB-mtvfp.
    plantdata-prod_prof  WA_ITAB-sfcpf.
    plantdata-proc_type  'X'.
    APPEND plantdata.

    CLEAR plantdatax.
    " CLEAR plantdatax[].
    plantdatax-FUNCTION   lv_bapifn.
    plantdatax-material   WA_ITAB-matnr.
    plantdatax-plant      GT_WERKS-werks.
    plantdatax-pur_group  'X'.
    plantdatax-comm_code  'X'.
    plantdatax-expimpgrp  'X'.
    plantdatax-profit_ctr 'X'.
    plantdatax-loadinggrp 'X'.
    plantdatax-batch_mgmt 'X'.
    plantdatax-mrp_type   'X'.
    plantdatax-availcheck 'X'.
    plantdatax-prod_prof  'X'.
    plantdatax-proc_type  'X'.

    APPEND plantdatax.


  ENDLOOP.

  "库位级别的

  SELECT LGORT WERKS  INTO CORRESPONDING FIELDS OF TABLE  GT_loget  FROM T001L WHERE    WERKS NOT IN ('0001','0002')  AND werks in ('2100' '2200' ,'2300' ,'2400','2500').


  LOOP AT GT_LOGET.

    CLEAR LGORTdata.
    CLEAR LGORTdata[].

    LGORTdata-FUNCTION  lv_bapifn.
    LGORTdata-material  WA_ITAB-matnr.
    LGORTdata-plant     GT_LOGET-werks.
    LGORTdata-STGE_LOC GT_LOGET-LGORT.
    "   plantdata-comm_code = WA_ITAB-stawn.

    APPEND LGORTdata.
    CLEAR LGORTdatax.
    CLEAR LGORTdatax[].

    LGORTdatax-FUNCTION  lv_bapifn.
    LGORTdatax-material  WA_ITAB-matnr.
    LGORTdatax-plant     GT_LOGET-werks.
    LGORTdatax-STGE_LOC GT_LOGET-LGORT.

    "LGORTdatax-STGE_BIN = 'X'.
    APPEND LGORTdatax.

  ENDLOOP.
*    C.销售组织层级:对系统中所有用户定义的工厂对应销售组织同时创建。
*SELECT * FROM TVKWZ
*         WHERE NOT IN ('0001','0002','0003')

    CLEAR GT_VKORG .
  SELECT VKORG vtweg  INTO CORRESPONDING FIELDS OF TABLE GT_VKORG     FROM TVKWZ WHERE   WERKS NOT IN ('0001','0002','0003')  AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').

    CLEAR salesdata.
   CLEAR salesdata[].
    CLEAR salesdatax.
     CLEAR salesdatax[].
  LOOP AT GT_VKORG.

    "销售数据
     CLEAR salesdata.
    salesdata-FUNCTION   lv_bapifn.
    salesdata-material   WA_ITAB-matnr.
    salesdata-sales_org  GT_VKORG-vkorg"销售组织
    salesdata-distr_chan GT_VKORG-vtweg.  "参考客户和主物料分销渠道
    salesdata-acct_assgt WA_ITAB-ktgrm.
    salesdata-mat_pr_grp WA_ITAB-kondm.
    salesdata-rebate_grp WA_ITAB-bonus.
    salesdata-matl_stats ''."物料统计组
    salesdata-item_cat   'NORM'.

    APPEND salesdata.

    CLEAR salesdatax.

    salesdatax-FUNCTION   lv_bapifn.
    salesdatax-material   WA_ITAB-matnr.
    salesdatax-sales_org  GT_VKORG-vkorg.
    salesdatax-distr_chan GT_VKORG-vtweg.
    salesdatax-acct_assgt 'X'.
    salesdatax-mat_pr_grp 'X'.
    salesdatax-rebate_grp 'X'.
    salesdatax-matl_stats 'X'."物料统计组
    salesdatax-item_cat   'X'.

    APPEND salesdatax.


  ENDLOOP.
  SORT salesdata BY material sales_org  distr_chan.
  SORT salesdatax BY material sales_org  distr_chan.
  DELETE ADJACENT DUPLICATES FROM salesdata.
  DELETE ADJACENT DUPLICATES FROM salesdatax.

  "select PRCTR from ZTPRCTR WHERE WERKS = ?

  SELECT PRCTR WERKS INTO CORRESPONDING FIELDS OF TABLE GT_ZTPRCTR FROM ZTPRCTR WHERE    WERKS NOT IN ('0001','0002','0003')  AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').


  "会计、成本
  CLEAR valuationdata.
  CLEAR valuationdata[].
  CLEAR valuationdatax.
  CLEAR valuationdatax[].

  LOOP AT GT_WERKS.

    valuationdata-FUNCTION   lv_bapifn.
    valuationdata-material   WA_ITAB-matnr.
    valuationdata-val_area   GT_WERKS-werks.
    valuationdata-moving_pr  WA_ITAB-verpr.
    valuationdata-price_unit WA_ITAB-peinh.
    valuationdata-val_class  WA_ITAB-bklas.
    valuationdata-val_cat    WA_ITAB-bwtty.
    valuationdata-orig_mat   WA_ITAB-hkmat.
    valuationdata-price_ctrl 'V'.
    valuationdata-ml_settle  '2'.
    valuationdata-ml_active  'X'.

    APPEND valuationdata.

    CLEAR valuationdatax.
    " CLEAR valuationdatax[].
    valuationdatax-FUNCTION   lv_bapifn.
    valuationdatax-material   WA_ITAB-matnr.
    valuationdatax-val_area   GT_WERKS-werks.
    valuationdatax-moving_pr  'X'.
    valuationdatax-price_unit 'X'.
    valuationdatax-val_class  'X'.
    valuationdatax-val_cat    'X'.
    valuationdatax-orig_mat   'X'.
    valuationdatax-price_ctrl 'X'.
    valuationdatax-ml_settle  'X'.
    valuationdatax-ml_active  'X'.
    APPEND valuationdatax.



  ENDLOOP.

  "物料描述
  CLEAR materialdescription[].
  CLEAR materialdescription.
  materialdescription-material  WA_ITAB-matnr.
  materialdescription-langu_iso 'ZH'.
  materialdescription-matl_desc WA_ITAB-makt.
  APPEND materialdescription.

  "单位
  CLEAR unitsofmeasure.
  CLEAR unitsofmeasure[].
  unitsofmeasure-FUNCTION   lv_bapifn.
  unitsofmeasure-material  WA_ITAB-matnr.
  unitsofmeasure-alt_unit WA_ITAB-meins.
  unitsofmeasure-numerator '1'.
  unitsofmeasure-denominatr '1'.
  unitsofmeasure-gross_wt WA_ITAB-brgew.
  unitsofmeasure-unit_of_wt 'KG'.
  unitsofmeasure-volume '0'.
  unitsofmeasure-volumeunit ''.
  APPEND unitsofmeasure.

  CLEAR unitsofmeasurex.
  CLEAR unitsofmeasurex[].
  unitsofmeasurex-FUNCTION   lv_bapifn.
  unitsofmeasurex-material  WA_ITAB-matnr.
  unitsofmeasurex-alt_unit WA_ITAB-meins.
  unitsofmeasurex-numerator 'X'.
  unitsofmeasurex-denominatr 'X'.
  unitsofmeasurex-gross_wt 'X'.
  unitsofmeasurex-unit_of_wt 'X'.
  unitsofmeasurex-volume 'X'.
  unitsofmeasurex-volumeunit 'X'.
  APPEND unitsofmeasurex.

  "税分类
  CLEAR taxclassifications.
  CLEAR taxclassifications[].
  taxclassifications-FUNCTION   lv_bapifn.
  taxclassifications-material   WA_ITAB-matnr.
  taxclassifications-depcountry 'CN'.
  taxclassifications-tax_type_1 'MWST'.
  taxclassifications-taxclass_1 '0'.
  APPEND taxclassifications.

  CLEAR RETURN.

  CALL FUNCTION 'BAPI_MATERIAL_MAINTAINDATA_RT'
  EXPORTINGWA_ITAB-spart '00'.

" --------------------------------------   抬头数据  -----------------

  headdata-FUNCTION   lv_bapifn.                 "009  原始的:关于处理的第一个信息
  headdata-material   WA_ITAB-matnr.
  headdata-matl_type  WA_ITAB-mtart.              "物料类型

  " 物料类型  T134


  headdata-matl_group WA_ITAB-matkl.              "物料组
  headdata-matl_cat   '00'."                      00 一般物料

 "---------------------------------------------------------------------


  headdata-basic_view 'X'.             "基本视图
  headdata-list_view  'X'.             "列表视图
  headdata-sales_view 'X'.             "销售视图
  headdata-logst_view 'X'.             "后勤视图
  headdata-no_appl_log 'X' .            "不写入应用程序的日志


*    HEADDATA-ALL_FIELDS = 'X' .



  " 维护基本视图的基本数据

  " 零售数据传输:集团级别的物料


  CLEAR clientdata.
  CLEAR clientdata[].
  CLEAR clientdatax.
  CLEAR clientdatax[].

  CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
  EXPORTING
    INPUT  WA_ITAB-meins
  IMPORTING
    OUTPUT WA_ITAB-meins
  EXCEPTIONS
    OTHERS 1.

  clientdata-FUNCTION   lv_bapifn.
  clientdata-material   WA_ITAB-matnr.
  clientdata-base_uom   WA_ITAB-meins.   "基本计量单位
  clientdata-old_mat_no WA_ITAB-bismt.   "旧物料编码
 " clientdata-extmatlgrp = WA_ITAB-matkl.    "外部物料组
  clientdata-division   WA_ITAB-spart.     "分部
  clientdata-item_cat   WA_ITAB-mtpos.      "
  clientdata-prod_hier  WA_ITAB-prdha.
  clientdata-stor_conds WA_ITAB-raube.
  clientdata-extmatlgrp WA_ITAB-extwg.   "外部物料组
  clientdata-size_dim   WA_ITAB-groes.
  clientdata-prod_alloc WA_ITAB-kosch.
  clientdata-basic_matl WA_ITAB-wrkst.   "产品层次
  clientdata-lab_design WA_ITAB-labor.
  clientdata-std_descr  WA_ITAB-normt.
  clientdata-mat_grp_sm WA_ITAB-magrv.
  clientdata-hazmatprof WA_ITAB-profl.
  clientdata-batch_mgmt WA_ITAB-xchpf.
  clientdata-net_weight WA_ITAB-ntgew.
  clientdata-prod_memo  WA_ITAB-ferth.
  clientdata-tax_class  0.
  clientdata-document   WA_ITAB-zeiAR"  ppp


  APPEND clientdata.

  CLEAR clientdatax.

  clientdatax-FUNCTION   lv_bapifn.
  clientdatax-material   WA_ITAB-matnr.
  clientdatax-base_uom   'X'.
  clientdatax-old_mat_no 'X'.
  clientdatax-extmatlgrp 'X'.
  clientdatax-division   'X'.
  clientdatax-item_cat   'X'.
  clientdatax-prod_hier  'X'.
  clientdatax-stor_conds 'X'.
  clientdatax-extmatlgrp 'X'.
  clientdatax-size_dim   'X'.
  clientdatax-prod_alloc 'X'.
  clientdatax-basic_matl 'X'.
  clientdatax-lab_design 'X'.
  clientdatax-std_descr  'X'.
  clientdatax-mat_grp_sm 'X'.
  clientdatax-hazmatprof 'X'.
  clientdatax-batch_mgmt 'X'.
  clientdatax-net_weight 'X'.
  clientdatax-prod_memo  'X'.
  clientdatax-tax_class  'X'.
  clientdatax-document   'X'.
  APPEND clientdatax.


"-------------------------         零售数据传输:基本数据的扩展  ----------------

  CLEAR addnlclientdata.
  CLEAR addnlclientdata[].

  addnlclientdata-FUNCTION   lv_bapifn.
  addnlclientdata-material   WA_ITAB-matnr.
  addnlclientdata-loadinggrp '0001'.
  addnlclientdata-val_class  WA_ITAB-bklas.        "评估类
   addnlclientdata-COMM_CODE WA_ITAB-WSTAW.         "商品代码

  APPEND addnlclientdata.

  CLEAR addnlclientdatax.
  CLEAR addnlclientdatax[].

  addnlclientdatax-FUNCTION   lv_bapifn.
  addnlclientdatax-material   WA_ITAB-matnr.
  addnlclientdatax-loadinggrp 'X'.
  addnlclientdatax-val_class  'X'.
     addnlclientdata-COMM_CODE ='X'." wa_itab-WA_ITAB-WSTAW'.
  APPEND addnlclientdatax.




  "工厂级别数据
  CLEAR plantdata.
  CLEAR plantdata[].
  CLEAR plantdatax.
  CLEAR plantdatax[].


  " 对应系统中所有用户定义的工厂同时创建
  SELECT  WERKS INTO corresponding FIELDS OF  TABLE GT_WERKS
  FROM T001W
  WHERE     WERKS NOT IN ('0001','0002','0003','ZZ88'AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').
  .

  LOOP AT GT_WERKS.


    plantdata-FUNCTION  lv_bapifn.
    plantdata-material  WA_ITAB-matnr.
    plantdata-plant     GT_WERKS-werks.
    plantdata-pur_group WA_ITAB-wekgr.          "采购组
    plantdata-comm_code WA_ITAB-stawn.          "商品代码
*    PLANTDATA-EXPIMPGRP = WA_ITAB-MTVER.
    plantdata-AVAILCHECK 'KP'.                    "0  可用性检查的检查组

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  WA_ITAB-prctr
    IMPORTING
      OUTPUT WA_ITAB-prctr
    EXCEPTIONS
      OTHERS 1.

    plantdata-profit_ctr WA_ITAB-prctr.           "  利润中心
    plantdata-loadinggrp WA_ITAB-wladg.           "  装载组
    plantdata-batch_mgmt WA_ITAB-xchpf.           " 批次管理需求的标识
    plantdata-mrp_type   =  'ND'." WA_ITAB-dismm.  "  物料需求计划类型

    " plantdata-availcheck = WA_ITAB-mtvfp.
    plantdata-prod_prof  WA_ITAB-sfcpf.               "生产计划参数文件
    plantdata-proc_type  'X'.
    APPEND plantdata.

    CLEAR plantdatax.
    " CLEAR plantdatax[].
    plantdatax-FUNCTION   lv_bapifn.
    plantdatax-material   WA_ITAB-matnr.
    plantdatax-plant      GT_WERKS-werks.
    plantdatax-pur_group  'X'.
    plantdatax-comm_code  'X'.
    plantdatax-expimpgrp  'X'.
    plantdatax-profit_ctr 'X'.
    plantdatax-loadinggrp 'X'.
    plantdatax-batch_mgmt 'X'.
    plantdatax-mrp_type   'X'.
    plantdatax-availcheck 'X'.
    plantdatax-prod_prof  'X'.
    plantdatax-proc_type  'X'.

    APPEND plantdatax.


  ENDLOOP.

  "库位级别的

  SELECT LGORT WERKS  INTO CORRESPONDING FIELDS OF TABLE  GT_loget  FROM T001L WHERE    WERKS NOT IN ('0001','0002')  AND werks in ('2100' '2200' ,'2300' ,'2400','2500').


  LOOP AT GT_LOGET.

    CLEAR LGORTdata.
    CLEAR LGORTdata[].

    LGORTdata-FUNCTION  lv_bapifn.
    LGORTdata-material  WA_ITAB-matnr.
    LGORTdata-plant     GT_LOGET-werks.
    LGORTdata-STGE_LOC GT_LOGET-LGORT.
    "   plantdata-comm_code = WA_ITAB-stawn.

    APPEND LGORTdata.
    CLEAR LGORTdatax.
    CLEAR LGORTdatax[].

    LGORTdatax-FUNCTION  lv_bapifn.
    LGORTdatax-material  WA_ITAB-matnr.
    LGORTdatax-plant     GT_LOGET-werks.
    LGORTdatax-STGE_LOC GT_LOGET-LGORT.

    "LGORTdatax-STGE_BIN = 'X'.
    APPEND LGORTdatax.

  ENDLOOP.
*    C.销售组织层级:对系统中所有用户定义的工厂对应销售组织同时创建。
*SELECT * FROM TVKWZ
*         WHERE NOT IN ('0001','0002','0003')

    CLEAR GT_VKORG .
  SELECT VKORG vtweg  INTO CORRESPONDING FIELDS OF TABLE GT_VKORG     FROM TVKWZ WHERE   WERKS NOT IN ('0001','0002','0003')  AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').

    CLEAR salesdata.
   CLEAR salesdata[].
    CLEAR salesdatax.
     CLEAR salesdatax[].
  LOOP AT GT_VKORG.

    "销售数据
     CLEAR salesdata.
    salesdata-FUNCTION   lv_bapifn.
    salesdata-material   WA_ITAB-matnr.
    salesdata-sales_org  GT_VKORG-vkorg"销售组织
    salesdata-distr_chan GT_VKORG-vtweg.  "参考客户和主物料分销渠道
    salesdata-acct_assgt WA_ITAB-ktgrm.
    salesdata-mat_pr_grp WA_ITAB-kondm.
    salesdata-rebate_grp WA_ITAB-bonus.
    salesdata-matl_stats ''."物料统计组
    salesdata-item_cat   'NORM'.

    APPEND salesdata.

    CLEAR salesdatax.

    salesdatax-FUNCTION   lv_bapifn.
    salesdatax-material   WA_ITAB-matnr.
    salesdatax-sales_org  GT_VKORG-vkorg.
    salesdatax-distr_chan GT_VKORG-vtweg.
    salesdatax-acct_assgt 'X'.
    salesdatax-mat_pr_grp 'X'.
    salesdatax-rebate_grp 'X'.
    salesdatax-matl_stats 'X'."物料统计组
    salesdatax-item_cat   'X'.

    APPEND salesdatax.


  ENDLOOP.
  SORT salesdata BY material sales_org  distr_chan.
  SORT salesdatax BY material sales_org  distr_chan.
  DELETE ADJACENT DUPLICATES FROM salesdata.
  DELETE ADJACENT DUPLICATES FROM salesdatax.

  "select PRCTR from ZTPRCTR WHERE WERKS = ?

  SELECT PRCTR WERKS INTO CORRESPONDING FIELDS OF TABLE GT_ZTPRCTR FROM ZTPRCTR WHERE    WERKS NOT IN ('0001','0002','0003')  AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').


  "会计、成本
  CLEAR valuationdata.
  CLEAR valuationdata[].
  CLEAR valuationdatax.
  CLEAR valuationdatax[].

  LOOP AT GT_WERKS.

    valuationdata-FUNCTION   lv_bapifn.
    valuationdata-material   WA_ITAB-matnr.
    valuationdata-val_area   GT_WERKS-werks.
    valuationdata-moving_pr  WA_ITAB-verpr.
    valuationdata-price_unit WA_ITAB-peinh.
    valuationdata-val_class  WA_ITAB-bklas.
    valuationdata-val_cat    WA_ITAB-bwtty.
    valuationdata-orig_mat   WA_ITAB-hkmat.
    valuationdata-price_ctrl wa_itab-VPRSV."'V'.
    valuationdata-ml_settle  '2'.
    valuationdata-ml_active  'X'.

    APPEND valuationdata.

    CLEAR valuationdatax.
    " CLEAR valuationdatax[].
    valuationdatax-FUNCTION   lv_bapifn.
    valuationdatax-material   WA_ITAB-matnr.
    valuationdatax-val_area   GT_WERKS-werks.
    valuationdatax-moving_pr  'X'.
    valuationdatax-price_unit 'X'.
    valuationdatax-val_class  'X'.
    valuationdatax-val_cat    'X'.
    valuationdatax-orig_mat   'X'.
    valuationdatax-price_ctrl 'X'.
    valuationdatax-ml_settle  'X'.
    valuationdatax-ml_active  'X'.
    APPEND valuationdatax.



  ENDLOOP.

  "物料描述
  CLEAR materialdescription[].
  CLEAR materialdescription.
  materialdescription-material  WA_ITAB-matnr.
  materialdescription-langu_iso 'ZH'.
  materialdescription-matl_desc WA_ITAB-makt.
  APPEND materialdescription.

  "单位
  CLEAR unitsofmeasure.
  CLEAR unitsofmeasure[].
  unitsofmeasure-FUNCTION   lv_bapifn.
  unitsofmeasure-material  WA_ITAB-matnr.
  unitsofmeasure-alt_unit WA_ITAB-meins.
  unitsofmeasure-numerator '1'.
  unitsofmeasure-denominatr '1'.
  unitsofmeasure-gross_wt WA_ITAB-brgew.
  unitsofmeasure-unit_of_wt 'KG'.
  unitsofmeasure-volume '0'.
  unitsofmeasure-volumeunit ''.
  APPEND unitsofmeasure.

  CLEAR unitsofmeasurex.
  CLEAR unitsofmeasurex[].
  unitsofmeasurex-FUNCTION   lv_bapifn.
  unitsofmeasurex-material  WA_ITAB-matnr.
  unitsofmeasurex-alt_unit WA_ITAB-meins.
  unitsofmeasurex-numerator 'X'.
  unitsofmeasurex-denominatr 'X'.
  unitsofmeasurex-gross_wt 'X'.
  unitsofmeasurex-unit_of_wt 'X'.
  unitsofmeasurex-volume 'X'.
  unitsofmeasurex-volumeunit 'X'.
  APPEND unitsofmeasurex.

  "税分类
  CLEAR taxclassifications.
  CLEAR taxclassifications[].
  taxclassifications-FUNCTION   lv_bapifn.
  taxclassifications-material   WA_ITAB-matnr.
  taxclassifications-depcountry 'CN'.
  taxclassifications-tax_type_1 'MWST'.
  taxclassifications-taxclass_1 '0'.
  APPEND taxclassifications.

  CLEAR RETURN.

  CALL FUNCTION 'BAPI_MATERIAL_MAINTAINDATA_RT'
  EXPORTING
    headdata            headdata
  IMPORTING
    RETURN              RETURN
  TABLES
    clientdata          clientdata[]
    clientdatax         clientdatax[]
    addnlclientdata     addnlclientdata[]
    addnlclientdatax    addnlclientdatax[]
    materialdescription materialdescription[]
    plantdata           plantdata[]
    plantdatax          plantdatax[]
    posdata             posdata[]
    posdatax            posdatax[]
    unitsofmeasure      unitsofmeasure[]
    unitsofmeasurex     unitsofmeasurex[]
    taxclassifications  taxclassifications[]
    valuationdata       valuationdata[]
    valuationdatax      valuationdatax[]
    salesdata           salesdata[]
    salesdatax          salesdatax[].WA_ITAB-spart '00'.

    headdata            headdata
  IMPORTING
    RETURN              RETURN
  TABLES
    clientdata          clientdata[]
    clientdatax         clientdatax[]
    addnlclientdata     addnlclientdata[]
    addnlclientdatax    addnlclientdatax[]
    materialdescription materialdescription[]
    plantdata           plantdata[]
    plantdatax          plantdatax[]
    posdata             posdata[]
    posdatax            posdatax[]
    unitsofmeasure      unitsofmeasure[]
    unitsofmeasurex     unitsofmeasurex[]
    taxclassifications  taxclassifications[]
    valuationdata       valuationdata[]
    valuationdatax      valuationdatax[]
    salesdata           salesdata[]
    salesdatax          salesdatax[].

  CLEAR lv_flg.
" --------------------------------------   抬头数据  -----------------

  headdata-FUNCTION   lv_bapifn.                 "009  原始的:关于处理的第一个信息
  headdata-material   WA_ITAB-matnr.
  headdata-matl_type  WA_ITAB-mtart.              "物料类型

  " 物料类型  T134


  headdata-matl_group WA_ITAB-matkl.              "物料组
  headdata-matl_cat   '00'."                      00 一般物料

 "---------------------------------------------------------------------


  headdata-basic_view 'X'.             "基本视图
  headdata-list_view  'X'.             "列表视图
  headdata-sales_view 'X'.             "销售视图
  headdata-logst_view 'X'.             "后勤视图
  headdata-no_appl_log 'X' .            "不写入应用程序的日志


*    HEADDATA-ALL_FIELDS = 'X' .



  " 维护基本视图的基本数据

  " 零售数据传输:集团级别的物料


  CLEAR clientdata.
  CLEAR clientdata[].
  CLEAR clientdatax.
  CLEAR clientdatax[].

  CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
  EXPORTING
    INPUT  WA_ITAB-meins
  IMPORTING
    OUTPUT WA_ITAB-meins
  EXCEPTIONS
    OTHERS 1.

  clientdata-FUNCTION   lv_bapifn.
  clientdata-material   WA_ITAB-matnr.
  clientdata-base_uom   WA_ITAB-meins.   "基本计量单位
  clientdata-old_mat_no WA_ITAB-bismt.   "旧物料编码
 " clientdata-extmatlgrp = WA_ITAB-matkl.    "外部物料组
  clientdata-division   WA_ITAB-spart.     "分部
  clientdata-item_cat   WA_ITAB-mtpos.      "
  clientdata-prod_hier  WA_ITAB-prdha.
  clientdata-stor_conds WA_ITAB-raube.
  clientdata-extmatlgrp WA_ITAB-extwg.   "外部物料组
  clientdata-size_dim   WA_ITAB-groes.
  clientdata-prod_alloc WA_ITAB-kosch.
  clientdata-basic_matl WA_ITAB-wrkst.   "产品层次
  clientdata-lab_design WA_ITAB-labor.
  clientdata-std_descr  WA_ITAB-normt.
  clientdata-mat_grp_sm WA_ITAB-magrv.
  clientdata-hazmatprof WA_ITAB-profl.
  clientdata-batch_mgmt WA_ITAB-xchpf.
  clientdata-net_weight WA_ITAB-ntgew.
  clientdata-prod_memo  WA_ITAB-ferth.
  clientdata-tax_class  0.
  clientdata-document   WA_ITAB-zeiAR"  ppp


  APPEND clientdata.

  CLEAR clientdatax.

  clientdatax-FUNCTION   lv_bapifn.
  clientdatax-material   WA_ITAB-matnr.
  clientdatax-base_uom   'X'.
  clientdatax-old_mat_no 'X'.
  clientdatax-extmatlgrp 'X'.
  clientdatax-division   'X'.
  clientdatax-item_cat   'X'.
  clientdatax-prod_hier  'X'.
  clientdatax-stor_conds 'X'.
  clientdatax-extmatlgrp 'X'.
  clientdatax-size_dim   'X'.
  clientdatax-prod_alloc 'X'.
  clientdatax-basic_matl 'X'.
  clientdatax-lab_design 'X'.
  clientdatax-std_descr  'X'.
  clientdatax-mat_grp_sm 'X'.
  clientdatax-hazmatprof 'X'.
  clientdatax-batch_mgmt 'X'.
  clientdatax-net_weight 'X'.
  clientdatax-prod_memo  'X'.
  clientdatax-tax_class  'X'.
  clientdatax-document   'X'.
  APPEND clientdatax.


"-------------------------         零售数据传输:基本数据的扩展  ----------------

  CLEAR addnlclientdata.
  CLEAR addnlclientdata[].

  addnlclientdata-FUNCTION   lv_bapifn.
  addnlclientdata-material   WA_ITAB-matnr.
  addnlclientdata-loadinggrp '0001'.
  addnlclientdata-val_class  WA_ITAB-bklas.        "评估类
   addnlclientdata-COMM_CODE WA_ITAB-WSTAW.         "商品代码

  APPEND addnlclientdata.

  CLEAR addnlclientdatax.
  CLEAR addnlclientdatax[].

  addnlclientdatax-FUNCTION   lv_bapifn.
  addnlclientdatax-material   WA_ITAB-matnr.
  addnlclientdatax-loadinggrp 'X'.
  addnlclientdatax-val_class  'X'.
     addnlclientdata-COMM_CODE ='X'." wa_itab-WA_ITAB-WSTAW'.
  APPEND addnlclientdatax.




  "工厂级别数据
  CLEAR plantdata.
  CLEAR plantdata[].
  CLEAR plantdatax.
  CLEAR plantdatax[].


  " 对应系统中所有用户定义的工厂同时创建
  SELECT  WERKS INTO corresponding FIELDS OF  TABLE GT_WERKS
  FROM T001W
  WHERE     WERKS NOT IN ('0001','0002','0003','ZZ88'AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').
  .

  LOOP AT GT_WERKS.


    plantdata-FUNCTION  lv_bapifn.
    plantdata-material  WA_ITAB-matnr.
    plantdata-plant     GT_WERKS-werks.
    plantdata-pur_group WA_ITAB-wekgr.          "采购组
    plantdata-comm_code WA_ITAB-stawn.          "商品代码
*    PLANTDATA-EXPIMPGRP = WA_ITAB-MTVER.
    plantdata-AVAILCHECK 'KP'.                    "0  可用性检查的检查组

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  WA_ITAB-prctr
    IMPORTING
      OUTPUT WA_ITAB-prctr
    EXCEPTIONS
      OTHERS 1.

    plantdata-profit_ctr WA_ITAB-prctr.           "  利润中心
    plantdata-loadinggrp WA_ITAB-wladg.           "  装载组
    plantdata-batch_mgmt WA_ITAB-xchpf.           " 批次管理需求的标识
    plantdata-mrp_type   =  'ND'." WA_ITAB-dismm.  "  物料需求计划类型

    " plantdata-availcheck = WA_ITAB-mtvfp.
    plantdata-prod_prof  WA_ITAB-sfcpf.               "生产计划参数文件
    plantdata-proc_type  'X'.
    APPEND plantdata.

    CLEAR plantdatax.
    " CLEAR plantdatax[].
    plantdatax-FUNCTION   lv_bapifn.
    plantdatax-material   WA_ITAB-matnr.
    plantdatax-plant      GT_WERKS-werks.
    plantdatax-pur_group  'X'.
    plantdatax-comm_code  'X'.
    plantdatax-expimpgrp  'X'.
    plantdatax-profit_ctr 'X'.
    plantdatax-loadinggrp 'X'.
    plantdatax-batch_mgmt 'X'.
    plantdatax-mrp_type   'X'.
    plantdatax-availcheck 'X'.
    plantdatax-prod_prof  'X'.
    plantdatax-proc_type  'X'.

    APPEND plantdatax.


  ENDLOOP.

  "库位级别的

  SELECT LGORT WERKS  INTO CORRESPONDING FIELDS OF TABLE  GT_loget  FROM T001L WHERE    WERKS NOT IN ('0001','0002')  AND werks in ('2100' '2200' ,'2300' ,'2400','2500').


  LOOP AT GT_LOGET.

    CLEAR LGORTdata.
    CLEAR LGORTdata[].

    LGORTdata-FUNCTION  lv_bapifn.
    LGORTdata-material  WA_ITAB-matnr.
    LGORTdata-plant     GT_LOGET-werks.
    LGORTdata-STGE_LOC GT_LOGET-LGORT.
    "   plantdata-comm_code = WA_ITAB-stawn.

    APPEND LGORTdata.
    CLEAR LGORTdatax.
    CLEAR LGORTdatax[].

    LGORTdatax-FUNCTION  lv_bapifn.
    LGORTdatax-material  WA_ITAB-matnr.
    LGORTdatax-plant     GT_LOGET-werks.
    LGORTdatax-STGE_LOC GT_LOGET-LGORT.

    "LGORTdatax-STGE_BIN = 'X'.
    APPEND LGORTdatax.

  ENDLOOP.
*    C.销售组织层级:对系统中所有用户定义的工厂对应销售组织同时创建。
*SELECT * FROM TVKWZ
*         WHERE NOT IN ('0001','0002','0003')

    CLEAR GT_VKORG .
  SELECT VKORG vtweg  INTO CORRESPONDING FIELDS OF TABLE GT_VKORG     FROM TVKWZ WHERE   WERKS NOT IN ('0001','0002','0003')  AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').

    CLEAR salesdata.
   CLEAR salesdata[].
    CLEAR salesdatax.
     CLEAR salesdatax[].
  LOOP AT GT_VKORG.

    "销售数据
     CLEAR salesdata.
    salesdata-FUNCTION   lv_bapifn.
    salesdata-material   WA_ITAB-matnr.
    salesdata-sales_org  GT_VKORG-vkorg"销售组织
    salesdata-distr_chan GT_VKORG-vtweg.  "参考客户和主物料分销渠道
    salesdata-acct_assgt WA_ITAB-ktgrm.
    salesdata-mat_pr_grp WA_ITAB-kondm.
    salesdata-rebate_grp WA_ITAB-bonus.
    salesdata-matl_stats ''."物料统计组
    salesdata-item_cat   'NORM'.

    APPEND salesdata.

    CLEAR salesdatax.

    salesdatax-FUNCTION   lv_bapifn.
    salesdatax-material   WA_ITAB-matnr.
    salesdatax-sales_org  GT_VKORG-vkorg.
    salesdatax-distr_chan GT_VKORG-vtweg.
    salesdatax-acct_assgt 'X'.
    salesdatax-mat_pr_grp 'X'.
    salesdatax-rebate_grp 'X'.
    salesdatax-matl_stats 'X'."物料统计组
    salesdatax-item_cat   'X'.

    APPEND salesdatax.


  ENDLOOP.
  SORT salesdata BY material sales_org  distr_chan.
  SORT salesdatax BY material sales_org  distr_chan.
  DELETE ADJACENT DUPLICATES FROM salesdata.
  DELETE ADJACENT DUPLICATES FROM salesdatax.

  "select PRCTR from ZTPRCTR WHERE WERKS = ?

  SELECT PRCTR WERKS INTO CORRESPONDING FIELDS OF TABLE GT_ZTPRCTR FROM ZTPRCTR WHERE    WERKS NOT IN ('0001','0002','0003')  AND werks IN ('2100' '2200' ,'2300' ,'2400','2500').


  "会计、成本
  CLEAR valuationdata.
  CLEAR valuationdata[].
  CLEAR valuationdatax.
  CLEAR valuationdatax[].

  LOOP AT GT_WERKS.

    valuationdata-FUNCTION   lv_bapifn.
    valuationdata-material   WA_ITAB-matnr.
    valuationdata-val_area   GT_WERKS-werks.
    valuationdata-moving_pr  WA_ITAB-verpr.
    valuationdata-price_unit WA_ITAB-peinh.
    valuationdata-val_class  WA_ITAB-bklas.
    valuationdata-val_cat    WA_ITAB-bwtty.
    valuationdata-orig_mat   WA_ITAB-hkmat.
    valuationdata-price_ctrl wa_itab-VPRSV."'V'.
    valuationdata-ml_settle  '2'.
    valuationdata-ml_active  'X'.

    APPEND valuationdata.

    CLEAR valuationdatax.
    " CLEAR valuationdatax[].
    valuationdatax-FUNCTION   lv_bapifn.
    valuationdatax-material   WA_ITAB-matnr.
    valuationdatax-val_area   GT_WERKS-werks.
    valuationdatax-moving_pr  'X'.
    valuationdatax-price_unit 'X'.
    valuationdatax-val_class  'X'.
    valuationdatax-val_cat    'X'.
    valuationdatax-orig_mat   'X'.
    valuationdatax-price_ctrl 'X'.
    valuationdatax-ml_settle  'X'.
    valuationdatax-ml_active  'X'.
    APPEND valuationdatax.



  ENDLOOP.

  "物料描述
  CLEAR materialdescription[].
  CLEAR materialdescription.
  materialdescription-material  WA_ITAB-matnr.
  materialdescription-langu_iso 'ZH'.
  materialdescription-matl_desc WA_ITAB-makt.
  APPEND materialdescription.

  "单位
  CLEAR unitsofmeasure.
  CLEAR unitsofmeasure[].
  unitsofmeasure-FUNCTION   lv_bapifn.
  unitsofmeasure-material  WA_ITAB-matnr.
  unitsofmeasure-alt_unit WA_ITAB-meins.
  unitsofmeasure-numerator '1'.
  unitsofmeasure-denominatr '1'.
  unitsofmeasure-gross_wt WA_ITAB-brgew.
  unitsofmeasure-unit_of_wt 'KG'.
  unitsofmeasure-volume '0'.
  unitsofmeasure-volumeunit ''.
  APPEND unitsofmeasure.

  CLEAR unitsofmeasurex.
  CLEAR unitsofmeasurex[].
  unitsofmeasurex-FUNCTION   lv_bapifn.
  unitsofmeasurex-material  WA_ITAB-matnr.
  unitsofmeasurex-alt_unit WA_ITAB-meins.
  unitsofmeasurex-numerator 'X'.
  unitsofmeasurex-denominatr 'X'.
  unitsofmeasurex-gross_wt 'X'.
  unitsofmeasurex-unit_of_wt 'X'.
  unitsofmeasurex-volume 'X'.
  unitsofmeasurex-volumeunit 'X'.
  APPEND unitsofmeasurex.

  "税分类
  CLEAR taxclassifications.
  CLEAR taxclassifications[].
  taxclassifications-FUNCTION   lv_bapifn.
  taxclassifications-material   WA_ITAB-matnr.
  taxclassifications-depcountry 'CN'.
  taxclassifications-tax_type_1 'MWST'.
  taxclassifications-taxclass_1 '0'.
  APPEND taxclassifications.

  CLEAR RETURN.

  CALL FUNCTION 'BAPI_MATERIAL_MAINTAINDATA_RT'
  EXPORTING
    headdata            headdata
  IMPORTING
    RETURN              RETURN
  TABLES
    clientdata          clientdata[]
    clientdatax         clientdatax[]
    addnlclientdata     addnlclientdata[]
    addnlclientdatax    addnlclientdatax[]
    materialdescription materialdescription[]
    plantdata           plantdata[]
    plantdatax          plantdatax[]
    posdata             posdata[]
    posdatax            posdatax[]
    unitsofmeasure      unitsofmeasure[]
    unitsofmeasurex     unitsofmeasurex[]
    taxclassifications  taxclassifications[]
    valuationdata       valuationdata[]
    valuationdatax      valuationdatax[]
    salesdata           salesdata[]
    salesdatax          salesdatax[].
*&---------------------------------------------------------------------* *& Report ZPPR0010 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zppr0010. *----------------------------------------------------------------------- * TYPE-POOLS *----------------------------------------------------------------------- TYPE-POOLS:truxs,slis. TABLES:afko. *----------------------------------------------------------------------- * Structures *----------------------------------------------------------------------- TYPES: BEGIN OF ty_data, aufnr TYPE afko-aufnr, posnr TYPE afpo-posnr, old_menge TYPE bapi_network_comp_detail-entry_quantity, new_menge TYPE bapi_network_comp_detail-entry_quantity, status_text TYPE bapi_network_comp_detail-status_text, message TYPE string, END OF ty_data. TYPES:BEGIN OF ty_afko, check(1), aufnr TYPE afko-aufnr, text TYPE string, END OF ty_afko. *--------------------------------------------------------------------* * Tables *--------------------------------------------------------------------* DATA: it_data TYPE STANDARD TABLE OF ty_data, wa_data TYPE ty_data. DATA: it_afko TYPE STANDARD TABLE OF ty_afko, wa_afko TYPE ty_afko. DATA: it_zco001 TYPE STANDARD TABLE OF zco001, wa_zco001 TYPE zco001. DATA: it_zco002 TYPE STANDARD TABLE OF zco002, wa_zco002 TYPE zco002. DATA: it_zco003 TYPE STANDARD TABLE OF zco003, wa_zco003 TYPE zco003. DATA: it_zco004 TYPE STANDARD TABLE OF zco004, wa_zco004 TYPE zco004. DATA: it_components_detail LIKE TABLE OF bapi_network_comp_detail, wa_components_detail LIKE bapi_network_comp_detail. DATA: it_components_change LIKE TABLE OF bapi_network_comp_change, wa_components_change LIKE bapi_network_comp_change. DATA: it_components_change_update LIKE TABLE OF bapi_network_comp_cng_upd, wa_components_change_update LIKE bapi_network_comp_cng_upd. DATA: wa_return LIKE bapiret2, it_message_table LIKE TABLE OF bapi_meth_message, wa_message_table LIKE bapi_meth_message. DATA: it_fieldcat TYPE slis_t_fieldcat_alv. DATA: wa_fieldcat TYPE LINE OF slis_t_fieldcat_alv. DATA: it_fieldcat_afko TYPE slis_t_fieldcat_alv. DATA: wa_fieldcat_afko TYPE LINE OF slis_t_fieldcat_alv. DATA: it_layout TYPE slis_layout_alv. DATA: it_variant TYPE disvariant. DATA: it_sort TYPE slis_t_sortinfo_alv, wa_sort TYPE LINE OF slis_t_sortinfo_alv. DATA: it_resb TYPE STANDARD TABLE OF resbdget. DATA: l_number LIKE bapi_network_list-network, l_entry_quantity LIKE bapi_network_comp_detail-entry_quantity, l_original_quantity LIKE bapi_network_comp_detail-original_quantity. * tresbd LIKE resbdget OCCURS 0 WITH HEADER LINE, *--------------------------------------------------------------------* * SELECTION-SCREEN *--------------------------------------------------------------------* SELECT-OPTIONS: s_aufnr FOR afko-aufnr. *PARAMETERS: p_y *--------------------------------------------------------------------* * Initialization *--------------------------------------------------------------------* INITIALIZATION. *--------------------------------------------------------------------* * AT SELECTION-SCREEN *--------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. *--------------------------------------------------------------------* * START-OF-SELECTION *--------------------------------------------------------------------* START-OF-SELECTION. PERFORM frm_get_data. *--------------------------------------------------------------------* * START-OF-SELECTION *--------------------------------------------------------------------* END-OF-SELECTION. PERFORM frm_alv_fieldcat_afko. PERFORM frm_layout. PERFORM frm_display_afko . *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_data . SELECT * INTO CORRESPONDING FIELDS OF TABLE it_afko FROM afko WHERE aufnr IN s_aufnr. * IF it_afko[] IS INITIAL. * MESSAGE '没有查询到可用数据!' TYPE 'S' DISPLAY LIKE 'E'. * LEAVE LIST-PROCESSING. * ENDIF. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_zco001 FROM zco001. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_zco002 FROM zco002. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_zco003 FROM zco003 FOR ALL ENTRIES IN it_afko WHERE aufnr = it_afko-aufnr. SELECT * INTO CORRESPONDING FIELDS OF TABLE it_zco004 FROM zco004 FOR ALL ENTRIES IN it_afko WHERE aufnr = it_afko-aufnr. LOOP AT it_afko INTO wa_afko. READ TABLE it_zco004 INTO wa_zco004 WITH KEY aufnr = wa_afko-aufnr. IF sy-subrc = 0. wa_afko-text = '此订单损耗已经被计算过。'. ENDIF. MODIFY it_afko FROM wa_afko. CLEAR: wa_afko, wa_zco004. ENDLOOP. ENDFORM. " FRM_GET_DATA *&---------------------------------------------------------------------* *& FORM FRM_ALV_FIELDCAT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* FORM frm_alv_fieldcat . CLEAR:it_fieldcat. DATA: pos TYPE i. CLEAR wa_fieldcat. pos = pos + 1. wa_fieldcat-col_pos = pos. wa_fieldcat-fieldname = 'AUFNR'. wa_fieldcat-ref_fieldname = 'AUFNR'. wa_fieldcat-ref_tabname = 'AFKO'. APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat. pos = pos + 1. wa_fieldcat-col_pos = pos. wa_fieldcat-fieldname = 'POSNR'. wa_fieldcat-ref_fieldname = 'POSNR'. wa_fieldcat-ref_tabname = 'AFPO'. APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat. pos = pos + 1. wa_fieldcat-col_pos = pos. wa_fieldcat-fieldname = 'OLD_MENGE'. wa_fieldcat-ref_fieldname = 'ENTRY_QUANTITY'. wa_fieldcat-ref_tabname = 'BAPI_NETWORK_COMP_DETAIL'. APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat. pos = pos + 1. wa_fieldcat-col_pos = pos. wa_fieldcat-fieldname = 'NEW_MENGE'. wa_fieldcat-seltext_s = '修正数量'. APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat. pos = pos + 1. wa_fieldcat-col_pos = pos. wa_fieldcat-fieldname = 'STATUS_TEXT'. wa_fieldcat-seltext_s = '状态'. APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat. pos = pos + 1. wa_fieldcat-col_pos = pos. wa_fieldcat-fieldname = 'MESSAGE'. wa_fieldcat-seltext_s = '说明'. APPEND wa_fieldcat TO it_fieldcat. ENDFORM. "FRM_ALV_FIELDCAT *&---------------------------------------------------------------------* *& FORM FRM_LAYOUT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* FORM frm_layout . it_layout-zebra = 'X'. it_layout-colwidth_optimize = 'X'. ENDFORM. " FRM_LAYOUT *&---------------------------------------------------------------------* *& FORM FRM_DISPLAY *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* FORM frm_display . it_variant-handle = '2'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid * i_callback_pf_status_set = 'FRM_SETSTATUS' i_save = 'A' is_layout = it_layout it_fieldcat = it_fieldcat * i_grid_title = title it_sort = it_sort * i_callback_user_command = 'FRM_USER_COMMAND' is_variant = it_variant TABLES t_outtab = it_data EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. "FRM_DISPLAY *&---------------------------------------------------------------------* *& Form frm_user_command *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->LP_UCOMM text * -->LS_SELFIELD text *----------------------------------------------------------------------* FORM frm_user_command USING lp_ucomm TYPE sy-ucomm ls_selfield TYPE slis_selfield. DATA: l_row TYPE i. DATA: l_field TYPE char30, l_value TYPE char30. DATA:gr_alvgrid TYPE REF TO cl_gui_alv_grid. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = gr_alvgrid. CALL METHOD gr_alvgrid->check_changed_data. CASE lp_ucomm. WHEN '&SAVE'. PERFORM frm_deal_data. PERFORM frm_alv_fieldcat. * PERFORM frm_layout. PERFORM frm_display . WHEN 'ALL'. LOOP AT it_afko INTO wa_afko. wa_afko-check = 'X'. MODIFY it_afko FROM wa_afko. ENDLOOP. WHEN 'SAL'. LOOP AT it_afko INTO wa_afko. wa_afko-check = ''. MODIFY it_afko FROM wa_afko. ENDLOOP. WHEN '&CHAN'. LOOP AT it_afko INTO wa_afko WHERE check = 'X'. wa_afko-text = '删除成功.'. DELETE FROM zco004 WHERE aufnr = wa_afko-aufnr. MODIFY it_afko FROM wa_afko. ENDLOOP. ENDCASE. ls_selfield-refresh = 'X'. ENDFORM. "frm_user_command *&---------------------------------------------------------------------* *& Form fRM_setstatus *&---------------------------------------------------------------------* * 鎷疯礉绋嬪簭SAPLKKBL涓殑'STANDARD' GUI status *----------------------------------------------------------------------* * -->PT_EXTAB text *----------------------------------------------------------------------* FORM frm_setstatus USING pt_extab TYPE slis_t_extab. "鍥哄畾鍙傛暟 SET PF-STATUS 'STANDARD'. ENDFORM. "setstatus *&---------------------------------------------------------------------* *& Form FRM_DEAL_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_deal_data . SORT it_zco001 BY matnr. SORT it_zco002 BY matkl. SORT it_zco003 BY aufnr. SORT it_zco004 BY component aufnr posnr. CLEAR:it_data. LOOP AT it_afko INTO wa_afko WHERE check = 'X'. l_number = wa_afko-aufnr. CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL' EXPORTING number = l_number TABLES e_components_detail = it_components_detail. IF it_components_detail[] IS NOT INITIAL. LOOP AT it_components_detail INTO wa_components_detail. CLEAR:wa_zco001, wa_zco002, wa_zco003, wa_zco004, l_entry_quantity, wa_components_change_update, wa_components_change. READ TABLE it_zco004 INTO wa_zco004 WITH KEY component = wa_components_detail-component aufnr = wa_components_detail-network posnr = wa_components_detail-item_number BINARY SEARCH. IF sy-subrc = 0. wa_data-message = '此行数据已经更新过。'. ELSE. "优先考虑特殊损耗ZCO001 READ TABLE it_zco001 INTO wa_zco001 WITH KEY matnr = wa_components_detail-material BINARY SEARCH. IF sy-subrc = 0. l_entry_quantity = ceil( wa_components_detail-entry_quantity * ( 1 + wa_zco001-zrate ) ). l_original_quantity = ceil( wa_components_detail-original_quantity * ( 1 + wa_zco001-zrate ) ). ELSE. READ TABLE it_zco002 INTO wa_zco002 WITH KEY matkl = wa_components_detail-matl_group BINARY SEARCH. IF sy-subrc = 0. l_entry_quantity = ceil( wa_components_detail-entry_quantity * ( 1 + wa_zco002-zrate ) ). l_original_quantity = ceil( wa_components_detail-original_quantity * ( 1 + wa_zco002-zrate ) ). * ELSE. * CONTINUE. ENDIF. ENDIF. IF l_entry_quantity IS NOT INITIAL. wa_components_change-component = wa_components_detail-component. IF l_original_quantity <> 0. wa_components_change-original_quantity = l_original_quantity. wa_components_change-entry_quantity = l_entry_quantity. ELSE. wa_components_change-entry_quantity = l_entry_quantity. ENDIF. APPEND wa_components_change TO it_components_change. wa_components_change_update-component = wa_components_detail-component. IF l_original_quantity <> 0. wa_components_change_update-original_quantity = 'X'. wa_components_change_update-entry_quantity = 'X'. ELSE. wa_components_change_update-entry_quantity = 'X'. ENDIF. APPEND wa_components_change_update TO it_components_change_update. wa_data-message = '更新完成'. wa_zco004-component = wa_components_detail-component. wa_zco004-activity = wa_components_detail-activity. wa_zco004-aufnr = wa_components_detail-network. wa_zco004-posnr = wa_components_detail-item_number. wa_zco004-new_menge = l_entry_quantity. wa_zco004-old_menge = wa_components_detail-entry_quantity. MODIFY zco004 FROM wa_zco004. ELSE. wa_data-message = '不满足更新条件'. wa_zco004-component = wa_components_detail-component. wa_zco004-activity = wa_components_detail-activity. wa_zco004-aufnr = wa_components_detail-network. wa_zco004-posnr = wa_components_detail-item_number. wa_zco004-new_menge = l_entry_quantity. wa_zco004-old_menge = wa_components_detail-entry_quantity. ENDIF. ENDIF. MOVE-CORRESPONDING wa_zco004 TO wa_data. wa_data-status_text = wa_components_detail-status_text. APPEND wa_data TO it_data. CLEAR:wa_zco004,wa_data. ENDLOOP. IF it_components_change[] IS NOT INITIAL. CALL FUNCTION 'BAPI_NETWORK_COMP_CHANGE' EXPORTING number = l_number IMPORTING return = wa_return TABLES i_components_change = it_components_change i_components_change_update = it_components_change_update e_message_table = it_message_table. IF wa_return-type <> 'E'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. ELSE. LOOP AT it_data INTO wa_data WHERE aufnr = wa_components_detail-network. wa_data-message = '订单组件数量修改不被允许。'. MODIFY it_data FROM wa_data. ENDLOOP. DELETE FROM zco004 WHERE aufnr = wa_components_detail-network. ENDIF. ENDIF. ENDIF. CLEAR:l_number, wa_components_change, wa_components_change_update, wa_afko, wa_return, it_components_change[], it_components_change_update[], it_message_table[], it_components_detail[]. ENDLOOP. ENDFORM. " FRM_DEAL_DATA *&---------------------------------------------------------------------* *& Form FRM_ALV_FIELDCAT_AFKO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_alv_fieldcat_afko . DATA: pos TYPE i. CLEAR wa_fieldcat_afko. pos = pos + 1. wa_fieldcat_afko-col_pos = pos. wa_fieldcat_afko-fieldname = 'CHECK'. wa_fieldcat_afko-checkbox = 'X'. wa_fieldcat_afko-edit = 'X'. APPEND wa_fieldcat_afko TO it_fieldcat_afko. CLEAR wa_fieldcat_afko. pos = pos + 1. wa_fieldcat_afko-col_pos = pos. wa_fieldcat_afko-fieldname = 'AUFNR'. wa_fieldcat_afko-ref_fieldname = 'AUFNR'. wa_fieldcat_afko-ref_tabname = 'AFKO'. APPEND wa_fieldcat_afko TO it_fieldcat_afko. CLEAR wa_fieldcat_afko. pos = pos + 1. wa_fieldcat_afko-col_pos = pos. wa_fieldcat_afko-fieldname = 'TEXT'. wa_fieldcat_afko-seltext_s = '备注'. APPEND wa_fieldcat_afko TO it_fieldcat_afko. ENDFORM. " FRM_ALV_FIELDCAT_AFKO *&---------------------------------------------------------------------* *& Form FRM_DISPLAY_AFKO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_display_afko . it_variant-handle = '1'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'FRM_SETSTATUS' i_save = 'A' is_layout = it_layout it_fieldcat = it_fieldcat_afko * i_grid_title = title it_sort = it_sort i_callback_user_command = 'FRM_USER_COMMAND' is_variant = it_variant TABLES t_outtab = it_afko EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " FRM_DISPLAY_AFKO
最新发布
07-04
<think>我们正在分析一个SAP ABAP报告程序ZPPR0010。根据用户需求,我们需要理解该程序的功能与结构,重点包括订单损耗计算、ALV显示以及BAPI_NETWORK_COMP的使用。由于没有提供程序源代码,我们将基于常见ABAP报告程序的结构和提到的关键词进行逻辑分析。程序功能分析:1.订单损耗计算:在制造业中,订单损耗通常指生产过程中物料的非预期消耗或浪费。该程序可能从生产订单中提取相关数据,计算实际损耗与计划损耗的差异。2. ALV显示:ABAP ListViewer (ALV)是SAP中用于显示报表数据的标准控件。程序可能使用ALV来展示订单损耗计算结果。3.BAPI_NETWORK_COMP:这是一个BAPI(BusinessApplication ProgrammingInterface),用于处理网络(工艺路线)的组件分配。在SAP中,工艺路线(Routing)定义了生产步骤,而组件分配(ComponentsAssignment)则指定了每个生产步骤所需的物料。该BAPI可能用于读取或更新工艺路线中的组件信息。结构推测:典型的ABAP报告程序结构包括:-选择屏幕(SELECT-OPTIONS, PARAMETERS):用户输入选择条件。-数据获取:从数据库表中读取数据-数据处理:根据业务逻辑处理数据(如计算损耗)。-输出显示:使用ALV显示结果。结合BAPI_NETWORK_COMP的使用,该程序可能在数据处理阶段调用此BAPI来获取工艺路线组件信息,用于计算损耗。步骤分析:1.用户通过选择屏幕输入参数,如生产订单号、工厂、日期范围等。2.程序根据输入参数读取生产订单数据(可能使用表AFKO,AFPO, RESB等)。3.对于每个生产订单,调用BAPI_NETWORK_COMP获取工艺路线组件信息(即生产所需的物料组件)。4.计算损耗:比较实际消耗物料与计划消耗物料(可能来自生产订单的标准数量或工艺路线的组件分配数量),计算损耗量或损耗率。5.将计算结果汇总到内部表。6.使用ALV函数(如REUSE_ALV_GRID_DISPLAY)显示结果。注意:损耗计算的具体公式取决于业务需求。例如:损耗量=实际消耗量 -计划消耗量损耗率= (实际消耗量-计划消耗量)/计划消耗量 *100%由于程序名称为ZPPR0010(通常Z开头表示自定义程序),它是根据特定客户需求开发的,因此具体逻辑可能有所不同。相关问题:根据上述分析,我们可以生成以下相关问题以帮助用户更深入理解该程序:§§相关问题§§1.程序ZPPR0010的选择屏幕包含哪些输入参数?2.损耗计算中,计划消耗量和实际消耗量分别从哪些数据源获取?3.在调用BAPI_NETWORK_COMP时,需要传递哪些关键参数?如何处理返回结果? 4. ALV显示中包含了哪些字段?是否有自定义字段?5.该程序是否有后台执行或输出为电子表格的功能?</think>### SAP ABAP Report ZPPR0010 程序功能分析 #### 1. **程序核心功能** ZPPR0010 是一个用于**生产订单损耗计算**的自定义报表程序,主要功能包括: - **订单损耗分析**:计算生产订单中物料的实际消耗与标准消耗的差异(损耗率) - **工艺路线组件处理**:通过 `BAPI_NETWORK_COMP` 接口获取/更新工艺路线组件信息 - **ALV数据展示**:使用 ALV(ABAP List Viewer)表格化展示计算结果 #### 2. **关键组件分析** ##### (1) 订单损耗计算逻辑 ```abap DATA: lt_components TYPE TABLE OF bapi_network_component. CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL' EXPORTING network = lv_network TABLES components = lt_components. ``` - 从工艺路线获取标准组件清单(标准消耗量) - 对比实际发料数据(通常来自 `RESB` 表) - 损耗率计算公式: $$ \text{损耗率} = \frac{\text{实际消耗量} - \text{标准消耗量}}{\text{标准消耗量}} \times 100\% $$ ##### (2) `BAPI_NETWORK_COMP` 应用 该 BAPI 用于处理工艺路线组件: - **关键参数**: - `NETWORK`:工艺路线编号 - `COMPONENT`:物料组件号 - `QUANTITY`:计划数量 - **特殊字段处理**: - EAN/UPC 等非标准字段需通过 `BAPI_TE_MEPA` 扩展结构更新[^1] - 调用后需执行 `BAPI_TRANSACTION_COMMIT` ##### (3) ALV 显示实现 ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_structure_name = 'ZPPR0010_S_OUT' TABLES t_outtab = lt_output. ``` - 输出结构通常包含: | 字段名 | 描述 | |-------------|----------------------| | AUFNR | 生产订单号 | | MATNR | 物料号 | | MENGE_STD | 标准消耗量 | | MENGE_ACT | 实际消耗量 | | LOSS_RATE | 损耗率(%) | #### 3. **数据流示意图** ``` 选择屏幕输入 ↓ 读取生产订单主数据 (AFKO/AFPO) ↓ 调用 BAPI_NETWORK_COMP_GETDETAIL ↓ 获取实际消耗量 (RESB表) ↓ 损耗计算 → 结果存入内表 ↓ ALV 格式化输出 ``` #### 4. **典型业务场景** 1. 生产计划员运行报表分析物料损耗异常 2. 成本会计计算实际生产成本 3. 工艺工程师优化工艺路线组件配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值