报表查询

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

*& Report  ZR_HR_PA37

*&

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

*&

*&

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

REPORT ZR_HR_PA037_CK.

***************ALV报表需要定义的参数************************

TYPE-POOLS:SLIS.

DATA:GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,         "列描述内表,列清单

     GT_LAYPUT   TYPE SLIS_LAYOUT_ALV.

DATA:GRIDLSL TYPE LVC_S_GLAY.

DATA:

  GS_FIELDCAT TYPE LVC_S_FCAT,

  GS_LAYOUT   TYPE LVC_S_LAYO,

  G_REPID     TYPE SY-REPID,

  GT_SORT     TYPE LVC_T_SORT,

  GS_SORT     TYPE LVC_S_SORT.

***************ALV报表需要定义的参数************************

DATA:HS_AMOUNT      TYPE INT4.

DATA:LINE_C      TYPE STRING.

  DATA OUT_ITAB LIKE TABLE OF ZJTZWJCBCB WITH HEADER LINE.

  DATA OT_MESSAGE LIKE TABLE OF BAPIRETURN1 WITH HEADER LINE.

  DATA: OBJID TYPE HROBJID.

  DATA: REL_TAB LIKE TABLE OF HRI1001 WITH HEADER LINE.

  DATA:BEGIN OF GT_SHOW  OCCURS 0.

  DATA: XZK TYPE CHAR1.

          INCLUDE STRUCTURE ZJTZWJCBCB.

  DATA END OF GT_SHOW.

  DATA:BEGIN OF  OT_MESS OCCURS 0,

         PERNR    LIKE ZJTZWJCBCB-PERNR,

         NACHN(5),

         MESS(10),

       END OF OT_MESS.

  SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-003.

  PARAMETERS: 07P07 TYPE C RADIOBUTTON GROUP G1  DEFAULT 'X' USER-COMMAND FLAG.

  PARAMETERS: 06P06 TYPE C RADIOBUTTON GROUP G1   .

  SELECTION-SCREEN END OF BLOCK B2 .

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

PARAMETERS:P_OBJID    LIKE HRP1000-OBJID OBLIGATORY,

           P_DATA     LIKE SY-DATUM DEFAULT SY-DATUM OBLIGATORY,

           P_GLLB     LIKE HRP1000-OBJID,

           P_SCGS     LIKE ZHZPA002-ZSCGS DEFAULT 'ZHR' OBLIGATORY,"输出格式

           P_SCWB(29) .

SELECTION-SCREEN END OF BLOCK B1 .

TYPE-POOLS ICON.

DATA:HELP_SCGS LIKE TABLE OF ZSCGSPA002 WITH HEADER LINE. "员工花名册输出格式

DATA FUNCTXT TYPE SMP_DYNTXT.

TABLES: SSCRFIELDS.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_OBJID.

  PERFORM FRM_SET_SCR USING 'O' 'P_OBJID'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SCGS.

  PERFORM HELP_P_SCGS.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.

    IF SCREEN-NAME = 'P_SCWB'.

      SCREEN-INPUT = 0.

      MODIFY SCREEN.

    ENDIF.

  ENDLOOP.

INITIALIZATION.

  FUNCTXT-ICON_ID   = ICON_CREATE.

  FUNCTXT-ICON_TEXT = '创建输出格式'.

  SSCRFIELDS-FUNCTXT_02 = FUNCTXT.

  FUNCTXT-ICON_ID   = ICON_CHANGE.

  FUNCTXT-ICON_TEXT = '维护输出格式'.

  SSCRFIELDS-FUNCTXT_03 = FUNCTXT.

  FUNCTXT-ICON_ID   = ICON_DELETE_ROW.

  FUNCTXT-ICON_TEXT = '删除输出格式'.

  SSCRFIELDS-FUNCTXT_04 = FUNCTXT.

AT SELECTION-SCREEN.

START-OF-SELECTION.

  IF  06P06 IS INITIAL.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_SHOW FROM ZJTZWJCBCB WHERE FLAG = 0."未审批. c与01 关系

  ELSE.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_SHOW FROM ZJTZWJCBCB1 WHERE FLAG = 0."未审批. c与s 关系

  ENDIF.

END-OF-SELECTION.

  IF GT_SHOW[] IS  INITIAL.

    MESSAGE '所选对象无审批请求!' TYPE 'S' DISPLAY LIKE 'E'.

    EXIT.

  ENDIF.

  PERFORM DISPLAY_ALV.

FORM DISPLAY_ALV .

  PERFORM LAYOUT_BUILD.

  PERFORM FIELDCAT USING GT_FIELDCAT.

  PERFORM DISPLAY.

ENDFORM.

