*&---------------------------------------------------------------------*
*& 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