Raw Material IQA Status Inventory Report

Raw Material IQA Status Inventory Report*&-**&CompanyASATCompanyLimited**&…

大家好,欢迎来到IT知识分享网。Raw Material IQA Status Inventory Report

*&———————————————————————*
*& Company ASAT Company Limited                                        *
*&                                                                     *
*& Report  ZRMM0033                                                   *
*&                                                                     *
*& Autor:  LILO.                                                    *
*&                                                                     *
*& Date:   05.26.2005                                                  *
*&                                                                     *
*———————————————————————-*
*& Description:                                                        *
*&   The report is used for query the raw material inventory data      *
*&                                                                     *
*———————————————————————-*
*& Modification:
*  Mod      Resp Person      Date        Description
*
*———————————————————————-*

REPORT zrmm0033 message-id 00.

TYPE-POOLS: slis.

*———————————————————————-*
*  Tables                                                              *
*———————————————————————-*
TABLES: kna1,              “Customer Master
        mcha, mchb,        “Material Batches/Stocks
        cabn, cabnt, ausp, “Characteristics/Values
        klah, ksml,        “Class Header/Characteristics
        resb,              “Reservation
        makt,              “Material Text
        aufk, afko,        “Order master/header data
        vbak, vbap,        “Sales order header/line item data
        mara, marc,
        adrc, vbpa, vbkd.  “Address, sales document partner/business dat

*———————————————————————-*
*  Declarations                                                        *
*———————————————————————-*
TYPES: tp_char05 TYPE char05.

DATA: BEGIN OF gt_main OCCURS 1,
        matnr LIKE mchb-matnr,              “Material
        werks LIKE mchb-werks,              “Plant
        lgort LIKE mchb-lgort,              “Storage Location
        charg LIKE mchb-charg,              “Batch
        BTREMARK(40),                         “Remark field  “DEVK903322
        ernam LIKE mchb-ernam,              “Created by
        aenam LIKE mchb-aenam,              “Changed by
        sperc LIKE mchb-sperc,              “Inventory Block
        clabs LIKE mchb-clabs,              “Unrestricted
        cumlm LIKE mchb-cumlm,              “Stock in transfer
        cinsm LIKE mchb-cinsm,              “In quanlity inspection
        ceinm LIKE mchb-ceinm,              “Restricted use
        cspem LIKE mchb-cspem,              “Blocked
        cretm LIKE mchb-cretm,              “Returns
        lwedt LIKE mcha-lwedt,              “Last GR
      END OF gt_main.

* batch classification characteristics
DATA: BEGIN OF gt_bclass OCCURS 0,
        posnr LIKE api_ch_att-posnr,        “Item No.
        atinn LIKE cabnt-atinn,             “Internal Characteristics
        atnam like api_ch_att-atnam,        “Characteristics
        atbez LIKE cabnt-atbez,             “Characteristics description
        dtype LIKE api_ch_att-dtype,        “Characteristics type
        anzdz like api_ch_att-anzdz,        “Decimal places
        atsch like api_ch_att-atsch,        “template/edit mask
        msehi like api_ch_att-msehi,        “UOM
        exist TYPE c,                       “Value exist
      END OF gt_bclass.

DATA: BEGIN OF gt_bcldat OCCURS 0,
        matnr LIKE mchb-matnr,              “Material
        werks LIKE mchb-werks,              “Plant
        lgort LIKE mchb-lgort,              “Storage Location
        charg LIKE mchb-charg,              “Batch
        atinn LIKE ausp-atinn,              “Internal Characteristics
        atwrt LIKE ausp-atwrt,              “Characteristics Value
        atflv like ausp-atflv,              “Characteristics num value
      END OF gt_bcldat.

* material classification characteristics
DATA: BEGIN OF gt_mclass OCCURS 0,
        posnr LIKE api_ch_att-posnr,        “Item No.
        atinn LIKE cabnt-atinn,             “Internal Characteristics
        atnam like api_ch_att-atnam,        “Characteristics
        atbez LIKE cabnt-atbez,             “Characteristics description
        atfor LIKE klmerka-atfor,           “Characteristics type
        anzdz like api_ch_att-anzdz,        “Decimal places
        atsch like api_ch_att-atsch,        “template/edit mask
        dimen like klmerka-dimen,           “UOM
      END OF gt_mclass.

DATA: BEGIN OF gt_mcldat OCCURS 0,
        matnr LIKE mchb-matnr,              “Material
        werks LIKE mchb-werks,              “Plant
        lgort LIKE mchb-lgort,              “Storage Location
        charg LIKE mchb-charg,              “Batch
        atnam LIKE cabn-atnam,              “Characteristics
        ausp1 LIKE ausp-atwrt,             “Characteristics description
        atflv like ausp-atflv,              “Characteristics num value
      END OF gt_mcldat.

DATA: BEGIN OF itab OCCURS 1,
*     insert fields here
        matnr LIKE mchb-matnr,              “Material
        werks LIKE mchb-werks,            “Plant
        lgort LIKE mchb-lgort,            “Storage Location
        charg LIKE mchb-charg,            “Batch
        BTREMARK(40),                       “Batch Remark DEVK903322
        ernam LIKE mchb-ernam,            “Created by
        aenam LIKE mchb-aenam,            “Changed by
        sperc LIKE mchb-sperc,            “Inventory Block
        clabs LIKE mchb-clabs,            “Unrestricted
        cumlm LIKE mchb-cumlm,            “Stock in transfer
        cinsm LIKE mchb-cinsm,            “In quanlity inspection
        ceinm LIKE mchb-ceinm,            “Restricted use
        cspem LIKE mchb-cspem,            “Blocked
        cretm LIKE mchb-cretm,            “Returns
        lwedt LIKE mcha-lwedt,            “Last GR
        meins     like mara-meins,          “UOM
        zeinr     like mara-zeinr,        “Drawing Document
        zeivr     like mara-zeivr,        “Drawing version
        licha     like mcha-licha,        “vendor batch
        hsdat     like mcha-hsdat,        “production date
        fvdt2   like mcha-fvdt2,        “mfg date
*       production order related
        xwaok LIKE resb-xwaok,            “Movement allowed
        kzear LIKE resb-kzear,            “Final issue
        bdter LIKE resb-bdter,            “Requirements date
        bdmng LIKE resb-bdmng,            “Requirements quantity
        enmng LIKE resb-enmng,            “Withdrawal quantity
        osmng LIKE resb-bdmng,            “Outstanding reqt qty
        aufnr LIKE resb-aufnr,            “Order number
        baugr LIKE resb-baugr,            “Material number(FG)
        maktx LIKE makt-maktx,            “Material text
        class LIKE sclass-class,          “Class
        kdauf LIKE aufk-kdauf,            “Sales order
        kdpos LIKE aufk-kdpos,            “Sales order item
        aprio LIKE afko-aprio,            “Order priority
        auart LIKE vbak-auart,            “Sales document type
        kunnr LIKE vbpa-kunnr,            “Bill-to party
        name1 LIKE adrc-name1,            “Customer name
        arktx LIKE vbap-arktx,            “Sales item description
        kdmat LIKE vbap-kdmat,            “Customer material
        tdlin(205) type c,          “SO item textf for fab lot#
*        tdlin LIKE tline-tdline,          “SO item textf for fab lot#
        lprio LIKE vbap-lprio,            “SO item delivery priority
        bstdk LIKE vbkd-bstdk,            “SO purchase order date
        RM_DWG LIKE AUSP-ATWRT,           ” SUPPLIER DRAWING NO
        RM_NO  LIKE AUSP-ATWRT,           ” ASAT DRAWING NO
      END OF itab.

*A000001
DATA: BEGIN OF gt_exp OCCURS 1,
*     die stock information
        werks LIKE mchb-werks,              “Plant
        lgort LIKE mchb-lgort,            “Storage Location
        charg LIKE mchb-charg,            “Batch
        clabs(18) type c,                   “Unrestricted
        lwedt LIKE mcha-lwedt,              “Last GR
        iqa(1) type c,
**     die characteristic information, refer to DB_DIE_CLASS
*        kunnr(10) type c,                   “Customer Code
*        name1 like kna1-name1,              “Customer Name
*        fablt(30) type c,                   “Fab Lot No.
*        wqty(8) type c,                     “Wafer Quantity
*        dqty(13) type c,                     “Die Received Quantity
      END OF gt_exp.

DATA: lin TYPE i, l(6).

data : begin of xtab1 occurs 0,
  line(1000).
data : end of xtab1.

* end of A00001

DATA: BEGIN OF con_class,
*     class type constants
*        matnr(3) VALUE ‘001’,
        charg(3) VALUE ‘022’,
      END OF con_class.

DATA: BEGIN OF con_char,
*     charateristic constants
*        cust(30) VALUE ‘DB_CUSTOMER’,
*        fl(30) VALUE ‘DB_FL’,
*        ICCUST(30) VALUE ‘ICB_CUSTOMER’,
*        ICLOT(30) VALUE ‘ICB_LOT_NO’,
        iqa(30) VALUE ‘MM_IQA_STATUS’,
      END OF con_char.

DATA: BEGIN OF con_sel,
*     selection constants
*        kunnr(3) VALUE ‘001’,
*        fablt(3) VALUE ‘002’,
*        ICCUST(3) VALUE ‘003’,
*        ICLOT(3)  VALUE ‘004’,
        IQA(3) VALUE ‘001’,
      END OF con_sel.

DATA: BEGIN OF con_subtotal,
        st01 TYPE tp_char05 VALUE ‘CLABS’,
        st02 TYPE tp_char05 VALUE ‘CUMLM’,
        st03 TYPE tp_char05 VALUE ‘CINSM’,
        st04 TYPE tp_char05 VALUE ‘CEINM’,
        st05 TYPE tp_char05 VALUE ‘CSPEM’,
        st06 TYPE tp_char05 VALUE ‘CRETM’,
      END OF con_subtotal.

