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 C VALUE ',*.XLSX,*.XLSX.' ,
* Mode type
C_MODE_O TYPE C VALUE 'O' ,
* CSV split
C_SPLIT TYPE C VALUE ',' ,
* Defult fold
C_FOLD ( 20 ) TYPE C VALUE 'D:\' ,
* Pop-up box name
C_NAME ( 20 ) TYPE C VALUE 'File Select' ,
* File name
C_FILE ( 20 ) TYPE C 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 1 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 = 0 .
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
*----------------------------------------------------------------------*
* 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 C VALUE ',*.XLSX,*.XLSX.' ,
* Mode type
C_MODE_O TYPE C VALUE 'O' ,
* CSV split
C_SPLIT TYPE C VALUE ',' ,
* Defult fold
C_FOLD ( 20 ) TYPE C VALUE 'D:\' ,
* Pop-up box name
C_NAME ( 20 ) TYPE C VALUE 'File Select' ,
* File name
C_FILE ( 20 ) TYPE C 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 1 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 = 0 .
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