• 万能表批导


    *&---------------------------------------------------------------------*
    *& Report  ZSDE4005
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    REPORT ZSDE4005.
    TABLES SSCRFIELDS.
    CLASS LCL_DND_EVENT_RECEIVER DEFINITION DEFERRED .
    DATA  EVENT_RECEIVER TYPE REF TO LCL_DND_EVENT_RECEIVER.
    CLASS LCL_DND_EVENT_RECEIVER DEFINITION.

      PUBLIC SECTION.
        METHODS: HANDLE_DATA_CHANGED
                    FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
          IMPORTING ER_DATA_CHANGED
                    E_ONF4
                    E_ONF4_BEFORE
                    E_ONF4_AFTER
                    E_UCOMM.
        METHODS HANDLE_DATA_CHANGED_FINISHED
                    FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
          IMPORTING E_MODIFIED
                    ET_GOOD_CELLS.
    ENDCLASS.                    "lcl_dnd_event_
    CLASS LCL_DND_EVENT_RECEIVER IMPLEMENTATION.
      METHOD HANDLE_DATA_CHANGED.
        PERFORM FRM_EVENT_DATA_CHANGED USING ER_DATA_CHANGED.
      ENDMETHOD.

      METHOD HANDLE_DATA_CHANGED_FINISHED.
        PERFORM FRM_EVENT_CHANGED_FINISHED USING E_MODIFIED ET_GOOD_CELLS.
      ENDMETHOD.
    ENDCLASS..
    DATA:
      G_CONTAINER     TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      V_CONTAINERNAME TYPE CHAR50 VALUE 'CC_9001',
      OK_CODE         TYPE SY-UCOMM,
      G_ALV           TYPE REF TO CL_GUI_ALV_GRID,
      GT_EXCLUDE_9000 TYPE UI_FUNCTIONS.
    DATA ITAB TYPE REF TO CL_ABAP_TABLEDESCR.
    DATA STRUCT TYPE REF TO CL_ABAP_STRUCTDESCR.
    DATA STRUCT2 TYPE REF TO CL_ABAP_TABLEDESCR.
    DATA TABLES_TYPE TYPE REF TO CL_ABAP_TABLEDESCR.
    DATA LV_STYL TYPE FIELDNAME VALUE 'LVC_T_STYL'.
    DATA:O_NEW_TABLE  TYPE REF TO DATA.
    DATA ELEM_TYPE TYPE REF TO CL_ABAP_ELEMDESCR.
    FIELD-SYMBOLS <FS_TABLE> TYPE STANDARD TABLE.
    DATA:O_NEW_LINE  TYPE REF TO DATA.
    DATA COM_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE WITH HEADER LINE.
    FIELD-SYMBOLS <FS_LINE> .
    DATA:LV_SELECTION_ID TYPE RSDYNSEL-SELID,
         LT_TABLE        TYPE STANDARD TABLE OF RSDSTABS,
         LS_TABLE        TYPE RSDSTABS.
    DATA: LT_FILELD_TAB TYPE STANDARD TABLE OF RSDSFIELDS,
          LT_WHERE      TYPE RSDS_TWHERE.

    DATA T_FIELDCAT TYPE LVC_T_FCAT.
    DATA LV_TABNAME TYPE DD02L-TABNAME.
    SELECTION-SCREEN PUSHBUTTON 1(10) PB_PCH          "获取批次号
                     USER-COMMAND UCOMM4.
    PARAMETERS:P_FILE LIKE RLGRAP-FILENAME OBLIGATORY MEMORY ID A MODIF ID M1.
    PARAMETERS P_TABLE TYPE C  OBLIGATORY LENGTH 30 MEMORY ID B MODIF ID M2.
    PARAMETERS P_1 TYPE RADIOBUTTON GROUP G1 DEFAULT 'X' USER-COMMAND F1.
    PARAMETERS P_2 TYPE RADIOBUTTON GROUP G1.

    INITIALIZATION.
      PB_PCH '模版'.


    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      CALL FUNCTION 'WS_FILENAME_GET'
        EXPORTING
          DEF_FILENAME     = P_FILE
          DEF_PATH         'C:\'
          MASK             ',*.XLS,*.XLSX,*.CSV.'
          MODE             'O'
          TITLE            '文件名'
        IMPORTING
          FILENAME         = P_FILE
        EXCEPTIONS
          INV_WINSYS       1
          NO_BATCH         2
          SELECTION_CANCEL 3
          SELECTION_ERROR  4
          OTHERS           5.

    AT SELECTION-SCREEN OUTPUT.

      LOOP AT SCREEN.
        IF SCREEN-GROUP1 'M1'.
          SCREEN-REQUIRED 2.
        ENDIF.
        IF P_2 'X'AND SCREEN-NAME CS 'P_FILE'.
          SCREEN-ACTIVE 0.
        ENDIF.
        IF SCREEN-GROUP1 'M2' .
    *         and P_2 = 'X'.
          SCREEN-REQUIRED 2.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.


    AT SELECTION-SCREEN.
      IF SSCRFIELDS-UCOMM 'UCOMM4'.
        IF P_FILE IS INITIAL .
          MESSAGE '请输路径' TYPE 'E' .
        ENDIF.
        CLEAR SSCRFIELDS-UCOMM.
        PERFORM FRM_MB.
      ENDIF.



    START-OF-SELECTION.
      IF P_TABLE IS INITIAL.
        MESSAGE '请输入表名' TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.
      IF P_FILE IS INITIAL AND P_1 IS NOT INITIAL.
        MESSAGE '请输路径' TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

    *  elem_type ?= cl_abap_elemdescr=>GET_DDIC_FIELD( ).
      STRUCT ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( P_TABLE ).
      STRUCT2 ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( LV_STYL ).
      COM_TAB[] = STRUCT->GET_COMPONENTS).
      COM_TAB-NAME 'STYLE'.
      COM_TAB-TYPE = STRUCT2.
      INSERT COM_TAB INTO COM_TAB INDEX 1.
      STRUCT = CL_ABAP_STRUCTDESCR=>CREATE( COM_TAB[] ).
      ITAB = CL_ABAP_TABLEDESCR=>CREATE( STRUCT ).
    *  TABLES_type ?=CL_ABAP_TABLEDESCR=>describe_by_data ( ITAB ).
    *  STRUCT ?= TABLES_type->get_components( ).


      CREATE DATA O_NEW_TABLE TYPE HANDLE ITAB.
      ASSIGN O_NEW_TABLE->* TO <FS_TABLE>.
      CREATE DATA O_NEW_LINE TYPE HANDLE STRUCT.
      ASSIGN O_NEW_LINE->* TO <FS_LINE>.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          I_STRUCTURE_NAME       = P_TABLE
        CHANGING
          CT_FIELDCAT            = T_FIELDCAT[]
        EXCEPTIONS
          INCONSISTENT_INTERFACE 1
          PROGRAM_ERROR          2
          OTHERS                 3.
      SELECT * FROM DD03T INTO TABLE @DATA(LI_DD03TWHERE TABNAME = @P_TABLE.

      SELECT A~TABNAME, A~FIELDNAME, A~ROLLNAME, B~SCRTEXT_M
         FROM DD03L AS A
        LEFT JOIN DD04T AS B ON A~ROLLNAME = B~ROLLNAME
        WHERE TABNAME = @P_TABLE
        INTO TABLE @DATA(LI_DD).
      DATA LV_VALUE TYPE CHAR_CLSID.
      DATA LV_I TYPE I.
    *    LOOP AT T_FIELDCAT ASSIGNING <FS_FIELDS>.
    *      IF <FS_FIELDS>-KEY IS INITIAL.
    *        <FS_FIELDS>-EDIT = 'X'.
    *      ENDIF.
    *    ENDLOOP.
      LOOP AT T_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDS>).
        LV_I = SY-TABIX.
        READ TABLE LI_DD03T INTO DATA(LW_DD03TWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.
        IF SY-SUBRC 0.      <FS_FIELDS>
    -SCRTEXT_M = LW_DD03T-DDTEXT.    
    ELSE.      
    READ TABLE LI_DD INTO DATA(LW_DDWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.      
    IF SY-SUBRC 0.        <FS_FIELDS>
    -SCRTEXT_M = LW_DD-SCRTEXT_M.      
    ENDIF.    
    ENDIF.    
    IF <FS_FIELDS>-KEY IS INITIAL.      <FS_FIELDS>
    -EDIT 'X'.    
    ENDIF.  
    ENDLOOP.  
    IF P_1 'X'.
    *******数据定义*******
    *    DATA:LT_IN TYPE TABLE OF ZMMT_YWJKPZZB.  "内表:源文件数据    
    DATA:LC_FILE   TYPE STRING,         LC_RESULT 
    TYPE C"标识: 空表示文件不存在;否则,表示存在
    *******程序主体*******
    **Step 1. 判断文件是否存在    LC_FILE 
    = P_FILE.    
    CLEAR LC_RESULT.    
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST      
    EXPORTING        FILE                 
    = LC_FILE      RECEIVING        RESULT               

    = LC_RESULT      
    EXCEPTIONS        CNTL_ERROR           
    1        ERROR_NO_GUI         
    2        WRONG_PARAMETER      
    3        NOT_SUPPORTED_BY_GUI 
    4        
    OTHERS               5.    
    IF LC_RESULT IS INITIAL.      
    MESSAGE '指定的文件不存在' TYPE 'S' DISPLAY LIKE 'E'.      
    EXIT.    
    ENDIF.    
    DATA:LT_EXCLE_IN                    "内表:从源文件中读取到的数据           
    TYPE STANDARD TABLE OF ZALSMEX_TABLINE WITH HEADER LINE,         LS_EXCLE_IN 
    LIKE LINE OF LT_EXCLE_IN.  "工作区:对应EXCEL中一个单元格的信息(行号、列号、值)    
    CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'  "打开指定的EXCEL文件      
    EXPORTING        FILENAME                
    = P_FILE    "文件全路径名        I_BEGIN_COL             
    1         "文件中读取的数据位置_起始列        I_BEGIN_ROW             
    2   "文件中读取的数据位置_起始行        I_END_COL               
    10        "文件中读取的数据位置_结束列        I_END_ROW               
    5000   "30000"文件中读取的数据位置_结束行      
    TABLES        INTERN                  
    = LT_EXCLE_IN  "内表:从源文件中读取的数据      
    EXCEPTIONS        INCONSISTENT_PARAMETERS 
    1        UPLOAD_OLE              
    2        
    OTHERS                  3.    
    IF SY-SUBRC <> 0.      
    MESSAGE '打开源文件失败!' TYPE 'S' DISPLAY LIKE 'E'.      
    EXIT.    
    ENDIF.


    *  DATA:
    *  LS_IN       TYPE  ZBW4HANA_META_02 .              "工作区:整理好的等待转入源数据
    *  DATA I_SJ     TYPE TABLE OF ZBW4HANA_META_02.    
    DATA LC_FIELDVALUE     TYPE FIELDVALUE.    
    CLEAR LV_I.    
    LOOP AT LT_EXCLE_IN INTO LS_EXCLE_IN.    "逐个单元格处理      
    AT NEW ROW.            "新的一行EXCEL数据_开始        LV_I 
    = LV_I + 1.        
    CLEAR: <FS_LINE>.      
    ENDAT.      LC_FIELDVALUE 
    = LS_EXCLE_IN-VALUE.      
    CONDENSE LC_FIELDVALUE.      
    TRANSLATE LC_FIELDVALUE TO UPPER CASE.      
    FIELD-SYMBOLS:        <FS_FIELD>
    .      LS_EXCLE_IN
    -COL = LS_EXCLE_IN-COL + 1.      
    ASSIGN COMPONENT LS_EXCLE_IN-COL OF STRUCTURE <FS_LINE> TO <FS_FIELD>.      <FS_FIELD> 
    = LC_FIELDVALUE.      
    AT END OF ROW.              "新的一行EXCEL数据_结束        
    INSERT <FS_LINE> INTO <FS_TABLE> INDEX LV_I.      
    ENDAT.    
    ENDLOOP.    
    CALL SCREEN 9000.
    *    MODIFY (P_TABLE) FROM TABLE <FS_TABLE>[].
    *    COMMIT WORK.
    *    IF SY-SUBRC = 0.
    *      WRITE '成功'.
    *    ENDIF.  
    ELSE.    LV_TABNAME 
    = P_TABLE.    

    DATA L_ANSWER TYPE C.    
    CALL FUNCTION 'POPUP_TO_CONFIRM'      
    EXPORTING        
    TITLEBAR      '是否使用选择屏幕 '
    *       DIAGNOSE_OBJECT             = ' '        TEXT_QUESTION 
    '将根据你选择的表生成选择屏幕,点保存进行取数'        TEXT_BUTTON_1 
    '使用'        ICON_BUTTON_1 
    'ICON_CHECKED '      
    IMPORTING        ANSWER        
    = L_ANSWER.    
    .    
    IF L_ANSWER '1'.      LS_TABLE
    -PRIM_TAB = P_TABLE.      
    APPEND LS_TABLE TO LT_TABLE.      
    CALL FUNCTION 'FREE_SELECTIONS_INIT'        
    EXPORTING          KIND                     
    'T'        
    IMPORTING          SELECTION_ID             
    = LV_SELECTION_ID        
    TABLES          TABLES_TAB               
    = LT_TABLE        
    EXCEPTIONS          FIELDS_INCOMPLETE        
    1          FIELDS_NO_JOIN           
    2          FIELD_NOT_FOUND          
    3          NO_TABLES                
    4          TABLE_NOT_FOUND          
    5          EXPRESSION_NOT_SUPPORTED 
    6          INCORRECT_EXPRESSION     
    7          ILLEGAL_KIND             
    8          AREA_NOT_FOUND           
    9          INCONSISTENT_AREA        
    10          KIND_F_NO_FIELDS_LEFT    
    11          KIND_F_NO_FIELDS         
    12          TOO_MANY_FIELDS          
    13          DUP_FIELD                
    14          FIELD_NO_TYPE            
    15          FIELD_ILL_TYPE           
    16          DUP_EVENT_FIELD          
    17          NODE_NOT_IN_LDB          
    18          AREA_NO_FIELD            
    19          
    OTHERS                   20.      
    CALL FUNCTION 'FREE_SELECTIONS_DIALOG'        
    EXPORTING          SELECTION_ID    
    = LV_SELECTION_ID          
    TITLE           '选择'          FRAME_TEXT      
    '查询条件'          AS_WINDOW       
    ''        
    IMPORTING          WHERE_CLAUSES   
    = LT_WHERE        
    TABLES          FIELDS_TAB      
    = LT_FILELD_TAB        
    EXCEPTIONS          INTERNAL_ERROR  
    1          NO_ACTION       
    2          SELID_NOT_FOUND 
    3          ILLEGAL_STATUS  
    4          
    OTHERS          5.    
    ENDIF.    
    DATA LV_WHERE TYPE STRING.    
    READ TABLE LT_WHERE INTO DATA(LW_WHEREWITH KEY TABLENAME = P_TABLE.    
    IF SY-SUBRC 0.      
    LOOP AT LW_WHERE-WHERE_TAB INTO DATA(LW_WHERE2).        
    REPLACE ALL OCCURRENCES OF '(' IN LW_WHERE2-LINE WITH ' '.        
    REPLACE ALL OCCURRENCES OF ')' IN LW_WHERE2-LINE WITH ' '.        LV_WHERE 
    = LV_WHERE && LW_WHERE2-LINE.      
    ENDLOOP.      
    SELECT * FROM (P_TABLEINTO  CORRESPONDING FIELDS OF TABLE <FS_TABLE> WHERE (LV_WHERE).    
    ELSE.      
    SELECT * FROM (P_TABLEINTO CORRESPONDING FIELDS OF TABLE <FS_TABLE>.    
    ENDIF.
    *    LOOP AT T_FIELDCAT ASSIGNING <FS_FIELDS>.
    *      IF <FS_FIELDS>-KEY IS INITIAL.
    *        <FS_FIELDS>-EDIT = 'X'.
    *      ENDIF.
    *    ENDLOOP.    

    CALL SCREEN 9000.  
    ENDIF.
    *&---------------------------------------------------------------------*
    *& Form FRM_MB
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM FRM_MB .  
    DATA:LC_DEST  TYPE LOCALFILE"目标文件  
    DATA:LS_KEY   TYPE WWWDATATAB,       LV_SUBRC 
    TYPE SY-SUBRC.  
    DATA TS_FIELDCAT TYPE LVC_T_FCAT.  
    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'    
    EXPORTING      I_STRUCTURE_NAME       
    = P_TABLE    
    CHANGING      CT_FIELDCAT            
    = TS_FIELDCAT[]    
    EXCEPTIONS      INCONSISTENT_INTERFACE 
    1      PROGRAM_ERROR          
    2      
    OTHERS                 3.
    **STEP 2. 下载EXCEL模板  LS_KEY
    -RELID 'MI'.  LS_KEY
    -OBJID 'SDE4005'.  LC_DEST 
    = P_FILE.  
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'    
    EXPORTING      
    KEY         = LS_KEY      DESTINATION 
    = LC_DEST    
    IMPORTING      RC          
    = LV_SUBRC    
    CHANGING      TEMP        
    = LC_DEST.  

    IF LV_SUBRC <> 0.    
    MESSAGE E000(OOWITH '模板文件不存在或文件路径错误' DISPLAY LIKE 'E'.    
    EXIT.  
    ENDIF.
    *******数据定义*******  
    TYPE-POOLS:OLE2.         "OLE声明  
    "定义OLE变量  
    DATA:LO_EXCEL     TYPE OLE2_OBJECT,   "EXCEL应用程序       LO_WORKBOOKS 
    TYPE OLE2_OBJECT,   "EXCEL文件窗口       LO_WORKBOOK  
    TYPE OLE2_OBJECT,   "EXCEL文件       LO_SHEET     
    TYPE OLE2_OBJECT,   "EXCEL 文件的SHEET页       RANGE        
    TYPE OLE2_OBJECT,       CELL         
    TYPE OLE2_OBJECT.  
    DATA:LC_FILE   TYPE STRING,       LC_RESULT 
    TYPE C"标识: 空表示文件不存在;否则,表示存在
    *******初始化*******
    *******程序主体*******
    **Step 1. 判断文件是否存在  LC_FILE 
    = LC_DEST.  
    CLEAR LC_RESULT.  
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST    
    EXPORTING      FILE                 
    = LC_FILE    RECEIVING      RESULT               

    = LC_RESULT    
    EXCEPTIONS      CNTL_ERROR           
    1      ERROR_NO_GUI         
    2      WRONG_PARAMETER      
    3      NOT_SUPPORTED_BY_GUI 
    4      
    OTHERS               5.  
    IF LC_RESULT IS INITIAL.    
    MESSAGE E000(OOWITH '指定的文件不存在'.    
    EXIT.  
    ENDIF.  
    SELECT * FROM DD03T INTO TABLE @DATA(LI_DD03TWHERE TABNAME = @P_TABLE.  

    SELECT A~TABNAME, A~FIELDNAME, A~ROLLNAME, B~SCRTEXT_M     
    FROM DD03L AS A    
    LEFT JOIN DD04T AS B ON A~ROLLNAME = B~ROLLNAME    
    WHERE TABNAME = @P_TABLE    
    INTO TABLE @DATA(LI_DD).
    **Step 2. 打开EXCEL文件  
    CREATE OBJECT LO_EXCEL 'EXCEL.APPLICATION'.  
    CALL METHOD OF LO_EXCEL 'WORKBOOKS' = LO_WORKBOOKS.  
    CALL METHOD OF LO_WORKBOOKS 'OPEN' = LO_WORKBOOK EXPORTING #1 = LC_DEST.  
    CALL METHOD OF LO_WORKBOOK 'WORKSHEETS' = LO_SHEET EXPORTING #1 1.
    **  PERFORM FRM_EXPORT_FILL_HEADER.
    *  PERFORM FRM_EXPORT_FILL.
    *  CALL METHOD OF SHEET 'CELLS' = CELL EXPORTING #1 = 1 #2 = 1.
    *  CALL METHOD OF CELL 'SELECT'.
    *  SET PROPERTY OF EXCEL 'CUTCOPYMODE' = 0.
    **  SET PROPERTY OF WORKBOOK 'SAVED' = 1.  
    DATA LV_VALUE TYPE CHAR_CLSID.  
    DATA LV_I TYPE I.  
    SET PROPERTY OF LO_EXCEL 'VISIBLE' 1.  
    LOOP AT TS_FIELDCAT ASSIGNING <FS_FIELDS>.    LV_I 
    = SY-TABIX.    
    READ TABLE LI_DD03T INTO DATA(LW_DD03TWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.    
    IF SY-SUBRC 0.      LV_VALUE 
    = LW_DD03T-DDTEXT.    
    ELSE.      
    READ TABLE LI_DD INTO DATA(LW_DDWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.      
    IF SY-SUBRC 0.        LV_VALUE 
    = LW_DD-SCRTEXT_M.      
    ENDIF.    
    ENDIF.    
    CALL METHOD OF LO_EXCEL 'CELLS' = CELL    
    EXPORTING #1 1 #2 = LV_I.    
    SET PROPERTY OF CELL 'VALUE' = LV_VALUE.  
    ENDLOOP.
    *  CALL METHOD OF WORKBOOK 'SAVE'.  
    FREE OBJECT:    LO_EXCEL
    ,LO_WORKBOOKS,LO_WORKBOOK.   ",SHEET,RANGE,CELL.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Module STATUS_9000 OUTPUT
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    MODULE STATUS_9000 OUTPUT.  
    SET PF-STATUS '9000'.  
    DATA:LT_FIELDCAT TYPE LVC_T_FCAT WITH HEADER LINE.  "列表字段属性  
    DATA:LI_RECCNT TYPE INT4,                   "内表记录##       LC_TITLE  
    TYPE SLIS_ENTRY.             "报表标题  
    DATA:LS_LAYOUT       TYPE LVC_S_LAYO.


    *******初始化*******
    *******程序主体*******
    **STEP 1. 初始化ALV报表特性
    **STEP 1.2 初始化报表列属性  

    IF G_ALV IS INITIAL .    
    CREATE OBJECT G_CONTAINER      
    EXPORTING        CONTAINER_NAME 
    = V_CONTAINERNAME.    
    CREATE OBJECT G_ALV      
    EXPORTING        I_PARENT 
    = G_CONTAINER.    
    "设置字段属性    
    "设置布局    LS_LAYOUT
    -CWIDTH_OPT 'X'.  "清单格式优化模式:自动    LS_LAYOUT
    -ZEBRA =  'X'.    LS_LAYOUT
    -STYLEFNAME 'STYLE'.    "设定是否可编辑
    *---排除不需要的按钮    
    PERFORM FRM_EXCLUDE_9001 .    

    "设置显示格式    
    CALL METHOD G_ALV->SET_TABLE_FOR_FIRST_DISPLAY      
    EXPORTING        I_SAVE                        
    'A'        IS_LAYOUT                     
    = LS_LAYOUT        IT_TOOLBAR_EXCLUDING          
    = GT_EXCLUDE_9000      
    CHANGING        IT_OUTTAB                     
    = <FS_TABLE>        IT_FIELDCATALOG               
    = T_FIELDCAT[]      
    EXCEPTIONS        INVALID_PARAMETER_COMBINATION 
    1        PROGRAM_ERROR                 
    2        TOO_MANY_LINES                
    3        
    OTHERS                        4.    
    CREATE OBJECT EVENT_RECEIVER.    
    SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR G_ALV .    
    SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED_FINISHED FOR G_ALV .  
    ELSE .    

    DATA LW_STABLE  TYPE LVC_S_STBL.    LW_STABLE
    -ROW 'X'.    LW_STABLE
    -COL 'X'.
    *    CALL METHOD G_ALV->SET_FRONTEND_FIELDCATALOG
    *      EXPORTING
    *        IT_FIELDCATALOG = T_FIELDCAT.
    **    LS_LAYOUT-CWIDTH_OPT = 'X'.  "清单格式优化模式:自动
    *    CALL METHOD G_ALV->SET_FRONTEND_LAYOUT
    *      EXPORTING
    *        IS_LAYOUT = LS_LAYOUT.    
    CALL METHOD G_ALV->REFRESH_TABLE_DISPLAY      
    EXPORTING        IS_STABLE 
    = LW_STABLE      
    EXCEPTIONS        FINISHED  
    1        
    OTHERS    2.  




    ENDIF.
    ENDMODULE.
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_9000  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE USER_COMMAND_9000 INPUT.  
    CALL METHOD G_ALV->CHECK_CHANGED_DATA.  
    DATA:    SAVE_OK 
    TYPE SY-UCOMM,    LV_ROW  
    TYPE LVC_T_ROW.  
    FIELD-SYMBOLS <FS>.  
    DATA LW_ITAB TYPE REF TO CL_ABAP_TABLEDESCR.  
    DATA LW_STRUCT TYPE REF TO CL_ABAP_STRUCTDESCR.  
    DATA LW_COM_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE WITH HEADER LINE.  
    DATA:LW_NEW_TABLE  TYPE REF TO DATA.  
    DATA:LW_NEW_LINE  TYPE REF TO DATA.  
    DATA LS_STYLE TYPE LVC_S_STYL.  
    DATA LS_STYLE2 TYPE LVC_T_STYL.  
    DATA LW_LINE TYPE REF TO DATA.  
    FIELD-SYMBOLS <FS_LINE2>.  
    FIELD-SYMBOLS <FS_WTABLE> TYPE STANDARD TABLE.  
    FIELD-SYMBOLS <FS_WLINE> TYPE ANY.  LW_STRUCT ?= CL_ABAP_TYPEDESCR
    =>DESCRIBE_BY_NAME( P_TABLE ).  LW_COM_TAB[] 

    = LW_STRUCT->GET_COMPONENTS).  LW_STRUCT 
    = CL_ABAP_STRUCTDESCR=>CREATE( LW_COM_TAB[] ).  LW_ITAB 
    = CL_ABAP_TABLEDESCR=>CREATE( LW_STRUCT ).  
    CREATE DATA LW_NEW_TABLE TYPE HANDLE LW_ITAB.  
    ASSIGN LW_NEW_TABLE->* TO <FS_WTABLE>.  
    CREATE DATA LW_NEW_LINE TYPE HANDLE LW_STRUCT.  
    ASSIGN LW_NEW_LINE->* TO <FS_WLINE>.  
    CREATE DATA LW_LINE TYPE HANDLE STRUCT.  
    ASSIGN LW_LINE->* TO <FS_LINE2>.  SAVE_OK 
    = OK_CODE.  
    CLEAR: OK_CODE.  
    CASE SAVE_OK.    
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.      
    LEAVE TO SCREEN 0.    
    WHEN 'ZSAVE'.      
    CLEAR LS_STYLE2[].      
    LOOP AT T_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDSS>).        
    IF <FS_FIELDSS>-KEY IS NOT INITIAL.          LS_STYLE
    -FIELDNAME = <FS_FIELDSS>-FIELDNAME.          LS_STYLE
    -STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.        
    ELSE.          LS_STYLE
    -FIELDNAME = <FS_FIELDSS>-FIELDNAME.          LS_STYLE
    -STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.        
    ENDIF.        
    INSERT LS_STYLE INTO TABLE LS_STYLE2.      
    ENDLOOP.      
    LOOP AT <FS_TABLE> ASSIGNING <FS_LINE2> .        
    ASSIGN COMPONENT 'STYLE' OF STRUCTURE <FS_LINE2> TO <FS>.        <FS> 
    = LS_STYLE2.      
    ENDLOOP.      
    MOVE-CORRESPONDING <FS_TABLE> TO <FS_WTABLE>.      
    MODIFY (P_TABLEFROM TABLE <FS_WTABLE>[].      
    IF SY-SUBRC 0.        
    COMMIT WORK.      
    ENDIF.    
    WHEN 'ZADD'.      


    CLEAR LS_STYLE2[].      
    LOOP AT T_FIELDCAT ASSIGNING <FS_FIELDSS>.        LS_STYLE
    -FIELDNAME = <FS_FIELDSS>-FIELDNAME.        LS_STYLE
    -STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.        
    INSERT LS_STYLE INTO TABLE LS_STYLE2.      
    ENDLOOP.      
    CLEAR <FS_LINE2>.      
    ASSIGN COMPONENT 'STYLE' OF STRUCTURE <FS_LINE2> TO <FS>.      <FS> 
    = LS_STYLE2.
    *      READ TABLE T_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDSS>) INDEX 1..
    *      ASSIGN COMPONENT 'EDIT' OF STRUCTURE <FS_FIELDSS> TO <FS>.
    *      <FS> = 'X'.
    *      MODIFY T_FIELDCAT  FROM <FS_FIELDSS> TRANSPORTING EDIT WHERE EDIT = ''.
    *      
    APPEND <FS_LINE2> TO <FS_TABLE>.    

    WHEN 'ZDEL'.      
    CALL METHOD G_ALV->GET_SELECTED_ROWS        
    IMPORTING          ET_INDEX_ROWS 
    = LV_ROW[].      
    IF LV_ROW[] IS INITIAL.        
    MESSAGE '请选择你要删除的数据' TYPE 'E' ."请选择你要修改的数据      
    ENDIF.      
    LOOP AT LV_ROW INTO DATA(GS_ROW).        
    READ TABLE <FS_TABLE> INTO <FS_LINE> INDEX GS_ROW-INDEX.        
    IF SY-SUBRC 0.          
    MOVE-CORRESPONDING <FS_LINE> TO <FS_WLINE>.          
    APPEND <FS_WLINE> TO <FS_WTABLE>.          
    DELETE TABLE <FS_TABLE> FROM <FS_LINE>.        
    ENDIF.      

    ENDLOOP.      

    DELETE (P_TABLEFROM TABLE <FS_WTABLE>[].      
    IF SY-SUBRC 0.        
    COMMIT WORK.      
    ENDIF.  
    ENDCASE.
    ENDMODULE.
    *&---------------------------------------------------------------------*
    *& Form FRM_EXCLUDE_9001
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM FRM_EXCLUDE_9001 .  
    DATA: LS_EXCLUDE_9000 TYPE UI_FUNC.  LS_EXCLUDE_9000 

    = CL_GUI_ALV_GRID=>MC_FC_DETAIL.        "查看  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_REFRESH.       "刷新  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_MB_EXPORT.        "下载  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_MB_VARIANT.       "保存格式  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_MB_PASTE.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 

    = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_GRAPH.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_HELP.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_INFO.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_CHECK.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_AVERAGE.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_MINIMUM.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_PRINT.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_SUM.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_VIEWS.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Form FRM_EVENT_DATA_CHANGED
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *&      --> ER_DATA_CHANGED
    *&---------------------------------------------------------------------*
    FORM FRM_EVENT_DATA_CHANGED  USING ER_DATA_CHANGED TYPE REF TO                                         CL_ALV_CHANGED_DATA_PROTOCOL
    .  
    DATA:LS_MOD_CELLS TYPE LVC_S_MODI,       TVALUE       
    TYPE STRING,        "变更行项目的值       LV_IDX_VALUE 
    TYPE STRING,        "读取的行项目的值       LV_TVALUE    
    TYPE STRING,        "是否变更字段的值       LV_ZSEQ      
    TYPE I,       LV_ZSEQ_TMP  
    TYPE I,       LV_MSG       
    TYPE STRING.        "错误文本 最终拼
    *--------------------------------------------------xander end   17.05.2012 16:29:06  

    LOOP AT ER_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MOD_CELLS.    
    CALL*&---------------------------------------------------------------------*
    *& Report  ZSDE4005
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*
    REPORT ZSDE4005.
    TABLES SSCRFIELDS.
    CLASS LCL_DND_EVENT_RECEIVER DEFINITION DEFERRED .
    DATA  EVENT_RECEIVER TYPE REF TO LCL_DND_EVENT_RECEIVER.
    CLASS LCL_DND_EVENT_RECEIVER DEFINITION.

      PUBLIC SECTION.
        METHODS: HANDLE_DATA_CHANGED
                    FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
          IMPORTING ER_DATA_CHANGED
                    E_ONF4
                    E_ONF4_BEFORE
                    E_ONF4_AFTER
                    E_UCOMM.
        METHODS HANDLE_DATA_CHANGED_FINISHED
                    FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
          IMPORTING E_MODIFIED
                    ET_GOOD_CELLS.
    ENDCLASS.                    "lcl_dnd_event_
    CLASS LCL_DND_EVENT_RECEIVER IMPLEMENTATION.
      METHOD HANDLE_DATA_CHANGED.
        PERFORM FRM_EVENT_DATA_CHANGED USING ER_DATA_CHANGED.
      ENDMETHOD.

      METHOD HANDLE_DATA_CHANGED_FINISHED.
        PERFORM FRM_EVENT_CHANGED_FINISHED USING E_MODIFIED ET_GOOD_CELLS.
      ENDMETHOD.
    ENDCLASS..
    DATA:
      G_CONTAINER     TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      V_CONTAINERNAME TYPE CHAR50 VALUE 'CC_9001',
      OK_CODE         TYPE SY-UCOMM,
      G_ALV           TYPE REF TO CL_GUI_ALV_GRID,
      GT_EXCLUDE_9000 TYPE UI_FUNCTIONS.
    DATA ITAB TYPE REF TO CL_ABAP_TABLEDESCR.
    DATA STRUCT TYPE REF TO CL_ABAP_STRUCTDESCR.
    DATA STRUCT2 TYPE REF TO CL_ABAP_TABLEDESCR.
    DATA TABLES_TYPE TYPE REF TO CL_ABAP_TABLEDESCR.
    DATA LV_STYL TYPE FIELDNAME VALUE 'LVC_T_STYL'.
    DATA:O_NEW_TABLE  TYPE REF TO DATA.
    DATA ELEM_TYPE TYPE REF TO CL_ABAP_ELEMDESCR.
    FIELD-SYMBOLS <FS_TABLE> TYPE STANDARD TABLE.
    DATA:O_NEW_LINE  TYPE REF TO DATA.
    DATA COM_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE WITH HEADER LINE.
    FIELD-SYMBOLS <FS_LINE> .
    DATA:LV_SELECTION_ID TYPE RSDYNSEL-SELID,
         LT_TABLE        TYPE STANDARD TABLE OF RSDSTABS,
         LS_TABLE        TYPE RSDSTABS.
    DATA: LT_FILELD_TAB TYPE STANDARD TABLE OF RSDSFIELDS,
          LT_WHERE      TYPE RSDS_TWHERE.

    DATA T_FIELDCAT TYPE LVC_T_FCAT.
    DATA LV_TABNAME TYPE DD02L-TABNAME.
    SELECTION-SCREEN PUSHBUTTON 1(10) PB_PCH          "获取批次号
                     USER-COMMAND UCOMM4.
    PARAMETERS:P_FILE LIKE RLGRAP-FILENAME OBLIGATORY MEMORY ID A MODIF ID M1.
    PARAMETERS P_TABLE TYPE C  OBLIGATORY LENGTH 30 MEMORY ID B MODIF ID M2.
    PARAMETERS P_1 TYPE RADIOBUTTON GROUP G1 DEFAULT 'X' USER-COMMAND F1.
    PARAMETERS P_2 TYPE RADIOBUTTON GROUP G1.

    INITIALIZATION.
      PB_PCH '模版'.


    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      CALL FUNCTION 'WS_FILENAME_GET'
        EXPORTING
          DEF_FILENAME     = P_FILE
          DEF_PATH         'C:\'
          MASK             ',*.XLS,*.XLSX,*.CSV.'
          MODE             'O'
          TITLE            '文件名'
        IMPORTING
          FILENAME         = P_FILE
        EXCEPTIONS
          INV_WINSYS       1
          NO_BATCH         2
          SELECTION_CANCEL 3
          SELECTION_ERROR  4
          OTHERS           5.

    AT SELECTION-SCREEN OUTPUT.

      LOOP AT SCREEN.
        IF SCREEN-GROUP1 'M1'.
          SCREEN-REQUIRED 2.
        ENDIF.
        IF P_2 'X'AND SCREEN-NAME CS 'P_FILE'.
          SCREEN-ACTIVE 0.
        ENDIF.
        IF SCREEN-GROUP1 'M2' .
    *         and P_2 = 'X'.
          SCREEN-REQUIRED 2.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.


    AT SELECTION-SCREEN.
      IF SSCRFIELDS-UCOMM 'UCOMM4'.
        IF P_FILE IS INITIAL .
          MESSAGE '请输路径' TYPE 'E' .
        ENDIF.
        CLEAR SSCRFIELDS-UCOMM.
        PERFORM FRM_MB.
      ENDIF.



    START-OF-SELECTION.
      IF P_TABLE IS INITIAL.
        MESSAGE '请输入表名' TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.
      IF P_FILE IS INITIAL AND P_1 IS NOT INITIAL.
        MESSAGE '请输路径' TYPE 'S' DISPLAY LIKE 'E'.
        LEAVE LIST-PROCESSING.
      ENDIF.

    *  elem_type ?= cl_abap_elemdescr=>GET_DDIC_FIELD( ).
      STRUCT ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( P_TABLE ).
      STRUCT2 ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( LV_STYL ).
      COM_TAB[] = STRUCT->GET_COMPONENTS).
      COM_TAB-NAME 'STYLE'.
      COM_TAB-TYPE = STRUCT2.
      INSERT COM_TAB INTO COM_TAB INDEX 1.
      STRUCT = CL_ABAP_STRUCTDESCR=>CREATE( COM_TAB[] ).
      ITAB = CL_ABAP_TABLEDESCR=>CREATE( STRUCT ).
    *  TABLES_type ?=CL_ABAP_TABLEDESCR=>describe_by_data ( ITAB ).
    *  STRUCT ?= TABLES_type->get_components( ).


      CREATE DATA O_NEW_TABLE TYPE HANDLE ITAB.
      ASSIGN O_NEW_TABLE->* TO <FS_TABLE>.
      CREATE DATA O_NEW_LINE TYPE HANDLE STRUCT.
      ASSIGN O_NEW_LINE->* TO <FS_LINE>.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          I_STRUCTURE_NAME       = P_TABLE
        CHANGING
          CT_FIELDCAT            = T_FIELDCAT[]
        EXCEPTIONS
          INCONSISTENT_INTERFACE 1
          PROGRAM_ERROR          2
          OTHERS                 3.
      SELECT * FROM DD03T INTO TABLE @DATA(LI_DD03TWHERE TABNAME = @P_TABLE.

      SELECT A~TABNAME, A~FIELDNAME, A~ROLLNAME, B~SCRTEXT_M
         FROM DD03L AS A
        LEFT JOIN DD04T AS B ON A~ROLLNAME = B~ROLLNAME
        WHERE TABNAME = @P_TABLE
        INTO TABLE @DATA(LI_DD).
      DATA LV_VALUE TYPE CHAR_CLSID.
      DATA LV_I TYPE I.
    *    LOOP AT T_FIELDCAT ASSIGNING <FS_FIELDS>.
    *      IF <FS_FIELDS>-KEY IS INITIAL.
    *        <FS_FIELDS>-EDIT = 'X'.
    *      ENDIF.
    *    ENDLOOP.
      LOOP AT T_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDS>).
        LV_I = SY-TABIX.
        READ TABLE LI_DD03T INTO DATA(LW_DD03TWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.
        IF SY-SUBRC 0.      <FS_FIELDS>
    -SCRTEXT_M = LW_DD03T-DDTEXT.    
    ELSE.      
    READ TABLE LI_DD INTO DATA(LW_DDWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.      
    IF SY-SUBRC 0.        <FS_FIELDS>
    -SCRTEXT_M = LW_DD-SCRTEXT_M.      
    ENDIF.    
    ENDIF.    
    IF <FS_FIELDS>-KEY IS INITIAL.      <FS_FIELDS>
    -EDIT 'X'.    
    ENDIF.  
    ENDLOOP.  
    IF P_1 'X'.
    *******数据定义*******
    *    DATA:LT_IN TYPE TABLE OF ZMMT_YWJKPZZB.  "内表:源文件数据    
    DATA:LC_FILE   TYPE STRING,         LC_RESULT 
    TYPE C"标识: 空表示文件不存在;否则,表示存在
    *******程序主体*******
    **Step 1. 判断文件是否存在    LC_FILE 
    = P_FILE.    
    CLEAR LC_RESULT.    
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST      
    EXPORTING        FILE                 
    = LC_FILE      RECEIVING        RESULT               

    = LC_RESULT      
    EXCEPTIONS        CNTL_ERROR           
    1        ERROR_NO_GUI         
    2        WRONG_PARAMETER      
    3        NOT_SUPPORTED_BY_GUI 
    4        
    OTHERS               5.    
    IF LC_RESULT IS INITIAL.      
    MESSAGE '指定的文件不存在' TYPE 'S' DISPLAY LIKE 'E'.      
    EXIT.    
    ENDIF.    
    DATA:LT_EXCLE_IN                    "内表:从源文件中读取到的数据           
    TYPE STANDARD TABLE OF ZALSMEX_TABLINE WITH HEADER LINE,         LS_EXCLE_IN 
    LIKE LINE OF LT_EXCLE_IN.  "工作区:对应EXCEL中一个单元格的信息(行号、列号、值)    
    CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'  "打开指定的EXCEL文件      
    EXPORTING        FILENAME                
    = P_FILE    "文件全路径名        I_BEGIN_COL             
    1         "文件中读取的数据位置_起始列        I_BEGIN_ROW             
    2   "文件中读取的数据位置_起始行        I_END_COL               
    10        "文件中读取的数据位置_结束列        I_END_ROW               
    5000   "30000"文件中读取的数据位置_结束行      
    TABLES        INTERN                  
    = LT_EXCLE_IN  "内表:从源文件中读取的数据      
    EXCEPTIONS        INCONSISTENT_PARAMETERS 
    1        UPLOAD_OLE              
    2        
    OTHERS                  3.    
    IF SY-SUBRC <> 0.      
    MESSAGE '打开源文件失败!' TYPE 'S' DISPLAY LIKE 'E'.      
    EXIT.    
    ENDIF.


    *  DATA:
    *  LS_IN       TYPE  ZBW4HANA_META_02 .              "工作区:整理好的等待转入源数据
    *  DATA I_SJ     TYPE TABLE OF ZBW4HANA_META_02.    
    DATA LC_FIELDVALUE     TYPE FIELDVALUE.    
    CLEAR LV_I.    
    LOOP AT LT_EXCLE_IN INTO LS_EXCLE_IN.    "逐个单元格处理      
    AT NEW ROW.            "新的一行EXCEL数据_开始        LV_I 
    = LV_I + 1.        
    CLEAR: <FS_LINE>.      
    ENDAT.      LC_FIELDVALUE 
    = LS_EXCLE_IN-VALUE.      
    CONDENSE LC_FIELDVALUE.      
    TRANSLATE LC_FIELDVALUE TO UPPER CASE.      
    FIELD-SYMBOLS:        <FS_FIELD>
    .      LS_EXCLE_IN
    -COL = LS_EXCLE_IN-COL + 1.      
    ASSIGN COMPONENT LS_EXCLE_IN-COL OF STRUCTURE <FS_LINE> TO <FS_FIELD>.      <FS_FIELD> 
    = LC_FIELDVALUE.      
    AT END OF ROW.              "新的一行EXCEL数据_结束        
    INSERT <FS_LINE> INTO <FS_TABLE> INDEX LV_I.      
    ENDAT.    
    ENDLOOP.    
    CALL SCREEN 9000.
    *    MODIFY (P_TABLE) FROM TABLE <FS_TABLE>[].
    *    COMMIT WORK.
    *    IF SY-SUBRC = 0.
    *      WRITE '成功'.
    *    ENDIF.  
    ELSE.    LV_TABNAME 
    = P_TABLE.    

    DATA L_ANSWER TYPE C.    
    CALL FUNCTION 'POPUP_TO_CONFIRM'      
    EXPORTING        
    TITLEBAR      '是否使用选择屏幕 '
    *       DIAGNOSE_OBJECT             = ' '        TEXT_QUESTION 
    '将根据你选择的表生成选择屏幕,点保存进行取数'        TEXT_BUTTON_1 
    '使用'        ICON_BUTTON_1 
    'ICON_CHECKED '      
    IMPORTING        ANSWER        
    = L_ANSWER.    
    .    
    IF L_ANSWER '1'.      LS_TABLE
    -PRIM_TAB = P_TABLE.      
    APPEND LS_TABLE TO LT_TABLE.      
    CALL FUNCTION 'FREE_SELECTIONS_INIT'        
    EXPORTING          KIND                     
    'T'        
    IMPORTING          SELECTION_ID             
    = LV_SELECTION_ID        
    TABLES          TABLES_TAB               
    = LT_TABLE        
    EXCEPTIONS          FIELDS_INCOMPLETE        
    1          FIELDS_NO_JOIN           
    2          FIELD_NOT_FOUND          
    3          NO_TABLES                
    4          TABLE_NOT_FOUND          
    5          EXPRESSION_NOT_SUPPORTED 
    6          INCORRECT_EXPRESSION     
    7          ILLEGAL_KIND             
    8          AREA_NOT_FOUND           
    9          INCONSISTENT_AREA        
    10          KIND_F_NO_FIELDS_LEFT    
    11          KIND_F_NO_FIELDS         
    12          TOO_MANY_FIELDS          
    13          DUP_FIELD                
    14          FIELD_NO_TYPE            
    15          FIELD_ILL_TYPE           
    16          DUP_EVENT_FIELD          
    17          NODE_NOT_IN_LDB          
    18          AREA_NO_FIELD            
    19          
    OTHERS                   20.      
    CALL FUNCTION 'FREE_SELECTIONS_DIALOG'        
    EXPORTING          SELECTION_ID    
    = LV_SELECTION_ID          
    TITLE           '选择'          FRAME_TEXT      
    '查询条件'          AS_WINDOW       
    ''        
    IMPORTING          WHERE_CLAUSES   
    = LT_WHERE        
    TABLES          FIELDS_TAB      
    = LT_FILELD_TAB        
    EXCEPTIONS          INTERNAL_ERROR  
    1          NO_ACTION       
    2          SELID_NOT_FOUND 
    3          ILLEGAL_STATUS  
    4          
    OTHERS          5.    
    ENDIF.    
    DATA LV_WHERE TYPE STRING.    
    READ TABLE LT_WHERE INTO DATA(LW_WHEREWITH KEY TABLENAME = P_TABLE.    
    IF SY-SUBRC 0.      
    LOOP AT LW_WHERE-WHERE_TAB INTO DATA(LW_WHERE2).        
    REPLACE ALL OCCURRENCES OF '(' IN LW_WHERE2-LINE WITH ' '.        
    REPLACE ALL OCCURRENCES OF ')' IN LW_WHERE2-LINE WITH ' '.        LV_WHERE 
    = LV_WHERE && LW_WHERE2-LINE.      
    ENDLOOP.      
    SELECT * FROM (P_TABLEINTO  CORRESPONDING FIELDS OF TABLE <FS_TABLE> WHERE (LV_WHERE).    
    ELSE.      
    SELECT * FROM (P_TABLEINTO CORRESPONDING FIELDS OF TABLE <FS_TABLE>.    
    ENDIF.
    *    LOOP AT T_FIELDCAT ASSIGNING <FS_FIELDS>.
    *      IF <FS_FIELDS>-KEY IS INITIAL.
    *        <FS_FIELDS>-EDIT = 'X'.
    *      ENDIF.
    *    ENDLOOP.    

    CALL SCREEN 9000.  
    ENDIF.
    *&---------------------------------------------------------------------*
    *& Form FRM_MB
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM FRM_MB .  
    DATA:LC_DEST  TYPE LOCALFILE"目标文件  
    DATA:LS_KEY   TYPE WWWDATATAB,       LV_SUBRC 
    TYPE SY-SUBRC.  
    DATA TS_FIELDCAT TYPE LVC_T_FCAT.  
    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'    
    EXPORTING      I_STRUCTURE_NAME       
    = P_TABLE    
    CHANGING      CT_FIELDCAT            
    = TS_FIELDCAT[]    
    EXCEPTIONS      INCONSISTENT_INTERFACE 
    1      PROGRAM_ERROR          
    2      
    OTHERS                 3.
    **STEP 2. 下载EXCEL模板  LS_KEY
    -RELID 'MI'.  LS_KEY
    -OBJID 'SDE4005'.  LC_DEST 
    = P_FILE.  
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'    
    EXPORTING      
    KEY         = LS_KEY      DESTINATION 
    = LC_DEST    
    IMPORTING      RC          
    = LV_SUBRC    
    CHANGING      TEMP        
    = LC_DEST.  

    IF LV_SUBRC <> 0.    
    MESSAGE E000(OOWITH '模板文件不存在或文件路径错误' DISPLAY LIKE 'E'.    
    EXIT.  
    ENDIF.
    *******数据定义*******  
    TYPE-POOLS:OLE2.         "OLE声明  
    "定义OLE变量  
    DATA:LO_EXCEL     TYPE OLE2_OBJECT,   "EXCEL应用程序       LO_WORKBOOKS 
    TYPE OLE2_OBJECT,   "EXCEL文件窗口       LO_WORKBOOK  
    TYPE OLE2_OBJECT,   "EXCEL文件       LO_SHEET     
    TYPE OLE2_OBJECT,   "EXCEL 文件的SHEET页       RANGE        
    TYPE OLE2_OBJECT,       CELL         
    TYPE OLE2_OBJECT.  
    DATA:LC_FILE   TYPE STRING,       LC_RESULT 
    TYPE C"标识: 空表示文件不存在;否则,表示存在
    *******初始化*******
    *******程序主体*******
    **Step 1. 判断文件是否存在  LC_FILE 
    = LC_DEST.  
    CLEAR LC_RESULT.  
    CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST    
    EXPORTING      FILE                 
    = LC_FILE    RECEIVING      RESULT               

    = LC_RESULT    
    EXCEPTIONS      CNTL_ERROR           
    1      ERROR_NO_GUI         
    2      WRONG_PARAMETER      
    3      NOT_SUPPORTED_BY_GUI 
    4      
    OTHERS               5.  
    IF LC_RESULT IS INITIAL.    
    MESSAGE E000(OOWITH '指定的文件不存在'.    
    EXIT.  
    ENDIF.  
    SELECT * FROM DD03T INTO TABLE @DATA(LI_DD03TWHERE TABNAME = @P_TABLE.  

    SELECT A~TABNAME, A~FIELDNAME, A~ROLLNAME, B~SCRTEXT_M     
    FROM DD03L AS A    
    LEFT JOIN DD04T AS B ON A~ROLLNAME = B~ROLLNAME    
    WHERE TABNAME = @P_TABLE    
    INTO TABLE @DATA(LI_DD).
    **Step 2. 打开EXCEL文件  
    CREATE OBJECT LO_EXCEL 'EXCEL.APPLICATION'.  
    CALL METHOD OF LO_EXCEL 'WORKBOOKS' = LO_WORKBOOKS.  
    CALL METHOD OF LO_WORKBOOKS 'OPEN' = LO_WORKBOOK EXPORTING #1 = LC_DEST.  
    CALL METHOD OF LO_WORKBOOK 'WORKSHEETS' = LO_SHEET EXPORTING #1 1.
    **  PERFORM FRM_EXPORT_FILL_HEADER.
    *  PERFORM FRM_EXPORT_FILL.
    *  CALL METHOD OF SHEET 'CELLS' = CELL EXPORTING #1 = 1 #2 = 1.
    *  CALL METHOD OF CELL 'SELECT'.
    *  SET PROPERTY OF EXCEL 'CUTCOPYMODE' = 0.
    **  SET PROPERTY OF WORKBOOK 'SAVED' = 1.  
    DATA LV_VALUE TYPE CHAR_CLSID.  
    DATA LV_I TYPE I.  
    SET PROPERTY OF LO_EXCEL 'VISIBLE' 1.  
    LOOP AT TS_FIELDCAT ASSIGNING <FS_FIELDS>.    LV_I 
    = SY-TABIX.    
    READ TABLE LI_DD03T INTO DATA(LW_DD03TWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.    
    IF SY-SUBRC 0.      LV_VALUE 
    = LW_DD03T-DDTEXT.    
    ELSE.      
    READ TABLE LI_DD INTO DATA(LW_DDWITH KEY FIELDNAME = <FS_FIELDS>-FIELDNAME.      
    IF SY-SUBRC 0.        LV_VALUE 
    = LW_DD-SCRTEXT_M.      
    ENDIF.    
    ENDIF.    
    CALL METHOD OF LO_EXCEL 'CELLS' = CELL    
    EXPORTING #1 1 #2 = LV_I.    
    SET PROPERTY OF CELL 'VALUE' = LV_VALUE.  
    ENDLOOP.
    *  CALL METHOD OF WORKBOOK 'SAVE'.  
    FREE OBJECT:    LO_EXCEL
    ,LO_WORKBOOKS,LO_WORKBOOK.   ",SHEET,RANGE,CELL.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Module STATUS_9000 OUTPUT
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    MODULE STATUS_9000 OUTPUT.  
    SET PF-STATUS '9000'.  
    DATA:LT_FIELDCAT TYPE LVC_T_FCAT WITH HEADER LINE.  "列表字段属性  
    DATA:LI_RECCNT TYPE INT4,                   "内表记录##       LC_TITLE  
    TYPE SLIS_ENTRY.             "报表标题  
    DATA:LS_LAYOUT       TYPE LVC_S_LAYO.


    *******初始化*******
    *******程序主体*******
    **STEP 1. 初始化ALV报表特性
    **STEP 1.2 初始化报表列属性  

    IF G_ALV IS INITIAL .    
    CREATE OBJECT G_CONTAINER      
    EXPORTING        CONTAINER_NAME 
    = V_CONTAINERNAME.    
    CREATE OBJECT G_ALV      
    EXPORTING        I_PARENT 
    = G_CONTAINER.    
    "设置字段属性    
    "设置布局    LS_LAYOUT
    -CWIDTH_OPT 'X'.  "清单格式优化模式:自动    LS_LAYOUT
    -ZEBRA =  'X'.    LS_LAYOUT
    -STYLEFNAME 'STYLE'.    "设定是否可编辑
    *---排除不需要的按钮    
    PERFORM FRM_EXCLUDE_9001 .    

    "设置显示格式    
    CALL METHOD G_ALV->SET_TABLE_FOR_FIRST_DISPLAY      
    EXPORTING        I_SAVE                        
    'A'        IS_LAYOUT                     
    = LS_LAYOUT        IT_TOOLBAR_EXCLUDING          
    = GT_EXCLUDE_9000      
    CHANGING        IT_OUTTAB                     
    = <FS_TABLE>        IT_FIELDCATALOG               
    = T_FIELDCAT[]      
    EXCEPTIONS        INVALID_PARAMETER_COMBINATION 
    1        PROGRAM_ERROR                 
    2        TOO_MANY_LINES                
    3        
    OTHERS                        4.    
    CREATE OBJECT EVENT_RECEIVER.    
    SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR G_ALV .    
    SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED_FINISHED FOR G_ALV .  
    ELSE .    

    DATA LW_STABLE  TYPE LVC_S_STBL.    LW_STABLE
    -ROW 'X'.    LW_STABLE
    -COL 'X'.
    *    CALL METHOD G_ALV->SET_FRONTEND_FIELDCATALOG
    *      EXPORTING
    *        IT_FIELDCATALOG = T_FIELDCAT.
    **    LS_LAYOUT-CWIDTH_OPT = 'X'.  "清单格式优化模式:自动
    *    CALL METHOD G_ALV->SET_FRONTEND_LAYOUT
    *      EXPORTING
    *        IS_LAYOUT = LS_LAYOUT.    
    CALL METHOD G_ALV->REFRESH_TABLE_DISPLAY      
    EXPORTING        IS_STABLE 
    = LW_STABLE      
    EXCEPTIONS        FINISHED  
    1        
    OTHERS    2.  




    ENDIF.
    ENDMODULE.
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_9000  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE USER_COMMAND_9000 INPUT.  
    CALL METHOD G_ALV->CHECK_CHANGED_DATA.  
    DATA:    SAVE_OK 
    TYPE SY-UCOMM,    LV_ROW  
    TYPE LVC_T_ROW.  
    FIELD-SYMBOLS <FS>.  
    DATA LW_ITAB TYPE REF TO CL_ABAP_TABLEDESCR.  
    DATA LW_STRUCT TYPE REF TO CL_ABAP_STRUCTDESCR.  
    DATA LW_COM_TAB TYPE CL_ABAP_STRUCTDESCR=>COMPONENT_TABLE WITH HEADER LINE.  
    DATA:LW_NEW_TABLE  TYPE REF TO DATA.  
    DATA:LW_NEW_LINE  TYPE REF TO DATA.  
    DATA LS_STYLE TYPE LVC_S_STYL.  
    DATA LS_STYLE2 TYPE LVC_T_STYL.  
    DATA LW_LINE TYPE REF TO DATA.  
    FIELD-SYMBOLS <FS_LINE2>.  
    FIELD-SYMBOLS <FS_WTABLE> TYPE STANDARD TABLE.  
    FIELD-SYMBOLS <FS_WLINE> TYPE ANY.  LW_STRUCT ?= CL_ABAP_TYPEDESCR
    =>DESCRIBE_BY_NAME( P_TABLE ).  LW_COM_TAB[] 

    = LW_STRUCT->GET_COMPONENTS).  LW_STRUCT 
    = CL_ABAP_STRUCTDESCR=>CREATE( LW_COM_TAB[] ).  LW_ITAB 
    = CL_ABAP_TABLEDESCR=>CREATE( LW_STRUCT ).  
    CREATE DATA LW_NEW_TABLE TYPE HANDLE LW_ITAB.  
    ASSIGN LW_NEW_TABLE->* TO <FS_WTABLE>.  
    CREATE DATA LW_NEW_LINE TYPE HANDLE LW_STRUCT.  
    ASSIGN LW_NEW_LINE->* TO <FS_WLINE>.  
    CREATE DATA LW_LINE TYPE HANDLE STRUCT.  
    ASSIGN LW_LINE->* TO <FS_LINE2>.  SAVE_OK 
    = OK_CODE.  
    CLEAR: OK_CODE.  
    CASE SAVE_OK.    
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.      
    LEAVE TO SCREEN 0.    
    WHEN 'ZSAVE'.      
    CLEAR LS_STYLE2[].      
    LOOP AT T_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDSS>).        
    IF <FS_FIELDSS>-KEY IS NOT INITIAL.          LS_STYLE
    -FIELDNAME = <FS_FIELDSS>-FIELDNAME.          LS_STYLE
    -STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.        
    ELSE.          LS_STYLE
    -FIELDNAME = <FS_FIELDSS>-FIELDNAME.          LS_STYLE
    -STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.        
    ENDIF.        
    INSERT LS_STYLE INTO TABLE LS_STYLE2.      
    ENDLOOP.      
    LOOP AT <FS_TABLE> ASSIGNING <FS_LINE2> .        
    ASSIGN COMPONENT 'STYLE' OF STRUCTURE <FS_LINE2> TO <FS>.        <FS> 
    = LS_STYLE2.      
    ENDLOOP.      
    MOVE-CORRESPONDING <FS_TABLE> TO <FS_WTABLE>.      
    MODIFY (P_TABLEFROM TABLE <FS_WTABLE>[].      
    IF SY-SUBRC 0.        
    COMMIT WORK.      
    ENDIF.    
    WHEN 'ZADD'.      


    CLEAR LS_STYLE2[].      
    LOOP AT T_FIELDCAT ASSIGNING <FS_FIELDSS>.        LS_STYLE
    -FIELDNAME = <FS_FIELDSS>-FIELDNAME.        LS_STYLE
    -STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.        
    INSERT LS_STYLE INTO TABLE LS_STYLE2.      
    ENDLOOP.      
    CLEAR <FS_LINE2>.      
    ASSIGN COMPONENT 'STYLE' OF STRUCTURE <FS_LINE2> TO <FS>.      <FS> 
    = LS_STYLE2.
    *      READ TABLE T_FIELDCAT ASSIGNING FIELD-SYMBOL(<FS_FIELDSS>) INDEX 1..
    *      ASSIGN COMPONENT 'EDIT' OF STRUCTURE <FS_FIELDSS> TO <FS>.
    *      <FS> = 'X'.
    *      MODIFY T_FIELDCAT  FROM <FS_FIELDSS> TRANSPORTING EDIT WHERE EDIT = ''.
    *      
    APPEND <FS_LINE2> TO <FS_TABLE>.    

    WHEN 'ZDEL'.      
    CALL METHOD G_ALV->GET_SELECTED_ROWS        
    IMPORTING          ET_INDEX_ROWS 
    = LV_ROW[].      
    IF LV_ROW[] IS INITIAL.        
    MESSAGE '请选择你要删除的数据' TYPE 'E' ."请选择你要修改的数据      
    ENDIF.      
    LOOP AT LV_ROW INTO DATA(GS_ROW).        
    READ TABLE <FS_TABLE> INTO <FS_LINE> INDEX GS_ROW-INDEX.        
    IF SY-SUBRC 0.          
    MOVE-CORRESPONDING <FS_LINE> TO <FS_WLINE>.          
    APPEND <FS_WLINE> TO <FS_WTABLE>.          
    DELETE TABLE <FS_TABLE> FROM <FS_LINE>.        
    ENDIF.      

    ENDLOOP.      

    DELETE (P_TABLEFROM TABLE <FS_WTABLE>[].      
    IF SY-SUBRC 0.        
    COMMIT WORK.      
    ENDIF.  
    ENDCASE.
    ENDMODULE.
    *&---------------------------------------------------------------------*
    *& Form FRM_EXCLUDE_9001
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *& -->  p1        text
    *& <--  p2        text
    *&---------------------------------------------------------------------*
    FORM FRM_EXCLUDE_9001 .  
    DATA: LS_EXCLUDE_9000 TYPE UI_FUNC.  LS_EXCLUDE_9000 

    = CL_GUI_ALV_GRID=>MC_FC_DETAIL.        "查看  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_REFRESH.       "刷新  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_MB_EXPORT.        "下载  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_MB_VARIANT.       "保存格式  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_MB_PASTE.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 

    = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_GRAPH.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_HELP.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_INFO.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_CHECK.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_AVERAGE.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_MAXIMUM.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_MINIMUM.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_PRINT.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_SUM.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.  LS_EXCLUDE_9000 
    = CL_GUI_ALV_GRID=>MC_FC_VIEWS.  
    APPEND LS_EXCLUDE_9000 TO GT_EXCLUDE_9000.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Form FRM_EVENT_DATA_CHANGED
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *&      --> ER_DATA_CHANGED
    *&---------------------------------------------------------------------*
    FORM FRM_EVENT_DATA_CHANGED  USING ER_DATA_CHANGED TYPE REF TO                                         CL_ALV_CHANGED_DATA_PROTOCOL
    .  
    DATA:LS_MOD_CELLS TYPE LVC_S_MODI,       TVALUE       
    TYPE STRING,        "变更行项目的值       LV_IDX_VALUE 
    TYPE STRING,        "读取的行项目的值       LV_TVALUE    
    TYPE STRING,        "是否变更字段的值       LV_ZSEQ      
    TYPE I,       LV_ZSEQ_TMP  
    TYPE I,       LV_MSG       
    TYPE STRING.        "错误文本 最终拼
    *--------------------------------------------------xander end   17.05.2012 16:29:06  

    LOOP AT ER_DATA_CHANGED->MT_GOOD_CELLS INTO LS_MOD_CELLS.    
    CALL METHOD ER_DATA_CHANGED->GET_CELL_VALUE      
    EXPORTING        I_ROW_ID    
    = LS_MOD_CELLS-ROW_ID        I_FIELDNAME 
    = LS_MOD_CELLS-FIELDNAME      
    IMPORTING        E_VALUE     
    = TVALUE.  
    ENDLOOP.

    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Form FRM_EVENT_CHANGED_FINISHED
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *&      --> E_MODIFIED
    *&      --> ET_GOOD_CELLS
    *&---------------------------------------------------------------------*
    FORM FRM_EVENT_CHANGED_FINISHED  USING    P_E_MODIFIED                                          P_ET_GOOD_CELLS
    .

    ENDFORM.
     
    METHOD ER_DATA_CHANGED->GET_CELL_VALUE      
    EXPORTING        I_ROW_ID    
    = LS_MOD_CELLS-ROW_ID        I_FIELDNAME 
    = LS_MOD_CELLS-FIELDNAME      
    IMPORTING        E_VALUE     
    = TVALUE.  
    ENDLOOP.

    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Form FRM_EVENT_CHANGED_FINISHED
    *&---------------------------------------------------------------------*
    *& text
    *&---------------------------------------------------------------------*
    *&      --> E_MODIFIED
    *&      --> ET_GOOD_CELLS
    *&---------------------------------------------------------------------*
    FORM FRM_EVENT_CHANGED_FINISHED  USING    P_E_MODIFIED                                          P_ET_GOOD_CELLS
    .

    ENDFORM.

  • 相关阅读:
    数据结构【图】—022邻接矩阵的深度和广度遍历
    第一百三十一天 how can I 坚持
    第一百三十天 how can I 坚持
    第一百二十九天 how can I坚持
    第一百二十八天 how can i 坚持
    第一百二十七天 how can I 坚持
    第一百二十六天 how can I 坚持
    第一百二十五天 how can I坚持
    第一百二十四天 how can I坚持
    第一百二十三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/coderfarmer/p/15897251.html
Copyright © 2020-2023  润新知