DATA: BEGIN OF con_sotxt,
        itmid(4) VALUE ‘Z002’,
        itmobj(4) VALUE ‘VBBP’,
      END OF con_sotxt.

* Report variant variables
DATA: G_REPID LIKE SY-REPID.

DATA: GX_VARIANT LIKE DISVARIANT,
      G_EXIT(1) TYPE C,
      G_SAVE(1) TYPE C,
      G_VARIANT LIKE DISVARIANT.

* Dynamic internal table variables
FIELD-SYMBOLS: <f>,
               <tab> TYPE STANDARD TABLE,
               <wa>.

DATA: intern TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE,
      fcat TYPE slis_t_fieldcat_alv,
      it_fieldcat TYPE lvc_t_fcat,
      g_idx TYPE i.

CONSTANTS: c_billto(2) VALUE ‘RE’,
*          c_maxmm TYPE i VALUE 14,  “DEVK903896
           ” Value in C_MAXMM controls how many MM fields to be
           ” printed out in the ALV format
           C_MAXMM TYPE I VALUE 23, “DEVK903896
           c_bcl(4) VALUE ‘BCL_’,
           c_mcl(4) VALUE ‘MCL_’.
data atwrt1 like ausp-atwrt.

*———————————————————————-*
*  Selection Screen                                                    *
*———————————————————————-*
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
* Selection criteria
*PARAMETERS p_matnrz LIKE mchb-matnr.
SELECT-OPTIONS so_matnr FOR mchb-matnr.
SELECT-OPTIONS so_werks FOR mchb-werks.
SELECT-OPTIONS so_lgort FOR mchb-lgort.
SELECT-OPTIONS so_charg FOR mchb-charg.
SELECT-OPTIONS so_mtart FOR mara-mtart.
SELECT-OPTIONS so_matkl FOR mara-matkl.
SELECT-OPTIONS so_dispo FOR marc-dispo.
SELECT-OPTIONS so_licha FOR mcha-licha.
PARAMETERS p_class LIKE klah-class DEFAULT ‘MM_RAWMAT’ NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK a.
** DB Characteristics
*SELECTION-SCREEN BEGIN OF BLOCK d WITH FRAME TITLE text-005.
*SELECT-OPTIONS so_kunnr FOR kna1-kunnr.
*SELECT-OPTIONS so_fablt FOR ausp-atwrt.
*SELECTION-SCREEN END OF BLOCK d.
** ICB Characteristics
*SELECTION-SCREEN BEGIN OF BLOCK e WITH FRAME TITLE text-006.
*SELECT-OPTIONS IC_CUST  FOR KNA1-KUNNR.       “DEVK903322
*SELECT-OPTIONS IC_LOT   FOR AUSP-ATWRT.       “DEVK903322
*SELECTION-SCREEN END OF BLOCK e.
* Raw Material Characteristics
SELECTION-SCREEN BEGIN OF BLOCK d WITH FRAME TITLE text-007.
SELECT-OPTIONS so_iqa FOR ausp-atwrt.
SELECTION-SCREEN END OF BLOCK d.
* Variant
SELECTION-SCREEN BEGIN OF BLOCK 0 WITH FRAME TITLE TEXT-003.
PARAMETERS: P_VARI LIKE DISVARIANT-VARIANT.
SELECTION-SCREEN END OF BLOCK 0.
* Layout
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-002.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) text-011
                 FOR FIELD p_nozero.
SELECTION-SCREEN POSITION pos_low.
PARAMETERS p_nozero AS CHECKBOX DEFAULT ‘X’.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) text-012
                 FOR FIELD p_ppincl.
SELECTION-SCREEN POSITION pos_low.
PARAMETERS p_ppincl AS CHECKBOX.
SELECTION-SCREEN END OF LINE.
” START OF DEVK903322
PARAMETERS P_NOMISS   AS CHECKBOX.
PARAMETERS P_NOEMPT   AS CHECKBOX.
” END OF DEVK903322
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) text-013 FOR FIELD p_nodisp.
PARAMETERS p_nodisp TYPE c NO-DISPLAY.
SELECTION-SCREEN END OF LINE.
PARAMETERS p_werksl AS CHECKBOX DEFAULT ‘X’.
PARAMETERS p_lgortl AS CHECKBOX DEFAULT ‘X’.
PARAMETERS p_chargl AS CHECKBOX DEFAULT ‘X’.
SELECTION-SCREEN END OF BLOCK b.

* A00001
SELECTION-SCREEN BEGIN OF BLOCK c WITH FRAME TITLE text-004.
parameters : p_cbexp type c as checkbox.
parameters : p_fname1 like rlgrap-filename MODIF ID MG2, ” obligatory
             p_fname2 like rlgrap-filename MODIF ID MG2. ” obligatory
SELECTION-SCREEN END OF BLOCK c.

* Process on value request
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
  PERFORM F4_FOR_VARIANT.

* A00001
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname1 .
  perform F4_VALUE_FNAME1.

* PAI
AT SELECTION-SCREEN.
  PERFORM PAI_OF_SELECTION_SCREEN.
  perform check_file.

*AT SELECTION-SCREEN ON so_kunnr.
*  PERFORM check_so_value USING con_sel-kunnr.
*
*AT SELECTION-SCREEN ON END OF so_kunnr.
*  PERFORM check_so_value USING con_sel-kunnr.
*
*AT SELECTION-SCREEN ON so_fablt.
*  PERFORM check_so_value USING con_sel-fablt.
*
*AT SELECTION-SCREEN ON END OF so_fablt.
*  PERFORM check_so_value USING con_sel-fablt.
*
AT SELECTION-SCREEN ON so_iqa.
  PERFORM check_so_value USING con_sel-iqa.

AT SELECTION-SCREEN ON END OF so_iqa.
  PERFORM check_so_value USING con_sel-iqa.

* START OF DEVK903322
*AT SELECTION-SCREEN ON IC_CUST.
*  PERFORM CHECK_SO_VALUE USING CON_SEL-KUNNR.
*
*AT SELECTION-SCREEN ON END OF IC_CUST.
*  PERFORM CHECK_SO_VALUE USING CON_SEL-KUNNR.
*
*AT SELECTION-SCREEN ON IC_LOT.
*  PERFORM CHECK_SO_VALUE USING CON_SEL-ICLOT.
*
*AT SELECTION-SCREEN ON END OF IC_LOT.
*  PERFORM CHECK_SO_VALUE USING CON_SEL-ICLOT.
* END OF DEVK903322

AT SELECTION-SCREEN ON p_werksl.
  IF p_werksl IS INITIAL.
    IF p_lgortl = ‘X’.
      MESSAGE w899(mm)
        WITH ‘Stock at higher levels will also be displayed.’.
      p_werksl = ‘X’.
    ENDIF.
  ENDIF.

AT SELECTION-SCREEN ON p_lgortl.
  IF p_lgortl IS INITIAL.
    IF p_chargl = ‘X’.
      MESSAGE w899(mm)
        WITH ‘Stock at higher levels will also be displayed.’.
      p_lgortl = ‘X’.
    ENDIF.
  ENDIF.

*———————————————————————-*
*  Initialization                                                      *
*———————————————————————-*
INITIALIZATION.
  G_REPID = SY-REPID.

* Set Options: save variants userspecific or general
  G_SAVE = ‘A’.
  PERFORM VARIANT_INIT.
* Get default variant
  GX_VARIANT = G_VARIANT.
  CALL FUNCTION ‘REUSE_ALV_VARIANT_DEFAULT_GET’
       EXPORTING
            I_SAVE     = G_SAVE
       CHANGING
            CS_VARIANT = GX_VARIANT
       EXCEPTIONS
            NOT_FOUND  = 2.
  IF SY-SUBRC = 0.
    P_VARI = GX_VARIANT-VARIANT.
  ENDIF.

*———————————————————————-*
*  Start of Selection                                                  *
*———————————————————————-*
START-OF-SELECTION.

* IF p_matnrz IS INITIAL.
* IF SO_MATNR[] IS INITIAL and SO_LGORT[] IS INITIAL.
*   MESSAGE s899(mm)
*     WITH ‘Please enter material and/or storage location!’.
*   EXIT.
* ENDIF.

* insert code to fill ITAB here :)
  PERFORM select_records.
  IF P_NOMISS = ‘X’.
    DELETE ITAB WHERE BTREMARK = ‘Missing’.
  ENDIF.
  IF P_NOEMPT = ‘X’.
    DELETE ITAB WHERE BTREMARK = ‘Empty’.
  ENDIF.
  DELETE ITAB WHERE BTREMARK = ‘Skip’.

END-OF-SELECTION.

  DESCRIBE TABLE itab LINES lin.
  WRITE lin TO l.

  if p_cbexp = ‘X’.
    perform collect_dieinfo.
    perform format_file.
    if p_fname1 is initial.
      perform download_serv.
    else.
      perform download_pc.
    endif.
  else.
    PERFORM outputalv.
  endif.

*******************************************************

*———————————————————————-*
*  Subroutine                                                          *
*———————————————————————-*
*&———————————————————————*
*&      Form  initialization
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM initialization .
ENDFORM.                    ” initialization
*&———————————————————————*
*&      Form  OutputALV
*&———————————————————————*
*       Purpose: Set and display ALV grids
*———————————————————————-*
FORM outputalv.

  DATA: fieldcat TYPE slis_t_fieldcat_alv,
        fc_str   TYPE slis_fieldcat_alv,
        layout   TYPE slis_layout_alv,
        title    TYPE lvc_title,
        repid    LIKE sy-repid,
        variant  LIKE disvariant,
        sort     TYPE slis_t_sortinfo_alv,
        sort_str TYPE slis_sortinfo_alv
        .

  repid = sy-repid.

  layout-colwidth_optimize = ‘X’.

*  variant-report = repid.