FORM LAYOUT_BUILD .

  GT_LAYPUT-COLWIDTH_OPTIMIZE    = 'X'.

  GT_LAYPUT-ZEBRA    = 'X'.

  GT_LAYPUT-DETAIL_INITIAL_LINES = 'X'.

  GT_LAYPUT-BOX_FIELDNAME = 'XZK'.

ENDFORM.

FORM FIELDCAT  USING GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

  DATA: AFIELDCAT TYPE SLIS_FIELDCAT_ALV,

        POS       TYPE I VALUE 1.

  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.

    afieldcat-no_out = &4.

    afieldcat-checkbox = &5.

    afieldcat-edit = &6.

    append afieldcat to GT_FIELDCAT.

  END-OF-DEFINITION.

  CLEAR: GT_FIELDCAT[], GS_FIELDCAT.

  CLEAR GS_FIELDCAT.

  AFIELDCAT-FIELDNAME = 'XZK'.

  AFIELDCAT-SELTEXT_L = '选择审批对象'.

  AFIELDCAT-CHECKBOX = 'X'.

  AFIELDCAT-EDIT = 'X'.

  APPEND AFIELDCAT TO GT_FIELDCAT.

*  D_GET_FIELD  'FLAG '   '状态 '  ''   '' ''   ''.

  D_GET_FIELD  'PERNR '   '人员编号 '  ''   '' ''   ' '.

  D_GET_FIELD  'NACHN '            '姓名    '        ''  '' ''   'X'.

  D_GET_FIELD  'ICNUM '            '身份证号 '        ''  '' ''   ''.

  D_GET_FIELD  'RZRQ     '            '入职日期  '        ''  '' ''   ''.

  D_GET_FIELD  'ORG1    '            '事业部/板块'        ''  '' ''   ''.

  D_GET_FIELD  'ORG2       '            '三级组织    '        ''  '' ''   ''.

  D_GET_FIELD  'ORG3       '            '四级组织    '        ''  '' ''   ''.

  D_GET_FIELD  'ORG4       '            '五级组织    '        ''  '' ''   ''.

  D_GET_FIELD  'ORG5       '            '六级组织    '        ''  '' ''   ''.

  D_GET_FIELD  'ZHIWEI    '            '职位'        ''  '' ''   ''.

  D_GET_FIELD  'ZHIWU    '            '职务'        ''  '' ''   ''.

  D_GET_FIELD  'STEXT1    '            '管理类别1'        ''  '' ''   ''.

  D_GET_FIELD  'STEXT2    '            '管理类别2'        ''  '' ''   ''.

  D_GET_FIELD  'STEXT3    '            '管理类别3'        ''  '' ''   ''.

  D_GET_FIELD  'STEXT4    '            '管理类别4'        ''  '' ''   ''.

  D_GET_FIELD  'STEXT5    '            '管理类别5'        ''  '' ''   ''.

ENDFORM.

*data: gs_grid type lvc_s_glay. "实现从屏幕选择更新到内部表

FORM DISPLAY .

*  -------------------------------

  DATA:LT_FIELDCAT  TYPE  SLIS_T_FIELDCAT_ALV.

  FIELD-SYMBOLS <LS_FILED> LIKE LINE OF LT_FIELDCAT." CHECKBOX

  CLEAR LT_FIELDCAT[].

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

    EXPORTING

      I_STRUCTURE_NAME       = 'ZJTZWJCBCB'

    CHANGING

      CT_FIELDCAT            = LT_FIELDCAT

    EXCEPTIONS

      INCONSISTENT_INTERFACE = 1

      PROGRAM_ERROR          = 2

      OTHERS                 = 3.

  IF SY-SUBRC <> 0.

* Implement suitable error handling here

  ENDIF.

  LOOP AT LT_FIELDCAT ASSIGNING <LS_FILED> WHERE FIELDNAME = 'PERNR'.

    <LS_FILED>-CHECKBOX      = 'X'.

    <LS_FILED>-EDIT          = 'X'.

    <LS_FILED>-SELTEXT_L          = '选择'.

    <LS_FILED>-SELTEXT_M          = '选择'.

    <LS_FILED>-SELTEXT_S          = '选择'.

  ENDLOOP.

*  -------------------------------

*  GRIDLSL-EDT_CLL_CB            = 'X'.

********  删除选择行

  DATA:I_GRID_TITLE TYPE  LVC_TITLE.

  DESCRIBE TABLE GT_SHOW LINES HS_AMOUNT.

  LINE_C = HS_AMOUNT.

  CONCATENATE '数据条目数:' LINE_C INTO I_GRID_TITLE.

********  删除选择行

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

      I_GRID_TITLE             = I_GRID_TITLE

      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                 = GT_SHOW

    EXCEPTIONS

      PROGRAM_ERROR            = 1

      OTHERS                   = 2.

ENDFORM.                         "事件CALLBACK.

