SAP staff maintain

REPORT  Ztest_MAINTAIN  NO  STANDARD  PAGE HEADING .

*----------------------------------------------------------------------*
* TABLE DECLARATION
*----------------------------------------------------------------------*
TABLES  ZSTAFF ,
         SSCRFIELDS .
TYPE-POOLS :SLIS .
TYPE-POOLS VRM .
INCLUDE <ICON> .

*&---------------------------------------------------------------------*
* STRUCTURE DECLARATION
*&---------------------------------------------------------------------*
TYPES  BEGIN  OF T_STAFF .
         INCLUDE  STRUCTURE ZSTAFF .
TYPES  :  MARK  TYPE  C ,
          TEXT  TYPE CHAR10 ,
          ICON  TYPE CHAR10 ,
         NAME  TYPE CHAR20 ,
         BZ  TYPE CHAR20 .
TYPES  END  OF T_STAFF .

* Type : Download content
TYPES  BEGIN  OF T_DATA ,
          F_01 ( 40 )   TYPE  C ,
          F_02 ( 40 )   TYPE  C ,
          F_03 ( 40 )   TYPE  C ,
          F_04 ( 40 )   TYPE  C ,
          F_05 ( 40 )   TYPE  C ,
          F_06 ( 40 )   TYPE  C ,
          F_07 ( 40 )   TYPE  C ,
         END  OF T_DATA .

*&---------------------------------------------------------------------*
* INTERNAL TABLE DECLARATION
*&---------------------------------------------------------------------*
DATA  :
      I_LIST         TYPE VRM_VALUES ,
      ITAB_CATA_TK   TYPE LVC_T_FCAT ,
      I_STAFF        TYPE  STANDARD  TABLE  OF T_STAFF ,
      I_UPLOAD       TYPE  STANDARD  TABLE  OF ZSTAFF .

*&---------------------------------------------------------------------*
* WORK AREA DECLARATION
*&---------------------------------------------------------------------*
DATA  :
      WA_LIST   LIKE  LINE  OF I_LIST ,
      WA_STAFF  LIKE  LINE  OF I_STAFF ,
      WA_UPLOAD  LIKE  LINE  OF I_UPLOAD .

*&---------------------------------------------------------------------*
* VARIANT DECLARATION
*&---------------------------------------------------------------------*
DATA  :
* 功能代码
      OK_CODE  TYPE SY -UCOMM ,                                 "9000
      OK_CODE1  TYPE SY -UCOMM ,                                "9001
      OK_CODE2  TYPE SY -UCOMM ,                                "9002
      OK_CODE3  TYPE SY -UCOMM ,                                "9003
      OK_CODE4  TYPE SY -UCOMM ,                                "9004
* 容器名称
      GV_CNAME  TYPE SCRFNAME  VALUE  'CONTAINER' ,
* 容器对象
      GV_CONTAINER  TYPE  REF  TO CL_GUI_CUSTOM_CONTAINER ,
* ALV对象
      GV_ALV  TYPE  REF  TO CL_GUI_ALV_GRID ,
* ALV布局
      GV_LAYOUT     TYPE LVC_S_LAYO ,
* 仅显示标志
      GV_FLAG  TYPE  C ,
* 双击显示标志
      GV_DOUBLE  TYPE  C ,
* 上传文件路径
      GV_UPLOAD  TYPE LOCALFILE ,
* 下载到路径名
      GV_FILE  TYPE LOCALFILE ,
* 上传到表格中
      GV_TFLAG  TYPE  C ,
*记录数目
      GV_NUM  TYPE  I .

*&---------------------------------------------------------------------*
* Constant DECLARATION
*&---------------------------------------------------------------------*
CONSTANTS :
* File type for open
           C_MASK ( 20 )     TYPE  VALUE  ',*.XLSX,*.XLSX.' ,
* Mode type
           C_MODE_O       TYPE  VALUE  'O' ,
* CSV split
           C_SPLIT        TYPE  VALUE  ',' ,
* Defult fold
           C_FOLD ( 20 )     TYPE  VALUE  'D:\' ,
* Pop-up box name
           C_NAME ( 20 )     TYPE  VALUE  'File Select' ,
* File name
           C_FILE ( 20 )     TYPE  VALUE  'Temp.xlsx' .

*----------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER  DEFINITION  .
   PUBLIC  SECTION  .
     METHODS :
*      Double-click control
      HANDLE_DOUBLE_CLICK
       FOR  EVENT DOUBLE_CLICK  OF CL_GUI_ALV_GRID
       IMPORTING E_ROW E_COLUMN .
ENDCLASS .                     "lcl_event_handler DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER  IMPLEMENTATION  .
*  Handle Double Click
   METHOD HANDLE_DOUBLE_CLICK  .
     PERFORM HANDLE_DOUBLE_CLICK  USING E_ROW E_COLUMN .
   ENDMETHOD  .                     "handle_double_click
ENDCLASS  .                     "lcl_event_handler IMPLEMENTATION
DATA  GR_EVENT_HANDLER  TYPE  REF  TO LCL_EVENT_HANDLER .

*&---------------------------------------------------------------------*
* SELECTION SCREEN DECLARATION
*&---------------------------------------------------------------------*
*SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN  FUNCTION  KEY  2 .
SELECTION-SCREEN  FUNCTION  KEY  3 .