*   create dynamic table
  PERFORM build-field-cat.
  PERFORM create-data-table.
  PERFORM fill-data-table.

  title = sy-title.

* SORTING OPTIONS
  sort_str-spos = 1.
  sort_str-fieldname = ‘MATNR’.
  sort_str-up = ‘X’.
  sort_str-subtot = ‘X’. ” calc subtotals by this
  IF p_werksl IS INITIAL.
    sort_str-expa = ‘X’.   ” collapse to subtotals
  ENDIF.
  APPEND sort_str TO sort.
  sort_str-spos = 2.
  sort_str-fieldname = ‘WERKS’.
*  sort_str-down = ‘X’.
  sort_str-up = ‘X’.
  sort_str-subtot = ‘X’. ” calc subtotals by this
  IF p_lgortl IS INITIAL.
    sort_str-expa = ‘X’.   ” collapse to subtotals
  ENDIF.
  APPEND sort_str TO sort.
  sort_str-spos = 3.
  sort_str-fieldname = ‘LGORT’.
  sort_str-up = ‘X’.
  sort_str-subtot = ‘X’. ” calc subtotals by this
  IF p_chargl IS INITIAL.
    sort_str-expa = ‘X’.   ” collapse to subtotals
  ENDIF.
  APPEND sort_str TO sort.

* display ALV
  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
   EXPORTING
     i_grid_title = title
     it_fieldcat  = fcat[]            “REPLACED fieldcat
     is_layout    = layout
     i_save       = G_SAVE            “‘A’
     is_variant   = G_VARIANT         “variant
     it_sort        = sort
*     I_CALLBACK_PROGRAM      = repid
*     I_CALLBACK_USER_COMMAND = ‘OUTPUTALV_DETAILS’
   TABLES
     t_outtab    = <tab>              “REPLACED itab
   EXCEPTIONS
     program_error = 1
     OTHERS        = 2
  .

ENDFORM.                    “OutputALV

*******************************************************

*FORM OutputALV_Details USING in_ucomm LIKE sy-ucomm
*                             in_selfield TYPE SLIS_SELFIELD.
*
* get the info from line selected
*  READ TABLE itab INDEX in_selfield-tabindex.
*
**  REFRESH det_tab.
*
*
*  SORT det_tab BY .
*
*ENDFORM.

*&———————————————————————*
*&      Form  select_records
*&———————————————————————*
*       Purpose:  Select records from tables by selection criteria
*———————————————————————-*
*      –>P_ATWRT  text
*———————————————————————-*

FORM select_records.

  DATA: l_token TYPE c,
        l_tabix LIKE sy-tabix.
  data: xmatnr like mara-matnr.
* get table data
  if so_matnr[] is initial.
     if so_charg[] is initial.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_main FROM mchb
        WHERE werks IN so_werks
          AND lgort IN so_lgort AND charg IN so_charg.
     else.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_main FROM mchb
        WHERE werks IN so_werks AND charg IN so_charg
          AND lgort IN so_lgort.
     endif.
  else.
  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_main FROM mchb
    WHERE matnr IN SO_matnr AND werks IN so_werks
    AND lgort IN so_lgort AND charg IN so_charg.
  endif.
*  delete gt_main where
*         sperc = 0 and clabs = 0 and
*         cumlm = 0 and cinsm = 0 and
*         ceinm = 0 and cspem = 0 and
*         cretm = 0.

  LOOP AT gt_main.
    select single matnr into xmatnr from mara
      where matnr = gt_main-matnr
        and mtart in so_mtart
        and matkl in so_matkl.
    check sy-subrc = 0.
    select single matnr into xmatnr from marc
      where matnr = gt_main-matnr
        and werks = gt_main-werks
        and dispo in so_dispo.
    check sy-subrc = 0.
    SELECT SINGLE lwedt INTO gt_main-lwedt
      FROM mcha WHERE matnr = gt_main-matnr AND werks = gt_main-werks
      AND charg = gt_main-charg.
       PERFORM check_batch_value USING l_token.
       ” START OF DEVK903322
*      CHECK l_token IS INITIAL.
       IF L_TOKEN = ‘X’.
         GT_MAIN-BTREMARK = ‘Empty’.
       ELSEIF L_TOKEN = ‘Y’.
         GT_MAIN-BTREMARK = ‘Missing’.
       ELSEIF L_TOKEN = ‘Z’.
         GT_MAIN-BTREMARK = ‘Others’.
       ELSEIF L_TOKEN = ‘N’.           “Characteristics not found
         GT_MAIN-BTREMARK = ‘Skip’.
       ELSEIF L_TOKEN = ‘ ‘.
         GT_MAIN-BTREMARK = ‘OK’.
*        EXIT.                             “DEVK903601
       ENDIF.
       check l_token = ‘ ‘.
    ” END OF DEVK903322
****************************************

       clear atwrt1.
       select single ausp~atwrt into (atwrt1)
                  from ausp join cabn on ausp~atinn = cabn~atinn
                  where objek = gt_main-matnr
                       and klart = ‘001’
                       and cabn~atnam = ‘RM_SUP_DWG_NUM’.

       itab-rm_dwg = atwrt1.
       clear atwrt1.
       select single ausp~atwrt into (atwrt1)
                  from ausp join cabn on ausp~atinn = cabn~atinn
                  where objek = gt_main-matnr
                       and klart = ‘001’
                       and cabn~atnam = ‘RM_DRAWING_NO’.
*
*       SELECT SINGLE * FROM AUSP WHERE OBJEK = BATAB-MATNR
*                            AND KLART = ‘001’
*                            AND ATINN = ‘RM_DRAWING_NO’.

       itab-rm_no = atwrt1.

****************************************

    select single * from mcha where matnr = gt_main-matnr
                                and werks = gt_main-werks
                                and charg = gt_main-charg.
    check mcha-licha in so_licha.
    move: mcha-licha to itab-licha,
          mcha-hsdat to itab-hsdat,
          mcha-fvdt2 to itab-fvdt2.
    select single * from mara where matnr = gt_main-matnr.
    move: mara-meins to itab-meins,
          mara-zeinr to itab-zeinr,
          mara-zeivr to itab-zeivr.
    MOVE-CORRESPONDING gt_main TO itab.
    IF p_nozero = ‘X’.
      IF ( gt_main-clabs = 0 AND gt_main-cumlm = 0
              AND gt_main-cinsm = 0 AND gt_main-ceinm = 0
              AND gt_main-cspem = 0 AND gt_main-cretm = 0 ).
        DELETE gt_bcldat
          WHERE werks = gt_main-werks AND ( lgort = gt_main-lgort )
            AND ( charg = gt_main-charg ).
        CHECK p_nozero IS INITIAL.
      ENDIF.
    ENDIF.
    IF p_ppincl = ‘X’.
      PERFORM pp_details USING gt_main-matnr gt_main-werks
                               gt_main-lgort gt_main-charg.
      sort gt_mclass by posnr.
    ELSE.
      APPEND itab.
      CLEAR itab.
    ENDIF.
  ENDLOOP.

  SORT gt_bclass BY posnr.
  LOOP AT gt_bclass.
    l_tabix = sy-tabix.
    READ TABLE gt_bcldat WITH KEY atinn = gt_bclass-atinn.
    IF sy-subrc = 0.
      gt_bclass-exist = ‘X’.
      MODIFY gt_bclass INDEX l_tabix TRANSPORTING exist.
    ENDIF.
  ENDLOOP.

ENDFORM.                              ” select_records
*&———————————————————————*
*&      Form  check_so_value
*&———————————————————————*
*       Purpose:  check select-option whether it is within batches
*———————————————————————-*
*      –>P_ATWRT  text
*———————————————————————-*
FORM check_so_value  USING    p_atwrt.

  DATA: l_count TYPE i.
  DATA: lt_ausp LIKE ausp OCCURS 0 WITH HEADER LINE.
  DATA: l_atwrt LIKE ausp-atwrt.
  DATA: l_mesg(80) TYPE c.
  DATA: lt_so LIKE bbpf4b OCCURS 0 WITH HEADER LINE.

  CASE p_atwrt.
*    WHEN con_sel-kunnr.
*      LOOP AT so_kunnr.
*        MOVE-CORRESPONDING so_kunnr TO lt_so.
*        APPEND lt_so.
*        CLEAR lt_so.
*      ENDLOOP.
*      PERFORM check_class_value TABLES lt_so
*                                USING con_char-cust.
*
*    WHEN con_sel-fablt.
*      LOOP AT so_fablt.
*        MOVE-CORRESPONDING so_fablt TO lt_so.
*        APPEND lt_so.
*        CLEAR lt_so.
*      ENDLOOP.
*      PERFORM check_class_value TABLES lt_so
*                                USING con_char-fl.
*    ” START OF DEVK903322
*    WHEN CON_SEL-ICLOT.
*      LOOP AT IC_LOT.
*        MOVE-CORRESPONDING IC_LOT TO LT_SO.
*        APPEND LT_SO.
*        CLEAR  LT_SO.
*      ENDLOOP.
*      PERFORM CHECK_CLASS_VALUE TABLES LT_SO
*                                USING CON_CHAR-ICLOT.
*    ” END OF DEVK903322
    WHEN con_sel-iqa.
      LOOP AT so_iqa.
        MOVE-CORRESPONDING so_iqa TO lt_so.
        APPEND lt_so.
        CLEAR lt_so.
      ENDLOOP.
      PERFORM check_class_value TABLES lt_so
                                USING con_char-iqa.
    WHEN OTHERS.

  ENDCASE.

