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