FORM USER_STATUS USING EXTAB TYPE SLIS_T_EXTAB.

**出口程序触发事件对应子程序: FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS 'STATUS_ALV'. "自定义按钮不要系统自带的

*  SET TITLEBAR 'TITLE_ALV'.

ENDFORM.                    "user_status

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM

                        RS_SELFIELD TYPE SLIS_SELFIELD.

  DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.

  FIELD-SYMBOLS <LS_ALV> LIKE LINE OF GT_SHOW.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    IMPORTING

      E_GRID = L_GRID.

  CALL METHOD L_GRID->CHECK_CHANGED_DATA.

  RS_SELFIELD-REFRESH = 'X'. "或者

*    CALL METHOD L_GRID->REFRESH_TABLE_DISPLAY.

  CASE R_UCOMM.

    WHEN 'ALL'.

      LOOP AT GT_SHOW ASSIGNING <LS_ALV> .

        <LS_ALV>-XZK = 'X'.

      ENDLOOP.

    WHEN 'DEL'.

      DELETE GT_SHOW   WHERE XZK = 'X' .

    WHEN 'CAN'.

      LOOP AT GT_SHOW ASSIGNING <LS_ALV> .

        <LS_ALV>-XZK = ''.

      ENDLOOP.

    WHEN 'BACK'.

      SET SCREEN 0.

      LEAVE SCREEN.

    WHEN 'SAVE'.

      LOOP AT GT_SHOW WHERE XZK = 'X' .

        MOVE-CORRESPONDING GT_SHOW TO OUT_ITAB.

        OUT_ITAB-FLAG = 1.

        APPEND OUT_ITAB.CLEAR OUT_ITAB.

*        modify

        IF 06P06 IS INITIAL.

          MODIFY  ZJTZWJCBCB FROM TABLE OUT_ITAB.

        ELSE.

          MODIFY  ZJTZWJCBCB1 FROM TABLE OUT_ITAB.

        ENDIF.

      ENDLOOP.

      PERFORM SAVE.

  ENDCASE.

ENDFORM.                  "user_command

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

*&      Form  SAVE

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

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM SAVE .

  IF 06P06 IS INITIAL.

    LOOP AT OUT_ITAB.

      CLEAR:REL_TAB,REL_TAB[].

      REL_TAB-PLVAR = '01'.

      REL_TAB-OTYPE = '01'.

      REL_TAB-OBJID = OUT_ITAB-OBJID5."01最后一级的objid

      REL_TAB-INFTY = '1001'.

      REL_TAB-RSIGN = 'B'.

      REL_TAB-RELAT = 'Z02'.

      REL_TAB-ISTAT = '1'.

      REL_TAB-BEGDA = OUT_ITAB-ZSXRQ.

      REL_TAB-ENDDA = '99991231'.

      REL_TAB-SCLAS = 'C'.

*    rel_tab-prozt = '100'."权重

      REL_TAB-SOBID = OUT_ITAB-OBJID6."职务的objid

      CONCATENATE 'C' OUT_ITAB-OBJID6 INTO REL_TAB-VARYF."上级节点

      APPEND REL_TAB.CLEAR:REL_TAB.

      CALL FUNCTION 'RH_RELATION_WRITE'

* EXPORTING

*   VTASK                      = 'D'

*   KEEP_LUPD                  = ' '

        TABLES

          RELATION             = REL_TAB

*         ERR_RELATION         =

        EXCEPTIONS

          NO_AUTHORITY         = 1

          RELATION_NOT_ALLOWED = 2

          OBJECT_NOT_FOUND     = 3

          WRONG_DATE_FORMAT    = 4

          TIME_NOT_VALID       = 5

          ERROR_DURING_INSERT  = 6

          UNDEFINED            = 7

          OTHERS               = 8.

      IF SY-SUBRC = 0.

        OT_MESS-PERNR = OUT_ITAB-PERNR.

        OT_MESS-NACHN = OUT_ITAB-NACHN.

        OT_MESS-MESS = '管理类别维护成功'.

        APPEND OT_MESS.CLEAR OT_MESS.

      ELSE.

        OT_MESS-PERNR = OUT_ITAB-PERNR.

        OT_MESS-NACHN = OUT_ITAB-NACHN.

        OT_MESS-MESS = '管理类别维护失败'.

        APPEND OT_MESS.CLEAR OT_MESS.

      ENDIF.

    ENDLOOP.

  ELSE.

    LOOP AT OUT_ITAB .

      CLEAR:REL_TAB,REL_TAB[].

      REL_TAB-PLVAR = '01'.

      REL_TAB-OTYPE = 'S'.

      REL_TAB-OBJID = OUT_ITAB-OBJID7."岗位的objid

      REL_TAB-INFTY = '1001'.

      REL_TAB-RSIGN = 'B'.

      REL_TAB-RELAT = '007'.

      REL_TAB-BEGDA = OUT_ITAB-ZSXRQ.

      REL_TAB-ENDDA = '99991231'.

      REL_TAB-SCLAS = 'C'.

      REL_TAB-PROZT = '100'."权重

      REL_TAB-SOBID = OUT_ITAB-OBJID6."C的objid

      CONCATENATE 'C' OUT_ITAB-OBJID6 INTO REL_TAB-VARYF."上级节点

      APPEND REL_TAB.CLEAR:REL_TAB.

      CALL FUNCTION 'RH_RELATION_WRITE'