ENDFORM.                    ” check_so_value
*&———————————————————————*
*&      Form  get_charval
*&———————————————————————*
*       Purpoase:  Get characteristic values by characteristic
*                  name(p_char) and class(p_class), and store the values
*                  into table(p_ausp)
*———————————————————————-*
*      –>P_CHAR  text
*      –>P_CLASS  text
*      –>P_AUSP  text
*———————————————————————-*
FORM get_charval  TABLES   p_ausp
                  USING    p_char LIKE cabn-atnam
                           p_class LIKE ausp-klart
                           p_charn LIKE cabnt-atbez.

  SELECT SINGLE atinn INTO cabn-atinn FROM cabn
    WHERE atnam = p_char.
  SELECT SINGLE atbez INTO p_charn FROM cabnt
    WHERE atinn = cabn-atinn.
  SELECT * INTO TABLE p_ausp FROM ausp
    WHERE atinn = cabn-atinn AND klart = p_class.

ENDFORM.                    ” get_charval
*&———————————————————————*
*&      Form  check_class_value
*&———————————————————————*
*       Purpose:  Check classification values in select-options
*———————————————————————-*
*      –>P_SO  text
*———————————————————————-*
FORM check_class_value  TABLES   p_so STRUCTURE bbpf4b
                        USING    p_char.

  DATA: l_count TYPE i.
  DATA: lt_ausp LIKE ausp OCCURS 0 WITH HEADER LINE.
  DATA: l_atwrt LIKE ausp-atwrt.
  DATA: l_mesg(80) TYPE c,
        l_subrc LIKE sy-subrc.
  DATA: l_desc LIKE cabnt-atbez.

  DESCRIBE TABLE p_so LINES l_count.
  IF l_count > 0.
    PERFORM get_charval TABLES lt_ausp
                        USING p_char con_class-charg l_desc.
    IF l_count = 1.
      READ TABLE p_so INDEX 1.
*     Single value
      IF p_so-option = ‘EQ’.
        READ TABLE lt_ausp WITH KEY atwrt = p_so-low.
        l_subrc = sy-subrc.
        l_atwrt = p_so-low.
      ENDIF.
*     Multiple values check low and high
      IF p_so-option = ‘BT’.
        READ TABLE lt_ausp WITH KEY atwrt = p_so-low.
        IF sy-subrc = 0.
          READ TABLE lt_ausp WITH KEY atwrt = p_so-high.
          l_atwrt = p_so-high.
        ELSE.
          l_atwrt = p_so-low.
        ENDIF.
        l_subrc = sy-subrc.
      ENDIF.
    ELSE.
      LOOP AT p_so.
*       Single value
        IF p_so-option = ‘EQ’.
          READ TABLE lt_ausp WITH KEY atwrt = p_so-low.
          IF sy-subrc NE 0.
            l_atwrt = p_so-low.
            l_subrc = sy-subrc.
            EXIT.
          ENDIF.
        ENDIF.
*       Multiple values check low and high
        IF p_so-option = ‘BT’.
          READ TABLE lt_ausp WITH KEY atwrt = p_so-low.
          IF sy-subrc = 0.
            READ TABLE lt_ausp WITH KEY atwrt = p_so-high.
            IF sy-subrc NE 0.
              l_atwrt = p_so-high.
              l_subrc = sy-subrc.
              EXIT.
            ENDIF.
          ELSE.
            l_atwrt = p_so-low.
            l_subrc = sy-subrc.
            EXIT.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDIF.
    IF l_subrc NE 0.
      CONCATENATE l_desc l_atwrt ‘does not exist!!’
        INTO l_mesg SEPARATED BY space.
      MESSAGE e899(mm)
        WITH l_mesg.
    ENDIF.
  ENDIF.

ENDFORM.                    ” check_class_value
*&———————————————————————*
*&      Form  check_batch_value
*&———————————————————————*
*       Purpose: Check batch value if it is chosen in select-options
*———————————————————————-*
*      –>P_TOKEN  text
*———————————————————————-*

FORM check_batch_value  USING    p_token.

  DATA: l_check TYPE i.
  DATA: l_count TYPE i.
  DATA: lt_ausp LIKE ausp OCCURS 0.
  DATA: lt_val LIKE api_vali OCCURS 0 WITH HEADER LINE,
        lt_char LIKE api_char OCCURS 0 WITH HEADER LINE,
        lt_att LIKE api_ch_att OCCURS 0 WITH HEADER LINE.
  DATA: wa_val LIKE api_vali.

  CLEAR p_token.

*  READ TABLE gt_bclass INDEX 1.
*  IF sy-subrc = 0.
*    CALL FUNCTION ‘QC01_BATCH_VALUES_READ’
*      EXPORTING
*        i_val_matnr    = gt_main-matnr
*        i_val_werks    = gt_main-werks
*        i_val_charge   = gt_main-charg
*      TABLES
*        t_val_tab      = lt_val
*      EXCEPTIONS
*        no_class       = 1
*        internal_error = 2
*        no_values      = 3
*        no_chars       = 4
*        OTHERS         = 5.
*  ELSE.
    CALL FUNCTION ‘QC01_BATCH_VALUES_READ’
      EXPORTING
        i_val_matnr          = gt_main-matnr
        i_val_werks          = gt_main-werks
        i_val_charge         = gt_main-charg
*       I_LANGUAGE           = SY-LANGU
*       I_DATE               = SY-DATUM
*     IMPORTING
*       E_CLASS              =
*       E_CLASS_TYPE         =
      TABLES
        t_val_tab            = lt_val
        t_char_tab           = lt_char
        t_att_tab            = lt_att
      EXCEPTIONS
        no_class             = 1
        internal_error       = 2
        no_values            = 3
        no_chars             = 4
        OTHERS               = 5
              .
*  ENDIF.

  IF sy-subrc = 0.
*   get batch classification
    LOOP AT lt_att.
      read table gt_bclass with key atinn = lt_att-atinn.
      if sy-subrc <> 0.
         MOVE-CORRESPONDING lt_att TO gt_bclass.
         APPEND gt_bclass.
      endif.
    ENDLOOP.

*    DESCRIBE TABLE SO_FABLT LINES lin.     “DEVK903601
*    IF LIN > 0.                            “DEVK903601
*      read table lt_val with key atnam = con_char-fl.
*      if sy-subrc = 0.
*        LOOP AT lt_val
*          WHERE atnam = con_char-fl
*            AND atwrt IN so_fablt.
*          l_check = 1.
*          CHECK l_check IS INITIAL.
*        ENDLOOP.
*        IF l_check IS INITIAL.
*          p_token = ‘N’.
*          EXIT.
*        ENDIF.
*      endif.
*    ENDIF.                                  “DEVK903601
*    CLEAR l_check.
*    DESCRIBE TABLE SO_KUNNR LINES lin.      “DEVK903601
*    IF LIN > 0.                             “DEVK903601
*      read table lt_val with key atnam = con_char-cust.
*      if sy-subrc = 0.
*        LOOP AT lt_val
*          WHERE atnam = con_char-cust
*            AND atwrt IN so_kunnr.
*          l_check = 1.
*          CHECK l_check IS INITIAL.
*        ENDLOOP.
*        IF l_check IS INITIAL.
*          p_token = ‘N’.
*          EXIT.
*        ENDIF.
*      endif.
*    ENDIF.                                   “DEVK903601
*    CLEAR l_check.
*    “” START OF DEVK903322
*    DESCRIBE TABLE IC_CUST LINES lin.       “DEVK903601
*    IF LIN > 0.                              “DEVK903601
*      READ TABLE LT_VAL WITH KEY ATNAM = CON_CHAR-ICCUST.
*      IF SY-SUBRC = 0.
*        LOOP AT LT_VAL
*          WHERE ATNAM = CON_CHAR-ICCUST
*            AND ATWRT IN IC_CUST.
*          L_CHECK = 1.
*          CHECK L_CHECK IS INITIAL.
*        ENDLOOP.
*        IF L_CHECK IS INITIAL.
*          P_TOKEN = ‘N’.
*          EXIT.
*        ENDIF.
*      ENDIF.
*    ENDIF.                                    “DEVK903601
*    CLEAR l_check.
*    DESCRIBE TABLE IC_LOT LINES lin.          “DEVK903601
*    IF LIN > 0.                               “DEVK903601
*      READ TABLE LT_VAL WITH KEY ATNAM = CON_CHAR-ICLOT.
*      IF SY-SUBRC = 0.
*        LOOP AT LT_VAL
*          WHERE ATNAM = CON_CHAR-ICLOT
*            AND ATWRT IN IC_LOT.
*          L_CHECK = 1.
*          CHECK L_CHECK IS INITIAL.
*        ENDLOOP.
*        IF L_CHECK IS INITIAL.
*          P_TOKEN = ‘N’.
*          EXIT.
*        ENDIF.
*      ENDIF.
*    ENDIF.                                     “DEVK903601
*    “” END OF DEVK903322
    DESCRIBE TABLE SO_iqa LINES lin.     “DEVK903601
    IF LIN > 0.                            “DEVK903601
      read table lt_val with key atnam = con_char-iqa.
      if sy-subrc = 0.
        LOOP AT lt_val
          WHERE atnam = con_char-iqa
            AND atwrt IN so_iqa.
          l_check = 1.
          CHECK l_check IS INITIAL.
        ENDLOOP.
        IF l_check IS INITIAL.
          p_token = ‘N’.
          EXIT.
        ENDIF.
      else.
        p_token = ‘N’.
        EXIT.
      endif.
    ENDIF.                                  “DEVK903601
    LOOP AT lt_val.
      MOVE-CORRESPONDING gt_main TO gt_bcldat.
      MOVE-CORRESPONDING lt_val TO gt_bcldat.
      APPEND gt_bcldat.
      CLEAR gt_bcldat.
    ENDLOOP.
  ELSE.
    IF SY-SUBRC = ‘3’.     “Batch characteristics exist but empty
      p_token = ‘X’.
    ELSEIF SY-SUBRC = ‘2’. “Batch characteristics does not exist
      P_TOKEN = ‘Y’.
    ELSE.
      P_TOKEN = ‘Z’.
    ENDIF.
  ENDIF.
