DEMO 大全

1、已开发程序查询

REPORT zmail.
  TABLES: trdir, tstc.

  DATA: BEGIN OF gs_data,
          sel   TYPE boolean,     " 用于选择多行
          name  TYPE trdir-name,  " 程序名
          subc  TYPE trdir-subc,  " 程序类型
          rstat TYPE trdir-rstat, " 状态
          tcode TYPE tstc-tcode,  " 事务码
          ttext TYPE tstct-ttext, " 事务码描述
          cnam  TYPE trdir-cnam,  " 创建者
          cdat  TYPE trdir-cdat,  " 创建日期
          unam  TYPE trdir-unam,  " 最后修改人
          udat  TYPE trdir-udat,  " 修改日期
        END OF gs_data.
  DATA: gt_data LIKE TABLE OF gs_data. " ALV显示內表
  DATA: line TYPE i." ALV行数
  " 选择屏幕
  SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS: s_name  FOR trdir-name,            " 程序名
                  s_tcode FOR  tstc-tcode,           " 事务码
                  s_cnam  FOR  trdir-cnam,           " 创建者
                  s_unam  FOR  trdir-unam,           " 最后修改人
                  s_subc  FOR  trdir-subc DEFAULT 1, " 程序类型
                  s_rstat FOR  trdir-rstat.          " 状态
  SELECTION-SCREEN END OF BLOCK b1.

  INITIALIZATION.
    %_s_name_%_app_%-text = '程序名'.
    %_s_tcode_%_app_%-text = '事务码'.
    %_s_cnam_%_app_%-text = '创建者'.
    %_s_unam_%_app_%-text = '最后修改人'.
    %_s_subc_%_app_%-text = '程序类型'.
    %_s_rstat_%_app_%-text = '状态'.
    " F8事件

  AT SELECTION-SCREEN.
    DATA p_prog TYPE programm .
    DATA: l_rc(5).
    p_prog = sy-repid.
    PERFORM copy_status_diff_progs_new IN PROGRAM saplsmpe IF FOUND
    USING 'X' 'SAPLKKBL' p_prog 'STANDARD_FULLSCREEN' 'STATUS_ALV'
    CHANGING l_rc.

  START-OF-SELECTION.
    IF s_name[]  IS INITIAL AND " 程序名
       s_cnam[]  IS INITIAL AND " 创建者
       s_unam[]  IS INITIAL AND " 最后修改人
       s_subc[]  IS INITIAL AND " 程序类型
       s_tcode[] IS INITIAL AND " 事务码
       s_rstat[] IS INITIAL.    " 状态

      MESSAGE '请至少输入一个条件!' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.
    PERFORM get_data.
    IF gt_data[] IS INITIAL.
      MESSAGE '无符合条件的记录' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.
    PERFORM alv_data.
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text  获取数据
*----------------------------------------------------------------------*
  FORM get_data.
    DATA: BEGIN OF ls_tstc,
            tcode TYPE tstc-tcode,
            ttext TYPE tstct-ttext,
          END OF ls_tstc.

    DATA: lt_tstc LIKE TABLE OF ls_tstc.
    " 输入事务码时
    IF s_tcode[] IS NOT INITIAL.
      SELECT
        a~tcode
        b~name
        b~subc
        b~rstat
        b~cnam
        b~cdat
        b~unam
        b~udat
        c~ttext
        INTO CORRESPONDING FIELDS OF TABLE gt_data
        FROM tstc AS a
        INNER JOIN trdir AS b ON a~pgmna = b~name
        INNER JOIN tstct AS c ON a~tcode = c~tcode
        WHERE a~tcode IN s_tcode
        AND   b~name  IN s_name   " 程序名
        AND   b~cnam  IN s_cnam   " 创建者
        AND   b~unam  IN s_unam   " 最后修改人
      AND   b~subc  IN s_subc   " 程序类型
      AND   b~rstat IN s_rstat. " 状态
    ELSE.
      " 没有输入事务码时
      SELECT
        a~name
        a~subc
        a~rstat
        a~cnam
        a~cdat
        a~unam
        a~udat
        b~tcode
        INTO CORRESPONDING FIELDS OF TABLE gt_data
        FROM trdir AS a
        LEFT JOIN tstc AS b ON a~name  = b~pgmna
        WHERE a~name  IN s_name   " 程序名
        AND   a~cnam  IN s_cnam   " 创建者
        AND   a~unam  IN s_unam   " 最后修改人
      AND   a~subc  IN s_subc   " 程序类型
      AND   a~rstat IN s_rstat. " 状态

      IF gt_data[] IS NOT INITIAL.
        " 查询事务码描述文本
        SELECT
          tcode
          ttext
          INTO CORRESPONDING FIELDS OF TABLE lt_tstc
          FROM tstct
        FOR ALL ENTRIES IN gt_data
        WHERE tcode = gt_data-tcode.
        SORT lt_tstc BY tcode." 先排序
        LOOP AT gt_data INTO gs_data.
          READ TABLE lt_tstc INTO ls_tstc WITH KEY tcode = gs_data-tcode BINARY SEARCH.
          IF sy-subrc EQ 0.
            gs_data-ttext = ls_tstc-ttext.
            MODIFY gt_data FROM gs_data TRANSPORTING ttext.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.
    " 统计內表行数
    DESCRIBE TABLE gt_data LINES line.
    " 排序
    SORT gt_data BY cnam cdat.
  ENDFORM.                    "get_data
