zoukankan      html  css  js  c++  java
  • 动态ALV程序

    *&---------------------------------------------------------------------*
    *& Report  ZDYNRPO
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    
    REPORT ZDYNRPO.
    *-------------ALV 相关--------------------------
    DATA: WA_LAYO TYPE LVC_S_LAYO.
    DATA: WA_FCAT TYPE LVC_S_FCAT,
          IT_FCAT TYPE LVC_T_FCAT.
    
    DATA: IT_SCOL TYPE LVC_T_SCOL.
    
    DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
    
    FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE,
                   <DYN_WA>,
                   <DYN_FIELD>.
    
    DATA: DY_TABLE TYPE REF TO DATA,
          DY_LINE  TYPE REF TO DATA.
    
    DATA: GV_COLNAME    TYPE CHAR10,
          GV_DESC       TYPE CHAR10,
          GV_INDEX      TYPE CHAR02.
    
    *屏幕绘制
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T1.
    * 可描述的列数
    PARAMETERS: COL TYPE I.
    
    SELECTION-SCREEN END   OF BLOCK B1.
    
    * 初始化 添加固定列 姓名 年龄
    INITIALIZATION.
    
    *  CLEAR: IT_FCAT.
    
      PERFORM FRM_ADD_FCAT USING:
               'NAME' 'C' '姓名' '10' ''.
    
      PERFORM FRM_ADD_FCAT USING:
               'AGE' 'C' '年龄' '6' ''.
    
    START-OF-SELECTION.
    
    * 根据条件动态生成列
      DO COL TIMES.
        GV_INDEX = GV_INDEX + 1.
        CONCATENATE 'COL' GV_INDEX INTO GV_COLNAME.
        CONCATENATE '维护信息' GV_INDEX INTO GV_DESC.
        PERFORM FRM_ADD_FCAT
          USING GV_COLNAME 'C' GV_DESC '15' 'X'.
      ENDDO.
    
    * 根据it_fact生成动态表
      CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
        EXPORTING
          IT_FIELDCATALOG = IT_FCAT
        IMPORTING
          EP_TABLE        = DY_TABLE.
    
      ASSIGN DY_TABLE->* TO <DYN_TABLE>.
    
      CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.
    
      ASSIGN DY_LINE->* TO <DYN_WA>.
    
    * 给表字段赋值
      CLEAR: GV_INDEX.
      DO COL TIMES.
        GV_INDEX = GV_INDEX + 1.
        CONCATENATE 'COL' GV_INDEX INTO GV_COLNAME.
        ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA>  TO <DYN_FIELD>.
        <DYN_FIELD> = '添加信息'.
      ENDDO.
    
      GV_COLNAME = 'NAME'.
      ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA>  TO <DYN_FIELD>.
      <DYN_FIELD> = 'MSC_笑明'.
    
      GV_COLNAME = 'AGE'.
      ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA>  TO <DYN_FIELD>.
      <DYN_FIELD> = '18'.
    
      APPEND <DYN_WA> TO <DYN_TABLE>.
    
    * 相当于给内表放入两条数据
      CLEAR: GV_INDEX.
      DO COL TIMES.
        GV_INDEX = GV_INDEX + 1.
        CONCATENATE 'COL' GV_INDEX INTO GV_COLNAME.
        ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
        <DYN_FIELD> = '添加信息'.
      ENDDO.
    
      GV_COLNAME = 'NAME'.
      ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA>  TO <DYN_FIELD>.
      <DYN_FIELD> = 'MSC_小迈'.
    
      GV_COLNAME = 'AGE'.
      ASSIGN COMPONENT GV_COLNAME OF STRUCTURE <DYN_WA>  TO <DYN_FIELD>.
      <DYN_FIELD> = '3'.
    
      APPEND <DYN_WA> TO <DYN_TABLE>.
    
    END-OF-SELECTION.
    
      CLEAR: WA_LAYO.
      WA_LAYO-ZEBRA = 'X'.
    *  WA_LAYO-CWIDTH_OPT = 'X'.
    
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
        EXPORTING
          I_CALLBACK_PROGRAM = SY-REPID
          IS_LAYOUT_LVC      = WA_LAYO
          IT_FIELDCAT_LVC    = IT_FCAT
        TABLES
          T_OUTTAB           = <DYN_TABLE>
        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.
    
    *&---------------------------------------------------------------------*
    *&      Form  frm_add_fcat
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->VALUE1     text
    *      -->VALUE2     text
    *      -->VALUE3     text
    *      -->VALUE4     text
    *----------------------------------------------------------------------*
    FORM FRM_ADD_FCAT USING VALUE1 VALUE2 VALUE3 VALUE4 VALUE5.
      WA_FCAT-FIELDNAME   = VALUE1.
      WA_FCAT-INTTYPE     = VALUE2.
      WA_FCAT-REPTEXT     = VALUE3.
      WA_FCAT-OUTPUTLEN   = VALUE4.
      WA_FCAT-EDIT        = VALUE5.
      APPEND WA_FCAT TO IT_FCAT.
      CLEAR: WA_FCAT.
    ENDFORM.                    "frm_add_fcat
  • 相关阅读:
    Easyui datagrid 修改分页组件的分页提示信息为中文
    Easyui datagrid 实现表格记录拖拽
    Java:内部类
    算法导论:Trie字典树
    算法导论:找零钱问题
    lintcode:组成最大的数
    lintcode:验证二叉查找树
    lintcode:将二叉查找树转换成双链表
    lintcode:二叉树的路径和
    lintcode:字符串置换
  • 原文地址:https://www.cnblogs.com/datie/p/11496016.html
Copyright © 2011-2022 走看看