ENDFORM.                    ” check_batch_value

*&———————————————————————*
*&      Form  pp_details
*&———————————————————————*
*       text
*———————————————————————-*
*      –>P_MATNR  text
*      –>P_WERKS  text
*      –>P_LGORT  text
*      –>P_CHARG  text
*———————————————————————-*
FORM pp_details  USING    p_matnr
                          p_werks
                          p_lgort
                          p_charg.

  DATA: lt_class LIKE sclass OCCURS 0 WITH HEADER LINE,
        lt_clobjdat LIKE clobjdat OCCURS 0 WITH HEADER LINE.
  DATA: l_tname LIKE thead-tdname,
        l_tdobj LIKE thead-tdobject.
  DATA: lt_tline LIKE tline OCCURS 0 WITH HEADER LINE.
  DATA: l_objek LIKE ausp-objek.
  DATA: lt_features like KLMERKA occurs 0 with header line.
  DATA: wa_tab like itab.
  DATA: l_tdata(40).
  DATA: l_token type i.

  move-corresponding itab to wa_tab.
* get reservation details
  SELECT * FROM resb
    WHERE matnr = p_matnr AND werks = p_werks
      AND charg = p_charg.

    MOVE-CORRESPONDING WA_TAB TO ITAB.

    MOVE: resb-xwaok TO itab-xwaok,
          resb-kzear TO itab-kzear,
          resb-bdter TO itab-bdter,
          resb-bdmng TO itab-bdmng,
          resb-enmng TO itab-enmng,
          resb-aufnr TO itab-aufnr,
          resb-baugr TO itab-baugr.
    itab-osmng = resb-bdmng – resb-enmng.
*   get device details, the material classification
    SELECT SINGLE maktx INTO itab-maktx FROM makt
      WHERE matnr = resb-baugr AND spras = sy-langu.
    l_objek = resb-baugr.
    CALL FUNCTION ‘CLAF_CLASSIFICATION_OF_OBJECTS’
      EXPORTING
        classtype          = ‘001’ “con_class-matnr
        object             = l_objek
      TABLES
        t_class            = lt_class
        t_objectdata       = lt_clobjdat
      EXCEPTIONS
        no_classification  = 1
        no_classtypes      = 2
        invalid_class_type = 3
        OTHERS             = 4.
    IF sy-subrc = 0.
      READ TABLE lt_class INDEX 1.
      MOVE lt_class-class TO itab-class.
      LOOP AT lt_clobjdat.
*       check if a new characteristic exists
        READ TABLE gt_mclass WITH KEY atnam = lt_clobjdat-atnam.
        IF sy-subrc NE 0.
          CALL FUNCTION ‘CLME_FEATURE_ATTR_OF_CLASS’
            EXPORTING
              class                 = itab-class
              classtype             = ‘001’ “con_class-matnr
            tables
              tfeatures             = lt_features
            EXCEPTIONS
             CLASS_NOT_FOUND       = 1
             NO_AUTHORITY          = 2
             OTHERS                = 3
                    .
          IF sy-subrc = 0.
            read table lt_features with key lt_clobjdat-atnam.
            check sy-subrc = 0.
            move lt_clobjdat-posnr to gt_mclass-posnr.
            move-corresponding lt_features to gt_mclass.
            append gt_mclass.
          ENDIF.
        ENDIF.
        MOVE-CORRESPONDING gt_main TO gt_mcldat.
        MOVE-CORRESPONDING lt_clobjdat TO gt_mcldat.
        APPEND gt_mcldat.
      ENDLOOP.
    ENDIF.
*   get order details
    SELECT SINGLE aprio INTO itab-aprio FROM afko
      WHERE aufnr = resb-aufnr.
    SELECT SINGLE kdauf kdpos INTO (itab-kdauf,itab-kdpos) FROM aufk
      WHERE aufnr = resb-aufnr.
*   get sales order details
    IF sy-subrc = 0.
      SELECT SINGLE auart INTO itab-auart FROM vbak
        WHERE vbeln = itab-kdauf.
      SELECT SINGLE * FROM vbpa
        WHERE vbeln = itab-kdauf AND posnr = itab-kdpos
        AND parvw = c_billto.
      IF sy-subrc = 0.
        MOVE vbpa-kunnr TO itab-kunnr.
        SELECT SINGLE name1 INTO itab-name1 FROM adrc
          WHERE addrnumber = vbpa-adrnr.
      ELSE.
        SELECT SINGLE * FROM vbpa
          WHERE vbeln = itab-kdauf AND parvw = c_billto.
        MOVE vbpa-kunnr TO itab-kunnr.
        SELECT SINGLE name1 INTO itab-name1 FROM adrc
          WHERE addrnumber = vbpa-adrnr.
      ENDIF.
      SELECT SINGLE arktx kdmat lprio
        INTO (itab-arktx,itab-kdmat,itab-lprio) FROM vbap
        WHERE vbeln = itab-kdauf AND posnr = itab-kdpos.
      SELECT SINGLE bstdk INTO itab-bstdk FROM vbkd
        WHERE vbeln = itab-kdauf AND posnr = itab-kdpos.
      CONCATENATE itab-kdauf itab-kdpos INTO l_tname.
      l_tdobj = con_sotxt-itmobj.
      CALL FUNCTION ‘READ_TEXT’
        EXPORTING
          id                      = con_sotxt-itmid
          language                = sy-langu
          name                    = l_tname
          object                  = l_tdobj
        TABLES
          lines                   = lt_tline
        EXCEPTIONS
          id                      = 1
          language                = 2
          name                    = 3
          not_found               = 4
          object                  = 5
          reference_check         = 6
          wrong_access_to_archive = 7
          OTHERS                  = 8.
      IF sy-subrc = 0.
        loop at lt_tline.
          l_tdata = lt_tline-tdline.
          if itab-tdlin is initial.
            itab-tdlin = l_tdata.
          else.
            concatenate itab-tdlin l_tdata into itab-tdlin
              separated by ‘/’.
          endif.
          if sy-index = 5.
            exit.
          endif.
        endloop.
*       change for multiple texts 26.11.2003
*        READ TABLE lt_tline INDEX 1.
*        MOVE lt_tline-tdline TO itab-tdlin.
      ENDIF.

    ENDIF.

    l_token = 1.
    APPEND ITAB.
    CLEAR ITAB.
  ENDSELECT.
  if l_token is initial.
    APPEND ITAB.
    CLEAR ITAB.
  endif.

ENDFORM.                    ” pp_details
*&———————————————————————*
*&      Form  BUILD-FIELD-CAT
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM build-field-cat .

  CLEAR g_idx.
  PERFORM build-mm-fields.
  PERFORM build-bcl-fields.
  PERFORM build-pp-fields.
  PERFORM build-mcl-fields.

ENDFORM.                    ” BUILD-FIELD-CAT
*&———————————————————————*
*&      Form  BUILD-MM-FIELDS
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM build-mm-fields .

  DATA: is_fieldcat LIKE LINE OF it_fieldcat,
        wcat LIKE LINE OF fcat.

  DO c_maxmm TIMES.
    g_idx = g_idx + 1.         “global index to track down the table col
    is_fieldcat-col_pos = g_idx.
    CASE sy-index.
      WHEN 01.
        is_fieldcat-fieldname = ‘MATNR’.
        is_fieldcat-ref_field = ‘MATNR’.
        is_fieldcat-ref_table = ‘MCHB’.

      WHEN 02.
        is_fieldcat-fieldname = ‘WERKS’.
        is_fieldcat-ref_field = ‘WERKS’.
        is_fieldcat-ref_table = ‘MCHB’.

      WHEN 03.
        is_fieldcat-fieldname = ‘LGORT’.
        is_fieldcat-ref_field = ‘LGORT’.
        is_fieldcat-ref_table = ‘MCHB’.

      WHEN 04.
        is_fieldcat-fieldname = ‘CHARG’.
        is_fieldcat-ref_field = ‘CHARG’.
        is_fieldcat-ref_table = ‘MCHB’.

      ” START OF DEVK903322
      WHEN 05.
        IS_FIELDCAT-FIELDNAME = ‘BTREMARK’.
        IS_FIELDCAT-REF_FIELD = ”.
        IS_FIELDCAT-REF_TABLE = ”.
      ” END OF DEVK903322
*start 001
        is_fieldcat-inttype = ‘C’.
        is_fieldcat-intlen = 20.

        is_fieldcat-scrtext_l = ‘BTREMARK’.
        is_fieldcat-scrtext_s = ‘BTREMARK’.
        is_fieldcat-seltext = is_fieldcat-scrtext_l .

        wcat-seltext_l = is_fieldcat-scrtext_l.
        wcat-seltext_s = is_fieldcat-scrtext_s.