*&---------------------------------------------------------------------*
*&      Form  alv_data
*&---------------------------------------------------------------------*
*       text 显示ALV数据
*----------------------------------------------------------------------*
  FORM alv_data.
    DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
          layout   TYPE slis_layout_alv.
    PERFORM get_layout CHANGING layout.   " alv布局
    PERFORM get_fieldcat TABLES fieldcat. " 控制报表显示哪些栏位
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program       = sy-repid             " 程序名
        is_layout                = layout               " 布局
        i_callback_pf_status_set = 'STATUS_ALV'      " STATUS
        i_callback_user_command  = 'USER_COMMAND_FORM'  " 定义按钮的功能
        it_fieldcat              = fieldcat[]           " alv栏目(显示字段)内表
      TABLES
        t_outtab                 = gt_data              " 将内表数据赋给ALV
      EXCEPTIONS
        program_error            = 1
        OTHERS                   = 2.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDFORM.                    "alv_data
*&---------------------------------------------------------------------*
*&      Form  get_layout
*&---------------------------------------------------------------------*
*       text  ALV布局设置
*----------------------------------------------------------------------*
*      -->C_LAYOUT   text
*----------------------------------------------------------------------*
  FORM get_layout CHANGING c_layout TYPE slis_layout_alv.
    CLEAR: c_layout.
    c_layout-colwidth_optimize = 'X'." 宽度自动调节
    c_layout-box_fieldname = 'SEL'.  " 选择多行
    c_layout-zebra = 'X'.            " 颜色交替显示
  ENDFORM.                    "get_layout
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND_FORM
*&---------------------------------------------------------------------*
*       text  自定义按钮功能
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
  FORM user_command_form USING r_ucomm     LIKE sy-ucomm
                               rs_selfield TYPE slis_selfield.
    READ TABLE gt_data INTO gs_data INDEX rs_selfield-tabindex.
    IF sy-subrc EQ 0 AND gs_data-tcode IS NOT INITIAL.
      CASE r_ucomm.
        WHEN '&IC1'. " 双击事件
          CALL TRANSACTION gs_data-tcode. " 调用事务码,运行程序
        WHEN OTHERS.
      ENDCASE.
    ENDIF.
  ENDFORM.                    "USER_COMMAND_FORM
