*&---------------------------------------------------------------------*
*& Report ZHRR203
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZHRR203.
************************************************************************
*程序名称 :ZHRR203
*程序功能 :离职率分析表
*需求负责人:曲礼慧 部门: HR咨询服务部 电话:18612250797
*程序创建人:党越榕 创建日期:2017-10-30
*程序修改人:党越榕 修改日期:
*当前版本号:V1.0
*=======================================================================
*修改请求号 修改日期 修改人 修改描述
*S4DK901027 2017-10-30 党越榕 创建程序
*************************************************************************
*******ALV报表所需组件的定义 一般情况下固定不变*******
TYPE-POOLS:SLIS.
DATA:GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
GT_LAYPUT TYPE SLIS_LAYOUT_ALV.
DATA:DETAIL_OBJID TYPE P0001-ORGEH,
TYPE TYPE I.
*******ALV报表所需组件的定义 一般情况下固定不变*******
DATA: G_EXCEL TYPE OLE2_OBJECT,
G_SHEET TYPE OLE2_OBJECT,
G_WORKBOOK TYPE OLE2_OBJECT,
G_CELL TYPE OLE2_OBJECT,
G_RANGE TYPE OLE2_OBJECT,
G_FONT TYPE OLE2_OBJECT,
G_CELL1 TYPE OLE2_OBJECT,
G_CELL2 TYPE OLE2_OBJECT,
G_CELLS TYPE OLE2_OBJECT,
G_COLUMNS TYPE OLE2_OBJECT,
G_FILE LIKE RLGRAP-FILENAME,
G_BORDER TYPE OLE2_OBJECT,
G_COLUMN TYPE OLE2_OBJECT,
G_WKBK TYPE OLE2_OBJECT,
G_SHEET_NUMBER TYPE I.
INCLUDE ZEXCEL_PUBLIC.
DATA:L_BEGDA LIKE SY-DATUM,L_ENDDA LIKE SY-DATUM,K_BEGDA LIKE SY-DATUM.
DATA: BEGIN OF ITAB OCCURS 0,
XUHAO(6),
OBJID(8),
STEXT(40),
QCRS(5) TYPE I,
QMRS(5) TYPE I,
LZRS(5) TYPE I,
LZL TYPE P DECIMALS 2,
END OF ITAB.
DATA: BEGIN OF ITAB1 OCCURS 0,
XUHAO(6),
STEXT(40),
QCRS(5) TYPE I,
QMRS(5) TYPE I,
LZRS(5) TYPE I,
LZL TYPE P DECIMALS 2,
OBJID TYPE HROBJID,
END OF ITAB1.
DATA: BEGIN OF GT_ITAB OCCURS 0,
XH TYPE I,
BUMEN TYPE STEXT,
PERNR(8) TYPE C,
NACHN TYPE NACHN,
GANGWEI TYPE STEXT,
ZHIWU TYPE STEXT,
RUZHI TYPE DATS,
LIZHI TYPE DATS,
LZYY TYPE STEXT,
FLAG(1),
END OF GT_ITAB.
DATA: BEGIN OF GT_ITAB1 OCCURS 0,
XH TYPE I,
BUMEN TYPE STEXT,
PERNR(8) TYPE C,
NACHN TYPE NACHN,
GANGWEI TYPE STEXT,
ZHIWU TYPE STEXT,
RUZHI TYPE DATS,
LIZHI TYPE DATS,
LZYY TYPE STEXT,
FLAG(1),
END OF GT_ITAB1.
DATA:GT_OBJEC LIKE TABLE OF OBJEC WITH HEADER LINE.
DATA:GT_STRUC LIKE TABLE OF STRUC WITH HEADER LINE.
DATA:IT_OBJEC LIKE TABLE OF OBJEC WITH HEADER LINE.
DATA:IT_STRUC LIKE TABLE OF STRUC WITH HEADER LINE.
DATA:FT_OBJEC LIKE TABLE OF OBJEC WITH HEADER LINE.
DATA:FT_STRUC LIKE TABLE OF STRUC WITH HEADER LINE.
DATA:MT_OBJEC LIKE TABLE OF OBJEC WITH HEADER LINE.
DATA:MT_STRUC LIKE TABLE OF STRUC WITH HEADER LINE.
DATA:GT_RANG LIKE RANGE OF PA0000-PERNR WITH HEADER LINE.
DATA :GT_PA0000 LIKE TABLE OF PA0000 WITH HEADER LINE.
""定义选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS :P_OBJID LIKE HRP1000-OBJID OBLIGATORY. """组织单位
PARAMETERS :P_BEGDA TYPE SMON OBLIGATORY. """开始日期
PARAMETERS :P_ENDDA TYPE SMON OBLIGATORY. """结束日期
SELECTION-SCREEN END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_OBJID.
PERFORM FRM_SET_SCR USING 'O' 'P_OBJID'.
START-OF-SELECTION.
""获取开始日期
CONCATENATE P_BEGDA '01' INTO L_BEGDA.
CONCATENATE P_ENDDA '01' INTO L_ENDDA.
""获取截止日期
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
DAY_IN = L_ENDDA
IMPORTING
LAST_DAY_OF_MONTH = L_ENDDA
EXCEPTIONS
DAY_IN_NO_DATE = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
ACT_OTYPE = 'O'
ACT_OBJID = P_OBJID
ACT_WEGID = 'O-O_DOWN'
* ACT_INT_FLAG =
* ACT_PLVAR = ' '
ACT_BEGDA = L_BEGDA
ACT_ENDDA = L_ENDDA
* ACT_TDEPTH = 0
* ACT_TFLAG = 'X'
* ACT_VFLAG = 'X'
* AUTHORITY_CHECK = 'X'
* TEXT_BUFFER_FILL =
* BUFFER_MODE =
* IMPORTING
* ACT_PLVAR =
TABLES
* RESULT_TAB =
RESULT_OBJEC = GT_OBJEC
RESULT_STRUC = GT_STRUC
EXCEPTIONS
NO_PLVAR_FOUND = 1
NO_ENTRY_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
DELETE GT_STRUC WHERE OTYPE <> 'O'.
DELETE GT_STRUC WHERE PUP > 1.
LOOP AT GT_STRUC.
ITAB-OBJID = GT_STRUC-OBJID.
READ TABLE GT_OBJEC WITH KEY OBJID = GT_STRUC-OBJID.
IF SY-SUBRC = 0.
ITAB-STEXT = GT_OBJEC-STEXT.
ENDIF.
APPEND ITAB.CLEAR ITAB.
ENDLOOP.
***************************
CALL FUNCTION 'FIMA_DATE_CREATE'
EXPORTING
I_DATE = L_BEGDA
* I_FLG_END_OF_MONTH = ' '
* I_YEARS = 0
* I_MONTHS = 0
I_DAYS = '-1'
* I_CALENDAR_DAYS = 0
* I_SET_LAST_DAY_OF_MONTH = ' '
IMPORTING
E_DATE = K_BEGDA
* E_FLG_END_OF_MONTH =
* E_DAYS_OF_I_DATE =
.
***************************
LOOP AT ITAB.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
ACT_OTYPE = 'O'
ACT_OBJID = ITAB-OBJID
ACT_WEGID = 'PERS-O'
* ACT_INT_FLAG =
* ACT_PLVAR = ' '
ACT_BEGDA = K_BEGDA
ACT_ENDDA = L_ENDDA
* ACT_TDEPTH = 0
* ACT_TFLAG = 'X'
* ACT_VFLAG = 'X'
* AUTHORITY_CHECK = 'X'
* TEXT_BUFFER_FILL =
* BUFFER_MODE =
* IMPORTING
* ACT_PLVAR =
TABLES
* RESULT_TAB =
RESULT_OBJEC = IT_OBJEC
RESULT_STRUC = IT_STRUC
EXCEPTIONS
NO_PLVAR_FOUND = 1
NO_ENTRY_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
DELETE IT_STRUC WHERE OTYPE <> 'P'.
SORT IT_STRUC BY OBJID.
DELETE ADJACENT DUPLICATES FROM IT_STRUC COMPARING OBJID.
LOOP AT IT_STRUC.
GT_RANG-SIGN = 'I'.
GT_RANG-OPTION = 'EQ'.
GT_RANG-LOW = IT_STRUC-OBJID.
APPEND GT_RANG.CLEAR GT_RANG.
ENDLOOP.
ITAB-QCRS = LINES( IT_STRUC ). "'期初人数
CLEAR:FT_OBJEC,FT_OBJEC[],FT_STRUC,FT_STRUC[].
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
ACT_OTYPE = 'O'
ACT_OBJID = ITAB-OBJID
ACT_WEGID = 'PERS-O'
* ACT_INT_FLAG =
* ACT_PLVAR = ' '
ACT_BEGDA = L_ENDDA
ACT_ENDDA = L_ENDDA
* ACT_TDEPTH = 0
* ACT_TFLAG = 'X'
* ACT_VFLAG = 'X'
* AUTHORITY_CHECK = 'X'
* TEXT_BUFFER_FILL =
* BUFFER_MODE =
* IMPORTING
* ACT_PLVAR =
TABLES
* RESULT_TAB =
RESULT_OBJEC = FT_OBJEC
RESULT_STRUC = FT_STRUC
EXCEPTIONS
NO_PLVAR_FOUND = 1
NO_ENTRY_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
DELETE FT_STRUC WHERE OTYPE <> 'P'.
SORT FT_STRUC BY OBJID.
DELETE ADJACENT DUPLICATES FROM FT_STRUC COMPARING OBJID.
ITAB-QMRS = LINES( FT_STRUC ). "'期末人数
*********************************** 离职总人数 修改
IF GT_RANG[] IS NOT INITIAL.
SELECT PERNR MASSN BEGDA ENDDA INTO CORRESPONDING FIELDS OF TABLE GT_PA0000 FROM PA0000
WHERE MASSN = '05' AND ( BEGDA BETWEEN L_BEGDA AND L_ENDDA ) AND PERNR IN GT_RANG.
LOOP AT GT_PA0000 WHERE BEGDA+0(6) = K_BEGDA+0(6). "不在本月(3 月)离职的删掉 0228日
DELETE GT_PA0000.
ENDLOOP.
ITAB-LZRS = LINES( GT_PA0000 ). ""离职人数
ENDIF.
***********************************
* IF GT_RANG[] IS NOT INITIAL.
* SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_PA0000 FROM PA0000 WHERE
* PERNR IN GT_RANG AND MASSN = '05' AND ( BEGDA BETWEEN L_BEGDA AND L_ENDDA ).
* ITAB-LZRS = LINES( GT_PA0000 ). ""离职人数
* ELSE.
* ITAB-LZRS = '0'.
* ENDIF.
IF ITAB-QMRS IS NOT INITIAL.
ITAB-LZL = ITAB-LZRS / ( ITAB-QMRS + ITAB-LZRS ).
ELSE.
ITAB-LZL = '0'.
ENDIF.
MODIFY ITAB.
MOVE-CORRESPONDING ITAB TO ITAB1.
APPEND ITAB1.CLEAR ITAB1.
CLEAR:ITAB,IT_STRUC[],IT_OBJEC[],GT_RANG[],GT_PA0000[].
ENDLOOP.
LOOP AT ITAB1.
ITAB1-XUHAO = SY-TABIX.
MODIFY ITAB1.CLEAR ITAB1.
ENDLOOP.
END-OF-SELECTION.
PERFORM DISPLAY_ALV. "ALV 数据展示
INCLUDE ZHRR203_CK.
FORM DISPLAY_ALV .
PERFORM LAYOUT_BUILD.
PERFORM FIELDCAT USING GT_FIELDCAT.
PERFORM DISPLAY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form LAYOUT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM LAYOUT_BUILD .
GT_LAYPUT-COLWIDTH_OPTIMIZE = 'X'.
GT_LAYPUT-ZEBRA = 'X'.
GT_LAYPUT-DETAIL_INITIAL_LINES = 'X'.
* GT_LAYPUT-BOX_FIELDNAME = 'FLAG'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM FIELDCAT USING GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: AFIELDCAT TYPE SLIS_FIELDCAT_ALV,
POS TYPE I.
CLEAR POS.
DEFINE D_GET_FIELD.
pos = pos + 1.
clear afieldcat.
afieldcat-col_pos = pos.
afieldcat-fieldname = &1.
afieldcat-seltext_l = &2.
afieldcat-key = &3.
append afieldcat to GT_FIELDCAT.
END-OF-DEFINITION.
D_GET_FIELD 'XUHAO ' '序号' '' .
D_GET_FIELD 'STEXT ' '部门' '' .
D_GET_FIELD 'QCRS ' '期初人数' '' .
D_GET_FIELD 'QMRS ' '期末人数' '' .
D_GET_FIELD 'LZRS ' '离职人数' '' .
D_GET_FIELD 'LZL ' '离职率分析' '' .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_PF_STATUS_SET = 'USER_STATUS'
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = GT_LAYPUT
I_CALLBACK_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE' " 调用ALV表头显示
IT_FIELDCAT = GT_FIELDCAT[]
I_HTML_HEIGHT_TOP = 18 " 设置抬头宽度
TABLES
T_OUTTAB = ITAB1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form user_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->EXTAB text
*----------------------------------------------------------------------*
FORM USER_STATUS USING EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STATUS_ALV2'.
SET TITLEBAR 'TITLE_ALV'.
ENDFORM. "user_status
FORM HTML_TOP_OF_PAGE USING DOCUMENT TYPE REF TO CL_DD_DOCUMENT.
DATA: TEXT TYPE SDYDO_TEXT_ELEMENT.
DATA: M_P TYPE I,
M_BUFFER TYPE STRING.
DATA:L_TIT3(30),G_LINES(5).
IF P_OBJID IS NOT INITIAL.
SELECT SINGLE STEXT INTO L_TIT3 FROM HRP1000 WHERE OBJID = P_OBJID AND OTYPE = 'O'.
ELSE.
L_TIT3 = '离职率分析表'.
ENDIF.
DESCRIBE TABLE ITAB1 LINES G_LINES.
CONCATENATE '<HTML><CENTER><H2>' '九洲(中国)医药股份有限公司离职率分析表' '</H2></CENTER></HTML>' INTO M_BUFFER. " 居中 <H1>设置字体格式
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS = M_BUFFER
CHANGING
POSITION = M_P.
CONCATENATE '<HTML><LEFT><G1>' '组织单位:' L_TIT3 ' ' '截止日期: ' P_BEGDA '--- ' P_ENDDA ' </G1></LEFT></HTML>' INTO M_BUFFER. " 居中 <H1>设置字体格式
CALL METHOD DOCUMENT->HTML_INSERT
EXPORTING
CONTENTS = M_BUFFER
CHANGING
POSITION = M_P.
ENDFORM.
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:OK_CODE TYPE SY-UCOMM.
OK_CODE = R_UCOMM.
CASE OK_CODE.
WHEN 'EXCEL'.
PERFORM EXCEL_DAOCHU.
WHEN 'BANK'.
LEAVE TO SCREEN 0.
WHEN 'CLOSE'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
SET SCREEN 0.
LEAVE PROGRAM.
**************************
WHEN '&IC1'.
CLEAR:GT_ITAB[],GT_ITAB.
READ TABLE ITAB1 INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
DETAIL_OBJID = ITAB1-OBJID.
ENDIF.
IF RS_SELFIELD-FIELDNAME = 'STEXT' OR RS_SELFIELD-FIELDNAME = 'XUHAO' OR RS_SELFIELD-FIELDNAME = 'QCRS' OR
RS_SELFIELD-FIELDNAME = 'LZRS' OR
RS_SELFIELD-FIELDNAME = 'LZL' .
* TYPE = 1.
PERFORM MINGX.
* CALL SCREEN 1004 STARTING AT 50 5 ." ENDING AT 180 20. "后边是左边距
CALL SCREEN 1004 STARTING AT 50 50 ." ENDING AT 180 20. "后边是左边距
* CALL SCREEN 1003 STARTING AT 79 30 ." ENDING AT 180 20. "后边是左边距
ENDIF.
WHEN OTHERS.
ENDCASE.
RS_SELFIELD-REFRESH = 'X'. "刷新
ENDFORM. "user_command
FORM MINGX .
DATA:ST_PA0002 LIKE TABLE OF PA0002 WITH HEADER LINE.
DATA:ST_PA0000 LIKE TABLE OF PA0000 WITH HEADER LINE.
DATA:PT_PA0000 LIKE TABLE OF PA0000 WITH HEADER LINE.
* data:st_pa0002 like TABLE OF pa0002 WITH HEADER LINE.
DATA:ST_T530T LIKE TABLE OF T530T WITH HEADER LINE.
SELECT * INTO CORRESPONDING FIELDS OF TABLE ST_T530T FROM T530T WHERE SPRSL = '1'.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
ACT_OTYPE = 'O'
ACT_OBJID = DETAIL_OBJID
ACT_WEGID = 'PERS-O'
* ACT_INT_FLAG =
* ACT_PLVAR = ' '
ACT_BEGDA = K_BEGDA
ACT_ENDDA = L_ENDDA
* ACT_TDEPTH = 0
* ACT_TFLAG = 'X'
* ACT_VFLAG = 'X'
* AUTHORITY_CHECK = 'X'
* TEXT_BUFFER_FILL =
* BUFFER_MODE =
* IMPORTING
* ACT_PLVAR =
TABLES
* RESULT_TAB =
RESULT_OBJEC = MT_OBJEC
* RESULT_STRUC =
EXCEPTIONS
NO_PLVAR_FOUND = 1
NO_ENTRY_FOUND = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
DELETE MT_OBJEC WHERE OTYPE <> 'P'.
SORT MT_OBJEC BY OBJID.
DELETE ADJACENT DUPLICATES FROM MT_OBJEC COMPARING OBJID.
IF MT_OBJEC[] IS NOT INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE ST_PA0000 FROM PA0000
FOR ALL ENTRIES IN MT_OBJEC WHERE PERNR = MT_OBJEC-OBJID
AND MASSN = '05' AND ( BEGDA BETWEEN L_BEGDA AND L_ENDDA )..
SORT ST_PA0000 BY PERNR.
DELETE ADJACENT DUPLICATES FROM ST_PA0000 COMPARING PERNR.
*************************
LOOP AT ST_PA0000 WHERE BEGDA+0(6) = K_BEGDA+0(6). "不在本月(3 月)离职的删掉 0228日
DELETE ST_PA0000.
ENDLOOP.
*************************
SELECT * INTO CORRESPONDING FIELDS OF TABLE PT_PA0000 FROM PA0000
FOR ALL ENTRIES IN MT_OBJEC WHERE PERNR = MT_OBJEC-OBJID
AND MASSN = '01' .
SORT PT_PA0000 BY PERNR.
DELETE ADJACENT DUPLICATES FROM PT_PA0000 COMPARING PERNR.
ENDIF.
IF ST_PA0000[] IS NOT INITIAL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE ST_PA0002 FROM PA0002
FOR ALL ENTRIES IN ST_PA0000 WHERE PERNR = ST_PA0000-PERNR.
SORT ST_PA0002 BY PERNR.
DELETE ADJACENT DUPLICATES FROM ST_PA0002 COMPARING PERNR.
* SELECT * INTO CORRESPONDING FIELDS OF TABLE ST_PA0000 FROM PA0000
* FOR ALL ENTRIES IN GT_PA0000 WHERE PERNR = GT_PA0000-PERNR
* AND MASSN = '05' AND ( ( BEGDA <= L_BEGDA AND ENDDA >= L_ENDDA )
* OR ( BEGDA <= L_BEGDA AND ENDDA >= L_BEGDA )
* OR ( BEGDA <= L_ENDDA AND ENDDA >= L_ENDDA ) ).
* SORT ST_PA0000 BY PERNR.
* DELETE ADJACENT DUPLICATES FROM ST_PA0000 COMPARING PERNR.
ENDIF.
LOOP AT ST_PA0000.
CLEAR:GT_OBJEC[],GT_OBJEC,GT_STRUC[],GT_STRUC.
READ TABLE ST_PA0002 WITH KEY PERNR = ST_PA0000-PERNR BINARY SEARCH .
IF SY-SUBRC = 0.
GT_ITAB-NACHN = ST_PA0002-NACHN.
ENDIF.
GT_ITAB-PERNR = ST_PA0000-PERNR.
*-------离职日期
LOOP AT ST_PA0000 WHERE PERNR = ST_PA0000-PERNR.
GT_ITAB-LIZHI = ST_PA0000-BEGDA.
READ TABLE PT_PA0000 WITH KEY PERNR = ST_PA0000-PERNR BINARY SEARCH.
IF SY-SUBRC = 0.
GT_ITAB-RUZHI = PT_PA0000-BEGDA.
ENDIF.
READ TABLE ST_T530T WITH KEY MASSN = ST_PA0000-MASSN MASSG = ST_PA0000-MASSG .
IF SY-SUBRC = 0.
GT_ITAB-LZYY = ST_T530T-MGTXT.
ENDIF.
ENDLOOP.
*--部门
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
ACT_OTYPE = 'P'
ACT_OBJID = ST_PA0000-PERNR
ACT_WEGID = 'ZPSCOO'
ACT_BEGDA = '19001231'
ACT_ENDDA = L_ENDDA
TABLES
* result_tab = it_result_tab
RESULT_OBJEC = GT_OBJEC
RESULT_STRUC = GT_STRUC
EXCEPTIONS
NO_PLVAR_FOUND = 1
NO_ENTRY_FOUND = 2
OTHERS = 3.
LOOP AT GT_OBJEC WHERE OBJID = P_OBJID.
GT_ITAB-BUMEN = GT_OBJEC-STEXT.
ENDLOOP.
**--职务
LOOP AT GT_STRUC WHERE VPROZT = '100'.
READ TABLE GT_OBJEC WITH KEY OBJID = GT_STRUC-OBJID OTYPE = 'C'..
IF SY-SUBRC = 0.
GT_ITAB-ZHIWU = GT_OBJEC-STEXT.
EXIT.
ENDIF.
ENDLOOP.
**----岗位
LOOP AT GT_STRUC WHERE LEVEL = '2'.
READ TABLE GT_OBJEC WITH KEY OBJID = GT_STRUC-OBJID OTYPE = 'S'.
IF SY-SUBRC = 0.
GT_ITAB-GANGWEI = GT_OBJEC-STEXT.
EXIT.
ENDIF.
ENDLOOP.
APPEND GT_ITAB.CLEAR GT_ITAB.
ENDLOOP.
LOOP AT GT_ITAB.
GT_ITAB-XH = SY-TABIX.
MODIFY GT_ITAB.CLEAR GT_ITAB.
ENDLOOP.
ENDFORM.
FORM EXCEL_DAOCHU .
DATA: L_NAME LIKE WWWDATATAB,
L_RC LIKE SY-SUBRC,
L_FULLPATH TYPE STRING,
L_SHEET_NUMBER TYPE I VALUE 1,
L_TEXT TYPE STRING.
* CONCATENATE 'C:/HR/专业技术职务情况表' SY-DATUM '.XLS' INTO G_FILE.
CONCATENATE 'C:\HR\离职率分析表' SY-DATUM '.XLS' INTO G_FILE.
L_NAME-RELID = 'MI'.
L_NAME-OBJID = 'ZHRR203'."EXCEL模板的名
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = L_NAME
DESTINATION = G_FILE
IMPORTING
RC = L_RC.
IF L_RC <> 0.
MESSAGE '模板文件(SMW0:ZHRR204)下载失败,请与开发人员联系!' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF.
L_FULLPATH = G_FILE.
CONCATENATE '正在处理文件:' G_FILE INTO L_TEXT.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = L_TEXT.
PERFORM FRM_OPEN_EXCEL USING L_FULLPATH 0. " 打开excel模板
PERFORM FRM_OPEN_EXCEL_SHEET USING L_SHEET_NUMBER. "打开excel第一个sheet
PERFORM FRM_PROCESS_EXCEL. "向EXCEL中填充数据
SET PROPERTY OF G_EXCEL 'VISIBLE' = 1. "过程可见
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_EXCEL .
DATA:R1 TYPE I VALUE '4'.
DATA:L_TIT(50),L_TIT1(30),L_TIT2(30).
* DESCRIBE TABLE ZITAB LINES L_TIT2.
SELECT SINGLE STEXT INTO L_TIT1 FROM HRP1000 WHERE OBJID = P_OBJID AND OTYPE = 'O'.
CONCATENATE P_BEGDA '---' P_ENDDA INTO L_TIT.
PERFORM FRM_FILL_CELL_NEW1 USING 2 5 L_TIT 11 1.
PERFORM FRM_FILL_CELL_NEW1 USING 2 2 L_TIT1 11 1.
* PERFORM FRM_FILL_CELL_NEW1 USING 4 14 L_TIT2 11 1.
CALL METHOD OF G_EXCEL 'COLUMNS' = G_COLUMN "将第2列设置为文本格式
EXPORTING
#1 = 2.
SET PROPERTY OF G_COLUMN 'ColumnWidth' = 10.
SET PROPERTY OF G_COLUMN 'NumberFormat' = '@'.
DATA:L_LINE TYPE I.
DESCRIBE TABLE ITAB1 LINES L_LINE.
DATA:L_INDEX TYPE I,
WA_EXCEL(4096),
L_STR(512).
DATA:LT_EXCEL(4096) OCCURS 0.
FIELD-SYMBOLS:<FSSTR> LIKE ITAB1,
<FSFLD>.
DATA:G_SEPARATOR TYPE C.
G_SEPARATOR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
LOOP AT ITAB1 ASSIGNING <FSSTR>.
L_INDEX = 0.
DO 6 TIMES. "5代表输出列数
ADD 1 TO L_INDEX.
ASSIGN COMPONENT L_INDEX OF STRUCTURE <FSSTR> TO <FSFLD>.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CLEAR:L_STR.
WRITE <FSFLD> TO L_STR LEFT-JUSTIFIED.
CONDENSE L_STR.
IF L_INDEX EQ 1.
WA_EXCEL = L_STR.
ELSE.
CONCATENATE WA_EXCEL L_STR INTO WA_EXCEL SEPARATED BY G_SEPARATOR.
ENDIF.
ENDDO.
APPEND WA_EXCEL TO LT_EXCEL.
CLEAR:WA_EXCEL.
ENDLOOP.
DATA: L_RET TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
IMPORTING
DATA = LT_EXCEL
CHANGING
RC = L_RET.
CALL METHOD OF
G_SHEET
'Activate'.
CALL METHOD OF
G_SHEET
'Cells' = G_CELL
EXPORTING
#1 = 4
#2 = 'A'.
* Paste data from clipboard
CALL METHOD OF
G_CELL
'Select'.
CALL METHOD OF
G_SHEET
'Paste'.
DESCRIBE TABLE ITAB1 LINES R1.
R1 = R1 + 3.
PERFORM FRM_DRAWLINE USING 4 'A' R1 'F'. "加边框 从第五行开始 到R1行结束 从A列到I列
ENDFORM. " FRM_PROCESS_EXCEL
FORM FRM_SET_SCR USING U_OTYPE U_FIELDNAME.
DATA: DYNPFIELDS_UP LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
DATA: PROGNAME LIKE SY-REPID.
DATA: DYNPNUMB LIKE SY-DYNNR.
DATA: STEPLOOP LIKE SY-STEPL.
DATA : SELF_REPID LIKE SY-REPID . "YNKK100992
DATA : SELF_DYNNR LIKE SY-DYNNR . "YNKK100992
DATA : F4_OBJEC LIKE OBJEC. "XMKBCEK002468
SELF_REPID = SY-REPID. "YNKK100992
SELF_DYNNR = SY-DYNNR. "YNKK100992
CALL FUNCTION 'RH_OBJID_REQUEST' "XMKBCEK002468
EXPORTING
PLVAR = '01'
OTYPE = U_OTYPE
DYNPRO_REPID = SELF_REPID
DYNPRO_DYNNR = SELF_DYNNR
* dynpro_plvarfield = 'PPHDR-PLVAR'
* dynpro_searkfield = 'S_EOBJ-LOW'
IMPORTING
SEL_OBJECT = F4_OBJEC
EXCEPTIONS
CANCELLED = 1
WRONG_CONDITION = 2
NOTHING_FOUND = 3
ILLEGAL_MODE = 4
INTERNAL_ERROR = 5
OTHERS = 6.
CHECK F4_OBJEC-OBJID IS NOT INITIAL.
* get actual position
CALL FUNCTION 'DYNP_GET_STEPL'
IMPORTING
POVSTEPL = STEPLOOP.
REFRESH DYNPFIELDS_UP.
DYNPFIELDS_UP-STEPL = STEPLOOP.
DYNPFIELDS_UP-FIELDNAME = U_FIELDNAME.
DYNPFIELDS_UP-FIELDVALUE = F4_OBJEC-OBJID.
APPEND DYNPFIELDS_UP.
* update table control
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
DYNAME = PROGNAME
DYNUMB = DYNPNUMB
TABLES
DYNPFIELDS = DYNPFIELDS_UP
EXCEPTIONS
INVALID_ABAPWORKAREA = 1
INVALID_DYNPROFIELD = 2
INVALID_DYNPRONAME = 3
INVALID_DYNPRONUMMER = 4
INVALID_REQUEST = 5
NO_FIELDDESCRIPTION = 6
UNDEFIND_ERROR = 7
OTHERS = 8.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form EXCEL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCEL_DATA_1 .
DATA: L_NAME LIKE WWWDATATAB,
L_RC LIKE SY-SUBRC,
L_FULLPATH TYPE STRING,
L_SHEET_NUMBER TYPE I VALUE 1,
L_TEXT TYPE STRING.
CONCATENATE 'C:\HR\离职率详情导出' SY-DATUM '.XLS' INTO G_FILE.
L_NAME-RELID = 'MI'.
L_NAME-OBJID = 'ZHRR203_1'."EXCEL模板的名
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = L_NAME
DESTINATION = G_FILE
IMPORTING
RC = L_RC.
IF L_RC <> 0.
MESSAGE '模板文件(SMW0:ZHRR100)下载失败,请与开发人员联系!' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF.
L_FULLPATH = G_FILE.
CONCATENATE '正在处理文件:' G_FILE INTO L_TEXT.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = L_TEXT.
PERFORM FRM_OPEN_EXCEL USING L_FULLPATH 0. " 打开excel模板
PERFORM FRM_OPEN_EXCEL_SHEET USING L_SHEET_NUMBER. "打开excel第一个sheet
PERFORM FRM_PROCESS_EXCEL_1. "向EXCEL中填充数据
SET PROPERTY OF G_EXCEL 'VISIBLE' = 1. "过程可见
ENDFORM.
FORM FRM_PROCESS_EXCEL_1 .
* DATA: BEGIN OF GT_ITAB OCCURS 0,
* FLAG(1),
* XH TYPE I,
* BUMEN TYPE STEXT,
* PERNR(8) TYPE C,
* NACHN TYPE NACHN,
* GANGWEI TYPE STEXT,
* ZHIWU TYPE STEXT,
* RUZHI TYPE DATS,
* LIZHI TYPE DATS,
* LZYY TYPE STEXT,
* END OF GT_ITAB.
DATA:R1 TYPE I VALUE '4'.
DATA:L_TIT(50),L_TIT1(30),L_TIT2(30).
SELECT SINGLE STEXT INTO L_TIT1 FROM HRP1000 WHERE OBJID = P_OBJID AND OTYPE = 'O'.
CONCATENATE P_BEGDA '---' P_ENDDA INTO L_TIT.
PERFORM FRM_FILL_CELL_NEW1 USING 2 5 L_TIT 11 1.
PERFORM FRM_FILL_CELL_NEW1 USING 2 2 L_TIT1 11 1.
CALL METHOD OF G_EXCEL 'COLUMNS' = G_COLUMN "将第2列设置为文本格式
EXPORTING
#1 = 2.
SET PROPERTY OF G_COLUMN 'ColumnWidth' = 10.
SET PROPERTY OF G_COLUMN 'NumberFormat' = '@'.
DATA:L_LINE TYPE I.
DESCRIBE TABLE GT_ITAB1 LINES L_LINE.
DATA:L_INDEX TYPE I,
WA_EXCEL(4096),
L_STR(512).
DATA:LT_EXCEL(4096) OCCURS 0.
FIELD-SYMBOLS:<FSSTR> LIKE GT_ITAB,
<FSFLD>.
DATA:G_SEPARATOR TYPE C.
G_SEPARATOR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
LOOP AT GT_ITAB ASSIGNING <FSSTR>.
L_INDEX = 0.
DO 9 TIMES. "9代表输出列数
ADD 1 TO L_INDEX.
ASSIGN COMPONENT L_INDEX OF STRUCTURE <FSSTR> TO <FSFLD>.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CLEAR:L_STR.
WRITE <FSFLD> TO L_STR LEFT-JUSTIFIED.
CONDENSE L_STR.
IF L_INDEX EQ 1.
WA_EXCEL = L_STR.
ELSE.
CONCATENATE WA_EXCEL L_STR INTO WA_EXCEL SEPARATED BY G_SEPARATOR.
ENDIF.
ENDDO.
APPEND WA_EXCEL TO LT_EXCEL.
CLEAR:WA_EXCEL.
ENDLOOP.
DATA: L_RET TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
IMPORTING
DATA = LT_EXCEL
CHANGING
RC = L_RET.
CALL METHOD OF
G_SHEET
'Activate'.
CALL METHOD OF
G_SHEET
'Cells' = G_CELL
EXPORTING
#1 = 4
#2 = 'A'.
* Paste data from clipboard
CALL METHOD OF
G_CELL
'Select'.
CALL METHOD OF
G_SHEET
'Paste'.
DESCRIBE TABLE ITAB1 LINES R1.
R1 = R1 + 3.
* PERFORM FRM_DRAWLINE USING 4 'A' R1 'I'. "加边框 从第五行开始 到R1行结束 从A列到I列
ENDFORM. " FRM_PROCESS_EXCEL