*end 001

      WHEN 06.
        is_fieldcat-fieldname = ‘ERNAM’.
        is_fieldcat-ref_field = ‘ERNAM’.
        is_fieldcat-ref_table = ‘MCHB’.

      WHEN 07.
        is_fieldcat-fieldname = ‘AENAM’.
        is_fieldcat-ref_field = ‘AENAM’.
        is_fieldcat-ref_table = ‘MCHB’.

      WHEN 08.
        is_fieldcat-fieldname = ‘SPERC’.
        is_fieldcat-ref_field = ‘SPERC’.
        is_fieldcat-ref_table = ‘MCHB’.

      WHEN 09.
        is_fieldcat-fieldname = ‘CLABS’.
        is_fieldcat-ref_field = ‘CLABS’.
        is_fieldcat-ref_table = ‘MCHB’.
        wcat-do_sum = ‘X’.

      WHEN 10.
        is_fieldcat-fieldname = ‘CUMLM’.
        is_fieldcat-ref_field = ‘CUMLM’.
        is_fieldcat-ref_table = ‘MCHB’.
        wcat-do_sum = ‘X’.

      WHEN 11.
        is_fieldcat-fieldname = ‘CINSM’.
        is_fieldcat-ref_field = ‘CINSM’.
        is_fieldcat-ref_table = ‘MCHB’.
        wcat-do_sum = ‘X’.

      WHEN 12.
        is_fieldcat-fieldname = ‘CEINM’.
        is_fieldcat-ref_field = ‘CEINM’.
        is_fieldcat-ref_table = ‘MCHB’.
        wcat-do_sum = ‘X’.

      WHEN 13.
        is_fieldcat-fieldname = ‘CSPEM’.
        is_fieldcat-ref_field = ‘CSPEM’.
        is_fieldcat-ref_table = ‘MCHB’.
        wcat-do_sum = ‘X’.

      WHEN 14.
        is_fieldcat-fieldname = ‘CRETM’.
        is_fieldcat-ref_field = ‘CRETM’.
        is_fieldcat-ref_table = ‘MCHB’.
        wcat-do_sum = ‘X’.

      WHEN 15.
        is_fieldcat-fieldname = ‘LWEDT’.
        is_fieldcat-ref_field = ‘LWEDT’.
        is_fieldcat-ref_table = ‘MCHA’.

      WHEN 16.
        is_fieldcat-fieldname = ‘MEINS’.
        is_fieldcat-ref_field = ‘MEINS’.
        is_fieldcat-ref_table = ‘MARA’.

      WHEN 17.
        is_fieldcat-fieldname = ‘ZEINR’.
        is_fieldcat-ref_field = ‘ZEINR’.
        is_fieldcat-ref_table = ‘MARA’.

      WHEN 18.
        is_fieldcat-fieldname = ‘ZEIVR’.
        is_fieldcat-ref_field = ‘ZEIVR’.
        is_fieldcat-ref_table = ‘MARA’.

      WHEN 19.
        is_fieldcat-fieldname = ‘LICHA’.
        is_fieldcat-ref_field = ‘LICHA’.
        is_fieldcat-ref_table = ‘MCHA’.

      WHEN 20.
        is_fieldcat-fieldname = ‘HSDAT’.
        is_fieldcat-ref_field = ‘HSDAT’.
        is_fieldcat-ref_table = ‘MCHA’.

      WHEN 21.
        is_fieldcat-fieldname = ‘FVDT2’.
        is_fieldcat-ref_field = ‘FVDT2’.
        is_fieldcat-ref_table = ‘MCHA’.
      WHEN 22.
        is_fieldcat-fieldname = ‘RM_DWG’.
*        is_fieldcat-ref_field = ‘ATWRT’.
*        is_fieldcat-ref_table = ‘AUSP’.
        is_fieldcat-inttype = ‘C’.
        is_fieldcat-intlen = 30.
        is_fieldcat-scrtext_l = ‘Supplier Drawing NO’.
        is_fieldcat-scrtext_s = ‘Supplier Drawing NO’.
        is_fieldcat-seltext = is_fieldcat-scrtext_l .

        wcat-seltext_l = is_fieldcat-scrtext_l.
        wcat-seltext_s = is_fieldcat-scrtext_s.

      WHEN 23.
        is_fieldcat-fieldname = ‘RM_NO’.
*        is_fieldcat-ref_field = ‘ATWRT’.
*        is_fieldcat-ref_table = ‘AUSP’.
        is_fieldcat-inttype = ‘C’.
        is_fieldcat-intlen = 30.

        is_fieldcat-scrtext_l = ‘Asat Drawing NO’.
        is_fieldcat-scrtext_s = ‘Asat Drawing NO’.
        is_fieldcat-seltext = is_fieldcat-scrtext_l .

        wcat-seltext_l = is_fieldcat-scrtext_l.
        wcat-seltext_s = is_fieldcat-scrtext_s.

 

    ENDCASE.
    APPEND is_fieldcat TO it_fieldcat.
* field catalog for alv grid
    wcat-col_pos = is_fieldcat-col_pos.
    wcat-fieldname = is_fieldcat-fieldname.
    wcat-ref_tabname = is_fieldcat-ref_table.
    wcat-ref_fieldname = is_fieldcat-ref_field.
    APPEND wcat TO fcat.
    CLEAR: is_fieldcat, wcat.
  ENDDO.

ENDFORM.                    ” BUILD-MM-FIELDS
*&———————————————————————*
*&      Form  BUILD-PP-FIELDS
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM build-pp-fields .

  DATA: is_fieldcat LIKE LINE OF it_fieldcat,
        wcat LIKE LINE OF fcat.

  DO 21 TIMES.
    g_idx = g_idx + 1.        “global index to track down the table col
    is_fieldcat-col_pos = g_idx.
    CASE sy-index.
      WHEN 1.
        is_fieldcat-fieldname = ‘XWAOK’.
        is_fieldcat-ref_field = ‘XWAOK’.
        is_fieldcat-ref_table = ‘RESB’.

      WHEN 2.
        is_fieldcat-fieldname = ‘KZEAR’.
        is_fieldcat-ref_field = ‘KZEAR’.
        is_fieldcat-ref_table = ‘RESB’.

      WHEN 3.
        is_fieldcat-fieldname = ‘BDTER’.
        is_fieldcat-ref_field = ‘BDTER’.
        is_fieldcat-ref_table = ‘RESB’.

      WHEN 4.
        is_fieldcat-fieldname = ‘BDMNG’.
        is_fieldcat-ref_field = ‘BDMNG’.
        is_fieldcat-ref_table = ‘RESB’.

      WHEN 5.
        is_fieldcat-fieldname = ‘ENMNG’.
        is_fieldcat-ref_field = ‘ENMNG’.
        is_fieldcat-ref_table = ‘RESB’.

      WHEN 6.
        is_fieldcat-fieldname = ‘OSMNG’.
        is_fieldcat-ref_field = ‘ENMNG’.
        is_fieldcat-ref_table = ‘RESB’.
        is_fieldcat-scrtext_l = ‘Outstanding Reqmt Quantity’.
        is_fieldcat-scrtext_s = ‘OS Req. Qty’.
        wcat-seltext_l = is_fieldcat-scrtext_l.
        wcat-seltext_s = is_fieldcat-scrtext_s.

      WHEN 7.
        is_fieldcat-fieldname = ‘AUFNR’.
        is_fieldcat-ref_field = ‘AUFNR’.
        is_fieldcat-ref_table = ‘RESB’.

      WHEN 8.
        is_fieldcat-fieldname = ‘KDAUF’.
        is_fieldcat-ref_field = ‘KDAUF’.
        is_fieldcat-ref_table = ‘AUFK’.

      WHEN 9.
        is_fieldcat-fieldname = ‘KDPOS’.
        is_fieldcat-ref_field = ‘KDPOS’.
        is_fieldcat-ref_table = ‘AUFK’.

      WHEN 10.
        is_fieldcat-fieldname = ‘APRIO’.
        is_fieldcat-ref_field = ‘APRIO’.
        is_fieldcat-ref_table = ‘AFKO’.

      WHEN 11.
        is_fieldcat-fieldname = ‘AUART’.
        is_fieldcat-ref_field = ‘AUART’.
        is_fieldcat-ref_table = ‘VBAK’.

      WHEN 12.
        is_fieldcat-fieldname = ‘KUNNR’.
        is_fieldcat-ref_field = ‘KUNNR’.
        is_fieldcat-ref_table = ‘VBPA’.

      WHEN 13.
        is_fieldcat-fieldname = ‘NAME1’.
        is_fieldcat-ref_field = ‘NAME1’.
        is_fieldcat-ref_table = ‘ADRC’.

      WHEN 14.
        is_fieldcat-fieldname = ‘ARKTX’.
        is_fieldcat-ref_field = ‘ARKTX’.
        is_fieldcat-ref_table = ‘VBAP’.

      WHEN 15.
        is_fieldcat-fieldname = ‘KDMAT’.
        is_fieldcat-ref_field = ‘KDMAT’.
        is_fieldcat-ref_table = ‘VBAP’.

      WHEN 16.
        is_fieldcat-fieldname = ‘TDLIN’.
        is_fieldcat-inttype = ‘C’.
        is_fieldcat-intlen = ‘210’.
        is_fieldcat-scrtext_l = ‘Fabrication Lot No’.
        is_fieldcat-scrtext_s = ‘Fab Lot#’.
        wcat-seltext_l = is_fieldcat-scrtext_l.
        wcat-seltext_s = is_fieldcat-scrtext_s.

      WHEN 17.
        is_fieldcat-fieldname = ‘LPRIO’.
        is_fieldcat-ref_field = ‘LPRIO’.
        is_fieldcat-ref_table = ‘VBAP’.

      WHEN 18.
        is_fieldcat-fieldname = ‘BSTDK’.
        is_fieldcat-ref_field = ‘BSTDK’.
        is_fieldcat-ref_table = ‘VBKD’.

      WHEN 19.
        is_fieldcat-fieldname = ‘BAUGR’.
        is_fieldcat-ref_field = ‘BAUGR’.
        is_fieldcat-ref_table = ‘RESB’.

      WHEN 20.
        is_fieldcat-fieldname = ‘MAKTX’.
        is_fieldcat-ref_field = ‘MAKTX’.
        is_fieldcat-ref_table = ‘MAKT’.

      WHEN 21.
        is_fieldcat-fieldname = ‘CLASS’.
        is_fieldcat-ref_field = ‘CLASS’.
        is_fieldcat-ref_table = ‘SCLASS’.

    ENDCASE.
    APPEND is_fieldcat TO it_fieldcat.
* field catalog for alv grid
    IF p_ppincl IS INITIAL.
      wcat-no_out = ‘X’.
    ENDIF.
    wcat-col_pos = is_fieldcat-col_pos.
    wcat-fieldname = is_fieldcat-fieldname.
    wcat-ref_tabname = is_fieldcat-ref_table.
    wcat-ref_fieldname = is_fieldcat-ref_field.
    APPEND wcat TO fcat.
    CLEAR: is_fieldcat, wcat.
  ENDDO.