*&---------------------------------------------------------------------*
*&      Form  get_fieldcat
*&---------------------------------------------------------------------*
*       text 显示字段
*----------------------------------------------------------------------*
*      -->CT_TAB     text
*----------------------------------------------------------------------*
  FORM get_fieldcat TABLES ct_tab TYPE slis_t_fieldcat_alv.
    DATA: fcat TYPE slis_fieldcat_alv.
    DEFINE add_fcat.
      CLEAR fcat.
      fcat-fieldname       = &1. " 字段名
      fcat-seltext_l       = &2. " 显示字段文本
      fcat-seltext_m       = &2.
      fcat-seltext_s       = &2.
      fcat-key             = &3. " 主键
      fcat-hotspot         = &4. " 链接
      fcat-checkbox        = &5. " 复选框
      fcat-edit            = &6. " 是否可修改
      fcat-ref_tabname     = &7. " 参考表
      fcat-ref_fieldname   = &8. " 参考表字段
      APPEND fcat TO ct_tab.
    END-OF-DEFINITION.
    add_fcat 'NAME'  '程序名'      ''  ''  ''  ''  ''  ''.
    add_fcat 'SUBC'  '程序类型'    ''  ''  ''  ''  'TRDIR'  'SUBC'.
    add_fcat 'RSTAT' '状态'        ''  ''  ''  ''  'TRDIR'  'RSTAT'.
    add_fcat 'TCODE' '事务码'      ''  ''  ''  ''  ''  ''.
    add_fcat 'TTEXT' '事务码描述'  ''  ''  ''  ''  ''  ''.
    add_fcat 'CNAM'  '创建者'  ''  ''  ''  ''  ''  ''.
    add_fcat 'CDAT'  '创建日期'    ''  ''  ''  ''  ''  ''.
    add_fcat 'UNAM'  '最后修改人'  ''  ''  ''  ''  ''  ''.
    add_fcat 'UDAT'  '修改日期'    ''  ''  ''  ''  ''  ''.
  ENDFORM.                    "get_fieldcat
*&---------------------------------------------------------------------*
*&      Form  pfstatus_form
*&---------------------------------------------------------------------*
*       text  STATUS
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
  FORM status_alv USING rt_extab TYPE slis_t_extab.
    SET TITLEBAR 'TITLE_BAR' WITH line. " 标题
    SET PF-STATUS 'STATUS_ALV' EXCLUDING rt_extab.
*    SET PF-STATUS 'STATUS_ALV'.         " 工具条
  ENDFORM.                    "pfstatus_form </span>
知识兔

2、展开BOM

*&---------------------------------------------------------------------*
*& Report ZPP_R001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsearch MESSAGE-ID zpp.

**********************************************************************
*引用                                                                *
**********************************************************************
TABLES:mast,stko.
TYPE-POOLS:slis.

**********************************************************************
*TYPES
**********************************************************************
TYPES:BEGIN OF ts_data,
        box        TYPE c LENGTH 1,  "
        stufe      TYPE c LENGTH 5,  "层级
        werks      TYPE mast-werks,  "工厂
        matnr      TYPE mast-matnr,  "产品编码
        char20(20) TYPE c,
        maktx      TYPE makt-maktx,  "产品描述
        stlan      TYPE mast-stlan,  "BOM 用途
        stlal      TYPE mast-stlal,  "可选的 BOM
        stlnr      TYPE mast-stlnr,  "BOM 物料单
        aennr      TYPE stko-aennr,  "更改编码
        datuv      TYPE stko-datuv,  "有效起始日期
        datu1      TYPE stko-datuv,  "有效起始日期
        stktx      TYPE stko-stktx,  "BOM版本
        bmeng      TYPE stko-bmeng,  "基本数量
        bmein      TYPE stko-bmein,  "产品单位
        posnr      TYPE stpo-posnr,  "项目
        idnrk      TYPE stpo-idnrk,  "子件编码
        ojtxp      TYPE char40,      "子件描述
        menge      TYPE stpo-menge,  "子件数量
        meins      TYPE stpo-meins,  "单位
        lgort      TYPE stpo-lgort,
        rekrs      TYPE stpo-rekrs,
        alpgr      TYPE stpo-alpgr,
        alprf      TYPE stpo-alprf,
        alpst      TYPE stpo-alpst,
        ewahr      TYPE stpo-ewahr,
        potx1      TYPE stpo-potx1,
        potx2      TYPE stpo-potx2,
        ausch      TYPE stpo-ausch,
        zzsl       TYPE stpo-menge,
      END OF ts_data.


**********************************************************************
*ALV 定义 和 DATA
**********************************************************************
DATA:gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, "定义列标题(属性信息)
     gs_layout   TYPE slis_layout_alv,
     wa_repid    LIKE sy-repid. "当前程序

