SAP staff maintain

本文深入探讨了信息技术领域的多个细分技术领域,包括前端开发、后端开发、移动开发、游戏开发等,提供了对每个领域的关键技术和实践的概述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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(20TEXT-002  FOR FIELD P_R1.
SELECTION-SCREEN POSITION 30.
PARAMETERS P_R2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 31(20TEXT-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(20TEXT-004  FOR FIELD P_R3.
SELECTION-SCREEN POSITION 30.
PARAMETERS P_R4 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 31(20TEXT-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(20TEXT-006  FOR FIELD P_R5.
SELECTION-SCREEN POSITION 30.
PARAMETERS P_R6 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 31(20TEXT-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(82TEXT-030.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT 3(82TEXT-031.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT 1(82TEXT-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 STRLENP_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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值