ENDFORM.                    ” BUILD-PP-FIELDS
*&———————————————————————*
*&      Form  CREATE-DATA-TABLE
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM create-data-table .
  DATA: new_table TYPE REF TO data,
        new_line  TYPE REF TO data.
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = it_fieldcat
    IMPORTING
      ep_table        = new_table.
  ASSIGN new_table->* TO <tab>.
  CREATE DATA new_line LIKE LINE OF <tab>.
  ASSIGN new_line->* TO <wa>.
ENDFORM.                    ” CREATE-DATA-TABLE
*&———————————————————————*
*&      Form  FILL-DATA-TABLE
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM fill-data-table .
  FIELD-SYMBOLS: <fs_field> TYPE ANY.
  DATA: l_idx(3) TYPE n,
        l_field(8).

  CLEAR <wa>.
  LOOP AT itab.
*   Fill MM details
    ASSIGN COMPONENT ‘MATNR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-matnr.
    ASSIGN COMPONENT ‘WERKS’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-werks.
    ASSIGN COMPONENT ‘LGORT’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-lgort.
    ASSIGN COMPONENT ‘CHARG’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-charg.
    ” START OF DEVK903322
    ASSIGN COMPONENT ‘BTREMARK’ OF STRUCTURE <WA> TO <F>.
    <F> = ITAB-BTREMARK.
    ” END OF DEVK903322
    ASSIGN COMPONENT ‘ERNAM’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-ernam.
    ASSIGN COMPONENT ‘AENAM’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-aenam.
    ASSIGN COMPONENT ‘SPERC’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-sperc.
    ASSIGN COMPONENT ‘CLABS’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-clabs.
    ASSIGN COMPONENT ‘CUMLM’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-cumlm.
    ASSIGN COMPONENT ‘CINSM’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-cinsm.
    ASSIGN COMPONENT ‘CEINM’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-ceinm.
    ASSIGN COMPONENT ‘CSPEM’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-cspem.
    ASSIGN COMPONENT ‘CRETM’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-cretm.
    ASSIGN COMPONENT ‘LWEDT’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-lwedt.
    ASSIGN COMPONENT ‘MEINS’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-meins.
    ASSIGN COMPONENT ‘ZEINR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-zeinr.
    ASSIGN COMPONENT ‘ZEIVR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-zeivr.
    ASSIGN COMPONENT ‘LICHA’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-licha.
    ASSIGN COMPONENT ‘HSDAT’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-hsdat.
    ASSIGN COMPONENT ‘FVDT2’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-fvdt2.
****************************************************
    ASSIGN COMPONENT ‘RM_DWG’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-RM_DWG.
    ASSIGN COMPONENT ‘RM_NO’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-RM_NO.

******************************************************
*   Fill batch classification details
    LOOP AT gt_bclass.
      l_idx = sy-tabix.
      CONCATENATE c_bcl l_idx INTO l_field.
      ASSIGN COMPONENT l_field OF STRUCTURE <wa> TO <f>.
      READ TABLE gt_bcldat WITH KEY werks = itab-werks
        lgort = itab-lgort charg = itab-charg atinn = gt_bclass-atinn.
      IF sy-subrc = 0.
        if gt_bclass-dtype = ‘NUM’.
          <f> = gt_bcldat-atflv.
        else.
          <f> = gt_bcldat-atwrt.
        endif.
      ENDIF.
    ENDLOOP.
*   Fill PP details
    ASSIGN COMPONENT ‘XWAOK’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-xwaok.
    ASSIGN COMPONENT ‘KZEAR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-kzear.
    ASSIGN COMPONENT ‘KZEAR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-kzear.
    ASSIGN COMPONENT ‘BDTER’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-bdter.
    ASSIGN COMPONENT ‘BDMNG’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-bdmng.
    ASSIGN COMPONENT ‘ENMNG’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-enmng.
    ASSIGN COMPONENT ‘OSMNG’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-osmng.
    ASSIGN COMPONENT ‘AUFNR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-aufnr.
    ASSIGN COMPONENT ‘BAUGR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-baugr.
    ASSIGN COMPONENT ‘MAKTX’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-maktx.
    ASSIGN COMPONENT ‘CLASS’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-class.
    ASSIGN COMPONENT ‘KDAUF’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-kdauf.
    ASSIGN COMPONENT ‘KDPOS’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-kdpos.
    ASSIGN COMPONENT ‘APRIO’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-aprio.
    ASSIGN COMPONENT ‘AUART’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-auart.
    ASSIGN COMPONENT ‘KUNNR’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-kunnr.
    ASSIGN COMPONENT ‘NAME1’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-name1.
    ASSIGN COMPONENT ‘ARKTX’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-arktx.
    ASSIGN COMPONENT ‘KDMAT’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-kdmat.
    ASSIGN COMPONENT ‘TDLIN’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-tdlin.
    ASSIGN COMPONENT ‘LPRIO’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-lprio.
    ASSIGN COMPONENT ‘BSTDK’ OF STRUCTURE <wa> TO <f>.
    <f> = itab-bstdk.
*   Fill material classification details
    LOOP AT gt_mclass.
      l_idx = sy-tabix.
      CONCATENATE c_mcl l_idx INTO l_field.
      ASSIGN COMPONENT l_field OF STRUCTURE <wa> TO <f>.
      READ TABLE gt_mcldat WITH KEY werks = itab-werks
        lgort = itab-lgort charg = itab-charg atnam = gt_mclass-atnam.
      IF sy-subrc = 0.
        if gt_mclass-atfor = ‘NUM’.
          <f> = gt_mcldat-atflv.
        else.
          <f> = gt_mcldat-ausp1.
        endif.
      ENDIF.
    ENDLOOP.
    APPEND <wa> TO <tab>.
    CLEAR <wa>.
  ENDLOOP.

ENDFORM.                    ” FILL-DATA-TABLE
*&———————————————————————*
*&      Form  BUILD-BCL-FIELDS
*&———————————————————————*
*       Purpose: Builds up the field structure for batch classification
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM build-bcl-fields .

  DATA: is_fieldcat LIKE LINE OF it_fieldcat,
        wcat LIKE LINE OF fcat.
*        l_index(3) TYPE n.

  LOOP AT gt_bclass.
    g_idx = g_idx + 1.        “global index to track down the table col
    is_fieldcat-col_pos = g_idx.
* generic field name
    CONCATENATE c_bcl gt_bclass-posnr INTO is_fieldcat-fieldname.
* field formats
    if gt_bclass-dtype = ‘NUM’.
      is_fieldcat-inttype = ‘P’.
      move: gt_bclass-atsch to is_fieldcat-EDIT_MASK,
            gt_bclass-anzdz to is_fieldcat-DECIMALS,
            gt_bclass-msehi to is_fieldcat-QUANTITY,
            is_fieldcat-fieldname to is_fieldcat-DECMLFIELD.
*     check if field is quantity
      find ‘qty’ in gt_bclass-atnam ignoring case.
      if sy-subrc = 0.
        wcat-do_sum = ‘X’.
      endif.
    else.
      is_fieldcat-inttype = ‘C’.
      is_fieldcat-intlen = ’30’.
    endif.
    is_fieldcat-seltext = gt_bclass-atbez.
    APPEND is_fieldcat TO it_fieldcat.
* field catalog for alv grid
    IF gt_bclass-exist IS INITIAL.
      wcat-no_out = ‘X’.
    ENDIF.
    wcat-col_pos = is_fieldcat-col_pos.
    wcat-fieldname = is_fieldcat-fieldname.
    wcat-seltext_l = is_fieldcat-seltext.
    APPEND wcat TO fcat.
    CLEAR: is_fieldcat, wcat.
  ENDLOOP.

ENDFORM.                    ” BUILD-BCL-FIELDS
*&———————————————————————*
*&      Form  BUILD-MCL-FIELDS
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
FORM build-mcl-fields .

  DATA: is_fieldcat LIKE LINE OF it_fieldcat,
        l_idx(3) type n,
        wcat LIKE LINE OF fcat.

  LOOP AT gt_mclass.
    g_idx = g_idx + 1.        “global index to track down the table col
    is_fieldcat-col_pos = g_idx.
* generic field name
*    CONCATENATE c_mcl gt_mclass-posnr INTO is_fieldcat-fieldname.
    l_idx = sy-tabix.
    CONCATENATE c_mcl l_idx INTO is_fieldcat-fieldname.
* field formats
    if gt_mclass-atfor = ‘NUM’.
      is_fieldcat-inttype = ‘P’.
      move: gt_mclass-atsch to is_fieldcat-EDIT_MASK,
            gt_mclass-anzdz to is_fieldcat-DECIMALS,
            gt_mclass-dimen(3) to is_fieldcat-QUANTITY,
            is_fieldcat-fieldname to is_fieldcat-DECMLFIELD.
*     check if field is quantity
      find ‘qty’ in gt_mclass-atnam ignoring case.
      if sy-subrc = 0.
        wcat-do_sum = ‘X’.
      endif.
    else.
      is_fieldcat-inttype = ‘C’.
      is_fieldcat-intlen = ’30’.
    endif.
    is_fieldcat-seltext = gt_mclass-atbez.
    APPEND is_fieldcat TO it_fieldcat.
* field catalog for alv grid
    IF p_ppincl IS INITIAL.
      wcat-no_out = ‘X’.
    ENDIF.
    wcat-col_pos = is_fieldcat-col_pos.
    wcat-fieldname = is_fieldcat-fieldname.
    wcat-seltext_l = is_fieldcat-seltext.
    APPEND wcat TO fcat.
    CLEAR: is_fieldcat, wcat.
  ENDLOOP.