DATA:lt_data TYPE STANDARD TABLE OF ts_data WITH HEADER LINE.
DATA:gt_data TYPE STANDARD TABLE OF ts_data WITH HEADER LINE.
DATA:lt_mast TYPE STANDARD TABLE OF mast WITH HEADER LINE.
DATA:lt_stko TYPE STANDARD TABLE OF stko WITH HEADER LINE.
DATA:lt_stpox LIKE stpox OCCURS 100 WITH HEADER LINE.
DATA:lt_matcat LIKE cscmat OCCURS 100 WITH HEADER LINE.
DATA:ls_topmat TYPE cstmat.

************************************************************************
* SELECTION-SCREEN
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.  "选择条件
SELECT-OPTIONS: s_matnr FOR mast-matnr,                           "产品编码
                s_werks FOR mast-werks DEFAULT '2000',            "工厂
                s_stlan FOR mast-stlan,                           "BOM用途
                s_datuv FOR stko-datuv.                           "有效起始日期
PARAMETERS:p_dqbb AS CHECKBOX DEFAULT 'X'.                        "当前版本

SELECTION-SCREEN END OF BLOCK bk1.

SELECTION-SCREEN BEGIN OF BLOCK bk2 WITH FRAME TITLE TEXT-004."单层多层
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 1(4) TEXT-002.
PARAMETERS:p_danc RADIOBUTTON GROUP cx DEFAULT 'X' .            "单层
SELECTION-SCREEN COMMENT 10(4) TEXT-003.
PARAMETERS:p_duoc RADIOBUTTON GROUP cx.                         "多层
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK bk2.

***====================================================================*
*初始化
***====================================================================*
INITIALIZATION.

  %C002009_1000 = '单层'.
  %C003011_1000 = '多层'.
  %_p_danc_%_app_%-text = '单层'.
  %_p_dqbb_%_app_%-text = '当前版本'.
  %_p_duoc_%_app_%-text = '多层'.
  %_s_datuv_%_app_%-text = '有效起始日期'.
  %_s_matnr_%_app_%-text = '产品编码'.
  %_s_stlan_%_app_%-text = 'BOM用途'.
  %_s_werks_%_app_%-text = '工厂'.
***====================================================================*
*获取数据
***====================================================================*
START-OF-SELECTION.
  IF p_dqbb IS INITIAL .  "当前版本为空时,以输入日期为条件获取数据,每一条物料的最大日期数据将日期修改为当前日期
    SELECT mast~matnr mast~werks mast~stlan mast~stlnr mast~stlal
         stko~aennr stko~datuv stko~stktx stko~bmeng stko~bmein
      FROM mast
      INNER JOIN stko
      ON mast~stlnr = stko~stlnr
      AND mast~stlal = stko~stlal
      INTO CORRESPONDING FIELDS OF TABLE lt_data
      WHERE mast~matnr IN s_matnr AND mast~werks IN s_werks AND mast~stlan IN s_stlan
        AND stko~datuv IN s_datuv.
    SORT lt_data BY matnr werks datuv DESCENDING.
    LOOP AT lt_data.
      lt_data-datu1 = lt_data-datuv.
      CONCATENATE lt_data-werks lt_data-matnr INTO lt_data-char20.
      MODIFY lt_data TRANSPORTING datu1 char20.
    ENDLOOP.
    SORT lt_data BY char20 datuv DESCENDING.
    LOOP AT lt_data.
      AT NEW char20.
        lt_data-datu1 = sy-datum.
        MODIFY lt_data TRANSPORTING datu1.
      ENDAT.
    ENDLOOP.
  ELSE.                    "当前版本不为空时,以当前日期为条件获取数据
    SELECT mast~matnr mast~werks mast~stlan mast~stlnr mast~stlal
         stko~aennr stko~datuv stko~stktx stko~bmeng stko~bmein
      FROM mast
      INNER JOIN stko
      ON mast~stlnr = stko~stlnr
      AND mast~stlal = stko~stlal
      INTO CORRESPONDING FIELDS OF TABLE lt_data
      WHERE mast~matnr IN s_matnr AND mast~werks IN s_werks AND mast~stlan IN s_stlan
        AND stko~datuv IN s_datuv.
    SORT lt_data BY matnr werks datuv DESCENDING.
    DELETE ADJACENT DUPLICATES FROM lt_data COMPARING matnr werks stlal.
    LOOP AT lt_data.
      lt_data-datu1 = sy-datum.
      MODIFY lt_data TRANSPORTING datu1.
    ENDLOOP.
  ENDIF.

  CLEAR:gt_data.
  LOOP AT lt_data.
    IF p_danc = 'X'.  "单层展开
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          capid                 = 'PP01'           "BOM应用
          datuv                 = lt_data-datu1    "BOM有效期
          mktls                 = 'X'
          mehrs                 = ''               "x表示多层展开﹐space表示只展开第一层
          mtnrv                 = lt_data-matnr    "产品编码/要展开BOM的物料
          svwvo                 = 'X'
          werks                 = lt_data-werks    "物料所在工厂
          vrsvo                 = 'X'
          stlal                 = lt_data-stlal     "物料用途
        IMPORTING
          topmat                = ls_topmat