SELECTION-SCREEN  BEGIN  OF  BLOCK B1  WITH  FRAME  TITLE  TEXT -B01 .
SELECTION-SCREEN  BEGIN  OF  LINE .
SELECTION-SCREEN  POSITION  1 .
PARAMETERS  P_R1  RADIOBUTTON  GROUP G1  DEFAULT  'X'  USER-COMMAND UC .
SELECTION-SCREEN  COMMENT  2 ( 20 TEXT - 002   FOR  FIELD P_R1 .
SELECTION-SCREEN  POSITION  30 .
PARAMETERS  P_R2  RADIOBUTTON  GROUP G1 .
SELECTION-SCREEN  COMMENT  31 ( 20 TEXT - 003   FOR  FIELD P_R2 .
SELECTION-SCREEN  END  OF  LINE .

SELECTION-SCREEN  BEGIN  OF  LINE .
SELECTION-SCREEN  POSITION  1 .
PARAMETERS  P_R3  RADIOBUTTON  GROUP G1 .
SELECTION-SCREEN  COMMENT  2 ( 20 TEXT - 004   FOR  FIELD P_R3 .
SELECTION-SCREEN  POSITION  30 .
PARAMETERS  P_R4  RADIOBUTTON  GROUP G1 .
SELECTION-SCREEN  COMMENT  31 ( 20 TEXT - 005   FOR  FIELD P_R4 .
SELECTION-SCREEN  END  OF  LINE .

SELECTION-SCREEN  BEGIN  OF  LINE .
SELECTION-SCREEN  POSITION  1 .
PARAMETERS  P_R5  RADIOBUTTON  GROUP G1 .
SELECTION-SCREEN  COMMENT  2 ( 20 TEXT - 006   FOR  FIELD P_R5 .
SELECTION-SCREEN  POSITION  30 .
PARAMETERS  P_R6  RADIOBUTTON  GROUP G1 .
SELECTION-SCREEN  COMMENT  31 ( 20 TEXT - 007   FOR  FIELD P_R6 .
SELECTION-SCREEN  END  OF  LINE .

SELECTION-SCREEN  SKIP  1 .
PARAMETERS  P_NUM  TYPE ZSTAFF -ZNUM  .

SELECTION-SCREEN  SKIP  1 .
SELECT-OPTIONS  S_DATE  FOR ZSTAFF -EDATE  NO -EXTENSION MODIF  ID G1 ,
                 S_DEPT  FOR ZSTAFF -DEPT  NO -EXTENSION MODIF  ID G1 ,
                 S_INPUT  FOR ZSTAFF -ERDAT  NO -EXTENSION MODIF  ID G1 .
SELECTION-SCREEN  SKIP  1 .

PARAMETERS  P_CH  AS  CHECKBOX  DEFAULT  'X' MODIF  ID G1 .
SELECTION-SCREEN  END  OF  BLOCK B1 .

SELECTION-SCREEN  COMMENT  1 ( 82 TEXT - 030 .
SELECTION-SCREEN  SKIP  1 .
SELECTION-SCREEN  COMMENT  3 ( 82 TEXT - 031 .
SELECTION-SCREEN  SKIP  1 .
SELECTION-SCREEN  COMMENT  1 ( 82 TEXT - 032 .
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION .
  SSCRFIELDS -FUNCTXT_01  TEXT - 021 .
  SSCRFIELDS -FUNCTXT_02  TEXT - 022 .
  SSCRFIELDS -FUNCTXT_03  TEXT - 033 .
   CLEAR  :
        GV_NUM ,
        GV_FLAG .

*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT  SELECTION-SCREEN  OUTPUT .
   PERFORM SET_SELECT_SCREEN .

*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT  SELECTION-SCREEN .
*  DATA : LV_TCODE TYPE TSTC-TCODE.
*  LV_TCODE = 'ZPP125'.
*  CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
*    EXPORTING
*      TCODE  = LV_TCODE
*    EXCEPTIONS
*      OK     = 1
*      NOT_OK = 2
*      OTHERS = 3.
*  IF SY-SUBRC <> 1.
*    MESSAGE TEXT-034 TYPE 'S' DISPLAY LIKE 'E'.
*    STOP.
*  ENDIF.

   PERFORM FRM_CHECK_INPUT .
   IF SSCRFIELDS -UCOMM  'FC01' .
     CALL  SCREEN  9003  STARTING  AT  20  10 ENDING  AT  90  16 .
   ELSEIF SSCRFIELDS -UCOMM  'FC02' .
     CALL  SCREEN  9004  STARTING  AT  20  10 ENDING  AT  90  16 .
   ELSEIF SSCRFIELDS -UCOMM  'FC03' .
     PERFORM FRM_UPDATE_STAUTS .
   ENDIF .

*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION .

   IF P_R1  'X'
     OR P_R3  'X'
     OR P_R4  'X'
     OR P_R5  'X'
.
     IF P_NUM  IS  INITIAL .
       SET  CURSOR  FIELD  'P_NUM' .
       MESSAGE  TEXT - 009  TYPE  'S' DISPLAY  LIKE  'E' .
       EXIT .
     ENDIF .

     IF  STRLEN P_NUM  6 .
       SET  CURSOR  FIELD  'P_NUM' .
       MESSAGE  TEXT - 010  TYPE  'S' DISPLAY  LIKE  'E' .
       EXIT .
     ENDIF .

     IF P_R1  'X' .      "添加单条员工信息
       SELECT  SINGLE *
         FROM ZSTAFF
         WHERE ZNUM  P_NUM .
       IF SY -SUBRC  0 .
         SET  CURSOR  FIELD  'P_NUM' .
         MESSAGE  TEXT - 011  TYPE  'S' DISPLAY  LIKE  'E' .
         EXIT .
       ENDIF .
       CALL  SCREEN  9000 .
     ENDIF .

     IF P_R3  'X'  OR P_R4  'X' .    "显示单条员工信息
       IF P_R3  'X' .
        GV_FLAG  '' .
       ELSE .
        GV_FLAG  'X' .
       ENDIF .
       SELECT  SINGLE *
         FROM ZSTAFF
         INTO ZSTAFF
         WHERE ZNUM  P_NUM .
       IF SY -SUBRC <>  0 .
         SET  CURSOR  FIELD  'P_NUM' .
         MESSAGE  TEXT - 017  TYPE  'S' DISPLAY  LIKE  'E' .
       ELSE .
         CALL  SCREEN  9000 .
       ENDIF .
     ENDIF .

     IF P_R5  'X' .    "删除单条员工信息
       PERFORM FRM_DEL_RECORD .
     ENDIF .

*  ELSEIF P_R5 = 'X'.
*    PERFORM FRM_DEL_RECORD.
   ELSEIF P_R6  'X' .
     PERFORM FRM_GET_DATA .
     IF I_STAFF  IS  NOT  INITIAL .
       CALL  SCREEN  9001 .
     ELSE .
       MESSAGE  TEXT - 012  TYPE  'S' DISPLAY  LIKE  'E' .
       EXIT .
     ENDIF .
   ELSEIF P_R2  'X' .
     CALL  SCREEN  9002 .
   ENDIF .
*&---------------------------------------------------------------------*
* END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION .
*&---------------------------------------------------------------------*
*&      Form  SET_SELECT_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_SELECT_SCREEN  .
   LOOP  AT  SCREEN .
     IF P_R1  'X'  OR P_R3  'X'  OR P_R4  'X'  OR P_R5  'X' .
       IF  SCREEN -GROUP1  'G1' .
         SCREEN - INPUT  0 .
       ELSE .
         SCREEN - INPUT  1 .
       ENDIF .
       MODIFY  SCREEN .
     ELSEIF  P_R2  'X' .
       IF  SCREEN -GROUP1  'G1'  OR  SCREEN -NAME  'P_NUM' .
         SCREEN - INPUT  0 .
       ELSE .
         SCREEN - INPUT  1 .
       ENDIF .
       MODIFY  SCREEN .
     ENDIF .
   ENDLOOP .
ENDFORM .                     " SET_SELECT_SCREEN
*&---------------------------------------------------------------------*
*&      Module  STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*       9000 PBO
*----------------------------------------------------------------------*
MODULE STATUS_9000  OUTPUT .
   IF P_R1  'X' .
     SET  PF-STATUS  '9000' .
     SET  TITLEBAR  'TITLE'  WITH  TEXT - 002 .
     LOOP  AT  SCREEN .
       IF  SCREEN -GROUP1  'GP2' .
         SCREEN - INPUT  0 .
       ENDIF .
       MODIFY  SCREEN .
     ENDLOOP .
   ELSEIF P_R3  'X' .
     SET  PF-STATUS  '9000' .
     SET  TITLEBAR  'TITLE'  WITH  TEXT - 001 .
   ELSEIF P_R4  'X' .
     SET  PF-STATUS  '9000'  EXCLUDING  'SAVE' .
     SET  TITLEBAR  'TITLE'  WITH  TEXT - 018 .
   ENDIF .

* set the initial value
   PERFORM FRM_SET_INITIAL .
* set the list value
   PERFORM SET_LIST_VALUE .
ENDMODULE .                  " STATUS_9000  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_INITIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_INITIAL  .
   IF ZSTAFF -ZNUM  IS  INITIAL .
    ZSTAFF -ZNUM  P_NUM .
   ENDIF .
   LOOP  AT  SCREEN  .
     IF P_R4  'X'  OR GV_DOUBLE  'X' .
       IF  SCREEN -GROUP1  'GP1'  OR  SCREEN -GROUP1  'GP2'  .
         SCREEN - INPUT  0 .
       ELSE .
         SCREEN - INPUT  1 .
       ENDIF .
       MODIFY  SCREEN  .
     ENDIF .
   ENDLOOP .
ENDFORM .                     " FRM_SET_INITIAL
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       9000 PAI
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000  INPUT .
   CASE OK_CODE .
*    WHEN 'BACK' OR 'EXIT'.
*      LEAVE TO SCREEN 0.
*    WHEN 'CANCEL'.
*      LEAVE PROGRAM.
     WHEN  'SAVE' .
       PERFORM FRM_SAVE_INFO .
     WHEN  OTHERS .
   ENDCASE .
   CLEAR  OK_CODE .
ENDMODULE .                  " USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*&      Form  SET_LIST_VALUE
*&---------------------------------------------------------------------*
*       设置部门下拉框的值
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_LIST_VALUE  .
   DATA :
        LV_I_DOMTAB   TYPE  STANDARD  TABLE  OF DD07V ,
        LV_WA_DOMTAB  TYPE DD07V .

   IF I_LIST  IS  INITIAL .
     CALL  FUNCTION  'DD_DOMVALUES_GET'
       EXPORTING
        DOMNAME               'ZDEPT'
        TEXT                  'X'
       LANGU                 SY -LANGU
*   BYPASS_BUFFER        = ' '
* IMPORTING
*   RC                   =
       TABLES
        DD07V_TAB             LV_I_DOMTAB
* EXCEPTIONS
*   WRONG_TEXTFLAG       = 1
*   OTHERS               = 2
               .
     IF SY -SUBRC  0 .
       LOOP  AT LV_I_DOMTAB  INTO LV_WA_DOMTAB .
         CLEAR WA_LIST .
        WA_LIST - KEY  LV_WA_DOMTAB -DOMVALUE_L .
        WA_LIST - TEXT  LV_WA_DOMTAB -DDTEXT .
         APPEND WA_LIST  TO I_LIST .
       ENDLOOP .
     ENDIF .

   ENDIF .

   CALL  FUNCTION  'VRM_SET_VALUES'
     EXPORTING
       ID                     'ZSTAFF-DEPT'
      VALUES                 I_LIST
*   EXCEPTIONS
*     ID_ILLEGAL_NAME       = 1
*     OTHERS                = 2
             .
   IF SY -SUBRC <>  0 .
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF .
ENDFORM .                     " SET_LIST_VALUE
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
*       选择屏幕校验
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CHECK_INPUT  .
*  IF P_R1 = 'X' OR P_R3 = 'X' OR P_R4 = 'X' OR P_R5 = 'X'.
*    IF P_NUM IS INITIAL.
*      SET CURSOR FIELD 'P_NUM'.
*      MESSAGE TEXT-009 TYPE 'S' DISPLAY LIKE 'E'.
*      GV_STATUS = 'X'.
*      EXIT.
*    ENDIF.
*
*    IF STRLEN( P_NUM ) < 6.
*      SET CURSOR FIELD 'P_NUM'.
*      MESSAGE TEXT-010 TYPE 'S' DISPLAY LIKE 'E'.
*      GV_STATUS = 'X'.
*      EXIT.
*    ENDIF.
*
*    SELECT SINGLE *
*      FROM ZSTAFF
*      WHERE ZNUM = P_NUM.
*    IF SY-SUBRC = 0.
*      SET CURSOR FIELD 'P_NUM'.
*      MESSAGE TEXT-011 TYPE 'S' DISPLAY LIKE 'E'.
*      GV_STATUS = 'X'.
*      EXIT.
*    ENDIF.
*  ENDIF.
ENDFORM .                     " FRM_CHECK_INPUT
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE  EXIT  INPUT .
   DATA  LV_RETURN  TYPE  C .                                   "#EC *
   CLEAR  LV_RETURN .
* Exit the screen
   IF OK_CODE   'CANCEL' .
     IF GV_FLAG  'X' .
       LEAVE  PROGRAM .
     ELSE .
       CALL  FUNCTION  'POPUP_TO_CONFIRM_STEP'                  "#EC *
        EXPORTING
         DEFAULTOPTION   'Y'
         TEXTLINE1       TEXT -I01
         TITEL           TEXT -I02
         CANCEL_DISPLAY  ''
        IMPORTING
         ANSWER          LV_RETURN .
       IF LV_RETURN  'J' .
         LEAVE  PROGRAM .
       ENDIF .
     ENDIF .
* Back to the previous screen
   ELSEIF OK_CODE  'BACK'  OR OK_CODE  'EXIT' .
     IF GV_FLAG  'X' .
       LEAVE  TO  SCREEN  0 .
     ELSE .
       CALL  FUNCTION  'POPUP_TO_CONFIRM_STEP'                  "#EC *
         EXPORTING
          DEFAULTOPTION   'Y'
          TEXTLINE1       TEXT -I01
          TITEL           TEXT -I02
          CANCEL_DISPLAY  ''
         IMPORTING
          ANSWER          LV_RETURN .
       IF LV_RETURN  'J' .
         LEAVE  TO  SCREEN  0 .
       ENDIF .
     ENDIF .
   ENDIF .
   CLEAR  OK_CODE .
ENDMODULE .                  " EXIT  INPUT
*&---------------------------------------------------------------------*
*&      Module  INITIAL_CONTAINER  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE INITIAL_CONTAINER  OUTPUT .
   IF GV_CONTAINER  IS  INITIAL .
     PERFORM CREATE_ALV_CONTAINER .
   ENDIF .
   PERFORM FRM_SET_ALV .
ENDMODULE .                  " INITIAL_CONTAINER  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  CREATE_ALV_CONTAINER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_ALV_CONTAINER  .
   IF  NOT GV_CONTAINER  IS  INITIAL .
     CALL  METHOD GV_CONTAINER -> FREE
       EXCEPTIONS
        CNTL_SYSTEM_ERROR  1
        CNTL_ERROR         2 .
*    IF SY-SUBRC <> 0.
*    ENDIF.
     CLEAR GV_CONTAINER .
     CLEAR GV_ALV .
   ENDIF .
   CREATE OBJECT GV_CONTAINER
     EXPORTING
      CONTAINER_NAME               GV_CNAME
     EXCEPTIONS
      CNTL_ERROR                   1
      CNTL_SYSTEM_ERROR            2
      CREATE_ERROR                 3
      LIFETIME_ERROR               4
      LIFETIME_DYNPRO_DYNPRO_LINK  5 .
ENDFORM .                     " CREATE_ALV_CONTAINER
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_ALV  .
   IF GV_ALV  IS  INITIAL .
     CREATE OBJECT GV_ALV
       EXPORTING
        I_PARENT           GV_CONTAINER
       EXCEPTIONS
        ERROR_CNTL_CREATE  1
        ERROR_CNTL_INIT    2
        ERROR_CNTL_LINK    3
        ERROR_DP_CREATE    4 .

     PERFORM FRM_ALV_LIST .

*   display alv
     CALL  METHOD GV_ALV ->SET_TABLE_FOR_FIRST_DISPLAY
       EXPORTING
        IS_LAYOUT                      GV_LAYOUT
       CHANGING
        IT_OUTTAB                      I_STAFF
        IT_FIELDCATALOG                ITAB_CATA_TK
       EXCEPTIONS
        INVALID_PARAMETER_COMBINATION  1
        PROGRAM_ERROR                  2
        TOO_MANY_LINES                 3
         OTHERS                         4 .
*    --Creating an instance for the event handler
     CREATE OBJECT GR_EVENT_HANDLER  .
*    --Registering handler methods to handle ALV Grid events
     SET  HANDLER GR_EVENT_HANDLER ->HANDLE_DOUBLE_CLICK  FOR GV_ALV .
   ELSE .
*    PERFORM FRM_REFRESH_DATA.
     CALL  METHOD GV_ALV ->REFRESH_TABLE_DISPLAY ) .
   ENDIF .
ENDFORM .                     " FRM_SET_ALV
*&---------------------------------------------------------------------*
*&      Form  FRM_ALV_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_ALV_LIST  .
* set fieldcatalog
   PERFORM FRM_SET_FIELDCAT .
* set layout
   PERFORM FRM_SET_LAYOUT .
ENDFORM .                     " FRM_ALV_LIST
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT  .
   DATA :
      LV_WA_FCAT  TYPE LVC_S_FCAT .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'ZNUM' .
  LV_WA_FCAT -COLTEXT  TEXT -H01 .
  LV_WA_FCAT -OUTPUTLEN  10 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'ZNAME' .
  LV_WA_FCAT -COLTEXT  TEXT -H02 .
  LV_WA_FCAT -OUTPUTLEN  10 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'ZPOST' .
  LV_WA_FCAT -COLTEXT  TEXT -H03 .
  LV_WA_FCAT -OUTPUTLEN  15 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'EDATE' .
  LV_WA_FCAT -COLTEXT  TEXT -H04 .
  LV_WA_FCAT -OUTPUTLEN  10 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'ZID' .
  LV_WA_FCAT -COLTEXT  TEXT -H05 .
  LV_WA_FCAT -OUTPUTLEN  20 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'REMARK' .
  LV_WA_FCAT -COLTEXT  TEXT -H06 .
  LV_WA_FCAT -OUTPUTLEN  25 .
  LV_WA_FCAT -NO_OUT  'X' .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'NAME' .
  LV_WA_FCAT -COLTEXT  TEXT -H07 .
  LV_WA_FCAT -OUTPUTLEN  15 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'BZ' .
  LV_WA_FCAT -COLTEXT  TEXT -H10 .
  LV_WA_FCAT -OUTPUTLEN  10 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'ICON' .
  LV_WA_FCAT -COLTEXT  TEXT -H09 .
  LV_WA_FCAT -OUTPUTLEN  4 .
  LV_WA_FCAT - ICON  'X' .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .

   CLEAR LV_WA_FCAT .
  LV_WA_FCAT -FIELDNAME  'TEXT' .
  LV_WA_FCAT -COLTEXT  TEXT -H08 .
  LV_WA_FCAT -OUTPUTLEN  8 .
   APPEND LV_WA_FCAT  TO ITAB_CATA_TK .
ENDFORM .                     " FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SET_LAYOUT  .
  GV_LAYOUT -SEL_MODE  'D' .
  GV_LAYOUT -ZEBRA  'X'  .
*  GV_LAYOUT-CWIDTH_OPT = 'X'.
ENDFORM .                     " FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA  .
   DATA :
        LV_CHAR  TYPE CHAR50 ,
        LV_I_DOMTAB   TYPE  STANDARD  TABLE  OF DD07V ,
        LV_WA_DOMTAB  TYPE DD07V .

   CALL  FUNCTION  'DD_DOMVALUES_GET'
     EXPORTING
      DOMNAME               'ZDEPT'
      TEXT                  'X'
     LANGU                 SY -LANGU
*   BYPASS_BUFFER        = ' '
* IMPORTING
*   RC                   =
     TABLES
      DD07V_TAB             LV_I_DOMTAB
* EXCEPTIONS
*   WRONG_TEXTFLAG       = 1
*   OTHERS               = 2
             .
   IF SY -SUBRC  0 .
     LOOP  AT LV_I_DOMTAB  INTO LV_WA_DOMTAB .
       CLEAR WA_LIST .
      WA_LIST - KEY  LV_WA_DOMTAB -DOMVALUE_L .
      WA_LIST - TEXT  LV_WA_DOMTAB -DDTEXT .
       APPEND WA_LIST  TO I_LIST .
     ENDLOOP .
   ENDIF .

   IF P_NUM  IS  NOT  INITIAL .
     IF P_CH  'X' .
       SELECT *
         FROM ZSTAFF
         INTO CORRESPONDING  FIELDS  OF  TABLE I_STAFF
         WHERE EDATE  IN S_DATE
           AND DEPT  IN S_DEPT
           AND ERDAT  IN S_INPUT
           AND ZNUM  P_NUM
           AND STATUS  '' .

     ELSE .
       SELECT *
         FROM ZSTAFF
         INTO CORRESPONDING  FIELDS  OF  TABLE I_STAFF
         WHERE EDATE  IN S_DATE
           AND DEPT  IN S_DEPT
           AND ERDAT  IN S_INPUT
           AND ZNUM  P_NUM .
     ENDIF .
   ELSE .
     IF P_CH  'X' .
       SELECT *
         FROM ZSTAFF
         INTO CORRESPONDING  FIELDS  OF  TABLE I_STAFF
         WHERE EDATE  IN S_DATE
           AND DEPT  IN S_DEPT
           AND ERDAT  IN S_INPUT
           AND STATUS  '' .
     ELSE .
       SELECT *
         FROM ZSTAFF
         INTO CORRESPONDING  FIELDS  OF  TABLE I_STAFF
         WHERE EDATE  IN S_DATE
           AND DEPT  IN S_DEPT
           AND ERDAT  IN S_INPUT .
     ENDIF .
   ENDIF .

   LOOP  AT I_STAFF  INTO WA_STAFF .
     CLEAR LV_CHAR .
     READ  TABLE LV_I_DOMTAB  INTO LV_WA_DOMTAB
       WITH  KEY DOMVALUE_L  WA_STAFF -DEPT .
     IF SY -SUBRC  0 .
      WA_STAFF -NAME  LV_WA_DOMTAB -DDTEXT .
     ENDIF .
     IF WA_STAFF -STATUS  '' .
      WA_STAFF - TEXT  TEXT -S01 .
      WA_STAFF - ICON  ICON_LED_GREEN .
     ELSE .
      WA_STAFF - TEXT  TEXT -S02 .
      WA_STAFF - ICON  ICON_LED_RED .
     ENDIF .
     IF WA_STAFF -LEADER  'X' .
      WA_STAFF -BZ  TEXT -S03 .
     ELSE .
      WA_STAFF -BZ  '' .
     ENDIF .
     MODIFY I_STAFF  FROM WA_STAFF .
   ENDLOOP .

   DESCRIBE  TABLE I_STAFF  LINES GV_NUM .
ENDFORM .                     " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Module  STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9001  OUTPUT .
   SET  PF-STATUS  '9001' .
   IF P_CH  'X' .
     SET  TITLEBAR  'TITLE'  WITH  TEXT - 007  '-'  '已激活' .
   ELSE .
     SET  TITLEBAR  'TITLE'  WITH  TEXT - 007  '-'  '全部' .
   ENDIF .
ENDMODULE .                  " STATUS_9001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001  INPUT .
   DATA  :
         LT_ROW  TYPE  LVC_T_ROID ,                            "#EC *
         LS_ROW  TYPE  LVC_S_ROID .                            "#EC *

   CASE OK_CODE1 .
     WHEN  'BACK'  OR  'EXIT' .
       LEAVE  TO  SCREEN  0 .
     WHEN  'CANCEL' .
       LEAVE  PROGRAM .
     WHEN  'DELALL' .
       PERFORM FRM_DEL_SEL .
     WHEN  OTHERS .
   ENDCASE .
   CLEAR  OK_CODE1 .
ENDMODULE .                  " USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_DEL_RECORD
*&---------------------------------------------------------------------*
*       删除记录
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DEL_RECORD  .
   DATA  :
      LV_ANSWER  TYPE  C ,
      LV_CHAR01  TYPE CHAR255 ,
      LV_CHAR02  TYPE CHAR255 ,
      LV_CHAR03  TYPE CHAR255 .

   CLEAR  WA_STAFF .
   SELECT  SINGLE *
     INTO WA_STAFF
     FROM ZSTAFF
     WHERE ZNUM  P_NUM .
   IF SY -SUBRC  0 .
     CONCATENATE  TEXT -H02  ':' WA_STAFF -ZNAME
       INTO LV_CHAR01  SEPARATED  BY SPACE .
     CONCATENATE  TEXT -H03  ':' WA_STAFF -ZPOST
       INTO LV_CHAR02  SEPARATED  BY SPACE .
     CONCATENATE  TEXT -H04  ':' WA_STAFF -EDATE+0 ( 4 '年'
      WA_STAFF -EDATE+4 ( 2 '月' WA_STAFF -EDATE+6 ( 2 '日'
       INTO LV_CHAR03  SEPARATED  BY SPACE .
   ELSE .
     MESSAGE  TEXT - 017  TYPE  'S' DISPLAY  LIKE  'E' .
     EXIT .
   ENDIF .
   CALL  FUNCTION  'POPUP_TO_CONFIRM_WITH_MESSAGE'            "#EC FB_OLDED
       EXPORTING
      DEFAULTOPTION   'N'
        TEXTLINE1       TEXT - 014
*     TEXTLINE2      = ' '
        DIAGNOSETEXT1   LV_CHAR01
        DIAGNOSETEXT2   LV_CHAR02
        DIAGNOSETEXT3   LV_CHAR03
        TITEL           TEXT - 015
*     START_COLUMN   = 25
*     START_ROW      = 6
        CANCEL_DISPLAY  ''
       IMPORTING
        ANSWER          LV_ANSWER .

   CHECK LV_ANSWER  'J' .
   DELETE ZSTAFF  FROM WA_STAFF .
   IF SY -SUBRC  0 .
     MESSAGE  TEXT - 013  TYPE  'S' .
     COMMIT  WORK .
   ENDIF .
ENDFORM .                     " FRM_DEL_RECORD
*&---------------------------------------------------------------------*
*&      Form  FRM_SAVE_INFO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SAVE_INFO  .
   CALL  FUNCTION  'ENQUEUE_EZSTAFF'
    EXPORTING
     MODE_ZSTAFF           'E'
     MANDT                 SY -MANDT
     ZNUM                  ZSTAFF -ZNUM
*     X_ZNUM               = ' '
*     _SCOPE               = '2'
*     _WAIT                = ' '
*     _COLLECT             = ' '
    EXCEPTIONS
     FOREIGN_LOCK          1
     SYSTEM_FAILURE        2
      OTHERS                3
             .
   IF SY -SUBRC <>  0 .
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF .
   IF ZSTAFF  IS  NOT  INITIAL .
    ZSTAFF -ERDAT  SY -DATUM .
    ZSTAFF -UZEIT  SY -UZEIT .
    ZSTAFF -UNAME  SY -UNAME .
   ENDIF .
*  IF GV_STATUS =  ''.
*    ZSTAFF-STATUS = ''.
*  ELSE.
*    ZSTAFF-STATUS = 'X'.
*  ENDIF.

   MODIFY ZSTAFF  FROM ZSTAFF .
   IF SY -SUBRC  0 .
     CALL  FUNCTION  'DEQUEUE_EZSTAFF'
      EXPORTING
       MODE_ZSTAFF        'E'
       MANDT              SY -MANDT
       ZNUM               ZSTAFF -ZNUM
*       X_ZNUM            = ' '
*       _SCOPE            = '3'
*       _SYNCHRON         = ' '
*       _COLLECT          = ' '
               .
     MESSAGE  TEXT - 008  TYPE  'S' .
     COMMIT  WORK .
     LEAVE  TO  SCREEN  0 .
   ELSE .
     CALL  FUNCTION  'DEQUEUE_EZSTAFF'
      EXPORTING
       MODE_ZSTAFF        'E'
       MANDT              SY -MANDT
       ZNUM               ZSTAFF -ZNUM
*       X_ZNUM            = ' '
*       _SCOPE            = '3'
*       _SYNCHRON         = ' '
*       _COLLECT          = ' '
               .
     MESSAGE  TEXT - 019  TYPE  'I' .
     ROLLBACK  WORK .
     LEAVE  TO  SCREEN  0 .
   ENDIF .
ENDFORM .                     " FRM_SAVE_INFO
*&---------------------------------------------------------------------*
*&      Module  STATUS_9002  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9002  OUTPUT .
   SET  PF-STATUS  '9000' .
   SET  TITLEBAR  'TITLE'  WITH  TEXT - 003 .
   PERFORM SET_LISTBOX_VALUE .
ENDMODULE .                  " STATUS_9002  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9002  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9002  INPUT .
   CASE OK_CODE2 .
     WHEN  'BACK'  OR  'EXIT' .
       IF I_STAFF  IS  NOT  INITIAL .
         CALL  FUNCTION  'POPUP_TO_CONFIRM_STEP'                "#EC *
         EXPORTING
          DEFAULTOPTION   'Y'
          TEXTLINE1       TEXT -I01
          TITEL           TEXT -I02
          CANCEL_DISPLAY  ''
         IMPORTING
          ANSWER          LV_RETURN .
         IF LV_RETURN  'J' .
           LEAVE  TO  SCREEN  0 .
         ENDIF .
       ELSE .
         LEAVE  TO  SCREEN  0 .
       ENDIF .
     WHEN  'CANCEL' .
       IF I_STAFF  IS  NOT  INITIAL .
         CALL  FUNCTION  'POPUP_TO_CONFIRM_STEP'                "#EC *
          EXPORTING
           DEFAULTOPTION   'Y'
           TEXTLINE1       TEXT -I01
           TITEL           TEXT -I02
           CANCEL_DISPLAY  ''
          IMPORTING
           ANSWER          LV_RETURN .
         IF LV_RETURN  'J' .
           LEAVE  PROGRAM .
         ENDIF .
       ELSE .
         LEAVE  PROGRAM .
       ENDIF .
     WHEN  'SAVE' .
* 批量保存
       PERFORM FRM_SAVE_RECORDS .
     WHEN  'UP' .
* 上传至Table中
      GV_TFLAG  'X' .
       CALL  SCREEN  9004  STARTING  AT  20  10 ENDING  AT  90  16 .
     WHEN  OTHERS .
   ENDCASE .
   CLEAR  OK_CODE2 .
ENDMODULE .                  " USER_COMMAND_9002  INPUT

*&SPWizard: Data incl. inserted by SP Wizard. DO NOT CHANGE THIS LINE!
INCLUDE ZSTAFF_MAINTAIN_TBL  .
*&---------------------------------------------------------------------*
*&      Form  FRM_SAVE_RECORDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_SAVE_RECORDS  .
   IF I_STAFF  IS  NOT  INITIAL .
     INSERT ZSTAFF  FROM  TABLE I_STAFF ACCEPTING DUPLICATE KEYS .
     IF SY -SUBRC  0 .
       MESSAGE  TEXT - 008  TYPE  'S' .
       COMMIT  WORK .
       LEAVE  TO  SCREEN  0 .
     ELSE .
       MESSAGE  TEXT - 019  TYPE  'I' .
       ROLLBACK  WORK .
       LEAVE  TO  SCREEN  0 .
     ENDIF .
   ELSE .
     MESSAGE  TEXT - 020  TYPE  'I' .
   ENDIF .
ENDFORM .                     " FRM_SAVE_RECORDS
*&---------------------------------------------------------------------*
*&      Form  SET_LISTBOX_VALUE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_LISTBOX_VALUE  .
   DATA :
          LV_I_DOMTAB   TYPE  STANDARD  TABLE  OF DD07V ,
          LV_WA_DOMTAB  TYPE DD07V .

   IF I_LIST  IS  INITIAL .
     CALL  FUNCTION  'DD_DOMVALUES_GET'
       EXPORTING
        DOMNAME               'ZDEPT'
        TEXT                  'X'
       LANGU                 SY -LANGU
*   BYPASS_BUFFER        = ' '
* IMPORTING
*   RC                   =
       TABLES
        DD07V_TAB             LV_I_DOMTAB
* EXCEPTIONS
*   WRONG_TEXTFLAG       = 1
*   OTHERS               = 2
               .
     IF SY -SUBRC  0 .
       LOOP  AT LV_I_DOMTAB  INTO LV_WA_DOMTAB .
         CLEAR WA_LIST .
        WA_LIST - KEY  LV_WA_DOMTAB -DOMVALUE_L .
        WA_LIST - TEXT  LV_WA_DOMTAB -DDTEXT .
         APPEND WA_LIST  TO I_LIST .
       ENDLOOP .
     ENDIF .

   ENDIF .

   CALL  FUNCTION  'VRM_SET_VALUES'
     EXPORTING
       ID                     'WA_STAFF-DEPT'
      VALUES                 I_LIST
*   EXCEPTIONS
*     ID_ILLEGAL_NAME       = 1
*     OTHERS                = 2
             .
   IF SY -SUBRC <>  0 .
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF .
ENDFORM .                     " SET_LISTBOX_VALUE

*&---------------------------------------------------------------------*
*&      Form  HANDLE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       Double Click method
*----------------------------------------------------------------------*
*      -->P_E_ROW  text
*      -->P_E_COLUMN  text
*----------------------------------------------------------------------*
FORM HANDLE_DOUBLE_CLICK   USING FU_ROW  FU_COLUMN .         "#EC * "#EC *
   READ  TABLE I_STAFF  INTO WA_STAFF  INDEX FU_ROW .
   SELECT  SINGLE *
     FROM ZSTAFF
     INTO ZSTAFF
     WHERE ZNUM  WA_STAFF -ZNUM .
  GV_DOUBLE  'X' .
  GV_FLAG  'X' .
   CALL  SCREEN  9000 .
ENDFORM .                     " HANDLE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*&      Module  STATUS_9003  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9003  OUTPUT .
   SET  PF-STATUS  '9003' .
   SET  TITLEBAR  'TITLE'  WITH  TEXT - 023 .
ENDMODULE .                  " STATUS_9003  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9003  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9003  INPUT .
   CASE OK_CODE3 .
     WHEN  'CANCEL'  OR  'CANC' .
       LEAVE  TO  SCREEN  0 .
     WHEN  'DOWN' .
       PERFORM FRM_CHECK_FOLD .
       PERFORM FRM_DOWNLOAD_EXCEL .
     WHEN  OTHERS .
   ENDCASE .
   CLEAR  OK_CODE3 .
ENDMODULE .                  " USER_COMMAND_9003  INPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_FOLD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CHECK_FOLD  .
   DATA :
* Return value
        LV_RETURN       TYPE  C .

* Check file path for downloading valid
   CALL  FUNCTION  'WS_QUERY'
     EXPORTING
      FILENAME  GV_FILE
      QUERY     'DE'
     IMPORTING
       RETURN    LV_RETURN
     EXCEPTIONS                                               "#EC *
       OTHERS    1 .
   IF LV_RETURN <>  '1' .
     SET  CURSOR  FIELD  'GV_FILE' .
     MESSAGE  TEXT - 028  TYPE  'I' .
   ELSE .
     CONCATENATE GV_FILE C_FILE  INTO GV_FILE .
   ENDIF .

ENDFORM .                     " FRM_CHECK_FOLD
*&---------------------------------------------------------------------*
*&      Form  FRM_DOWNLOAD_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DOWNLOAD_EXCEL  .
   DATA :
      LV_STR     TYPE CHAR255 ,
      LV_RETURN  TYPE  I ,
      LV_RESULT  TYPE  C ,
      LV_FILENAME1  TYPE STRING ,
      LV_FILENAME   TYPE LOCALFILE ,
      I_DOWN_DATA   TYPE  STANDARD  TABLE  OF T_DATA ,
      LV_WA_DATA    TYPE T_DATA .

  LV_FILENAME  GV_FILE .

* set excel head name
   CLEAR LV_WA_DATA .
   REFRESH I_DOWN_DATA .
  LV_WA_DATA -F_01  TEXT -H01 .
  LV_WA_DATA -F_02  TEXT -H02 .
  LV_WA_DATA -F_03  TEXT -H03 .
  LV_WA_DATA -F_04  TEXT -H04 .
  LV_WA_DATA -F_05  TEXT -H05 .
  LV_WA_DATA -F_06  TEXT -H06 .
  LV_WA_DATA -F_07  TEXT -H07 .
   APPEND LV_WA_DATA  TO I_DOWN_DATA .

  LV_FILENAME1  LV_FILENAME .
   CALL  METHOD CL_GUI_FRONTEND_SERVICES =>FILE_EXIST
     EXPORTING
      FILE                  LV_FILENAME1
    RECEIVING
      RESULT                LV_RESULT
     EXCEPTIONS
      CNTL_ERROR            1
      ERROR_NO_GUI          2
      WRONG_PARAMETER       3
      NOT_SUPPORTED_BY_GUI  4
       OTHERS                5 .
   IF LV_RESULT  'X' .
     CALL  METHOD CL_GUI_FRONTEND_SERVICES =>FILE_DELETE
       EXPORTING
        FILENAME              LV_FILENAME1
       CHANGING
        RC                    LV_RETURN
       EXCEPTIONS
        FILE_DELETE_FAILED    1
        CNTL_ERROR            2
        ERROR_NO_GUI          3
        FILE_NOT_FOUND        4
        ACCESS_DENIED         5
        UNKNOWN_ERROR         6
        NOT_SUPPORTED_BY_GUI  7
        WRONG_PARAMETER       8
         OTHERS                9 .

   ENDIF .

   CALL  FUNCTION  'SAP_CONVERT_TO_XLS_FORMAT'
     EXPORTING
*     I_FIELD_SEPERATOR          = 'X'
*     I_LINE_HEADER              =
      I_FILENAME                  LV_FILENAME
*     I_APPL_KEEP                = ' '
     TABLES
      I_TAB_SAP_DATA              I_DOWN_DATA
*   CHANGING
*     I_TAB_CONVERTED_DATA       =
    EXCEPTIONS
     CONVERSION_FAILED           1
      OTHERS                      2 .

   IF SY -SUBRC  0 .
     CONCATENATE  TEXT - 029 LV_FILENAME  INTO LV_STR .
     MESSAGE LV_STR  TYPE  'S' .
     CLEAR  :LV_FILENAME  GV_FILE .
     LEAVE  TO  SCREEN  0 .
   ELSE .
     MESSAGE  ID SY -MSGID  TYPE  'I'  NUMBER SY -MSGNO
           WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4
          DISPLAY  LIKE SY -MSGTY .
   ENDIF .

ENDFORM .                     " FRM_DOWNLOAD_EXCEL
*&---------------------------------------------------------------------*
*&      Module  GET_FILENAME  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE GET_FILEPATH  INPUT .
* Get file path
   CALL  FUNCTION  'TMP_GUI_BROWSE_FOR_FOLDER'
     EXPORTING
      WINDOW_TITLE     ''
      INITIAL_FOLDER   'D:\'
     IMPORTING
      SELECTED_FOLDER  GV_FILE
     EXCEPTIONS                                               "#EC *
      CNTL_ERROR       1
       OTHERS           2 .
   IF SY -SUBRC  0 .
*    CONCATENATE GV_FILE C_FILE INTO GV_FILE.
   ENDIF .
ENDMODULE .                  " GET_FILENAME  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_9004  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_9004  OUTPUT .
   SET  PF-STATUS  '9003' .
   SET  TITLEBAR  'TITLE'  WITH  TEXT - 024 .
ENDMODULE .                  " STATUS_9004  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9004  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9004  INPUT .
   CASE OK_CODE4 .
     WHEN  'CANCEL' .
       LEAVE  TO  SCREEN  0 .
     WHEN  'UPLOAD' .
       PERFORM FRM_CHECK_FILE .
     WHEN  OTHERS .
   ENDCASE .
   CLEAR  OK_CODE4 .
ENDMODULE .                  " USER_COMMAND_9004  INPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*       文件上传
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_EXCEL  .
   DATA  :
        LV_W_EXCEL    TYPE ALSMEX_TABLINE ,
        LV_I_EXCEL    TYPE  STANDARD  TABLE  OF ALSMEX_TABLINE .

   CALL  FUNCTION  'ALSM_EXCEL_TO_INTERNAL_TABLE'
     EXPORTING
      FILENAME                       GV_UPLOAD
      I_BEGIN_COL                    1          "起始列
      I_BEGIN_ROW                    2          "起始行
      I_END_COL                      7
      I_END_ROW                      9999
     TABLES
      INTERN                         LV_I_EXCEL
* EXCEPTIONS
*   INCONSISTENT_PARAMETERS       = 1
*   UPLOAD_OLE                    = 2
*   OTHERS                        = 3
             .
   IF SY -SUBRC <>  0 .
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF .

   SORT LV_I_EXCEL  BY ROW COL .

   LOOP  AT LV_I_EXCEL  INTO LV_W_EXCEL  .
     IF LV_W_EXCEL -COL  1 .
      WA_UPLOAD -ZNUM  LV_W_EXCEL - VALUE .
     ENDIF .

     IF LV_W_EXCEL -COL  2 .
      WA_UPLOAD -ZNAME  LV_W_EXCEL - VALUE .
     ENDIF .

     IF LV_W_EXCEL -COL  3 .
      WA_UPLOAD -ZPOST  LV_W_EXCEL - VALUE .
     ENDIF .

     IF LV_W_EXCEL -COL  4 .
      WA_UPLOAD -EDATE  LV_W_EXCEL - VALUE .
     ENDIF .

     IF LV_W_EXCEL -COL  5 .
      WA_UPLOAD -ZID  LV_W_EXCEL - VALUE .
     ENDIF .

     IF LV_W_EXCEL -COL  6 .
      WA_UPLOAD -REMARK  LV_W_EXCEL - VALUE .
     ENDIF .

     IF LV_W_EXCEL -COL  7 .
      WA_UPLOAD -DEPT  LV_W_EXCEL - VALUE .
     ENDIF .

     AT  END  OF ROW .
      WA_UPLOAD -UNAME  SY -UNAME .
      WA_UPLOAD -ERDAT  SY -DATUM .
      WA_UPLOAD -UZEIT  SY -UZEIT .
       APPEND WA_UPLOAD  TO I_UPLOAD .
       CLEAR WA_UPLOAD .
     ENDAT .
   ENDLOOP .

   IF GV_TFLAG  '' .
* 直接上传
     IF I_UPLOAD  IS  NOT  INITIAL .
       INSERT ZSTAFF  FROM  TABLE I_UPLOAD ACCEPTING DUPLICATE KEYS .
       IF SY -SUBRC  0 .
         COMMIT  WORK .
         MESSAGE  TEXT - 008  TYPE  'S' .
         CLEAR  GV_UPLOAD .
         LEAVE  TO  SCREEN  0 .
       ELSE .
         ROLLBACK  WORK .
         MESSAGE  TEXT - 019  TYPE  'I' .
         CLEAR  GV_UPLOAD .
         LEAVE  TO  SCREEN  0 .
       ENDIF .
     ENDIF .
   ELSE .
* 上传到Table
     LOOP  AT I_UPLOAD  INTO WA_UPLOAD .
       MOVE-CORRESPONDING WA_UPLOAD  TO WA_STAFF .
       APPEND WA_STAFF  TO I_STAFF .
     ENDLOOP .
     LEAVE  TO  SCREEN  0 .
   ENDIF .
ENDFORM .                     " FRM_UPLOAD_EXCEL
*&---------------------------------------------------------------------*
*&      Module  GET_F4_HELP  INPUT
*&---------------------------------------------------------------------*
*       上传文件F4帮助
*----------------------------------------------------------------------*
MODULE GET_F4_HELP  INPUT .
   CALL  FUNCTION  'WS_FILENAME_GET'
      EXPORTING
*   DEF_FILENAME           = ' '
       DEF_PATH                C_FOLD
        MASK                    C_MASK
        MODE                    C_MODE_O
        TITLE                   C_NAME
      IMPORTING
       FILENAME                =  GV_UPLOAD
*   RC                     =
    EXCEPTIONS
     INV_WINSYS              1
     NO_BATCH                2
     SELECTION_CANCEL        3
     SELECTION_ERROR         4
      OTHERS                  5
               .
   IF SY -SUBRC <>  0 .
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF .
ENDMODULE .                  " GET_F4_HELP  INPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_FILE
*&---------------------------------------------------------------------*
*       检查上传文件有效性
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_CHECK_FILE  .
   DATA  :
          LV_RESULT  TYPE  C .

   IF GV_UPLOAD  IS  NOT  INITIAL .
     CALL  FUNCTION  'TMP_GUI_GET_FILE_EXIST'
       EXPORTING
        FNAME           GV_UPLOAD
       IMPORTING
        EXIST           LV_RESULT
*       ISDIR          =
*       FILESIZE       =
       EXCEPTIONS
        FILEINFO_ERROR  1
         OTHERS          2 .
     IF LV_RESULT <>  'X' .
       SET  CURSOR  FIELD  'GV_UPLOAD' .
       MESSAGE  TEXT - 025  TYPE  'I' .
     ELSE .
       PERFORM FRM_UPLOAD_EXCEL .
     ENDIF .
   ELSE .
     SET  CURSOR  FIELD  'GV_UPLOAD' .
     MESSAGE  TEXT - 026  TYPE  'I' .
   ENDIF .
ENDFORM .                     " FRM_CHECK_FILE
*&---------------------------------------------------------------------*
*&      Form  FRM_DEL_SEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DEL_SEL  .
   DATA  LV_RETURN  TYPE  C .                                   "#EC *
   CLEAR  WA_STAFF  LV_RETURN .
* Get the selected line in ALV
   CALL  METHOD GV_ALV ->GET_SELECTED_ROWS
     IMPORTING
      ET_ROW_NO  LT_ROW .
   IF LT_ROW  IS  INITIAL .
     MESSAGE  TEXT - 027  TYPE  'I' .
   ENDIF .

   LOOP   AT  LT_ROW  INTO  LS_ROW  FROM  TO  1 .
     READ   TABLE  I_STAFF  INTO WA_STAFF  INDEX  LS_ROW -ROW_ID .
   ENDLOOP  .
   IF WA_STAFF  IS  NOT  INITIAL .
     CALL  FUNCTION  'POPUP_TO_CONFIRM_STEP'                    "#EC *
        EXPORTING
         DEFAULTOPTION   'Y'
         TEXTLINE1       TEXT -I03
         TITEL           TEXT -I04
         CANCEL_DISPLAY  ''
        IMPORTING
         ANSWER          LV_RETURN .
     IF LV_RETURN  'J' .
       MESSAGE  TEXT - 035  TYPE  'W' .
       CALL  FUNCTION  'ENQUEUE_EZSTAFF'
         EXPORTING
          MODE_ZSTAFF           'E'
          MANDT                 SY -MANDT
          ZNUM                  WA_STAFF -ZNUM
*            X_ZNUM               = ' '
*            _SCOPE               = '2'
*            _WAIT                = ' '
*            _COLLECT             = ' '
         EXCEPTIONS
          FOREIGN_LOCK          1
          SYSTEM_FAILURE        2
           OTHERS                3
                  .
       DELETE ZSTAFF  FROM WA_STAFF .
       IF SY -SUBRC  0 .
         CALL  FUNCTION  'DEQUEUE_EZSTAFF'
          EXPORTING
           MODE_ZSTAFF        'E'
           MANDT              SY -MANDT
           ZNUM               ZSTAFF -ZNUM
*       X_ZNUM            = ' '
*       _SCOPE            = '3'
*       _SYNCHRON         = ' '
*       _COLLECT          = ' '
                   .
         COMMIT  WORK .
         MESSAGE  TEXT - 013  TYPE  'S' .
         PERFORM FRM_GET_DATA .
         CALL  METHOD GV_ALV ->REFRESH_TABLE_DISPLAY ) .
       ENDIF .
     ENDIF .
   ENDIF .
ENDFORM .                     " FRM_DEL_SEL
*&---------------------------------------------------------------------*
*&      Form  FRM_UPDATE_STAUTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_UPDATE_STAUTS  .
   DATA  I_UPDATE  TYPE  STANDARD  TABLE  OF ZSTAFF ,
         WA_UPDATE  TYPE ZSTAFF .
   SELECT *
     FROM ZSTAFF
     INTO CORRESPONDING  FIELDS  OF  TABLE I_UPDATE .
   IF SY -SUBRC  0 .
     LOOP  AT I_UPDATE  INTO WA_UPDATE .
       IF WA_UPDATE -STATUS <>  'X' .
        WA_UPDATE -STATUS  '' .
       ENDIF .
       IF WA_UPDATE -LEADER <>  'X' .
        WA_UPDATE -LEADER  '' .
       ENDIF .
       MODIFY I_UPDATE  FROM WA_UPDATE .
     ENDLOOP .
     MODIFY ZSTAFF  FROM  TABLE I_UPDATE .
     IF SY -SUBRC  .
       COMMIT  WORK .
       CLEAR  WA_UPDATE .
       REFRESH  I_UPDATE .
       MESSAGE  '人员状态更新成功!'  TYPE  'S' .
     ELSE .
       ROLLBACK  WORK .
       CLEAR  WA_UPDATE .
       REFRESH  I_UPDATE .
       MESSAGE  '更新失败,请自寻原因!'  TYPE  'S' .
     ENDIF .
   ENDIF .
ENDFORM .                     " FRM_UPDATE_STAUTS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值