REPORT ZMMMDE001 NO STANDARD PAGE HEADING LINE-SIZE 170 MESSAGE-ID MG.

*----------------------------------------------------------------------*
* Program     :  ZMMMDE001                                             *
* Author      :  Patrick,Song                                          *
* Date        :  Sep 10, 2008                                          *
* Code type   :  conversion                                            *
* Version     :  new creation                                          *
* (interface/conversion/on-line transaction/report)                    *
*                                                                      *
*----------------------------------------------------------------------*
* Error handling :                                                     *
*----------------------------------------------------------------------*
* 1.                                                                   *
*                                                                      *
*----------------------------------------------------------------------*
* Change log :                                                         *
*----------------------------------------------------------------------*
* CR#       :                                                          *
* Corr. no. :                                                          *
* Date      :                                                          *
* Author    :                                                          *
* Change    :                                                          *
*                                                                      *
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
* include program & subrouting                                         *
*----------------------------------------------------------------------*
INCLUDE   : ZBCDWI000 .
TYPE-POOLS: KCDE.
TYPE-POOLS: SLIS.
*----------------------------------------------------------------------*
* tables declaration                                                   *
*----------------------------------------------------------------------*
TABLES: AUSP,    " Characteristic Values
        MARC,    " Plant Data for Material
        MARA,    " General Material Data
        MVKE,    " Sales Data for Material
        T001L,   " Storage Locations
        T006A,   " Assign Internal to Language-Dependent Unit
        T134.    " Material Types

*----------------------------------------------------------------------*
* selection screen definition                                          *
*----------------------------------------------------------------------*
*  Input file information block B1
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-SC1 .
PARAMETER:  P_BASIC  LIKE RLGRAP-FILENAME OBLIGATORY .
PARAMETERS: P_FILE   LIKE RLGRAP-FILENAME OBLIGATORY .
SELECTION-SCREEN END OF BLOCK A1.
PARAMETERS: P_MMAM   AS CHECKBOX DEFAULT SPACE .
PARAMETERS: P_MARC   AS CHECKBOX DEFAULT SPACE .
PARAMETERS: P_QMDATA AS CHECKBOX DEFAULT SPACE .
*PARAMETERS: P_CLASS  AS CHECKBOX .

PARAMETERS: P_BKJOB AS CHECKBOX DEFAULT SPACE .

*----------------------------------------------------------------------*
* Internal tables and field strings                                    *
*----------------------------------------------------------------------*
*-* to store uploaded data
* define table to store tempoary data => Material Views Selection
DATA INT_TAB     TYPE KCDE_INTERN_STRUC OCCURS 0 WITH HEADER LINE.