*         matcat                = matcat       "下面含有元件的物料存放在该内表
        TABLES
          stb                   = lt_stpox
          matcat                = lt_matcat
        EXCEPTIONS
          alt_not_found         = 1
          material_not_found    = 3
          missing_authorization = 4
          no_bom_found          = 5
          OTHERS                = 9.

      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      .
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.
    ELSEIF p_duoc = 'X'.     "多层展开
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          capid                 = 'PP01'           "BOM应用
          datuv                 = lt_data-datu1    "有效起始日
          mktls                 = 'X'
          mehrs                 = 'X'              "多层展开
          mtnrv                 = lt_data-matnr    "产品编码
          svwvo                 = 'X'
          werks                 = lt_data-werks    "物料所在工厂
          vrsvo                 = 'X'
          stlal                 = lt_data-stlal
        IMPORTING
          topmat                = ls_topmat
        TABLES
          stb                   = lt_stpox
          matcat                = lt_matcat
        EXCEPTIONS
          alt_not_found         = 1
          material_not_found    = 3
          missing_authorization = 4
          no_bom_found          = 5
          OTHERS                = 9.

      IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      .
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.
    ENDIF.
******************************最后展示数据整理******************8
    LOOP AT lt_stpox.
      gt_data-stufe = lt_stpox-stufe.     "层级
      gt_data-werks = lt_data-werks.      "工厂
      LOOP AT lt_matcat WHERE index = lt_stpox-ttidx.
        gt_data-matnr = lt_matcat-matnr.  "产品编码
        gt_data-stktx = lt_matcat-stktx.    "BOM版本
      ENDLOOP.
      gt_data-maktx = lt_stpox-ojtxb.     "产品描述
      gt_data-stlan = lt_data-stlan.      "BOM用途
      gt_data-stlal = lt_data-stlal.      "可选BOM
      gt_data-aennr = lt_data-aennr.      "更改编码
      gt_data-datuv = lt_data-datuv.      "有效起始日期
*       gt_data-stktx = ls_topmat-stktx.    "BOM版本
      gt_data-bmeng = ls_topmat-bmeng.    "基本数量
      gt_data-bmein = ls_topmat-bmein.    "产品单位
      gt_data-posnr = lt_stpox-posnr.     "项目
      gt_data-idnrk = lt_stpox-idnrk.     "子件编码
      gt_data-ojtxp = lt_stpox-ojtxp.     "子件描述
      gt_data-menge = lt_stpox-menge.     "子件数量
      gt_data-meins = lt_stpox-meins.     "单位
      gt_data-lgort = lt_stpox-lgort.
      gt_data-rekrs = lt_stpox-rekrs.
      gt_data-alpgr = lt_stpox-alpgr.
      gt_data-alprf = lt_stpox-alprf.
      gt_data-alpst = lt_stpox-alpst.
      gt_data-ewahr = lt_stpox-ewahr.
      gt_data-potx1 = lt_stpox-potx1.
      gt_data-potx2 = lt_stpox-potx2.
      gt_data-ausch = lt_stpox-ausch.
      gt_data-zzsl  = lt_stpox-menge * ( 1 + gt_data-ausch / 100 ).
      APPEND gt_data.
      CLEAR gt_data.
    ENDLOOP.

  ENDLOOP.

  DESCRIBE TABLE gt_data LINES DATA(lines).
  IF lines < 1.
    MESSAGE s000(zpp) WITH '没有相关单据信息!' DISPLAY LIKE 'W'.
    RETURN.
  ELSE.
    MESSAGE s000(zpp) WITH '共查询到记录' lines '条.' DISPLAY LIKE 'S'.
  ENDIF.

