报表(离职率)

*&---------------------------------------------------------------------*

*& Report ZHRR203

*&---------------------------------------------------------------------*

*&

*&---------------------------------------------------------------------*

REPORT ZHRR203.

************************************************************************

*程序名称  :ZHRR203

*程序功能  :离职率分析表

扫描二维码关注公众号,回复: 4458629 查看本文章

*需求负责人:曲礼慧      部门: 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

猜你喜欢

转载自blog.csdn.net/qq_32587243/article/details/84933032