*----------------------------------------------------------------------*
* Global program variables                                             *
*----------------------------------------------------------------------*
* TO STORE MATERIAL MASTER DATA WHICH NEED TO BE UPLOADED
*** Generated data section with specific formatting - DO NOT CHANGE  ***
DATABEGIN OF ITAB OCCURS 0.
DATA: MATNR(018).                                           "物料号  ****
DATA: BISMT(018).                                           "旧物料号****
DATA: MAKTX(040).                                           "物料描述****
DATA: MBRSH(001).                                           "行业领域****
DATA: MTART(004).                                           "物料类型****
DATA: WERKS(004).                                           "工厂    ****
DATA: LGORT(004).                                           "库存地点****
DATA: VKORG(004).                                           "销售组织****
DATA: VTWEG(002).                                           "分销渠道****
DATA: MEINS(003).                                           "基本计量单位****
DATA: SPART(002).                                           "产品组****
DATA: MSTAE(002).                                           "跨工厂物料状态
DATA: MATKL(009).                                           "物料组****
DATA: GEWEI(003).                                           "重量单位****
DATA: BRGEW(017).                                           "毛重***
DATA: NTGEW(017).                                           "净重***
DATA: ZEINR(022).                                           "产品图号***
DATA: KLART(003).                                           "类别种类****
DATA: CLASS_01(018).                                        "类别****
DATA: MWERT_SCR(030).                                       "安规标准****
DATA: MWERT_SER(030).                                       "产品系列号****
DATA: MWERT_DESC1(090).                                     "物料描述1****
DATA: MWERT_DESC11(030).                                    "物料描述1****
DATA: MWERT_DESC12(030).                                    "物料描述1****
DATA: MWERT_DESC2(090).                                     "物料描述2****
DATA: MWERT_DESC21(030).                                    "物料描述2****
DATA: MWERT_DESC22(030).                                    "物料描述2****
DATA: EKGRP(003).                                           "采购组    ****
DATA: BSTME(003).                                           "订单单位  ****
DATA: UMREN(006).                                           "转换比例中订单单位数量
DATA: WEBAZ(003).                                           "收货处理时间 ****
DATA: KORDB(001).                                           "货源清单     ****
DATA: USEQU(001).                                           "配额安排     ****
DATA: KZKRI(001).                                           "是否合同管控*****
DATA: DWERK(004).                                           "交货工厂*****
DATA: SPART_GRP(002).                                       "产品组*****
DATA: TAXKM(001).                                           "税*****
DATA: VERSG(001).                                           "物料统计组*****
DATA: KONDM(002).                                           "物料定价组*****
DATA: KTGRM(002).                                           "科目设置组*****
DATA: MTPOS(004).                                           "项目类别组*****
DATA: BOX01(006).                                           "每箱对应的产品数量*****
DATA: BOX02(006).                                           "每栈板对应的产品数量*****
DATA: TRAGR(004).                                           "运输组       *****
DATA: LADGR(004).                                           "装载组       *****
DATA: MTVFP(002).                                           "可用性检查   *****
DATA: DISMM(002).                                           "MRP 类型     ****
DATA: DISGR(004).                                           "MRP组        ****
DATA: DISPO(003).                                           "MRP 控制者   ******
DATA: DISLS(002).                                           "批量大小     ****
DATA: BSTRF(017).                                           "舍入值       ****
DATA: BESKZ(001).                                           "采购类型 *   ****
DATA: SOBSL(002).                                           "特殊采购类   ****
DATA: RGEKZ(001).                                           "反冲         ****
DATA: LGPRO(004).                                           "生产仓储地点 *****
DATA: LGFSB(004).                                           "外部采购仓储地点*
DATA: DZEIT(003).                                           "自制生产时间 ****
DATA: WEBAZ_GR(003).                                        "收货处理时间 ****
DATA: PLIFZ(003).                                           "计划交货时间 ****
DATA: FHORI(003).                                           "计划边际码   ****
DATA: EISBE(017).                                           "安全库存     ****
DATA: PERKZ(001).                                           "期间标识     ****
DATA: KAUSF(006).                                           "部件废品(%)  ****
DATA: MTVFP1(002).                                          "可用性检查   ****
DATA: SBDKZ(001).                                           "独立/集中    ****
DATA: XCHPF(001).                                           "批次管理     ****
DATA: LGPBE(010).                                           "库存仓位     ****
DATA: INSMK(001).                                           "过帐到检验库存***
DATA: PRFRQ(006).                                           "检查间隔天数 ****
DATA: QMPUR(001).                                           "QM采购激活   ****
DATA: SSQSS(008).                                           "QM 控制码    ****
DATA: AKTIV_01(001).                                        "激活检验类型01***
DATA: AKTIV_03(001).                                        "激活检验类型03***
DATA: AKTIV_04(001).                                        "激活检验类型04***
DATA: AKTIV_05(001).                                        "激活检验类型05***
DATA: AKTIV_09(001).                                        "激活检验类型09***
DATA: BKLAS(004).                                           "评估类       ****
DATA: VPRSV(001).                                           "价格控制     ****
DATA: PEINH(006).                                           "价格单位     ****
DATA: VERPR(015).                                           "移动平均价   ****
DATA: STPRS(015).                                           "标准价格     ****
DATA: EKALR(001).                                           "物料根据数量结构进行成本核算*****
DATA: HKMAT(001).                                           "物料来源     ****
DATA: HRKFT(004).                                           "原始组       ****
DATA: KOSGR(010).                                           "间接费分组   ****
DATA: AWSLS(006).                                           "差异码       ****
DATA: ZPLP1(014).                                           "未来计划价格1****
DATA: ZPLD1(010).                                           "未来计划价格1日期*****
DATA: ZPLP2(014).                                           "未来计划价格2****
DATA: ZPLD2(010).                                           "未来计划价格2日期*****
DATA: UMREZ(006).                                           "转换比例fm
DATAEND OF ITAB.
* define internal table to store views selection for material type & plant
DATABEGIN OF VWS_ITAB OCCURS 0 .
DATA: MTART(004)        TYPE C" Material Type
DATA: BASIC_VIEWS(001)  TYPE C" Flag for Basic View
DATA: CLASS_VIEWS(001)  TYPE C" Flag for Classification
DATA: WERKS(004)        TYPE C" Plant Data
DATA: PROCUREMENT(001)  TYPE C" Flag for procurement Type
DATA: SALES_VIEWS(001)  TYPE C" Flag for Sales Views
DATA: PURCH_VIEWS(001)  TYPE C" Flag for Purchasing Views
DATA: MRP_VIEWS(001)    TYPE C" Flag for MRP Views
DATA: WKSCH_VIEWS(001)  TYPE C" Flag for Work Schedule
DATA: FOREC_VIEWS(001)  TYPE C" Flag for Forecasting
DATA: PRT_VIEWS(001)    TYPE C" Flag for PRT Tools
DATA: STORAGE_VIEW(001TYPE C" Flag for storage views
DATA: WH_VIEWS(001)     TYPE C" Flag for Warehouse Management
DATA: QA_VIEWS(001)     TYPE C" Flag for Quality Management
DATA: ACCTS_VIEWS(001)  TYPE C" Flag for Accountings
DATA: COSTS_VIEWS(001)  TYPE C" Flag for Costings
DATA: BATCH_MANAGE(001TYPE C" Flag for Batch Management
DATA: REMARKS(020)      TYPE C" Remarks
DATAEND   OF VWS_ITAB.

CONSTANTS: XFLAG(001)   TYPE C VALUE 'X'.
DATA     : L_CLASS(001TYPE C .

DATA: LINE_CNT TYPE I .

**-* *-* *-*  define internal table for BAPI function call *-* *-* *-* *-* *-*
*-* Material Descriptions
DATA: MATERIALDESCRIPTION   LIKE BAPI_MAKT       OCCURS 0 WITH HEADER LINE .
*-* Units of Measure
DATA: UNITSOFMEASURE        LIKE BAPI_MARM       OCCURS 0 WITH HEADER LINE .
*-* Checkbox Structure for BAPI_MARM
DATA: UNITSOFMEASUREX       LIKE BAPI_MARMX      OCCURS 0 WITH HEADER LINE .
*-* International Article Numbers (EANs)
DATA: INTERNATIONALARTNOS   LIKE BAPI_MEAN       OCCURS 0 WITH HEADER LINE .
*-* Long Texts
DATA: MATERIALLONGTEXT      LIKE BAPI_MLTX       OCCURS 0 WITH HEADER LINE .
*-* Tax Data
DATA: TAXCLASSIFICATIONS    LIKE BAPI_MLAN       OCCURS 0 WITH HEADER LINE .
*-* Substitute Structure for Return Parameter BAPIRET2
DATA: RETURNMESSAGES        LIKE BAPI_MATRETURN2 OCCURS 0 WITH HEADER LINE .
*-* Production Resource Tool (PRT) Fields in the Material Master
DATA: PRTDATA               LIKE BAPI_MFHM       OCCURS 0 WITH HEADER LINE .
*-* Checkbox Structure for BAPI_MFHM
DATA: PRTDATAX              LIKE BAPI_MFHMX      OCCURS 0 WITH HEADER LINE .
*-* Ref. structure for BAPI parameter ExtensionIn/ExtensionOut
DATA: EXTENSIONIN           LIKE BAPIPAREX       OCCURS 0 WITH HEADER LINE .
*-* Checkbox Structure for Extension In/Extension Out
DATA: EXTENSIONINX          LIKE BAPIPAREXX      OCCURS 0 WITH HEADER LINE .
*-* /NFM/: NF Charge Weights for Materials on Org. Level
DATA: NFMCHARGEWEIGHTS      LIKE /NFM/BAPITVGW   OCCURS 0 WITH HEADER LINE .
*-* /NFM/: Update Information for /NFM/BAP
DATA: NFMCHARGEWEIGHTSX     LIKE /NFM/BAPITVGWX  OCCURS 0 WITH HEADER LINE .
*-* /NFM/: NF Structural Weights
DATA: NFMSTRUCTURALWEIGHTS  LIKE /NFM/BAPITKGW   OCCURS 0 WITH HEADER LINE .
*-* /NFM/: Update Information for /NFM/BAPITKGW
DATA: NFMSTRUCTURALWEIGHTSX LIKE /NFM/BAPITKGWX  OCCURS 0 WITH HEADER LINE .
*-* Returned Parameters
DATARETURN                LIKE BAPIRET2."  OCCURS 0 WITH HEADER LINE .

*
DATA: INSPECTIONCTRL LIKE BAPI1001004_QMAT OCCURS 0 WITH HEADER LINE .
*
DATA: QM_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

* define structure data for BAPIs function of material master creation
DATA: HEADDATA              LIKE BAPIMATHEAD.  "Header Segment with Control Information
DATA: CLIENTDATA            LIKE BAPI_MARA.    "Material Data at Client Level
DATA: CLIENTDATAX           LIKE BAPI_MARAX.   "Checkbox Structure for BAPI_MARA
DATA: PLANTDATA             LIKE BAPI_MARC.    "Material Data at Plant Level
DATA: PLANTDATAX            LIKE BAPI_MARCX.   "Checkbox Structure for BAPI_MARC
DATA: FORECASTPARAMETERS    LIKE BAPI_MPOP.    "Forecast Parameters
DATA: FORECASTPARAMETERSX   LIKE BAPI_MPOPX.   "Checkbox Structure for BAPI_MPOP
DATA: PLANNINGDATA          LIKE BAPI_MPGD.    "Change Document Structure for Material Master/Product Group
DATA: PLANNINGDATAX         LIKE BAPI_MPGDX.   "Checkbox Structure for BAPI_MPGD
DATA: STORAGELOCATIONDATA   LIKE BAPI_MARD.    "Material Data at Storage Location Level
DATA: STORAGELOCATIONDATAX  LIKE BAPI_MARDX.   "Checkbox Structure for BAPI_MARD
DATA: VALUATIONDATA         LIKE BAPI_MBEW.    "Valuation Data
DATA: VALUATIONDATAX        LIKE BAPI_MBEWX.   "Checkbox Structure for BAPI_MBEW
DATA: WAREHOUSENUMBERDATA   LIKE BAPI_MLGN.    "Warehouse Number Data
DATA: WAREHOUSENUMBERDATAX  LIKE BAPI_MLGNX.   "Checkbox Structure for BAPI_MLGN
DATA: SALESDATA             LIKE BAPI_MVKE.    "Sales Data
DATA: SALESDATAX            LIKE BAPI_MVKEX.   "Checkbox Structure for BAPI_MVKE
DATA: STORAGETYPEDATA       LIKE BAPI_MLGT.    "Storage Type Data
DATA: STORAGETYPEDATAX      LIKE BAPI_MLGTX.   "Checkbox Structure for BAPI_MLGT

*Batchinputdata of single transaction
DATA:   BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
*Messages of call transaction
DATA:   MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
* define internal table to store uploading result ...
DATABEGIN OF I_RESULT OCCURS 0.
DATA: MATNR LIKE ITAB-MATNR.
DATA: WERKS LIKE ITAB-WERKS.
DATA: MTART LIKE ITAB-MTART.
DATA: MAKTX LIKE ITAB-MAKTX.
DATA: MEINS LIKE ITAB-MEINS.
        INCLUDE STRUCTURE RETURNMESSAGES.
DATA: QMVIEWS(001).
DATA: MESSAGE01 LIKE RETURNMESSAGES-MESSAGE.
DATA: MESSAGE02 LIKE RETURNMESSAGES-MESSAGE.
DATA: SELK(001TYPE C .
DATAEND   OF I_RESULT.

DATABEGIN OF I_ERROR  OCCURS 0.
DATA: MATNR LIKE ITAB-MATNR.
DATA: WERKS LIKE ITAB-WERKS.
DATA: MTART LIKE ITAB-MTART.
DATA: MEINS LIKE ITAB-MEINS.
DATAEND OF I_ERROR.
*-* define parameter to store line count
DATALINE  TYPE I.
DATA: L_CNT TYPE I.
DATA: INT_CNT TYPE I .

DATA: GIT_BAPI1003    LIKE BAPI1003_ALLOC_VALUES_NUM  OCCURS 0 WITH HEADER LINE,
      GIT_VALUES_CHAR LIKE BAPI1003_ALLOC_VALUES_CHAR OCCURS 0 WITH HEADER LINE,
      GIT_VALUES_CURR LIKE BAPI1003_ALLOC_VALUES_CURR OCCURS 0 WITH HEADER LINE,
      GIT_VALUES_LIST LIKE BAPI1003_ALLOC_LIST        OCCURS 0 WITH HEADER LINE,
      GIT_BAPIRET2    LIKE BAPIRET2                   OCCURS 0 WITH HEADER LINE,
      LS_BAPIRET2     TYPE BAPIRET2.
DATA: GS_BAPI1003     TYPE BAPI1003_ALLOC_VALUES_NUM,
      GS_VALUES_CHAR  TYPE BAPI1003_ALLOC_VALUES_CHAR,
      GS_VALUES_CURR  TYPE BAPI1003_ALLOC_VALUES_CURR,
      GC_FLAG_X(1)    TYPE C VALUE 'X'.

DATA: G_MATNR_CHK    LIKE ITAB-MATNR .
DATA: M_MATNR_CHK    LIKE ITAB-MATNR .
DATA: S_STATUS       TYPE SLIS_FORMNAME VALUE 'STANDARD_ST01',
      S_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND-ALV'.

*----------------------------------------------------------------------*
* TOP-OF-PAGE.
*----------------------------------------------------------------------*
TOP-OF-PAGE.
  PERFORM COLUMN_HEADER.

*----------------------------------------------------------------------*
* initialization.                                                      *
*----------------------------------------------------------------------*
INITIALIZATION.
  REFRESH: ITAB, VWS_ITAB, BDCDATA, MESSTAB, I_RESULT, I_ERROR.
  CLEAR  : ITAB, VWS_ITAB, BDCDATA, MESSTAB, I_RESULT, I_ERROR.
  IF SY-UNAME CA 'USER'.
* set default value for data migration => Background Job
    P_BKJOB = 'X'.
  ENDIF .

*----------------------------------------------------------------------*
* At Selection-screen                                                  *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  CALL FUNCTION 'WS_FILENAME_GET'             "Get file name
     EXPORTING
*            DEF_FILENAME   = ' '
*            DEF_PATH       = ' '
           MASK             = ',*.* ,*.*.'
           MODE             = '0'
           TITLE            = TEXT-H10
     IMPORTING
           FILENAME         = P_FILE
*            RC             =
     EXCEPTIONS
           INV_WINSYS       = 1
           NO_BATCH         = 2
           SELECTION_CANCEL = 3
           SELECTION_ERROR  = 4
           OTHERS           = 5.
  IF SY-SUBRC <> 0.
*            MESSAGE E016 WITH P_PATH.
  ENDIF.

*----------------------------------------------------------------------*
* At Selection-screen                                                  *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_BASIC.

  CALL FUNCTION 'WS_FILENAME_GET'             "Get file name
     EXPORTING
*            DEF_FILENAME     = ' '
*            DEF_PATH         = ' '
           MASK             = ',*.* ,*.*.'
           MODE             = '0'
           TITLE            = TEXT-H10
     IMPORTING
           FILENAME         = P_BASIC
*            RC               =
     EXCEPTIONS
           INV_WINSYS       = 1
           NO_BATCH         = 2
           SELECTION_CANCEL = 3
           SELECTION_ERROR  = 4
           OTHERS           = 5.
  IF SY-SUBRC <> 0.
*            MESSAGE E016 WITH P_PATH.
  ENDIF.

*--------------------------------------------------------------------*
* at selection-screen output
*--------------------------------------------------------------------*
AT SELECTION-SCREEN ON P_MMAM .
  IF NOT P_MMAM IS INITIAL .
    MOVE XFLAG TO P_MARC.
    MOVE XFLAG TO P_QMDATA.
  ENDIF.

*--------------------------------------------------------------------*
* at selection-screen output
*--------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT .

*  PERFORM MODIFY_SCREEN .

*----------------------------------------------------------------------*
* Start-of-selection                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM DETERMINE_MATERIAL_VIEWS .
  PERFORM UPLOAD_DATA.
  SORT ITAB BY MATNR WERKS DESCENDING.
  CLEAR: LINE_CNT .
  DESCRIBE TABLE ITAB LINES LINE_CNT .

  LOOP AT ITAB .
    TRANSLATE ITAB-MATNR TO UPPER CASE .
    TRANSLATE ITAB-GEWEI TO UPPER CASE .

    ITAB-MWERT_DESC11 = ITAB-MWERT_DESC1+30(30).
    ITAB-MWERT_DESC12 = ITAB-MWERT_DESC1+60(30).
    ITAB-MWERT_DESC1  = ITAB-MWERT_DESC1+0(30).

    ITAB-MWERT_DESC21 = ITAB-MWERT_DESC2+30(30).
    ITAB-MWERT_DESC22 = ITAB-MWERT_DESC2+60(30).
    ITAB-MWERT_DESC2  = ITAB-MWERT_DESC2+0(30).

    IF NOT ITAB-MATNR IS INITIAL .
      PERFORM FORMAT_ALPHA_OUTPUT CHANGING ITAB-MATNR .
      WRITE:/ ITAB-MATNR UNDER TEXT-C01,
              ITAB-MAKTX UNDER TEXT-C06,
              ITAB-NTGEW UNDER TEXT-C08,
              ITAB-MTART UNDER TEXT-C03,
              ITAB-WERKS UNDER TEXT-C02,
              ITAB-VKORG UNDER TEXT-C09,
              ITAB-LGPRO UNDER TEXT-C10,
              ITAB-LGFSB UNDER TEXT-C11,
              ITAB-LGORT UNDER TEXT-C04,
              ITAB-BESKZ UNDER TEXT-C05,
              ITAB-SOBSL UNDER TEXT-C07.
      IF ITAB-WERKS = '1005' OR ITAB-WERKS = '1006'.
        MOVE 'F' TO ITAB-BESKZ.
      ENDIF .
      IF ITAB-BESKZ IS INITIAL AND ( ITAB-MTART EQ 'ROH'  OR
                                     ITAB-MTART EQ 'ROH1' OR
                                     ITAB-MTART EQ 'ROH2' OR
                                     ITAB-MTART EQ 'ROH3' OR
                                     ITAB-MTART EQ 'UNBW' OR
                                     ITAB-MTART EQ 'LEIH' ).
        MOVE 'F' TO ITAB-BESKZ.
      ENDIF .
* Check if MRP Controller is fit for Plant and Material Type or not
      IF ITAB-WERKS = '2001' OR ITAB-WERKS = '2003' OR ITAB-WERKS = '2004'.
        IF ITAB-MTART EQ 'ROH'.
          IF ITAB-DISPO+0(1NE 'M'.
            MOVE-CORRESPONDING ITAB TO I_ERROR.
            COLLECT: I_ERROR.
            CLEAR  : I_ERROR.
          ENDIF.
        ENDIF.
      ENDIF .

      IF ITAB-WERKS = '2001' OR ITAB-WERKS = '2003' OR ITAB-WERKS = '2004'.
        IF ITAB-MTART EQ 'HALB'.
          IF ITAB-DISPO+0(1EQ 'M'.
            MOVE-CORRESPONDING ITAB TO I_ERROR.
            COLLECT: I_ERROR.
            CLEAR  : I_ERROR.
          ENDIF.
        ENDIF.
      ENDIF .

      IF ITAB-BRGEW = 'G' OR ITAB-BRGEW = 'g' .
        MOVE-CORRESPONDING ITAB TO I_ERROR.
        COLLECT: I_ERROR.
        CLEAR  : I_ERROR.
      ENDIF .
      MODIFY ITAB .
    ELSE.
      DELETE ITAB .
    ENDIF .
  ENDLOOP .

*----------------------------------------------------------------------*
* End-of-selection                                                     *
*----------------------------------------------------------------------*
END-OF-SELECTION.
  IF I_ERROR[] IS INITIAL.
    SET PF-STATUS 'P1100'.
  ELSE.
    WRITE:/ '请检查以下物料各个字段值:'.
    ULINE .
    LOOP AT I_ERROR .
      WRITE: / I_ERROR-MATNR COLOR COL_NEGATIVE,
               I_ERROR-WERKS COLOR COL_NEGATIVE.
    ENDLOOP .
  ENDIF .

  WRITE:/ TEXT-T00, LINE_CNT COLOR COL_KEY.
*----------------------------------------------------------------------*
* at user-command                                                      *
*----------------------------------------------------------------------*
AT USER-COMMAND  .
  CASE SY-UCOMM .
    WHEN 'MDRCRT' .
      REFRESH: I_RESULT .
      CLEAR  : I_RESULT .
      PERFORM MATERIAL_MAINTAIN .
      PERFORM PREPARE_ALV_FIELDS.
      PERFORM DISPLAY_ALV_RESULT.
  ENDCASE .

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
  APPEND BDCDATA.
ENDFORM.                    "BDC_FIELD


*&---------------------------------------------------------------------*
*&      Form  UPLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .

  CALL FUNCTION 'UPLOAD'
    EXPORTING
      FILENAME                = P_FILE
      FILETYPE                = 'DAT'
    TABLES
      DATA_TAB                = ITAB
    EXCEPTIONS
      CONVERSION_ERROR        = 1
      INVALID_TABLE_WIDTH     = 2
      INVALID_TYPE            = 3
      NO_BATCH                = 4
      UNKNOWN_ERROR           = 5
      GUI_REFUSE_FILETRANSFER = 6
      OTHERS                  = 7.

  IF ITAB[] IS INITIAL.
    MESSAGE '导入数据为空,请确认后重新导入! ' TYPE 'I'.
    EXIT.
  ENDIF.

ENDFORM.                    " UPLOAD_DATA

*&---------------------------------------------------------------------*
*&      Form  MATERIAL_MAINTAIN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MATERIAL_MAINTAIN .
  DATA: L_MARA TYPE I .
  DATA: L_QMATV LIKE MARC-QMATV .
  DATA: L_MARC(001).
  DATA: N_MATNR_CHK LIKE ITAB-MATNR .
  DATA: O_MATNR_CHK LIKE ITAB-MATNR .
  CLEAR: N_MATNR_CHK, O_MATNR_CHK.
  SORT VWS_ITAB BY MTART.
  IF NOT P_BKJOB IS INITIAL .
    PERFORM OPEN_GROUP .
  ENDIF .
  LOOP AT ITAB .
    CLEAR: L_CLASS, L_QMATV, L_MARC, L_MARA.
* move-corresponding data to header data => HEADDATA
    CLEAR: HEADDATA,
           CLIENTDATA,            CLIENTDATA,
           PLANTDATA,             PLANTDATAX,
           FORECASTPARAMETERS,    FORECASTPARAMETERSX,
           PLANNINGDATA,          PLANNINGDATAX,
           STORAGELOCATIONDATA,   STORAGELOCATIONDATAX,
           VALUATIONDATA,         VALUATIONDATAX,
           WAREHOUSENUMBERDATA,   WAREHOUSENUMBERDATAX,
           SALESDATA,             SALESDATAX,
           STORAGETYPEDATA,       STORAGETYPEDATAX.
* get customizing views which need to be selected
    CLEAR: VWS_ITAB .
    READ TABLE VWS_ITAB WITH KEY MTART = ITAB-MTART
                                 WERKS = ITAB-WERKS
                           PROCUREMENT = ITAB-BESKZ .
***** Check Material Plant Data Maintain Or Not
    CLEAR: MARC .
    SELECT SINGLE * FROM MARC CLIENT SPECIFIED
                   WHERE MANDT EQ SY-MANDT
                     AND MATNR EQ ITAB-MATNR
                     AND WERKS EQ ITAB-WERKS .
    IF SY-SUBRC EQ 0 .
      IF ITAB-WERKS EQ '2001' OR
         ITAB-WERKS EQ '2003' OR
         ITAB-WERKS EQ '2004' .
        MOVE MARC-QMATV TO L_QMATV .
      ELSE .
        MOVE XFLAG TO L_QMATV.
*        CLEAR: L_QMATV.
      ENDIF .
      MOVE XFLAG    TO L_MARC  .
    ELSE.
      IF ITAB-WERKS EQ '1005' OR ITAB-WERKS EQ '1006'.
        MOVE XFLAG TO L_QMATV.
      ELSE.
        CLEAR: L_QMATV.
      ENDIF.
      CLEAR: L_MARC .
    ENDIF .

*** Update QM Data or not
    IF NOT P_QMDATA IS INITIAL .
      IF ITAB-WERKS EQ '1005' OR ITAB-WERKS EQ '1006'.
        MOVE XFLAG TO L_QMATV.
      ELSE.
        CLEAR: L_QMATV.
      ENDIF.
    ENDIF .

*** Update Plant Data or not
    IF NOT P_MARC IS INITIAL .
      CLEAR: L_MARC .
    ENDIF .
    IF L_MARC IS INITIAL.
      IF NOT P_MMAM IS INITIAL .
        CLEAR: MARA .
        SELECT SINGLE * FROM MARA CLIENT SPECIFIED
                       WHERE MANDT EQ SY-MANDT
                         AND MATNR EQ ITAB-MATNR .
        IF SY-SUBRC = 0.
          IF ITAB-MTART <> MARA-MTART .
            PERFORM MATERIAL_TYPE_CHANGE .
          ENDIF .
        ENDIF .
      ENDIF .
* Conver value to uper case
      TRANSLATE ITAB-MEINS  TO UPPER CASE.
      IF ITAB-MEINS EQ 'G' OR ITAB-MEINS EQ 'g'.
        ITAB-MEINS = 'g'.
      ELSE.
        TRANSLATE ITAB-MEINS  TO UPPER CASE.
      ENDIF .
      TRANSLATE ITAB-GEWEI  TO UPPER CASE.
      PERFORM MAP_MATERIAL_DESCRIPTION .
      PERFORM MAP_MATERIAL_MASTER_DATA .
* determine & select views for material maintain
      CASE VWS_ITAB-BASIC_VIEWS.
        WHEN  'X'.
          MOVE XFLAG      TO HEADDATA-BASIC_VIEW.  "Basic Views
      ENDCASE.
      CASE VWS_ITAB-SALES_VIEWS.
        WHEN  'X'.
          IF ITAB-SOBSL NE '50'" If phantom item, not required for Accts & Costs % QA Views
** assign plant data & ** assign update information
            IF NOT ITAB-VKORG IS INITIAL .
              MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
              MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
              MOVE XFLAG        TO HEADDATA-SALES_VIEW.  "Sales Views
              PERFORM MAP_SALES_DATA .
            ENDIF .
          ENDIF.
      ENDCASE .
      CASE VWS_ITAB-PURCH_VIEWS.
        WHEN  'X'.
** assign plant data & ** assign update information
          IF ITAB-SOBSL NE '50'.
            IF NOT ITAB-EKGRP IS INITIAL .
              MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
              MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
              MOVE XFLAG        TO HEADDATA-PURCHASE_VIEW."Purchasing View
              PERFORM MAP_PURCHASING_DATA .
            ENDIF .
          ENDIF .
      ENDCASE .
************ MRP VIEWS ****************
      CASE VWS_ITAB-MRP_VIEWS.
        WHEN  'X'.
** assign plant data & ** assign update information
          IF NOT ITAB-DISMM IS INITIAL .
            MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
            MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
            MOVE XFLAG        TO HEADDATA-MRP_VIEW.     "MRP Views
            PERFORM MAP_MRP_DATA .
          ENDIF .
      ENDCASE .
************ FORECASTING VIEWS ****************
      CASE VWS_ITAB-FOREC_VIEWS.
        WHEN  'X'.
          MOVE XFLAG   TO HEADDATA-FORECAST_VIEW."Forecasting View
** assign plant data & ** assign update information
          MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
          MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
      ENDCASE .
************ WORK SCHEDULING VIEWS ****************
      CASE VWS_ITAB-WKSCH_VIEWS.
        WHEN  'X'.
          IF ITAB-SOBSL NE '50'.
            MOVE XFLAG   TO HEADDATA-WORK_SCHED_VIEW."Work Scheduling
** assign plant data & ** assign update information
            MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
            MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
          ENDIF .
      ENDCASE .
************ PRT VIEWS ****************
      CASE VWS_ITAB-PRT_VIEWS.
        WHEN  'X'MOVE XFLAG   TO HEADDATA-PRT_VIEW.       "PRT Views
      ENDCASE .
************ STORAGE VIEWS ****************
      CASE VWS_ITAB-STORAGE_VIEW.
        WHEN  'X'.
** assign plant data & ** assign update information
          IF ITAB-SOBSL NE '50'.
            MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
            MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
            PERFORM MAP_STORAGE_DATA .
          ENDIF .
        WHEN SPACE.
          IF ITAB-MTART = 'ABF'.
            IF NOT ITAB-LGORT IS INITIAL OR
               NOT ITAB-LGPRO IS INITIAL OR
               NOT ITAB-LGFSB IS INITIAL.
              MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
              MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
              PERFORM MAP_STORAGE_DATA .
            ENDIF .
          ENDIF .
      ENDCASE .
************ WAREHOUSE MANAGEMENT VIEWS ****************
      CASE VWS_ITAB-WH_VIEWS.
        WHEN  'X'.
          MOVE XFLAG        TO HEADDATA-WAREHOUSE_VIEW. "
** assign plant data & ** assign update information
          MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
          MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
      ENDCASE .
************ QA VIEWS ****************
      CASE VWS_ITAB-QA_VIEWS.
        WHEN  'X'.
          IF ITAB-SOBSL NE '50'.
** assign plant data & ** assign update information
            MOVE ITAB-WERKS TO PLANTDATA-PLANT .
            MOVE ITAB-WERKS TO PLANTDATAX-PLANT .
            PERFORM MAP_QA_DATA.
          ENDIF.
      ENDCASE .
************ ACCOUNTING & COSTINGS VIEWS ****************
      CASE VWS_ITAB-ACCTS_VIEWS.
        WHEN  'X'.
          IF ITAB-SOBSL NE '50' AND ITAB-MTART NE 'ABF'.
            IF NOT ITAB-BKLAS IS INITIAL .
              MOVE XFLAG            TO HEADDATA-ACCOUNT_VIEW.   "Accounting Data
              MOVE XFLAG            TO HEADDATA-COST_VIEW.      "Costing Data
              PERFORM MAP_FICO_DATA .
            ENDIF .
** assign plant data & ** assign update information
            MOVE ITAB-WERKS   TO PLANTDATA-PLANT .
            MOVE ITAB-WERKS   TO PLANTDATAX-PLANT .
          ENDIF .
      ENDCASE .
************ BATCH MANAGEMENT ****************
      CASE VWS_ITAB-BATCH_MANAGE.
        WHEN 'X'.
          MOVE ITAB-XCHPF    TO CLIENTDATA-BATCH_MGMT .  "Batch management requirement indicator
          MOVE XFLAG         TO CLIENTDATAX-BATCH_MGMT . "Batch management requirement indicator
      ENDCASE.
      CLEAR  : RETURN.
      CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
        EXPORTING
          HEADDATA             = HEADDATA
          CLIENTDATA           = CLIENTDATA
          CLIENTDATAX          = CLIENTDATAX
          PLANTDATA            = PLANTDATA
          PLANTDATAX           = PLANTDATAX
          FORECASTPARAMETERS   = FORECASTPARAMETERS
          FORECASTPARAMETERSX  = FORECASTPARAMETERSX
          PLANNINGDATA         = PLANNINGDATA
          PLANNINGDATAX        = PLANNINGDATAX
          STORAGELOCATIONDATA  = STORAGELOCATIONDATA
          STORAGELOCATIONDATAX = STORAGELOCATIONDATAX
          VALUATIONDATA        = VALUATIONDATA
          VALUATIONDATAX       = VALUATIONDATAX
          WAREHOUSENUMBERDATA  = WAREHOUSENUMBERDATA
          WAREHOUSENUMBERDATAX = WAREHOUSENUMBERDATAX
          SALESDATA            = SALESDATA
          SALESDATAX           = SALESDATAX
          STORAGETYPEDATA      = STORAGETYPEDATA
          STORAGETYPEDATAX     = STORAGETYPEDATAX
          FLAG_ONLINE          = SPACE
          FLAG_CAD_CALL        = SPACE
          NO_DEQUEUE           = SPACE
          NO_ROLLBACK_WORK     = SPACE
        IMPORTING
          RETURN               = RETURN
        TABLES
          MATERIALDESCRIPTION  = MATERIALDESCRIPTION
          UNITSOFMEASURE       = UNITSOFMEASURE
          UNITSOFMEASUREX      = UNITSOFMEASUREX
          INTERNATIONALARTNOS  = INTERNATIONALARTNOS
          MATERIALLONGTEXT     = MATERIALLONGTEXT
          TAXCLASSIFICATIONS   = TAXCLASSIFICATIONS
          RETURNMESSAGES       = RETURNMESSAGES
          PRTDATA              = PRTDATA
          PRTDATAX             = PRTDATAX
          EXTENSIONIN          = EXTENSIONIN
          EXTENSIONINX         = EXTENSIONINX.
*     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
      COMMIT WORK.
      CALL FUNCTION 'BUFFER_REFRESH_ALL'.
      MOVE-CORRESPONDING ITAB      TO I_RESULT.
      MOVE-CORRESPONDING RETURN    TO I_RESULT .
    ENDIF .

    CASE VWS_ITAB-QA_VIEWS.
      WHEN 'X'.
        IF L_QMATV IS INITIAL AND ITAB-SOBSL NE '50' AND ITAB-MTART NE 'ABF'.
          REFRESH: INSPECTIONCTRL, QM_RETURN.
          CLEAR  : INSPECTIONCTRL, QM_RETURN.
          IF NOT ITAB-AKTIV_01 IS INITIAL.
            MOVE XFLAG      TO CLIENTDATA-QM_PROCMNT.   "QM in Procurement is Active
            MOVE XFLAG      TO CLIENTDATAX-QM_PROCMNT.  "QM in Procurement is Active
            MOVE '004'      TO INSPECTIONCTRL-FUNCTION.
            MOVE '01'       TO INSPECTIONCTRL-INSPTYPE.
            MOVE ITAB-MATNR TO INSPECTIONCTRL-MATERIAL.
            MOVE ITAB-WERKS TO INSPECTIONCTRL-PLANT.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_WITH_TSK_LIST. "
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTO_ASSIGN."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_BY_CHARAC."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SINGLE_UNITS_POSSIBLE."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SKIPS_ALLOWED."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTOMATIC_UD.
            MOVE '06'       TO INSPECTIONCTRL-QUAL_SCORE_PROCEDURE.
*           MOVE SPACE      TO INSPECTIONCTRL-CONTR_INSP_LOT_CREATE.
*           MOVE '1'        TO INSPECTIONCTRL-CONTR_INSP_LOT_CREATE.
            IF ITAB-INSMK EQ XFLAG.
              MOVE XFLAG    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ELSE.
              MOVE SPACE    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ENDIF .
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSPTYPE_MAT_ACTIVE.
            APPEND INSPECTIONCTRL.
            CLEAR  INSPECTIONCTRL.
          ENDIF .

          IF NOT ITAB-AKTIV_03 IS INITIAL.
            MOVE '004'      TO INSPECTIONCTRL-FUNCTION.
            MOVE '03'       TO INSPECTIONCTRL-INSPTYPE.
            MOVE ITAB-MATNR TO INSPECTIONCTRL-MATERIAL.
            MOVE ITAB-WERKS TO INSPECTIONCTRL-PLANT.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_WITH_TSK_LIST.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_BY_CHARAC.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SINGLE_UNITS_POSSIBLE.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SKIPS_ALLOWED.
            MOVE '06'       TO INSPECTIONCTRL-QUAL_SCORE_PROCEDURE.
            IF ITAB-INSMK EQ XFLAG.
              MOVE XFLAG    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ELSE.
              MOVE SPACE    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ENDIF .
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSPTYPE_MAT_ACTIVE.
            APPEND INSPECTIONCTRL.
            CLEAR  INSPECTIONCTRL.
          ENDIF .

          IF NOT ITAB-AKTIV_04 IS INITIAL.
            MOVE '004'      TO INSPECTIONCTRL-FUNCTION.
            MOVE '04'       TO INSPECTIONCTRL-INSPTYPE.
            MOVE ITAB-MATNR TO INSPECTIONCTRL-MATERIAL.
            MOVE ITAB-WERKS TO INSPECTIONCTRL-PLANT.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_WITH_TSK_LIST."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTO_ASSIGN."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_BY_CHARAC."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SINGLE_UNITS_POSSIBLE."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SKIPS_ALLOWED."
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTOMATIC_UD.
            MOVE '06'       TO INSPECTIONCTRL-QUAL_SCORE_PROCEDURE.
*           MOVE SPACE      TO INSPECTIONCTRL-CONTR_INSP_LOT_CREATE.
*           MOVE '1'        TO INSPECTIONCTRL-CONTR_INSP_LOT_CREATE.
            IF ITAB-INSMK EQ XFLAG.
              MOVE XFLAG    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ELSE.
              MOVE SPACE    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ENDIF .
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSPTYPE_MAT_ACTIVE.
            APPEND INSPECTIONCTRL.
            CLEAR  INSPECTIONCTRL.
          ENDIF .

          IF NOT ITAB-AKTIV_05 IS INITIAL.
            MOVE '004'      TO INSPECTIONCTRL-FUNCTION.
            MOVE '05'       TO INSPECTIONCTRL-INSPTYPE.
            MOVE ITAB-MATNR TO INSPECTIONCTRL-MATERIAL.
            MOVE ITAB-WERKS TO INSPECTIONCTRL-PLANT.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_WITH_TSK_LIST.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTO_ASSIGN.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_BY_CHARAC.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SINGLE_UNITS_POSSIBLE.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SKIPS_ALLOWED.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTOMATIC_UD.
            MOVE '06'       TO INSPECTIONCTRL-QUAL_SCORE_PROCEDURE.
*           MOVE SPACE      TO INSPECTIONCTRL-CONTR_INSP_LOT_CREATE.
*           MOVE '1'        TO INSPECTIONCTRL-CONTR_INSP_LOT_CREATE.
            IF ITAB-INSMK EQ XFLAG.
              MOVE XFLAG    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ELSE.
              MOVE SPACE    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ENDIF .
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSPTYPE_MAT_ACTIVE.
            APPEND INSPECTIONCTRL.
            CLEAR  INSPECTIONCTRL.
          ENDIF .
          IF NOT ITAB-AKTIV_09 IS INITIAL.
            MOVE '004'      TO INSPECTIONCTRL-FUNCTION.
            MOVE '09'       TO INSPECTIONCTRL-INSPTYPE.
            MOVE ITAB-MATNR TO INSPECTIONCTRL-MATERIAL.
            MOVE ITAB-WERKS TO INSPECTIONCTRL-PLANT.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_WITH_TSK_LIST.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTO_ASSIGN.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSP_BY_CHARAC.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SINGLE_UNITS_POSSIBLE.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_SKIPS_ALLOWED.
            MOVE XFLAG      TO INSPECTIONCTRL-IND_AUTOMATIC_UD.
            MOVE '06'       TO INSPECTIONCTRL-QUAL_SCORE_PROCEDURE.
            IF ITAB-INSMK EQ XFLAG.
              MOVE XFLAG    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ELSE.
              MOVE SPACE    TO INSPECTIONCTRL-IND_POST_TO_INSP_STOCK.
            ENDIF .
            MOVE XFLAG      TO INSPECTIONCTRL-IND_INSPTYPE_MAT_ACTIVE.
            APPEND INSPECTIONCTRL.
            CLEAR  INSPECTIONCTRL.
          ENDIF .

          IF       ITAB-AKTIV_01 IS INITIAL AND ITAB-AKTIV_03 IS INITIAL
               AND ITAB-AKTIV_04 IS INITIAL AND ITAB-AKTIV_05 IS INITIAL
               AND ITAB-AKTIV_09 IS INITIAL.
            MOVE XFLAG TO L_QMATV .
          ELSE.
            REFRESH: QM_RETURN.
            CLEAR  : QM_RETURN.
            CALL FUNCTION 'BAPI_MATINSPCTRL_SAVEREPLICA'
              TABLES
                RETURN         = QM_RETURN
                INSPECTIONCTRL = INSPECTIONCTRL.
*          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
            COMMIT WORK.
            CALL FUNCTION 'BUFFER_REFRESH_ALL'.
            MOVE XFLAG TO I_RESULT-QMVIEWS.
            IF QM_RETURN[] IS INITIAL .
              MOVE-CORRESPONDING ITAB    TO I_RESULT.
              MOVE TEXT-S08              TO I_RESULT-MESSAGE01 .
            ELSE .
              LOOP AT QM_RETURN .
                MOVE-CORRESPONDING ITAB  TO I_RESULT.
                MOVE QM_RETURN-MESSAGE   TO I_RESULT-MESSAGE01 .
              ENDLOOP .
            ENDIF .
          ENDIF .
        ENDIF .
    ENDCASE .

    IF L_MARC IS INITIAL .
      CLEAR: I_RESULT-MESSAGE02 .
      IF NOT I_RESULT-MATNR IS INITIAL.
        CLEAR: N_MATNR_CHK .
        MOVE ITAB-MATNR TO N_MATNR_CHK .
        IF N_MATNR_CHK NE O_MATNR_CHK .
          PERFORM MAINTAIN_CLASSIFICATION .
*         PERFORM MAINTAIN_CLASSIFICATION_BAPI .
          MOVE N_MATNR_CHK TO O_MATNR_CHK .
        ELSE.
          IF P_BKJOB IS INITIAL .
            MOVE TEXT-S13 TO I_RESULT-MESSAGE02.
          ENDIF .
        ENDIF .
        APPEND I_RESULT .
        CLEAR  I_RESULT .
      ENDIF .
    ELSE.
      CLEAR: I_RESULT-MESSAGE02 .
      IF L_QMATV IS INITIAL .
        IF NOT I_RESULT-MATNR IS INITIAL.
          CLEAR: N_MATNR_CHK .
          MOVE ITAB-MATNR TO N_MATNR_CHK .
          IF N_MATNR_CHK NE O_MATNR_CHK .
            PERFORM MAINTAIN_CLASSIFICATION .
*           PERFORM MAINTAIN_CLASSIFICATION_BAPI .
            MOVE N_MATNR_CHK TO O_MATNR_CHK .
          ELSE.
            IF P_BKJOB IS INITIAL .
              MOVE TEXT-S13 TO I_RESULT-MESSAGE02.
            ENDIF .
          ENDIF .
          APPEND I_RESULT .
          CLEAR  I_RESULT .
        ENDIF .
      ENDIF .
    ENDIF .

  ENDLOOP .
  IF NOT P_BKJOB IS INITIAL .
    PERFORM CLOSE_GROUP .
    PERFORM BATCH_INPUT_SESSION_SUBMIT. " submit process to backgound .
  ENDIF .
ENDFORM.                    " MATERIAL_MAINTAIN
*&---------------------------------------------------------------------*
*&      Form  DETERMINE_MATERIAL_VIEWS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DETERMINE_MATERIAL_VIEWS .

  REFRESH: VWS_ITAB . CLEAR: VWS_ITAB .
  REFRESH: INT_TAB .
  CLEAR  : INT_TAB .

  CALL FUNCTION 'KCD_EXCEL_OLE_TO_INT_CONVERT'
    EXPORTING
      FILENAME                = P_BASIC
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 2
      I_END_COL               = 18
      I_END_ROW               = 9999
    TABLES
      INTERN                  = INT_TAB
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
  SORT INT_TAB BY ROW COL.
  LOOP AT INT_TAB .
    AT NEW ROW.
      CLEAR: VWS_ITAB.
    ENDAT.
    CASE INT_TAB-COL.
      WHEN 1.
        MOVE INT_TAB-VALUE TO VWS_ITAB-MTART.
        TRANSLATE VWS_ITAB-MTART TO UPPER CASE.
      WHEN 2.
        MOVE INT_TAB-VALUE TO VWS_ITAB-BASIC_VIEWS.
        TRANSLATE VWS_ITAB-BASIC_VIEWS TO UPPER CASE.
      WHEN 3.
        MOVE INT_TAB-VALUE TO VWS_ITAB-CLASS_VIEWS.
        TRANSLATE VWS_ITAB-CLASS_VIEWS TO UPPER CASE.
      WHEN 4.
        MOVE INT_TAB-VALUE TO VWS_ITAB-WERKS.
        TRANSLATE VWS_ITAB-WERKS TO UPPER CASE.
      WHEN 5.
        MOVE INT_TAB-VALUE TO VWS_ITAB-PROCUREMENT.
        TRANSLATE VWS_ITAB-PROCUREMENT TO UPPER CASE.
      WHEN 6.
        MOVE INT_TAB-VALUE TO VWS_ITAB-SALES_VIEWS.
        TRANSLATE VWS_ITAB-SALES_VIEWS TO UPPER CASE.
      WHEN 7.
        MOVE INT_TAB-VALUE TO VWS_ITAB-PURCH_VIEWS.
        TRANSLATE VWS_ITAB-PURCH_VIEWS TO UPPER CASE.
      WHEN 8.
        MOVE INT_TAB-VALUE TO VWS_ITAB-MRP_VIEWS.
        TRANSLATE VWS_ITAB-MRP_VIEWS TO UPPER CASE.
      WHEN 9.
        MOVE INT_TAB-VALUE TO VWS_ITAB-WKSCH_VIEWS.
        TRANSLATE VWS_ITAB-WKSCH_VIEWS TO UPPER CASE.
*      WHEN 10.
*        MOVE INT_TAB-VALUE TO VWS_ITAB-FOREC_VIEWS.
*        TRANSLATE VWS_ITAB-FOREC_VIEWS TO UPPER CASE.
      WHEN 10.
        MOVE INT_TAB-VALUE TO VWS_ITAB-QA_VIEWS.
        TRANSLATE VWS_ITAB-QA_VIEWS TO UPPER CASE.
      WHEN 11.
        MOVE INT_TAB-VALUE TO VWS_ITAB-STORAGE_VIEW.
        TRANSLATE VWS_ITAB-STORAGE_VIEW TO UPPER CASE.
      WHEN 12.
        MOVE INT_TAB-VALUE TO VWS_ITAB-ACCTS_VIEWS.
        TRANSLATE VWS_ITAB-ACCTS_VIEWS TO UPPER CASE.
      WHEN 13.
        MOVE INT_TAB-VALUE TO VWS_ITAB-COSTS_VIEWS.
        TRANSLATE VWS_ITAB-COSTS_VIEWS TO UPPER CASE.
      WHEN 14.
        MOVE INT_TAB-VALUE TO VWS_ITAB-BATCH_MANAGE.
        TRANSLATE VWS_ITAB-BATCH_MANAGE TO UPPER CASE.
      WHEN 15.
        MOVE INT_TAB-VALUE TO VWS_ITAB-REMARKS.
        TRANSLATE VWS_ITAB-REMARKS TO UPPER CASE.
    ENDCASE .
    AT END OF ROW.
      IF NOT VWS_ITAB-MTART IS INITIAL .
        APPEND VWS_ITAB.
        CLEAR  VWS_ITAB .
      ENDIF .
    ENDAT.
  ENDLOOP .
ENDFORM.                    " DETERMINE_MATERIAL_VIEWS

*&---------------------------------------------------------------------*
*&      Form  MAP_MATERIAL_DESCRIPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_MATERIAL_DESCRIPTION .
*append data to internal table
**material description
  REFRESH: MATERIALDESCRIPTION .
  CLEAR  : MATERIALDESCRIPTION .
  MOVE '1'                  TO MATERIALDESCRIPTION-LANGU .
  MOVE ITAB-MAKTX           TO MATERIALDESCRIPTION-MATL_DESC.
  APPEND: MATERIALDESCRIPTION . CLEAR : MATERIALDESCRIPTION .
  MOVE 'E'                  TO MATERIALDESCRIPTION-LANGU .
  MOVE ITAB-MAKTX           TO MATERIALDESCRIPTION-MATL_DESC.
  APPEND:  MATERIALDESCRIPTION .
  CLEAR :  MATERIALDESCRIPTION .
**unit of measurement
  REFRESH: UNITSOFMEASURE, UNITSOFMEASUREX .
  CLEAR  : UNITSOFMEASURE, UNITSOFMEASUREX .
  IF NOT ITAB-UMREN IS INITIAL AND NOT ITAB-UMREZ IS INITIAL.
    CLEAR: T006A.
    SELECT SINGLE * FROM T006A CLIENT SPECIFIED
                   WHERE MANDT EQ SY-MANDT
                     AND SPRAS EQ '1'
                     AND MSEH3 EQ ITAB-UMREN.
    IF SY-SUBRC = 0.
      MOVE T006A-MSEHI        TO UNITSOFMEASURE-ALT_UNIT .
    ELSE.
      MOVE ITAB-UMREN        TO UNITSOFMEASURE-ALT_UNIT .
    ENDIF .
    APPEND: UNITSOFMEASURE .  CLEAR : UNITSOFMEASURE .
  ENDIF .
  IF NOT ITAB-BOX01 IS INITIAL.
    CLEAR: T006A.
    SELECT SINGLE * FROM T006A CLIENT SPECIFIED
                   WHERE MANDT EQ SY-MANDT
                     AND SPRAS EQ '1'
                     AND MSEH3 EQ 'CAR'.
    MOVE T006A-MSEHI        TO UNITSOFMEASURE-ALT_UNIT .
    MOVE ITAB-BOX01      TO UNITSOFMEASURE-NUMERATOR.
    MOVE 1                  TO UNITSOFMEASURE-DENOMINATR.
    MOVE T006A-MSEHI        TO UNITSOFMEASUREX-ALT_UNIT .
    MOVE XFLAG              TO UNITSOFMEASUREX-NUMERATOR.
    MOVE XFLAG              TO UNITSOFMEASUREX-DENOMINATR.
    APPEND: UNITSOFMEASURE .  CLEAR : UNITSOFMEASURE .
    APPEND: UNITSOFMEASUREX.  CLEAR : UNITSOFMEASUREX.
  ENDIF .

  IF NOT ITAB-BOX02 IS INITIAL.
    CLEAR: T006A.
    SELECT SINGLE * FROM T006A CLIENT SPECIFIED
                   WHERE MANDT EQ SY-MANDT
                     AND SPRAS EQ '1'
                     AND MSEH3 EQ 'PAL'.
    MOVE T006A-MSEHI        TO UNITSOFMEASURE-ALT_UNIT .
    MOVE ITAB-BOX02      TO UNITSOFMEASURE-NUMERATOR.
    MOVE 1                  TO UNITSOFMEASURE-DENOMINATR.
    MOVE T006A-MSEHI        TO UNITSOFMEASUREX-ALT_UNIT .
    MOVE XFLAG              TO UNITSOFMEASUREX-NUMERATOR.
    MOVE XFLAG              TO UNITSOFMEASUREX-DENOMINATR.
    APPEND: UNITSOFMEASURE . CLEAR : UNITSOFMEASURE .
    APPEND: UNITSOFMEASUREX. CLEAR : UNITSOFMEASUREX.
  ENDIF .

  IF NOT ITAB-BSTME IS INITIAL AND NOT ITAB-UMREN IS INITIAL.
    CLEAR: T006A.
    SELECT SINGLE * FROM T006A CLIENT SPECIFIED
                   WHERE MANDT EQ SY-MANDT
                     AND SPRAS EQ '1'
                     AND MSEH3 EQ ITAB-BSTME.
    MOVE T006A-MSEHI        TO UNITSOFMEASURE-ALT_UNIT .
    MOVE ITAB-UMREN         TO UNITSOFMEASURE-NUMERATOR.
    MOVE 1                  TO UNITSOFMEASURE-DENOMINATR.
    MOVE T006A-MSEHI        TO UNITSOFMEASUREX-ALT_UNIT .
    MOVE XFLAG              TO UNITSOFMEASUREX-NUMERATOR.
    MOVE XFLAG              TO UNITSOFMEASUREX-DENOMINATR.
    APPEND: UNITSOFMEASURE . CLEAR : UNITSOFMEASURE .
    APPEND: UNITSOFMEASUREX. CLEAR : UNITSOFMEASUREX.
  ENDIF .

  IF NOT ITAB-BRGEW IS INITIAL.
    CLEAR: T006A.
    SELECT SINGLE * FROM T006A CLIENT SPECIFIED
                   WHERE MANDT EQ SY-MANDT
                     AND SPRAS EQ '1'
                     AND MSEH3 EQ ITAB-MEINS.
    MOVE T006A-MSEHI        TO UNITSOFMEASURE-ALT_UNIT .
    MOVE ITAB-BRGEW         TO UNITSOFMEASURE-GROSS_WT .
    MOVE ITAB-GEWEI         TO UNITSOFMEASURE-UNIT_OF_WT .
    MOVE T006A-MSEHI        TO UNITSOFMEASUREX-ALT_UNIT .
    MOVE XFLAG              TO UNITSOFMEASUREX-GROSS_WT.
    MOVE XFLAG              TO UNITSOFMEASUREX-UNIT_OF_WT.
    APPEND: UNITSOFMEASURE . CLEAR : UNITSOFMEASURE .
    APPEND: UNITSOFMEASUREX. CLEAR : UNITSOFMEASUREX.
  ENDIF .

*  ENDIF .

ENDFORM.                    " MAP_MATERIAL_DESCRIPTION

*&---------------------------------------------------------------------*
*&      Form  MAP_MATERIAL_MASTER_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_MATERIAL_MASTER_DATA .
  CLEAR: T006A.
  SELECT SINGLE * FROM T006A CLIENT SPECIFIED
                 WHERE MANDT EQ SY-MANDT
                   AND SPRAS EQ '1'
                   AND MSEH3 EQ ITAB-MEINS.
* assign field vaues to header data
  MOVE ITAB-MATNR    TO HEADDATA-MATERIAL.       "Material Number
  MOVE ITAB-MBRSH    TO HEADDATA-IND_SECTOR.     "Industry sector
  MOVE ITAB-MTART    TO HEADDATA-MATL_TYPE.      "Material Type
** assign client level data
  MOVE ITAB-MSTAE    TO CLIENTDATA-PUR_STATUS.   "Cross-Plant Material Status
  MOVE XFLAG         TO CLIENTDATAX-PUR_STATUS.  "Cross-Plant Material Status
  MOVE T006A-MSEHI   TO CLIENTDATA-BASE_UOM.     "Base Unit of Measure
  MOVE XFLAG         TO CLIENTDATAX-BASE_UOM.    "Base Unit of Measure
  MOVE T006A-MSEHI   TO CLIENTDATA-BASE_UOM_ISO. "Base Unit of Measure (ISO)
  MOVE XFLAG         TO CLIENTDATAX-BASE_UOM_ISO."Base Unit of Measure (ISO)
  MOVE ITAB-MATKL    TO CLIENTDATA-MATL_GROUP.   "Material Group
  MOVE XFLAG         TO CLIENTDATAX-MATL_GROUP.  "Material Group
  MOVE SPACE         TO CLIENTDATA-DEL_FLAG.     "Flag Material for Deletion at Client Level
  MOVE XFLAG         TO CLIENTDATAX-DEL_FLAG.    "Flag Material for Deletion at Client Level
  MOVE ITAB-MATKL    TO CLIENTDATA-MATL_GROUP.   "Material Group
  MOVE XFLAG         TO CLIENTDATAX-MATL_GROUP.  "Material Group
  MOVE ITAB-BISMT    TO CLIENTDATA-OLD_MAT_NO.   "Old material number
  MOVE XFLAG         TO CLIENTDATAX-OLD_MAT_NO.  "Old material number
  MOVE XFLAG         TO CLIENTDATA-MATERIAL_FIXED."Material Blocked Indicator
  MOVE XFLAG         TO CLIENTDATAX-MATERIAL_FIXED."Material Blocked Indicator
  MOVE T006A-MSEHI   TO CLIENTDATA-BASE_UOM.     "Base Unit of Measure
  MOVE XFLAG         TO CLIENTDATAX-BASE_UOM.    "Base Unit of Measure
  MOVE T006A-MSEHI   TO CLIENTDATA-BASE_UOM_ISO. "Base Unit of Measure (ISO)
  MOVE XFLAG         TO CLIENTDATAX-BASE_UOM_ISO."Base Unit of Measure (ISO)
  MOVE ITAB-BSTME    TO CLIENTDATA-PO_UNIT.      "Purchase Order Unit of Measure
  MOVE XFLAG         TO CLIENTDATAX-PO_UNIT.     "Purchase Order Unit of Measure
  MOVE ITAB-GEWEI    TO CLIENTDATA-UNIT_OF_WT.   "Weight Unit
  MOVE XFLAG         TO CLIENTDATAX-UNIT_OF_WT.  "Weight Unit
  MOVE ITAB-NTGEW    TO CLIENTDATA-NET_WEIGHT.   "Net Weight
  MOVE XFLAG         TO CLIENTDATAX-NET_WEIGHT.  "Net Weight
  MOVE ITAB-ZEINR    TO CLIENTDATA-DOCUMENT.     "Document number (without document management system)
  MOVE XFLAG         TO CLIENTDATAX-DOCUMENT.    "Document number (without document management system)
  MOVE ITAB-SPART    TO CLIENTDATA-DIVISION.     "Division
  MOVE XFLAG         TO CLIENTDATAX-DIVISION.    "Division
ENDFORM.                    " MAP_MATERIAL_MASTER_DATA

*&---------------------------------------------------------------------*
*&      Form  MAP_SALES_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_SALES_DATA .

  MOVE ITAB-TRAGR TO CLIENTDATA-TRANS_GRP. "Transportation Group
  MOVE XFLAG      TO CLIENTDATAX-TRANS_GRP."Transportation Group
  MOVE ITAB-LADGR TO PLANTDATA-LOADINGGRP. "Loading Group
  MOVE XFLAG      TO PLANTDATAX-LOADINGGRP."Loading Group

  MOVE ITAB-VKORG TO SALESDATA-SALES_ORG . "Sales Organization
  MOVE ITAB-VKORG TO SALESDATAX-SALES_ORG ."Sales Organization

  MOVE ITAB-VTWEG TO SALESDATA-DISTR_CHAN. "Distribution Channel
  MOVE ITAB-VTWEG TO SALESDATAX-DISTR_CHAN."Distribution Channel
  MOVE ITAB-DWERK TO SALESDATA-DELYG_PLNT. "Delivering Plant
  MOVE XFLAG      TO SALESDATAX-DELYG_PLNT."Delivering Plant
  MOVE ITAB-VERSG TO SALESDATA-MATL_STATS. "Material statistics group
  MOVE XFLAG      TO SALESDATAX-MATL_STATS."Material statistics group
  MOVE ITAB-KONDM TO SALESDATA-MAT_PR_GRP. "Material Pricing Group
  MOVE XFLAG      TO SALESDATAX-MAT_PR_GRP."Material Pricing Group
  MOVE ITAB-KTGRM TO SALESDATA-ACCT_ASSGT. "Account assignment group for this material
  MOVE XFLAG      TO SALESDATAX-ACCT_ASSGT."Account assignment group for this material
  MOVE ITAB-MTPOS TO SALESDATA-ITEM_CAT  . "Item category group from material master
  MOVE XFLAG      TO SALESDATAX-ITEM_CAT  ."Item category group from material master

  MOVE '02'        TO PLANTDATA-AVAILCHECK . "Checking Group for Availability Check
  MOVE XFLAG       TO PLANTDATAX-AVAILCHECK ."Checking Group for Availability Check
** Tax for Sales Data
  REFRESH: TAXCLASSIFICATIONS . CLEAR: TAXCLASSIFICATIONS.
  CASE ITAB-WERKS .
    WHEN '1005' OR '1006'.
      MOVE 'HK'   TO TAXCLASSIFICATIONS-DEPCOUNTRY.
      MOVE 'HOK'  TO TAXCLASSIFICATIONS-DEPCOUNTRY_ISO.
      MOVE 'MWST' TO TAXCLASSIFICATIONS-TAX_TYPE_1.
      MOVE ITAB-TAXKM  TO TAXCLASSIFICATIONS-TAXCLASS_1.
      APPEND: TAXCLASSIFICATIONS .
      CLEAR : TAXCLASSIFICATIONS.
    WHEN '2001' OR '2003' OR '2004'.
      MOVE 'CN'   TO TAXCLASSIFICATIONS-DEPCOUNTRY.
      MOVE 'CHI'  TO TAXCLASSIFICATIONS-DEPCOUNTRY_ISO.
      MOVE 'MWST' TO TAXCLASSIFICATIONS-TAX_TYPE_1.
      MOVE ITAB-TAXKM  TO TAXCLASSIFICATIONS-TAXCLASS_1.
      APPEND: TAXCLASSIFICATIONS .
      CLEAR : TAXCLASSIFICATIONS.
  ENDCASE .

ENDFORM.                    " MAP_SALES_DATA

*&---------------------------------------------------------------------*
*&      Form  MAP_PURCHASING_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_PURCHASING_DATA .

  MOVE ITAB-EKGRP TO PLANTDATA-PUR_GROUP . "Purchasing Group
  MOVE XFLAG      TO PLANTDATAX-PUR_GROUP ."Purchasing Group
  MOVE ITAB-USEQU TO PLANTDATA-QUOTAUSAGE ."Quota arrangement usage
  MOVE XFLAG      TO PLANTDATAX-QUOTAUSAGE."Quota arrangement usage
  MOVE ITAB-WEBAZ TO PLANTDATA-GR_PR_TIME ."Goods Receipt Processing Time in Days
  MOVE XFLAG      TO PLANTDATAX-GR_PR_TIME."Goods Receipt Processing Time in Days
  MOVE ITAB-XCHPF TO PLANTDATA-BATCH_MGMT ."Batch management requirement indicator
  MOVE XFLAG      TO PLANTDATAX-BATCH_MGMT."Batch management requirement indicator
  MOVE ITAB-KORDB TO PLANTDATA-SOURCELIST ."Indicator: Source list requirement
  MOVE XFLAG      TO PLANTDATAX-SOURCELIST."Indicator: Source list requirement
  MOVE ITAB-KZKRI TO PLANTDATA-CRIT_PART  ."Indicator: Critical part
  MOVE XFLAG      TO PLANTDATAX-CRIT_PART ."Indicator: Critical part

ENDFORM.                    " MAP_PURCHASING_DATA

*&---------------------------------------------------------------------*
*&      Form  MAP_MRP_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_MRP_DATA .
*-MRP VIEW 01
  MOVE ITAB-EKGRP  TO PLANTDATA-PUR_GROUP  . "Purchasing Group
  MOVE XFLAG       TO PLANTDATAX-PUR_GROUP . "Purchasing Group
  MOVE ITAB-DISGR  TO PLANTDATA-MRP_GROUP  . "MRP Group
  MOVE XFLAG       TO PLANTDATAX-MRP_GROUP . "MRP Group
  MOVE ITAB-DISMM  TO PLANTDATA-MRP_TYPE   . "MRP Type
  MOVE XFLAG       TO PLANTDATAX-MRP_TYPE  . "MRP Type
  MOVE ITAB-DISPO  TO PLANTDATA-MRP_CTRLER . "MRP Controller (Materials Planner)
  MOVE XFLAG       TO PLANTDATAX-MRP_CTRLER. "MRP Controller (Materials Planner)
  MOVE ITAB-DISLS  TO PLANTDATA-LOTSIZEKEY . "Lot size (materials planning)
  MOVE XFLAG       TO PLANTDATAX-LOTSIZEKEY. "Lot size (materials planning)
  MOVE ITAB-BSTRF  TO PLANTDATA-ROUND_VAL  . "Rounding value for purchase order quantity
  MOVE XFLAG       TO PLANTDATAX-ROUND_VAL . "Rounding value for purchase order quantity
*-MRP View 02
*-MRP View 02-Puchasing
  MOVE ITAB-BESKZ  TO PLANTDATA-PROC_TYPE  . "Procurement Type
  MOVE XFLAG       TO PLANTDATAX-PROC_TYPE . "Procurement Type
  MOVE ITAB-SOBSL  TO PLANTDATA-SPPROCTYPE . "Special procurement type
  MOVE XFLAG       TO PLANTDATAX-SPPROCTYPE. "Special procurement type
  MOVE ITAB-USEQU  TO PLANTDATA-QUOTAUSAGE . "Quota arrangement usage
  MOVE XFLAG       TO PLANTDATAX-QUOTAUSAGE. "Quota arrangement usage
  MOVE ITAB-RGEKZ  TO PLANTDATA-BACKFLUSH  . "Indicator: Backflush
  MOVE XFLAG       TO PLANTDATAX-BACKFLUSH . "Indicator: Backflush
*-MRP View 02-planning

  MOVE ITAB-LGPRO  TO PLANTDATA-ISS_ST_LOC .
  MOVE XFLAG       TO PLANTDATAX-ISS_ST_LOC.
  MOVE ITAB-LGFSB  TO PLANTDATA-SLOC_EXPRC .
  MOVE XFLAG       TO PLANTDATAX-SLOC_EXPRC.
  MOVE ITAB-PLIFZ  TO PLANTDATA-PLND_DELRY . "Planned Delivery Time in Days
  MOVE XFLAG       TO PLANTDATAX-PLND_DELRY. "Planned Delivery Time in Days
  MOVE ITAB-FHORI  TO PLANTDATA-SM_KEY .     "Scheduling Margin Key for Floats
  MOVE XFLAG       TO PLANTDATAX-SM_KEY .    "Scheduling Margin Key for Floats
  IF ITAB-BESKZ = 'E'.
    MOVE ITAB-WEBAZ_GR TO PLANTDATA-GR_PR_TIME.
    MOVE XFLAG         TO PLANTDATAX-GR_PR_TIME.
  ELSE.
    MOVE ITAB-WEBAZ  TO PLANTDATA-GR_PR_TIME . "Goods Receipt Processing Time in Days
    MOVE XFLAG       TO PLANTDATAX-GR_PR_TIME. "Goods Receipt Processing Time in Days
  ENDIF .
  MOVE ITAB-DZEIT  TO PLANTDATA-INHSEPRODT . "In-house production time .
  MOVE XFLAG       TO PLANTDATAX-INHSEPRODT. "In-house production time .
*-MRP View 02-Net Requirement Calculation
  MOVE ITAB-EISBE  TO PLANTDATA-SAFETY_STK . "Safety Stock
  MOVE XFLAG       TO PLANTDATAX-SAFETY_STK. "Safety Stock
*-MRP View 03
  MOVE ITAB-PERKZ  TO PLANTDATA-PERIOD_IND . "Period Indicator
  MOVE XFLAG       TO PLANTDATAX-PERIOD_IND. "Period Indicator
*-MRP View 03 - Available check
  MOVE ITAB-MTVFP1 TO PLANTDATA-AVAILCHECK . "Checking Group for Availability Check
  MOVE XFLAG       TO PLANTDATAX-AVAILCHECK. "Checking Group for Availability Check
  MOVE '02'        TO PLANTDATA-AVAILCHECK . "Checking Group for Availability Check
  MOVE XFLAG       TO PLANTDATAX-AVAILCHECK ."Checking Group for Availability Check
*-MRP View 04
  MOVE ITAB-SBDKZ  TO PLANTDATA-DEP_REQ_ID . "Dependent requirements ind. for individual and coll. reqmts
  MOVE XFLAG       TO PLANTDATAX-DEP_REQ_ID. "Dependent requirements ind. for individual and coll. reqmts
  MOVE ITAB-KAUSF  TO PLANTDATA-COMP_SCRAP . "Component scrap in percent
  MOVE XFLAG       TO PLANTDATAX-COMP_SCRAP. "Component scrap in percent
ENDFORM.                    " MAP_MRP_DATA

*&---------------------------------------------------------------------*
*&      Form  MAP_QA_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_QA_DATA .

  DATA: L_CNT_QM TYPE I .

  IF ITAB-BESKZ = 'F' OR ITAB-BESKZ = 'X'.
    MOVE XFLAG    TO CLIENTDATAX-QM_PROCMNT.  "QM in Procurement is Active
    MOVE XFLAG    TO CLIENTDATA-QM_PROCMNT.   "QM in Procurement is Active
  ENDIF.
  IF ITAB-WERKS EQ '2001' OR ITAB-WERKS EQ '2003' OR ITAB-WERKS EQ '2004'.
    IF   ITAB-QMPUR    IS INITIAL AND ITAB-SSQSS    IS INITIAL
     AND ITAB-AKTIV_01 IS INITIAL AND ITAB-AKTIV_03 IS INITIAL
     AND ITAB-AKTIV_04 IS INITIAL AND ITAB-AKTIV_05 IS INITIAL
     AND ITAB-AKTIV_09 IS INITIAL.
      MOVE SPACE      TO HEADDATA-QUALITY_VIEW.   "Quality Views
    ELSE.
      MOVE XFLAG      TO HEADDATA-QUALITY_VIEW.   "Quality Views
      MOVE ITAB-QMPUR TO CLIENTDATA-QM_PROCMNT. "QM in Procurement is Active
      MOVE XFLAG      TO CLIENTDATAX-QM_PROCMNT."QM in Procurement is Active
      MOVE ITAB-SSQSS TO PLANTDATA-CTRL_KEY .              "Control Key
      MOVE XFLAG      TO PLANTDATAX-CTRL_KEY .             "Control Key
      MOVE ITAB-INSMK TO PLANTDATA-IND_POST_TO_INSP_STOCK ."Post to Inspection Stock
      MOVE XFLAG      TO PLANTDATAX-IND_POST_TO_INSP_STOCK."Post to Inspection Stock

    ENDIF .
  ELSE.
    CLEAR: MARA, L_CNT_QM .
    SELECT COUNT( * ) INTO L_CNT_QM FROM MARA CLIENT SPECIFIED
                                   WHERE MANDT EQ SY-MANDT
                                     AND MATNR EQ ITAB-MATNR
                                     AND QMPUR NE SPACE .
    IF L_CNT_QM > 0.
      MOVE XFLAG    TO HEADDATA-QUALITY_VIEW. "Quality Views
      MOVE XFLAG    TO CLIENTDATA-QM_PROCMNT. "QM in Procurement is Active
      MOVE XFLAG    TO CLIENTDATAX-QM_PROCMNT."QM in Procurement is Active
      MOVE '0000'   TO PLANTDATA-CTRL_KEY .   "Control Key
      MOVE XFLAG    TO PLANTDATAX-CTRL_KEY .  "Control Key
    ELSE.
      CLEAR: MARA, L_CNT_QM .
      SELECT COUNT( * ) INTO L_CNT_QM FROM MARA CLIENT SPECIFIED
                                     WHERE MANDT EQ SY-MANDT
                                       AND MATNR EQ ITAB-MATNR.
      IF L_CNT_QM GT 0 .
        MOVE SPACE    TO HEADDATA-QUALITY_VIEW.   "Quality Views
        MOVE SPACE    TO CLIENTDATA-QM_PROCMNT.   "QM in Procurement is Active
        MOVE XFLAG    TO CLIENTDATAX-QM_PROCMNT.  "QM in Procurement is Active
        MOVE SPACE    TO PLANTDATA-CTRL_KEY .     "Control Key
        MOVE XFLAG    TO PLANTDATAX-CTRL_KEY .    "Control Key
      ENDIF .
    ENDIF .
  ENDIF.
  MOVE ITAB-PRFRQ   TO PLANTDATA-INSP_INT .   "Interval until next recurring inspection
  MOVE XFLAG        TO PLANTDATAX-INSP_INT .  "Interval until next recurring inspection
ENDFORM.                    " MAP_QA_DATA

*&---------------------------------------------------------------------*
*&      Form  MAP_FICO_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_FICO_DATA .
  MOVE ITAB-AWSLS  TO PLANTDATA-VARIANCE_KEY.     "Variance Key
  MOVE XFLAG       TO PLANTDATAX-VARIANCE_KEY.    "Variance Key
  MOVE ITAB-WERKS  TO VALUATIONDATAX-VAL_AREA .   "Valuation Area
  MOVE ITAB-WERKS  TO VALUATIONDATA-VAL_AREA .    "Valuation Area
  MOVE ITAB-BKLAS  TO VALUATIONDATA-VAL_CLASS.    "Valuation Class
  MOVE XFLAG       TO VALUATIONDATAX-VAL_CLASS.   "Valuation Class
  MOVE ITAB-VPRSV  TO VALUATIONDATA-PRICE_CTRL.   "Price control indicator
  MOVE XFLAG       TO VALUATIONDATAX-PRICE_CTRL.  "Price control indicator
  MOVE ITAB-PEINH  TO VALUATIONDATA-PRICE_UNIT.   "Price Unit
  MOVE XFLAG       TO VALUATIONDATAX-PRICE_UNIT.  "Price Unit
  MOVE ITAB-VERPR  TO VALUATIONDATA-MOVING_PR.    "Moving average price/periodic unit price
  MOVE XFLAG       TO VALUATIONDATAX-MOVING_PR.   "Moving average price/periodic unit price
  MOVE ITAB-STPRS  TO VALUATIONDATA-STD_PRICE.    "Standard price
  MOVE XFLAG       TO VALUATIONDATAX-STD_PRICE.   "Standard price
  MOVE ITAB-EKALR  TO VALUATIONDATA-QTY_STRUCT.   "Material Is Costed with Quantity Structure
  MOVE XFLAG       TO VALUATIONDATAX-QTY_STRUCT.  "Material Is Costed with Quantity Structure
  MOVE ITAB-HKMAT  TO VALUATIONDATA-ORIG_MAT.     "Material-related origin
  MOVE XFLAG       TO VALUATIONDATAX-ORIG_MAT.    "Material-related origin
  MOVE ITAB-HRKFT  TO VALUATIONDATA-ORIG_GROUP.   "Origin Group as Subdivision of Cost Element
  MOVE XFLAG       TO VALUATIONDATAX-ORIG_GROUP.  "Origin Group as Subdivision of Cost Element
  MOVE ITAB-KOSGR  TO VALUATIONDATA-OVERHEAD_GRP. "Costing Overhead Group
  MOVE XFLAG       TO VALUATIONDATAX-OVERHEAD_GRP."Costing Overhead Group
  MOVE ITAB-ZPLP1  TO VALUATIONDATA-PLNDPRICE1.   "Future Planned Price 1
  MOVE XFLAG       TO VALUATIONDATAX-PLNDPRICE1.  "Future Planned Price 1
  MOVE ITAB-ZPLP2  TO VALUATIONDATA-PLNDPRICE2.   "Future Planned Price 2
  MOVE XFLAG       TO VALUATIONDATAX-PLNDPRICE2.  "Future Planned Price 2
  MOVE ITAB-ZPLD1  TO VALUATIONDATA-PLNDPRDATE1.  "Date from Which Future Planned Price 1 Is Valid
  MOVE XFLAG       TO VALUATIONDATAX-PLNDPRDATE1. "Date from Which Future Planned Price 1 Is Valid
  MOVE ITAB-ZPLD2  TO VALUATIONDATA-PLNDPRDATE2.  "Date from Which Future Planned Price 1 Is Valid
  MOVE XFLAG       TO VALUATIONDATAX-PLNDPRDATE2. "Date from Which Future Planned Price 1 Is Valid
ENDFORM" MAP_FICO_DATA

*&---------------------------------------------------------------------*
*&      Form  MAP_STORAGE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAP_STORAGE_DATA .

  IF NOT ITAB-LGORT IS INITIAL.
    CLEAR: T001L.
    SELECT SINGLE * FROM T001L CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
                                                  AND WERKS EQ ITAB-WERKS
                                                  AND LGORT EQ ITAB-LGORT.
    IF SY-SUBRC EQ 0 .
      MOVE XFLAG       TO HEADDATA-STORAGE_VIEW.        "Storage Views
      MOVE ITAB-WERKS  TO STORAGELOCATIONDATA-PLANT.    "Plant
      MOVE ITAB-LGORT  TO STORAGELOCATIONDATA-STGE_LOC. "storage location
      MOVE T001L-DISKZ TO STORAGELOCATIONDATA-MRP_IND.  "MRP indicator
      MOVE ITAB-WERKS  TO STORAGELOCATIONDATAX-PLANT.   "Plant
      MOVE ITAB-LGORT  TO STORAGELOCATIONDATAX-STGE_LOC."storage location
      MOVE XFLAG       TO STORAGELOCATIONDATAX-MRP_IND. "MRP indicator
    ENDIF .
  ENDIF.

  IF NOT ITAB-LGPRO IS INITIAL.
    CLEAR: T001L.
    SELECT SINGLE * FROM T001L CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
                                                  AND WERKS EQ ITAB-WERKS
                                                  AND LGORT EQ ITAB-LGPRO.
    IF SY-SUBRC EQ 0 .
      MOVE XFLAG       TO HEADDATA-STORAGE_VIEW.        "Storage Views
      MOVE ITAB-WERKS  TO STORAGELOCATIONDATA-PLANT.    "Plant
      MOVE ITAB-LGPRO  TO STORAGELOCATIONDATA-STGE_LOC. "storage location
      MOVE T001L-DISKZ TO STORAGELOCATIONDATA-MRP_IND.  "MRP indicator
      MOVE ITAB-WERKS  TO STORAGELOCATIONDATAX-PLANT.   "Plant
      MOVE ITAB-LGPRO  TO STORAGELOCATIONDATAX-STGE_LOC."storage location
      MOVE XFLAG       TO STORAGELOCATIONDATAX-MRP_IND. "MRP indicator
    ENDIF .
  ENDIF .
  IF NOT ITAB-LGFSB IS INITIAL.
    CLEAR: T001L.
    SELECT SINGLE * FROM T001L CLIENT SPECIFIED WHERE MANDT EQ SY-MANDT
                                                  AND WERKS EQ ITAB-WERKS
                                                  AND LGORT EQ ITAB-LGFSB.
    IF SY-SUBRC EQ 0 .
      MOVE XFLAG       TO HEADDATA-STORAGE_VIEW.        "Storage Views
      MOVE ITAB-WERKS  TO STORAGELOCATIONDATA-PLANT.    "Plant
      MOVE ITAB-LGFSB  TO STORAGELOCATIONDATA-STGE_LOC. "storage location
      MOVE T001L-DISKZ TO STORAGELOCATIONDATA-MRP_IND.  "MRP indicator
      MOVE ITAB-WERKS  TO STORAGELOCATIONDATAX-PLANT.   "Plant
      MOVE ITAB-LGFSB  TO STORAGELOCATIONDATAX-STGE_LOC."storage location
      MOVE XFLAG       TO STORAGELOCATIONDATAX-MRP_IND. "MRP indicator
    ENDIF .
  ENDIF .
ENDFORM.                    " MAP_STORAGE_DATA

*&---------------------------------------------------------------------*
*&      Form  MAINTAIN_CLASSIFICATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAINTAIN_CLASSIFICATION .
  DATA: WA LIKE ITAB .
  DATA: L_KLART LIKE AUSP-KLART.
  DATA: L_LINE_CH1 TYPE I.
  DATA: L_LINE_CH2 TYPE I.
  CLEAR: AUSP.
  CLEAR: L_CNT.
  CLEAR: WA .
  WA = ITAB .
  SELECT COUNT( * ) INTO L_CNT FROM AUSP CLIENT SPECIFIED
                              WHERE MANDT EQ SY-MANDT
                                AND OBJEK EQ WA-MATNR.
  CLEAR: L_KLART .
  L_KLART = WA-KLART .
  TRANSLATE WA-CLASS_01    TO UPPER CASE .
  TRANSLATE WA-MWERT_DESC1 TO UPPER CASE .

  REFRESH: BDCDATA, MESSTAB .
  CLEAR  : BDCDATA, MESSTAB .

  IF L_CNT = 0 .
    REFRESH: BDCDATA, MESSTAB .
    CLEAR  : BDCDATA, MESSTAB .
    CLEAR  : L_LINE_CH1, L_LINE_CH2.
    IF NOT WA-MWERT_DESC1 IS INITIAL .
      ADD 1 TO L_LINE_CH1 .
    ENDIF .
    IF NOT WA-MWERT_DESC11 IS INITIAL .
      ADD 1 TO L_LINE_CH1 .
    ENDIF .
    IF NOT WA-MWERT_DESC12 IS INITIAL .
      ADD 1 TO L_LINE_CH1 .
    ENDIF .
    IF NOT WA-MWERT_DESC2 IS INITIAL .
      ADD 1 TO L_LINE_CH2 .
    ENDIF .
    IF NOT WA-MWERT_DESC21 IS INITIAL .
      ADD 1 TO L_LINE_CH2 .
    ENDIF .
    IF NOT WA-MWERT_DESC22 IS INITIAL .
      ADD 1 TO L_LINE_CH2 .
    ENDIF .

    PERFORM BDC_DYNPRO  USING 'SAPLMGMM'             '0060'.
    PERFORM BDC_FIELD   USING 'BDC_OKCODE'           '/00'.
    PERFORM BDC_FIELD   USING 'RMMG1-MATNR'           WA-MATNR.

    PERFORM BDC_DYNPRO  USING 'SAPLMGMM'             '0070'.
    PERFORM BDC_FIELD   USING 'BDC_OKCODE'           '=ENTR'.
    PERFORM BDC_FIELD   USING 'MSICHTAUSW-KZSEL(03)' 'X'.

    PERFORM BDC_DYNPRO  USING 'SAPLCLCA'             '0602'.
    PERFORM BDC_FIELD   USING 'BDC_OKCODE'           '=ENTE'.
    PERFORM BDC_FIELD   USING 'RMCLF-KLART'           L_KLART.

    PERFORM BDC_DYNPRO  USING 'SAPLCLFM'             '0500'.
    PERFORM BDC_FIELD   USING 'BDC_OKCODE'           '/00'.
    PERFORM BDC_FIELD   USING 'RMCLF-CLASS(01)'       WA-CLASS_01.
    PERFORM BDC_DYNPRO  USING 'SAPLCTMS'             '0109'.
    PERFORM BDC_FIELD   USING 'BDC_OKCODE'           '=BACK'.

    IF L_LINE_CH1 = 1 .
      PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'   'A001'.
      PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'    WA-MWERT_DESC1.
      IF L_LINE_CH2 = 1.
        PERFORM BDC_FIELD     USING 'RCTMS-MNAME(02)'   'A002'.
        PERFORM BDC_FIELD     USING 'RCTMS-MWERT(02)'    WA-MWERT_DESC2.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD   USING 'RCTMS-MNAME(03)'   'A004'.
          PERFORM BDC_FIELD   USING 'RCTMS-MWERT(03)'    WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD   USING 'RCTMS-MNAME(04)'    'A005'.
          PERFORM BDC_FIELD   USING 'RCTMS-MWERT(04)'     WA-MWERT_SER.
        ENDIF.
      ENDIF .
      IF L_LINE_CH2 = 2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(02)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(02)'   WA-MWERT_DESC2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(03)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(03)'   WA-MWERT_DESC21.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(04)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(04)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(05)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(05)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .
      IF L_LINE_CH2 = 3.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(02)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(02)'   WA-MWERT_DESC2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(03)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(03)'   WA-MWERT_DESC21.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(04)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(04)'   WA-MWERT_DESC22.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(05)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(05)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(06)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(06)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .
    ENDIF .

    IF L_LINE_CH1 = 2 .
      PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'  'A001'.
      PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'   WA-MWERT_DESC1.
      PERFORM BDC_FIELD       USING 'RCTMS-MNAME(02)'  'A001'.
      PERFORM BDC_FIELD       USING 'RCTMS-MWERT(02)'   WA-MWERT_DESC11.
      IF L_LINE_CH2 = 1.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(03)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(03)'   WA-MWERT_DESC2.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(04)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(04)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(05)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(05)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .
      IF L_LINE_CH2 = 2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(03)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(03)'   WA-MWERT_DESC2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(04)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(04)'   WA-MWERT_DESC21.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(05)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(05)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(06)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(06)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .
      IF L_LINE_CH2 = 3.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(03)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(03)'   WA-MWERT_DESC2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(04)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(04)'   WA-MWERT_DESC21.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(05)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(05)'   WA-MWERT_DESC22.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(06)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(06)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(07)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(07)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .
    ENDIF .

    IF L_LINE_CH1 = 3 .
      PERFORM BDC_FIELD       USING 'RCTMS-MNAME(01)'  'A001'.
      PERFORM BDC_FIELD       USING 'RCTMS-MWERT(01)'   WA-MWERT_DESC1.
      PERFORM BDC_FIELD       USING 'RCTMS-MNAME(02)'  'A001'.
      PERFORM BDC_FIELD       USING 'RCTMS-MWERT(02)'   WA-MWERT_DESC11.
      PERFORM BDC_FIELD       USING 'RCTMS-MNAME(03)'  'A001'.
      PERFORM BDC_FIELD       USING 'RCTMS-MWERT(03)'   WA-MWERT_DESC12.
      IF L_LINE_CH2 = 1.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(04)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(04)'   WA-MWERT_DESC2.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(05)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(05)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(06)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(06)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .
      IF L_LINE_CH2 = 2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(04)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(04)'   WA-MWERT_DESC2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(05)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(05)'   WA-MWERT_DESC21.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(06)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(06)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(07)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(07)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .
      IF L_LINE_CH2 = 3.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(04)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(04)'   WA-MWERT_DESC2.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(05)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(05)'   WA-MWERT_DESC21.
        PERFORM BDC_FIELD       USING 'RCTMS-MNAME(06)'  'A002'.
        PERFORM BDC_FIELD       USING 'RCTMS-MWERT(06)'   WA-MWERT_DESC22.
        IF  WA-MWERT_SCR NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(07)'      'A004'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(07)'       WA-MWERT_SCR.
        ENDIF.
        IF WA-MWERT_SER NE SPACE.
          PERFORM BDC_FIELD USING 'RCTMS-MNAME(08)'      'A005'.
          PERFORM BDC_FIELD USING 'RCTMS-MWERT(08)'       WA-MWERT_SER.
        ENDIF.
      ENDIF .

    ENDIF .

    PERFORM BDC_DYNPRO USING 'SAPLCLFM'              '0500'.
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'            '=WECH'.
    PERFORM BDC_FIELD  USING 'RMCLF-PAGPOS'          '1'.
    PERFORM BDC_DYNPRO USING 'SAPLCLCA'              '0602'.
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'            '=ENTE'.
    IF SY-MANDT = '710'.
      PERFORM BDC_FIELD  USING 'RMCLF-KLART'         '022'.
    ELSE.
      PERFORM BDC_FIELD  USING 'RMCLF-KLART'         '023'.
    ENDIF .
    PERFORM BDC_DYNPRO USING 'SAPLCLFM'              '0500'.
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'            '/00'.
    IF WA-MTART = 'FERT'.
      PERFORM BDC_FIELD  USING 'RMCLF-STDCL(01)'     'X'.
    ENDIF .
    PERFORM BDC_FIELD  USING 'RMCLF-CLASS(01)'       'A003'.
    PERFORM BDC_DYNPRO USING 'SAPLCTMS'              '0109'.
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'            '=BACK'.
    PERFORM BDC_FIELD  USING 'RCTMS-MNAME(01)'       'A003'.
    PERFORM BDC_FIELD  USING 'RCTMS-MWERT(01)'       '入库日期'.
    PERFORM BDC_DYNPRO USING 'SAPLCLFM'              '0500'.
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'            '=ENDE'.
    PERFORM BDC_DYNPRO USING 'SAPLSPO1'              '0300'.
    PERFORM BDC_FIELD  USING 'BDC_OKCODE'            '=YES'.
    IF NOT P_BKJOB IS INITIAL .
      PERFORM BDC_TRANSACTION USING 'MM01'.
    ELSE.
      CALL TRANSACTION 'MM01' USING  BDCDATA
                               MODE 'E'
                             UPDATE 'L'
                      MESSAGES INTO MESSTAB.
      READ TABLE MESSTAB WITH KEY MSGTYP = 'E'.
      IF SY-SUBRC NE 0.
        MOVE TEXT-S10 TO I_RESULT-MESSAGE02.
      ELSE.
        MOVE TEXT-S12 TO I_RESULT-MESSAGE02.
      ENDIF .
    ENDIF .
  ELSE.
    MOVE TEXT-S13 TO I_RESULT-MESSAGE02.
  ENDIF .
ENDFORM.                    " MAINTAIN_CLASSIFICATION

*&---------------------------------------------------------------------*
*&      Form  BDC_TRANSACTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->TCODE      text
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.

  CALL FUNCTION 'BDC_INSERT'
    EXPORTING
      TCODE     = TCODE
    TABLES
      DYNPROTAB = BDCDATA.
  REFRESH BDCDATA.
ENDFORM.                    "BDC_TRANSACTION

*&---------------------------------------------------------------------*
*&      Form  CLOSE_GROUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CLOSE_GROUP.
* close batchinput group
  CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.                    "CLOSE_GROUP

*&---------------------------------------------------------------------*
*&      Form  OPEN_GROUP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM OPEN_GROUP.
  DATA: C_HOLDDATE LIKE SY-DATUM.
* open batchinput group
  CALL FUNCTION 'BDC_OPEN_GROUP'
    EXPORTING
      CLIENT   = SY-MANDT
      GROUP    = 'MM01_CLASS'
*     user     = c_user
      USER     = SY-UNAME
      KEEP     = 'X' "C_KEEP
      HOLDDATE = C_HOLDDATE.
ENDFORM.                    "OPEN_GROUP

*&---------------------------------------------------------------------*
*&      Form  BATCH_INPUT_SESSION_SUBMIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BATCH_INPUT_SESSION_SUBMIT .

*   Run BDC session automatically instead execute in SM35.
  SUBMIT RSBDCSUB AND RETURN
             WITH USER     =  SY-UNAME
             WITH MAPPE    =  'MM01_CLASS'
             WITH VON      =  SY-DATUM
             WITH BIS      =  SY-DATUM
             WITH Z_VERARB =  'X'
             WITH FEHLER   =  ''.

ENDFORM.                    " BATCH_INPUT_SESSION_SUBMIT

*&---------------------------------------------------------------------*
*&      Form  PREPARE_ALV_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM PREPARE_ALV_FIELDS .

  CLEAR  : G_ALV_FIELDCAT .
  PERFORM SET_ALV_FIELDS USING 'MATNR'       'I_RESULT' '' TEXT-C01.
  PERFORM SET_ALV_FIELDS USING 'WERKS'       'I_RESULT' '' TEXT-C02.
  PERFORM SET_ALV_FIELDS USING 'MTART'       'I_RESULT' '' TEXT-C03.
  PERFORM SET_ALV_FIELDS USING 'MAKTX'       'I_RESULT' '' TEXT-C12.
  PERFORM SET_ALV_FIELDS USING 'MEINS'       'I_RESULT' '' TEXT-D02.
  PERFORM SET_ALV_FIELDS USING 'TYPE'        'I_RESULT' '' TEXT-D03.
  PERFORM SET_ALV_FIELDS USING 'MESSAGE'     'I_RESULT' '' TEXT-D04.
  PERFORM SET_ALV_FIELDS USING 'QMVIEWS'     'I_RESULT' '' TEXT-D05.
  PERFORM SET_ALV_FIELDS USING 'MESSAGE01'   'I_RESULT' '' TEXT-D06.
  IF P_BKJOB IS INITIAL.
    PERFORM SET_ALV_FIELDS USING 'MESSAGE02' 'I_RESULT' '' TEXT-D07.
  ENDIF .
  PERFORM LAYOUT_BUILD   USING G_ALV_LAYOUT .

ENDFORM.                    " PREPARE_ALV_FIELDS

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_RESULT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_RESULT .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM          = SY-CPROG
      IS_LAYOUT                   = G_ALV_LAYOUT
*     i_callback_html_top_of_page = 'ALV_TOP_OF_PAGE'
      I_CALLBACK_PF_STATUS_SET    = S_STATUS
      I_DEFAULT                   = 'X'
      I_SAVE                      = 'X'
      I_CALLBACK_USER_COMMAND     = S_USER_COMMAND
      IT_FIELDCAT                 = G_ALV_FIELDCAT[]
      IT_EVENTS                   = G_ALV_EVENT
    TABLES
      T_OUTTAB                    = I_RESULT[].

ENDFORM.                    " DISPLAY_ALV_RESULT

*&---------------------------------------------------------------------*
*&      Form  STANDARD_ST01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM STANDARD_ST01 USING EXTAB TYPE SLIS_T_EXTAB.

* contain all fcode from ALV *
  DELETE EXTAB WHERE FCODE = '&RNT_PREV'.
  DELETE EXTAB WHERE FCODE = '&LFO'.
  DELETE EXTAB WHERE FCODE = '&NFO'.
  DELETE EXTAB WHERE FCODE = '&RNT'.
  SET PF-STATUS 'ALVST'.
  SET TITLEBAR  'ALVST'.
ENDFORM.                    "standard_st01

*-------------------------------------------------------------------
*       FORM USER_COMMAND-ALV
*-------------------------------------------------------------------
FORM USER_COMMAND-ALV USING R_UCOMM LIKE SY-UCOMM
                  RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: L_PROCESSED(001) .
  DATA: FELD(10TYPE C.
* table rs_selfield store the information of cursor and table index.
  RS_SELFIELD-REFRESH = 'X'.
  CASE R_UCOMM.
    WHEN 'PICK'.
      READ TABLE I_RESULT INDEX RS_SELFIELD-TABINDEX.
      IF SY-SUBRC = 0.
        CASE RS_SELFIELD-FIELDNAME.
          WHEN 'MATNR' OR 'QMVIEWS' OR 'WERKS'.
            SET PARAMETER ID 'MAT' FIELD I_RESULT-MATNR.
            SET PARAMETER ID 'WRK' FIELD I_RESULT-WERKS.
            CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
        ENDCASE .
      ENDIF .

  ENDCASE .
  CLEAR R_UCOMM.

ENDFORM.                    "user_command-alv

*&---------------------------------------------------------------------*
*&      Form  COLUMN_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM COLUMN_HEADER .

  WRITE:/ TEXT-C01 COLOR COL_KEY,
          TEXT-C06 COLOR COL_KEY,
          TEXT-C08 COLOR COL_KEY,
          TEXT-C03 COLOR COL_KEY,
          TEXT-C02 COLOR COL_KEY,
          TEXT-C09 COLOR COL_KEY,
          TEXT-C10 COLOR COL_KEY,
          TEXT-C11 COLOR COL_KEY,
          TEXT-C04 COLOR COL_KEY,
          TEXT-C05 COLOR COL_KEY,
          TEXT-C07 COLOR COL_KEY.
  ULINE.

ENDFORM.                    " COLUMN_HEADER
*&---------------------------------------------------------------------*
*&      Form  MODIFY_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MODIFY_SCREEN .

  DATA: L_SCR_DISABLE TYPE C.
  CLEAR: L_SCR_DISABLE .
  IF SY-UNAME EQ 'T31920' OR SY-UNAME EQ 'ABAP06' OR SY-UNAME EQ 'A31920'.
    L_SCR_DISABLE = 'N'.
  ELSE.
    L_SCR_DISABLE = 'Y'.
  ENDIF.
  IF L_SCR_DISABLE EQ 'Y'.
    LOOP AT SCREEN .
      IF SCREEN-NAME = 'P_MMAM'.
        SCREEN-INPUT = 0 .
        MODIFY SCREEN .
      ENDIF .
      IF SCREEN-NAME = 'P_MARC'.
        SCREEN-INPUT = 0 .
        MODIFY SCREEN .
      ENDIF .
      IF SCREEN-NAME = 'P_QMDATA'.
        SCREEN-INPUT = 0 .
        MODIFY SCREEN .
      ENDIF .
      IF SCREEN-NAME = 'P_CLASS'.
        SCREEN-INVISIBLE = 1 .
        MODIFY SCREEN .
      ENDIF .
    ENDLOOP .
  ENDIF .

  LOOP AT SCREEN.
    IF SCREEN-NAME = 'P_CLASS'.
      SCREEN-INVISIBLE = 1 .
      MODIFY SCREEN .
    ENDIF .
  ENDLOOP .

ENDFORM.                    " MODIFY_SCREEN

*&---------------------------------------------------------------------*
*&      Form  MATERIAL_TYPE_CHANGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MATERIAL_TYPE_CHANGE .

  REFRESH: BDCDATA.
  CLEAR  : BDCDATA.
  PERFORM BDC_DYNPRO      USING 'SAPMM03Z'       '0100'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'     'RM03Z-NMTAR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'     '/00'.
  PERFORM BDC_FIELD       USING 'RM03Z-MATNR'     ITAB-MATNR .
  PERFORM BDC_FIELD       USING 'RM03Z-NMTAR'     ITAB-MTART.
  PERFORM BDC_DYNPRO      USING 'SAPMM03Z'       '0100'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'     '=LOS'.
  PERFORM BDC_FIELD       USING 'RM03Z-MATNR'     ITAB-MATNR.
  PERFORM BDC_FIELD       USING 'RM03Z-NMTAR'     ITAB-MTART .
  PERFORM BDC_DYNPRO      USING 'SAPMM03Z'       '0300'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'     '=ENTR'.
  CALL TRANSACTION 'MMAM' USING  BDCDATA MODE    'N' UPDATE 'L'.
  REFRESH: BDCDATA.
  CLEAR  : BDCDATA.

ENDFORM.                    " MATERIAL_TYPE_CHANGE

*&---------------------------------------------------------------------*
*&      Form  MAINTAIN_CLASSIFICATION_BAPI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM MAINTAIN_CLASSIFICATION_BAPI .

  DATA: L_OBJECT(050) .

  CLEAR: AUSP, L_CNT.
  SELECT COUNT( * ) INTO L_CNT FROM AUSP CLIENT SPECIFIED
                              WHERE MANDT EQ SY-MANDT
                                AND OBJEK EQ ITAB-MATNR.
  IF L_CNT = 0.
    REFRESH: GIT_BAPI1003, GIT_VALUES_CHAR, GIT_VALUES_CURR, GIT_BAPIRET2.
    CLEAR  : GIT_BAPI1003, GIT_VALUES_CHAR, GIT_VALUES_CURR, GIT_BAPIRET2.
    CLEAR  : L_OBJECT .

    L_OBJECT = ITAB-MATNR .

    CLEAR: INT_CNT, GS_VALUES_CHAR .
    IF NOT ITAB-MWERT_DESC1 IS INITIAL .
      CLEAR: INT_CNT, GS_VALUES_CHAR .
      GS_VALUES_CHAR-CHARACT    = 'A001'"Characteristics
      GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_DESC1. "characteristics value
      ADD 1 TO INT_CNT .
      GS_VALUES_CHAR-INSTANCE   = INT_CNT.
      APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.

      IF NOT ITAB-MWERT_DESC11 IS INITIAL .
        CLEAR: GS_VALUES_CHAR.
        GS_VALUES_CHAR-CHARACT    = 'A001'"Characteristics
        GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_DESC11. "characteristics value
        ADD 1 TO INT_CNT .
        GS_VALUES_CHAR-INSTANCE   = INT_CNT.
        APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.
      ENDIF .
      IF NOT ITAB-MWERT_DESC12 IS INITIAL .
        CLEAR: GS_VALUES_CHAR.
        GS_VALUES_CHAR-CHARACT    = 'A001'"Characteristics
        GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_DESC12. "characteristics value
        ADD 1 TO INT_CNT .
        GS_VALUES_CHAR-INSTANCE   = INT_CNT.
        APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.
      ENDIF .
    ENDIF .

    CLEAR: INT_CNT, GS_VALUES_CHAR .
    IF NOT ITAB-MWERT_DESC2 IS INITIAL .
      CLEAR: INT_CNT, GS_VALUES_CHAR .
      GS_VALUES_CHAR-CHARACT    = 'A002'"Characteristics
      GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_DESC2. "characteristics value
      ADD 1 TO INT_CNT .
      GS_VALUES_CHAR-INSTANCE   = INT_CNT.
      APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.
      IF NOT ITAB-MWERT_DESC21 IS INITIAL .
        CLEAR: GS_VALUES_CHAR.
        GS_VALUES_CHAR-CHARACT    = 'A002'"Characteristics
        GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_DESC21. "characteristics value
        ADD 1 TO INT_CNT .
        GS_VALUES_CHAR-INSTANCE   = INT_CNT.
        APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.
      ENDIF .
      IF NOT ITAB-MWERT_DESC22 IS INITIAL .
        CLEAR: GS_VALUES_CHAR.
        GS_VALUES_CHAR-CHARACT    = 'A002'"Characteristics
        GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_DESC22. "characteristics value
        ADD 1 TO INT_CNT .
        GS_VALUES_CHAR-INSTANCE   = INT_CNT.
        APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.
      ENDIF .
    ENDIF .

    CLEAR: INT_CNT, GS_VALUES_CHAR .
    GS_VALUES_CHAR-CHARACT    = 'A004'"Characteristics
    GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_SCR. "characteristics value
    ADD 1 TO INT_CNT .
    GS_VALUES_CHAR-INSTANCE   = INT_CNT.
    APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.

    CLEAR: INT_CNT, GS_VALUES_CHAR .
    GS_VALUES_CHAR-CHARACT    = 'A005'"Characteristics
    GS_VALUES_CHAR-VALUE_CHAR = ITAB-MWERT_SER. "characteristics value
    ADD 1 TO INT_CNT .
    GS_VALUES_CHAR-INSTANCE   = INT_CNT.
    APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.

    CALL FUNCTION 'BAPI_OBJCL_CREATE'
      EXPORTING
        OBJECTKEYNEW      = L_OBJECT "Material Master
        OBJECTTABLENEW    = 'MARA'
        CLASSNUMNEW       = 'A001' "Class Number
        CLASSTYPENEW      = '001'  "Class Type
        STANDARDCLASS     = 'X'
        NO_DEFAULT_VALUES = 'X'
      TABLES
        ALLOCVALUESNUM    = GIT_BAPI1003
        ALLOCVALUESCHAR   = GIT_VALUES_CHAR
        ALLOCVALUESCURR   = GIT_VALUES_CURR
        RETURN            = GIT_BAPIRET2.

    READ TABLE GIT_BAPIRET2 WITH KEY TYPE = 'E'.
    IF SY-SUBRC NE 0.
      MOVE TEXT-S10 TO I_RESULT-MESSAGE02.
    ELSE.
      MOVE TEXT-S12 TO I_RESULT-MESSAGE02.
    ENDIF .

    REFRESH: GIT_BAPI1003, GIT_VALUES_CHAR, GIT_VALUES_CURR, GIT_BAPIRET2.
    CLEAR  : GIT_BAPI1003, GIT_VALUES_CHAR, GIT_VALUES_CURR, GIT_BAPIRET2.

    CLEAR: GS_VALUES_CHAR, INT_CNT.

    GS_VALUES_CHAR-CHARACT    = 'A003'"Characteristics
    GS_VALUES_CHAR-VALUE_CHAR = '入库日期'"characteristics value
    ADD 1 TO INT_CNT .
    GS_VALUES_CHAR-INSTANCE   = INT_CNT.
    APPEND GS_VALUES_CHAR TO GIT_VALUES_CHAR.

    CALL FUNCTION 'BAPI_OBJCL_CREATE'
      EXPORTING
        OBJECTKEYNEW      = L_OBJECT "Material Master
        OBJECTTABLENEW    = 'MARA'
        CLASSNUMNEW       = 'A003' "Class Number
        CLASSTYPENEW      = '023'  "Class Type
        STANDARDCLASS     = 'X'
        NO_DEFAULT_VALUES = 'X'
      TABLES
        ALLOCVALUESNUM    = GIT_BAPI1003
        ALLOCVALUESCHAR   = GIT_VALUES_CHAR
        ALLOCVALUESCURR   = GIT_VALUES_CURR
        RETURN            = GIT_BAPIRET2.

    READ TABLE GIT_BAPIRET2 WITH KEY TYPE = 'E'.
    IF SY-SUBRC NE 0.
      MOVE TEXT-S10 TO I_RESULT-MESSAGE02.
    ELSE.
      MOVE TEXT-S12 TO I_RESULT-MESSAGE02.
    ENDIF .
  ENDIF .

ENDFORM.                    " MAINTAIN_CLASSIFICATION_BAPI