万能表批导

*&---------------------------------------------------------------------*
*& 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.

posted @ 2022-02-15 16:47  年轻的小菜鸟  阅读(80)  评论(0编辑  收藏  举报