**************************ALV输出布局********************************
  gs_layout-zebra = 'X'.
  gs_layout-colwidth_optimize = 'X'.
  gs_layout-box_fieldname = 'BOX'.
  wa_repid    = sy-repid.

**************************ALV输出字段设置****************************
*  DATA LV_POS TYPE I .
  REFRESH gt_fieldcat.
  CLEAR gt_fieldcat.
*  CLEAR lv_pos.

  DEFINE %%append_fieldcat.
*    lv_pos = lv_pos + 1.
*    gs_fieldcat-col_pos = lv_pos.
    gt_fieldcat-fieldname = &1."字段名
    gt_fieldcat-seltext_l = &2."文本
    IF gt_fieldcat-fieldname = 'BOX'.
      gt_fieldcat-checkbox = 'X'.
    ENDIF.
    IF gt_fieldcat-fieldname = 'MATNR'.
      gt_fieldcat-ref_tabname = 'MARA'.
      gt_fieldcat-ref_fieldname = 'MATNR'.
      gt_fieldcat-no_zero = 'X'.
    ENDIF.
    IF gt_fieldcat-fieldname = 'IDNRK'.
      gt_fieldcat-ref_tabname = 'MARA'.
      gt_fieldcat-ref_fieldname = 'MATNR'.
      gt_fieldcat-no_zero = 'X'.
    ENDIF.
    IF gt_fieldcat-fieldname = 'EWAHR'.
      gt_fieldcat-no_zero = 'X'.
    ENDIF.
    IF gt_fieldcat-fieldname = 'BMEIN'.
      gt_fieldcat-ref_tabname = 'STKO'.
      gt_fieldcat-ref_fieldname = 'BMEIN'.
    ENDIF.
    IF gt_fieldcat-fieldname = 'MEINS'.
      gt_fieldcat-ref_tabname = 'STPO'.
      gt_fieldcat-ref_fieldname = 'MEINS'.
    ENDIF.
    APPEND gt_fieldcat.
    CLEAR gt_fieldcat.
  END-OF-DEFINITION.

  %%append_fieldcat:
*    'BOX'  'SELECT',
    'STUFE' '层级',
    'WERKS' '工厂',
    'MATNR' '产品编码',
    'MAKTX' '产品描述',
    'STLAN' 'BOM用途',
    'STLAL' '可选BOM',
    'AENNR' '更改编码',
    'DATUV' '有效起始日期',
    'STKTX' 'BOM版本',
    'BMENG' '基本数量',
    'BMEIN' '产品单位',
    'POSNR' '项目',
    'IDNRK' '子件编码',
    'OJTXP' '子件描述',
    'MENGE' '子件数量',
    'MEINS' '单位',
    'LGORT' '生产库存地点',
    'REKRS' '递归允许',
    'ALPGR' '替代项目组',
    'ALPRF' '优先级',
    'ALPST' '策略',
    'EWAHR' '使用可能性%',
    'POTX1' '净含量',
    'POTX2' '出品率',
    'AUSCH' '物料损耗%',
    'ZZSL' '子件总数量'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = wa_repid
      i_callback_pf_status_set = 'FRM_USER_STATUS' "USER_COMMAND
      i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout                = gs_layout
      i_save                   = 'X'
      it_fieldcat              = gt_fieldcat[]
    TABLES
      t_outtab                 = gt_data[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2.
    EXIT.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  frm_user_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->EXTAB      text
*----------------------------------------------------------------------*
FORM frm_user_status USING extab TYPE slis_t_extab.
  SET PF-STATUS '1000_STATUS'.
ENDFORM.                    "frm_user_status

*&---------------------------------------------------------------------*
*&      Form  frm_user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM frm_user_command USING r_ucomm LIKE sy-ucomm
                             rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN 'BCAK' OR 'CANCEL' OR 'EXIT' OR 'ESC'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDFORM.                    "frm_user_command
知识兔
计算机