ENDFORM.                    ” BUILD-MCL-FIELDS
*&———————————————————————*
*&      Form  VARIANT_INIT
*&———————————————————————*
*       Purpose: Initialize variants
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form VARIANT_INIT .
  CLEAR G_VARIANT.
  G_VARIANT-REPORT = G_REPID.
endform.                    ” VARIANT_INIT
*&———————————————————————*
*&      Form  F4_FOR_VARIANT
*&———————————————————————*
*       Purpose: Search variants request
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form F4_FOR_VARIANT .
*
  CALL FUNCTION ‘REUSE_ALV_VARIANT_F4’
       EXPORTING
            IS_VARIANT          = G_VARIANT
            I_SAVE              = G_SAVE
*           it_default_fieldcat =
       IMPORTING
            E_EXIT              = G_EXIT
            ES_VARIANT          = GX_VARIANT
       EXCEPTIONS
            NOT_FOUND = 2.
  IF SY-SUBRC = 2.
    MESSAGE ID SY-MSGID TYPE ‘S’      NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    IF G_EXIT = SPACE.
      P_VARI = GX_VARIANT-VARIANT.
    ENDIF.
  ENDIF.
endform.                    ” F4_FOR_VARIANT
*&———————————————————————*
*&      Form  PAI_OF_SELECTION_SCREEN
*&———————————————————————*
*       Purpose: Check selection values
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form PAI_OF_SELECTION_SCREEN .
*
  IF NOT P_VARI IS INITIAL.
    MOVE G_VARIANT TO GX_VARIANT.
    MOVE P_VARI TO GX_VARIANT-VARIANT.
    CALL FUNCTION ‘REUSE_ALV_VARIANT_EXISTENCE’
         EXPORTING
              I_SAVE     = G_SAVE
         CHANGING
              CS_VARIANT = GX_VARIANT.
    G_VARIANT = GX_VARIANT.
  ELSE.
    PERFORM VARIANT_INIT.
  ENDIF.

endform.                    ” PAI_OF_SELECTION_SCREEN
*&———————————————————————*
*&      Form  F4_VALUE_FNAME1
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form F4_VALUE_FNAME1 .
DATA: l_path       LIKE dxfields-longpath ,                     “NAD_50A
      l_abend_flag LIKE dxfields-abendflag.                     “NAD_50A

  l_path = p_fname1.
  CALL FUNCTION ‘F4_DXFILENAME_TOPRECURSION’
       EXPORTING
            i_location_flag       = ‘P’
            i_server              = ‘ ‘
            i_path                = l_path
       IMPORTING
            o_path                = l_path
            abend_flag            = l_abend_flag
       EXCEPTIONS
            communication_failure = 1
            system_failure        = 2
            rfc_error             = 3.
  IF sy-subrc EQ 0.
    p_fname1 = l_path.
  ENDIF.

endform.                    ” F4_VALUE_FNAME1
*&———————————————————————*
*&      Form  check_file
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form check_file .

  if p_fname1 ne space.
    if p_fname2 ne space.
      message e001 with ‘ Please enter either PC files or server files’.
    endif.
  endif.

endform.                    ” check_file
*&———————————————————————*
*&      Form  collect_dieinfo
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form collect_dieinfo .

data: begin of lt_kna1 occurs 0,
        kunnr like kna1-kunnr,
        name1 like kna1-kunnr,
      end of lt_kna1.

  select * into corresponding fields of table lt_kna1 from kna1.

  loop at itab
* M000001
    where lgort ne ‘DWIP’.
    gt_exp-werks = itab-werks.
    gt_exp-lgort = itab-lgort.
    gt_exp-charg = itab-charg.
    gt_exp-clabs = itab-clabs.
    gt_exp-lwedt = itab-lwedt.
    LOOP AT gt_bclass.
      READ TABLE gt_bcldat WITH KEY werks = itab-werks
        lgort = itab-lgort charg = itab-charg atinn = gt_bclass-atinn.
      IF sy-subrc = 0.
        case gt_bclass-atnam.
*          when ‘DB_CUSTOMER’.
*            gt_exp-kunnr = gt_bcldat-atwrt.
*
*          when ‘DB_FL’.
*            gt_exp-fablt = gt_bcldat-atwrt.
*
*          when ‘DB_WQTY’.
*            gt_exp-wqty = gt_bcldat-atwrt.
*
*          when ‘DB_DQTY’.
*            gt_exp-dqty = gt_bcldat-atwrt.
          when ‘MM_IQA_STATUS’.
            gt_exp-iqa = gt_bcldat-atwrt.
          when others.
        endcase.
      ENDIF.
    ENDLOOP.

*    if gt_exp-kunnr is initial.
*      if not so_kunnr is initial.
*        clear gt_exp.
*        continue.
*      endif.
*    else.
*      read table lt_kna1 with key kunnr = gt_exp-kunnr.
*      gt_exp-name1 = lt_kna1-name1.
*    endif.

    append gt_exp.
    clear gt_exp.
  endloop.

endform.                    ” collect_dieinfo
*&———————————————————————*
*&      Form  format_file
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form format_file .

data: l_grdate(10).

* M000001
*  concatenate ‘Plant’ ‘SLoc’ ‘Received Date’ ‘Batch’ ‘Customer#’
*              ‘Customer’ ‘Fab lot no.’ ‘Wafer Qty’ ‘Received Qty’
*              ‘Current Qty’ ‘Remark’ into xtab1 separated by ‘,’.
  concatenate ‘Plant’ ‘SLoc’ ‘Received Date’ ‘Batch’ ‘Customer#’
              ‘Customer’ ‘Fab lot no.’ ‘Wafer Qty’ ‘Received Qty’
              ‘Current Qty’ into xtab1 separated by ‘,’.
  append xtab1.
  clear xtab1.

  loop at gt_exp.
    if not gt_exp-lwedt is initial.
      concatenate gt_exp-lwedt+4(2) gt_exp-lwedt+6(2) gt_exp-lwedt(4)
                  into l_grdate separated by ‘/’.
    endif.
    concatenate ‘”‘ gt_exp-werks ‘”‘ ‘,’
                ‘”‘ gt_exp-lgort ‘”‘ ‘,’
                ‘”‘ l_grdate ‘”‘ ‘,’
                ‘”‘ gt_exp-charg ‘”‘ ‘,’
                ‘”‘ gt_exp-iqa ‘”‘ ‘,’
*                ‘”‘ gt_exp-kunnr ‘”‘ ‘,’
*                ‘”‘ gt_exp-name1 ‘”‘ ‘,’
*                ‘”‘ gt_exp-fablt ‘”‘ ‘,’
*                ‘”‘ gt_exp-wqty ‘”‘ ‘,’
*                ‘”‘ gt_exp-dqty ‘”‘ ‘,’
                ‘”‘ gt_exp-clabs ‘”‘
                into xtab1.
    append xtab1.
    clear: xtab1, l_grdate.
  endloop.

endform.                    ” format_file
*&———————————————————————*
*&      Form  download_serv
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form download_serv .

  if p_fname2 ne space.

     OPEN DATASET p_fname2 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
     IF sy-subrc = 0.
        loop at xtab1.
            transfer xtab1 to p_fname2.” length 195.
        endloop.
        CLOSE DATASET p_fname2.
        WRITE:/ ‘Template is output to’, p_fname2.
     ELSE.
        WRITE:/ ‘Error File open error!’.
     ENDIF.

  endif.

endform.                    ” download_serv
*&———————————————————————*
*&      Form  download_pc
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*
form download_pc .

data : l_fname type STRING.

if p_fname1 ne space.
  l_fname = p_fname1.

  CALL FUNCTION ‘GUI_DOWNLOAD’
  EXPORTING
*   BIN_FILESIZE                  =
    FILENAME                      = l_fname
    FILETYPE                      = ‘ASC’
*   APPEND                        = ‘ ‘
*   WRITE_FIELD_SEPARATOR         = ‘ ‘
*   HEADER                        = ’00’
*   TRUNC_TRAILING_BLANKS         = ‘ ‘
*   WRITE_LF                      = ‘X’
*   COL_SELECT                    = ‘ ‘
*   COL_SELECT_MASK               = ‘ ‘
*   DAT_MODE                      = ‘ ‘
*   CONFIRM_OVERWRITE             = ‘ ‘
*   NO_AUTH_CHECK                 = ‘ ‘
*   CODEPAGE                      = ‘ ‘
*   IGNORE_CERR                   = ABAP_TRUE
*   REPLACEMENT                   = ‘#’
*   WRITE_BOM                     = ‘ ‘
* IMPORTING
*   FILELENGTH                    =
  TABLES
    DATA_TAB                      = xtab1[]
* EXCEPTIONS
*   FILE_WRITE_ERROR              = 1
*   NO_BATCH                      = 2
*   GUI_REFUSE_FILETRANSFER       = 3
*   INVALID_TYPE                  = 4
*   NO_AUTHORITY                  = 5
*   UNKNOWN_ERROR                 = 6
*   HEADER_NOT_ALLOWED            = 7
*   SEPARATOR_NOT_ALLOWED         = 8
*   FILESIZE_NOT_ALLOWED          = 9
*   HEADER_TOO_LONG               = 10
*   DP_ERROR_CREATE               = 11
*   DP_ERROR_SEND                 = 12
*   DP_ERROR_WRITE                = 13
*   UNKNOWN_DP_ERROR              = 14
*   ACCESS_DENIED                 = 15
*   DP_OUT_OF_MEMORY              = 16
*   DISK_FULL                     = 17
*   DP_TIMEOUT                    = 18
*   FILE_NOT_FOUND                = 19
*   DATAPROVIDER_EXCEPTION        = 20
*   CONTROL_FLUSH_ERROR           = 21
*   OTHERS                        = 22
          .
  IF SY-SUBRC = 0.
    WRITE:/ ‘File is output to’, l_fname.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

endif.

endform.                    ” download_pc 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34756.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信