* EXPORTING

*   VTASK                      = 'D'

*   KEEP_LUPD                  = ' '

        TABLES

          RELATION             = REL_TAB

*         ERR_RELATION         =

        EXCEPTIONS

          NO_AUTHORITY         = 1

          RELATION_NOT_ALLOWED = 2

          OBJECT_NOT_FOUND     = 3

          WRONG_DATE_FORMAT    = 4

          TIME_NOT_VALID       = 5

          ERROR_DURING_INSERT  = 6

          UNDEFINED            = 7

          OTHERS               = 8.

      IF SY-SUBRC = 0.

        OT_MESS-PERNR = OUT_ITAB-PERNR.

        OT_MESS-NACHN = OUT_ITAB-NACHN.

        OT_MESS-MESS = '职务维护成功'.

        APPEND OT_MESS.CLEAR OT_MESS.

      ELSE.

        OT_MESS-PERNR = OUT_ITAB-PERNR.

        OT_MESS-NACHN = OUT_ITAB-NACHN.

        OT_MESS-MESS = '职位维护失败'.

        APPEND OT_MESS.CLEAR OT_MESS.

      ENDIF.

    ENDLOOP.

  ENDIF.

  CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'

    EXPORTING

      ENDPOS_COL   = 50

      ENDPOS_ROW   = 20

      STARTPOS_COL = 10

      STARTPOS_ROW = 5

      TITLETEXT    = '提示消息'

* IMPORTING

*     CHOISE       =

    TABLES

      VALUETAB     = OT_MESS

* EXCEPTIONS

*     BREAK_OFF    = 1

*     OTHERS       = 2

    .

  IF SY-SUBRC <> 0.

* Implement suitable error handling here

  ENDIF.

ENDFORM.

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 HELP_P_SCGS .

  DATA:IT_RETURN_TAB LIKE  TABLE OF DDSHRETVAL WITH HEADER LINE .

  CLEAR:HELP_SCGS,HELP_SCGS[].

  SELECT * INTO CORRESPONDING FIELDS OF TABLE HELP_SCGS FROM ZSCGSPA002.

  SORT HELP_SCGS BY TEXT1.

*  DELETE ADJACENT DUPLICATES FROM help_scgs COMPARING zscgs.

  REFRESH:IT_RETURN_TAB.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

    EXPORTING

*     DDIC_STRUCTURE   = ' '

      RETFIELD         = 'TEXT1'

*     PVALKEY          = ' '

      DYNPPROG         = SY-REPID

      DYNPNR           = SY-DYNNR

      DYNPROFIELD      = 'TEXT1'

*     STEPL            = 0

*     WINDOW_TITLE     =

*     VALUE            = ' '

      VALUE_ORG        = 'S'

*     MULTIPLE_CHOICE  = ' '

*     DISPLAY          = ' '

      CALLBACK_PROGRAM = SY-REPID

      CALLBACK_FORM    = 'CB_FORM'

*     CALLBACK_METHOD  =

*     MARK_TAB         =

* IMPORTING

*     USER_RESET       =

    TABLES

      VALUE_TAB        = HELP_SCGS

*     FIELD_TAB        = itab_F4

      RETURN_TAB       = IT_RETURN_TAB

*     DYNPFLD_MAPPING  =

* EXCEPTIONS

*     PARAMETER_ERROR  = 1

*     NO_VALUES_FOUND  = 2

*     OTHERS           = 3

    .

  IF SY-SUBRC <> 0.

* Implement suitable error handling here

  ENDIF.

ENDFORM.

FORM CB_FORM TABLES RECORD_TAB STRUCTURE SEAHLPRES

              CHANGING SHLP TYPE SHLP_DESCR_T

                       CALLCONTROL LIKE DDSHF4CTRL.

  DATA: INTERFACE LIKE LINE OF SHLP-INTERFACE.

  READ TABLE SHLP-INTERFACE INTO INTERFACE INDEX 1.

  INTERFACE-SHLPFIELD+4(1) = '3'.

  INTERFACE-VALFIELD = 'P_SCWB'.

  APPEND INTERFACE TO SHLP-INTERFACE.

ENDFORM.                    "bo_callback_form

猜你喜欢

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