******************************************************
REPORT zhrdel001 LINE-SIZE 139 NO STANDARD PAGE HEADING MESSAGE-ID 00.
* 4.6C LCP
* L9CK024231 09/00 note 335072
* 4.6A
* AHRK044783 03/99 Delete transparent RGDIR and WPBP if they exist
* 4.5
* AHRK02360100 09/98 Read Molga from cluster CU instead of infotypes
*&---------------------------------------------------------------------*
*& Report RPUDEL20
*&---------------------------------------------------------------------*
*REPORT RPUDEL20 LINE-SIZE 139 NO STANDARD PAGE HEADING MESSAGE-ID 00.
* only printable up to line-size 132
************************************************************************
* Includes *
************************************************************************
INCLUDE <icon>.
*********************************************************************
* Tables
*********************************************************************
TABLES: t500l, pcl2, pernr, t000, "t500p out AHRK02360100
hrpy_rgdir, "transparent RGDIR "AHRK044783
hrpy_wpbp. "transparent WPBP "AHRK044783
INFOTYPES: 0001.
*NODES: peras.
*********************************************************************
* DATA
*********************************************************************
DATA:zyy(4),zmm(2),zny(6),zzt(1),zbb(1)."¿ØÖƼǼµÄÄêÔÂ/״̬,°æ±¾--ZXY
DATA:gs_date TYPE sy-datum,gs_datm TYPE sy-datum.
DATA: BEGIN OF return, "returncode
back(4) VALUE 'BACK',
exit(4) VALUE 'EXIT',
show(4) VALUE 'SHOW',
canc(4) VALUE 'CANC',
sort(4) VALUE 'SORT',
del(4) VALUE 'DEL ',
entmark(4) VALUE 'ENTM',
markall(4) VALUE 'MARK',
expand_all(4) VALUE 'EXPA',
collapse_all(4) VALUE 'COLL',
END OF return.
DATA: persnr LIKE pernr-pernr,
previous_persnr LIKE persnr.
DATA: c_pernr(8), c_seqnr(5).
DATA: country_grouping LIKE t500p-molga. "type numc(2)
DATA: relid LIKE t500l-relid.
DATA: sortfield(40).
RANGES: sortfd FOR sortfield.
DATA: rgdir LIKE pc261 OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF list_rgdir OCCURS 0,
persnr LIKE persnr,
selec TYPE c.
INCLUDE STRUCTURE pc261.
DATA: END OF list_rgdir.
DATA: hide_seqnr LIKE pc261-seqnr,
clicked_seqnr LIKE pc261-seqnr,
hide_persnr LIKE persnr.
DATA: first TYPE i VALUE 1, " 1 before first print_list, 0 after.
line_no_x TYPE i.
DATA: answer(1) TYPE c.
DATA: BEGIN OF deleted_list OCCURS 0, "QNY240997
persnr LIKE persnr,
fpper LIKE pc261-fpper,
inper LIKE pc261-inper,
bondt LIKE rgdir-bondt, "QNY021097
payid LIKE rgdir-payid, "QNY021097
END OF deleted_list.
* -------- DATA & CONSTANTS FOR PROTOCOL -----------------
DATA: prot_obj LIKE balhdr-object VALUE 'HRPU'.
DATA: prot_mes LIKE balmi OCCURS 0 WITH HEADER LINE.
"used as interface to function appl_log_write_messages
DATA: BEGIN OF prot_nr OCCURS 1. "interface for appl_log_write_db
INCLUDE STRUCTURE balnri.
DATA: END OF prot_nr.
*--------- Data for more than 1 pernr - functionality ---------------
DATA: BEGIN OF persnr_list OCCURS 0 ,
selec TYPE c ,
persnr LIKE persnr,
molga LIKE country_grouping,
relid LIKE relid,
END OF persnr_list.
DATA: BEGIN OF bad_persnr_list OCCURS 0,
persnr LIKE persnr,
texts(50),
END OF bad_persnr_list.
DATA: fieldname(30). "for get cursor command at line-selection
DATA: display_bad, "display enqueued or bad pers. numbers? 'X' = yes
display_deleted. "display deleted payroll results? 'X' = yes
DATA: hide_icontype(6).
*****ÏÔʾºËËãÆÚ¼äÊÇ¡®000000¡¯µÄн×ʽá¹û
*SELECTION-SCREEN:BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS:biaoshi AS CHECKBOX DEFAULT ' '.
*SELECTION-SCREEN COMMENT (40) text-092.
*SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN:END OF BLOCK bl1.
*ÅжÏÊÇ·ñΪÒÑÍ˳öºËËãµÄн×ÊÆÚ¼ä---ZXY.
AT SELECTION-SCREEN.
***20190919
* IF SY-HOST = 'SAPPRD2'.
* LEAVE PROGRAM.
* ENDIF.
*
* if sy-sysid = 'PRO' or sy-host = 'SAPPRD1' .
** OR sy-sysid = 'DVL'.
* message '不能在生产系统执行该程序!' type 'E'.
* endif.
AT SELECTION-SCREEN OUTPUT.
CLEAR:pnpabkrs[],pnpabkrs-low.
IF pnpabkrs[] IS INITIAL AND pnpabkrs-low IS INITIAL.
pnpabkrs-low = pnpxabkr .
pnpabkrs-sign = 'I' .
pnpabkrs-option = 'EQ' .
APPEND pnpabkrs.
ENDIF.
***20190919
*只校验是否生产系统,测试系统需要支持批量删多个月的薪资结果
* SELECT SINGLE pabrj pabrp state INTO (zyy,zmm,zzt) FROM t569v
* WHERE abkrs = pnpxabkr.
* IF sy-subrc = 0.
* CONCATENATE zyy zmm INTO zny.
* IF pnpdisbd+0(6) < zny
* OR ( pnpdisbd+0(6) = zny AND zzt = 3 ).
** ZBB = 1."È·Èϰæ
** MESSAGE e398 WITH '±¾ÔÂÒÑÍ˳öн×ʺËË㣬²»ÔÊÐíɾ³ý½á¹û!'.
* MESSAGE e398 WITH '只能删除当前核算周期内的薪资数据!'.
* STOP.
** ELSE.
** ZBB = 2."¼ìºË°æ
* ENDIF.
* ENDIF.
*********************************************
************************************************************************
PERFORM check_client.
************************************************************************
GET pernr.
************************************************************************
persnr = pernr-pernr. "AHRK02360100 begin
*------- get country of personnel number
*(needed for authority check on cluster & for REBUILD_PAYROLL_DIRECTORY)
PERFORM check_authority USING 'CU'.
CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
persnr = pernr-pernr
IMPORTING
molga = country_grouping
TABLES
in_rgdir = rgdir
EXCEPTIONS
no_record_found = 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.
bad_persnr_list-persnr = persnr.
IF sy-subrc = 1.
bad_persnr_list-texts = 'has no payroll results!'(072).
ELSE.
CLEAR bad_persnr_list-texts.
ENDIF.
COLLECT bad_persnr_list.
REJECT.
ENDIF.
REFRESH rgdir.
* reading from infotype deleted "AHRK02360100 end
*------- get RELID (area identification for MOLGA in import/export
* data base PCL2) -----------
SELECT SINGLE * FROM t500l
WHERE molga = country_grouping.
relid = t500l-relid.
IF sy-subrc NE 0. "ie no entry in table T500L for Molga=country_gr
bad_persnr_list-persnr = persnr.
CONCATENATE
'No entry in table T500L for Molga = '(009)
country_grouping
INTO bad_persnr_list-texts.
COLLECT bad_persnr_list.
ENDIF.
*------- authority check ---------------------
PERFORM check_authority USING relid.
*------- enqueue personnel number ------------ move !! qnytest
PERFORM enqueue_pernr IN PROGRAM sapfp50g
USING persnr space.
IF sy-subrc NE 0. "pernr is already enqueued
bad_persnr_list-persnr = persnr.
CONCATENATE 'enqueued by user: '(073)
sy-msgv1 "user who has enqueued pernr
INTO bad_persnr_list-texts.
COLLECT bad_persnr_list.
ELSE.
*------- fill table with payroll records ---------------------
PERFORM fill_rgdir TABLES list_rgdir rgdir
USING persnr.
*------- add persnr to list of successful persnr -------------
persnr_list-persnr = persnr.
persnr_list-molga = country_grouping.
persnr_list-relid = relid.
COLLECT persnr_list.
ENDIF.
*qnytest endprovide.
CLEAR:gs_date,gs_datm.
gs_date = pnpdisbd.
gs_datm = pnpdised.
************************************************************************
END-OF-SELECTION. " end of loop over personnel numbers
************************************************************************
*------- print list of payroll results ---------------
PERFORM print_persnr_list TABLES list_rgdir persnr_list
CHANGING hide_seqnr hide_persnr
display_bad display_deleted.
************************************************************************
AT USER-COMMAND.
************************************************************************
PERFORM maintain_list TABLES list_rgdir
USING hide_seqnr clicked_seqnr hide_persnr.
"clicked_seqnr only non-initial at double click!
CASE sy-ucomm.
WHEN return-del.
PERFORM delete_payroll_results.
WHEN return-entmark. "select none
LOOP AT list_rgdir.
list_rgdir-selec = ' '.
MODIFY list_rgdir.
ENDLOOP.
WHEN return-markall. "select all
LOOP AT list_rgdir.
list_rgdir-selec = 'X'.
MODIFY list_rgdir.
ENDLOOP.
WHEN return-exit.
PERFORM dequeue_pernr IN PROGRAM sapfp50g
USING persnr.
LEAVE PROGRAM.
WHEN return-canc.
PERFORM dequeue_pernr IN PROGRAM sapfp50g
USING persnr.
LEAVE TO SCREEN 0.
WHEN return-expand_all.
LOOP AT persnr_list.
persnr_list-selec = 'X'.
MODIFY persnr_list.
ENDLOOP.
WHEN return-collapse_all.
LOOP AT persnr_list.
persnr_list-selec = ' '.
MODIFY persnr_list.
ENDLOOP.
ENDCASE.
PERFORM print_persnr_list TABLES list_rgdir persnr_list
CHANGING hide_seqnr hide_persnr
display_bad display_deleted.
sy-lsind = 0.
************************************************************************
AT LINE-SELECTION.
************************************************************************
GET CURSOR FIELD fieldname.
IF fieldname = 'ICON_EXPAND'. "expand list for current persnr
IF hide_icontype = 'BADIN '. "QNY270997
display_bad = 'X'. "QNY270997
ELSEIF hide_icontype = 'DELIN '. "QNY270997
display_deleted = 'X'. "QNY270997
ELSE. "QNY270997
LOOP AT persnr_list WHERE persnr = hide_persnr.
persnr_list-selec = 'X'.
MODIFY persnr_list.
ENDLOOP.
ENDIF. "QNY270997
ELSEIF fieldname = 'ICON_COLLAPSE'. "collapse list for current persnr
IF hide_icontype = 'BADOUT'. "QNY270997
display_bad = ' '. "QNY270997
ELSEIF hide_icontype = 'DELOUT'. "QNY270997
display_deleted = ' '. "QNY270997
ELSE. "QNY270997
LOOP AT persnr_list WHERE persnr = hide_persnr.
persnr_list-selec = ' '.
MODIFY persnr_list.
ENDLOOP.
ENDIF. "QNY270997
ELSEIF fieldname = 'ICON_SELECT_ALL'."select all results for curr.per
LOOP AT list_rgdir WHERE persnr = hide_persnr.
list_rgdir-selec = 'X'.
MODIFY list_rgdir.
ENDLOOP.
ELSEIF fieldname = 'ICON_DESELECT_ALL'. "deselect results for curr.per
LOOP AT list_rgdir WHERE persnr = hide_persnr.
list_rgdir-selec = ' '.
MODIFY list_rgdir.
ENDLOOP.
ELSE. "if there was double click on a line in list_rgdir table
" toggle between 'selected' and 'not selected'.
IF NOT hide_seqnr IS INITIAL. "QNY270997
CLEAR clicked_seqnr.
clicked_seqnr = hide_seqnr.
ELSE. "QNY270997
CLEAR clicked_seqnr. "QNY270997
ENDIF. "QNY270997
ENDIF.
IF fieldname NE 'ICON_DESELECT_ALL'
AND fieldname NE 'ICON_SELECT_ALL'. "maintain_list would delete
"the entries made by these 2
PERFORM maintain_list TABLES list_rgdir
USING hide_seqnr clicked_seqnr hide_persnr.
ENDIF.
CLEAR: clicked_seqnr,
hide_seqnr,
hide_persnr,
hide_icontype.
PERFORM print_persnr_list TABLES list_rgdir persnr_list
CHANGING hide_seqnr hide_persnr
display_bad display_deleted.
sy-lsind = 0.
CLEAR fieldname.
*------------------- form routines ---------------------------------
************************************************************************
FORM delete_payroll_results.
************************************************************************
* check if payroll results were selected for deletion
LOOP AT list_rgdir WHERE selec NE ' '.
EXIT.
ENDLOOP.
IF sy-subrc NE 0.
MESSAGE e015(5a) WITH 'payroll result'(004).
"choose payroll result, please
ENDIF.
* really delete ?
CLEAR answer.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
defaultoption = 'N'
diagnosetext1 = text-020 "warning against inconsistency
diagnosetext2 = text-021
diagnosetext3 = text-022 "red = already booked!
textline1 = ' '
textline2 = text-023 "delete nevertheless?
titel = 'Delete?'(026)
start_column = 25
start_row = 6
IMPORTING
answer = answer
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE e241(57) "error in function module &1 with return code &2
WITH 'POPUP_TO_CONFIRM_WITH_MESSAGE' sy-subrc.
ENDIF.
IF answer = 'J'. "delete!
* fill table with first keyfield of pcl2: sortfield (pernr,seqnr)
REFRESH sortfd.
* gs_date = pnpbegda.
* gs_datm = pnpendda.
LOOP AT persnr_list.
LOOP AT list_rgdir WHERE
persnr = persnr_list-persnr AND
selec NE ' ' AND abkrs IN pnpabkrs AND fpper BETWEEN gs_date+0(6) AND gs_datm+0(6).
* pernr + seqnr -> char field sortfield (pcl2-srtfd)
MOVE list_rgdir-persnr TO c_pernr.
MOVE list_rgdir-seqnr TO c_seqnr.
* fill internal table with 'sortfield' of all selected entries
CONCATENATE c_pernr c_seqnr INTO sortfd-low.
sortfd-sign = 'I'. "in
sortfd-option = 'EQ'. "equal
APPEND sortfd.
ENDLOOP.
* if no sequence number is selected (sy-subrc = 4), exit the loop
* to avoid deletion with empty sortfd.
* (if sortfd was empty, EVERYTHING on the cluster would be deleted!)
CHECK sy-subrc = 0.
* delete entries with key fields in table sortfield_tab
DELETE FROM pcl2
WHERE relid = persnr_list-relid
AND srtfd IN sortfd.
IF sy-subrc = 0. "delete transparent RGDIR /WPBP &
"write only successful deletions
"into application log
LOOP AT list_rgdir WHERE persnr = persnr_list-persnr
AND selec NE ' ' AND abkrs IN pnpabkrs AND fpper BETWEEN gs_date+0(6) AND gs_datm+0(6).
* delete transparent RGDIR and WPBP if they exist
* (they may not exist for old results, then it is no problem anyway)
DELETE FROM hrpy_rgdir WHERE "AHRK044783
pernr = list_rgdir-persnr AND "AHRK044783
seqnr = list_rgdir-seqnr AND abkrs IN pnpabkrs AND fpper BETWEEN gs_date+0(6) AND gs_datm+0(6). "AHRK044783
DELETE FROM hrpy_wpbp WHERE "AHRK044783
pernr = list_rgdir-persnr AND "AHRK044783
seqnr = list_rgdir-seqnr AND begda <= gs_datm AND endda >= gs_date.. "AHRK044783
* analogous to use of application log in program rpcdpu01
PERFORM anwend_prot_ini USING persnr_list-persnr.
MOVE-CORRESPONDING list_rgdir TO deleted_list. "QNY240997
APPEND deleted_list. "QNY240997
DELETE list_rgdir.
ENDLOOP.
PERFORM application_log.
REFRESH prot_mes. "QNY270897
ELSE. "ie if delete was unsuccessful
MESSAGE e094(5a). "Fehler beim Löschen
ENDIF.
REFRESH sortfd.
PERFORM rebuild_payroll_directory.
ENDLOOP. "loop over persnr
ELSE. " if answer to 'delete?' was NO or CANCEL
EXIT.
ENDIF. " ...of : if answer = 1 (really delete?)
ENDFORM. "DELETE_PAYROLL_RESULTS
************************************************************************
FORM rebuild_payroll_directory.
************************************************************************
CALL FUNCTION 'REBUILD_PAYROLL_DIRECTORY'
EXPORTING
employee_number = persnr_list-persnr
country_grouping = persnr_list-molga
payroll_cluster = persnr_list-relid
save_new_directory = 'X'
TABLES
new_directory = rgdir
EXCEPTIONS
country_grouping_incorrect = 1
country_grouping_initial = 2
no_authority_for_cluster = 3
error_loading_function_pool = 4
error_generating_function_pool = 5
cant_load_payroll_results = 6
no_payroll_results_exist = 7
cant_read_payroll_result = 8
wrong_payroll_country_group = 9
cant_reorganize_directory = 10
duplicate_records = 11
cant_update_new_directory = 12
employee_number_initial = 13
no_authority_for_directory = 14
OTHERS = 15.
CASE sy-subrc.
WHEN 0 OR 7.
MESSAGE s899(5a) WITH
'Satz markierter Abrechnungsergebnisse ist gelöscht'(007)
'und das Cluster CU aktualisiert'(008).
WHEN 6.
MESSAGE i899(5a) WITH
'Die Abrechnungsergebnisse können nicht '(090)
' geladen werden für Personalnummer'(091) persnr_list-persnr.
WHEN OTHERS.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDCASE.
ENDFORM. "REBUILD_PAYROLL_DIRECTORY
************************************************************************
* form print_persnr_list
* main printing routine
************************************************************************
FORM print_persnr_list TABLES $list_rgdir STRUCTURE list_rgdir
$persnr_list STRUCTURE persnr_list
CHANGING $hide_seqnr LIKE hide_seqnr
$hide_persnr LIKE persnr
$display_bad LIKE display_bad
$display_deleted LIKE display_deleted.
LOOP AT $persnr_list.
SET PF-STATUS 'DEL_LIST'.
LOOP AT $list_rgdir
WHERE persnr = $persnr_list-persnr.
ENDLOOP.
IF sy-subrc = 0. "if payroll results exist:
IF $persnr_list-selec = 'X'.
PERFORM print_list TABLES $list_rgdir
USING $persnr_list-persnr
CHANGING $hide_seqnr $hide_persnr.
ELSE.
PERFORM pernr_invisible USING $persnr_list-persnr.
$hide_persnr = $persnr_list-persnr.
HIDE: $hide_persnr.
ENDIF.
ELSE. "no payroll results for that personnel number
bad_persnr_list-persnr = $persnr_list-persnr.
bad_persnr_list-texts = 'has no payroll results!'(072).
COLLECT bad_persnr_list.
ENDIF.
ENDLOOP.
IF sy-subrc = 4. "no valid personnel numbers
WRITE: /1 icon_negative AS ICON,
13 'No valid personnel numbers chosen.'(077)
COLOR COL_NORMAL.
ENDIF.
PERFORM print_deleted_list TABLES deleted_list
USING $display_deleted.
PERFORM print_bad_persnr TABLES bad_persnr_list
USING $display_bad.
ENDFORM. "PRINT_PERSNR_LIST
************************************************************************
* Form fill_rgdir
* (rgdir contains list of payroll results for selected personnel number)
************************************************************************
FORM fill_rgdir TABLES $list_rgdir STRUCTURE list_rgdir
$rgdir STRUCTURE pc261
USING $persnr LIKE persnr.
CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
persnr = $persnr
TABLES
in_rgdir = $rgdir
EXCEPTIONS
no_record_found = 1
OTHERS = 2.
IF sy-subrc = 1. "no_record_found is dealt with later
REFRESH $rgdir.
ELSEIF sy-subrc = 2.
MESSAGE e899(5a) WITH
'Error in function module CU_READ_RGDIR for personnel number'(029)
$persnr .
ENDIF.
* IF biaoshi = 'X'.
* LOOP AT $rgdir.
**Ö»×·¼ÓÒÑÍ˳öн×ʼÆËãÒÔºóµÄÄêÔµÄн×ʽá¹û--ZXY
* IF $rgdir-inper+0(6) = '000000' AND zzt <> 3.
* list_rgdir-persnr = $persnr.
* MOVE-CORRESPONDING $rgdir TO $list_rgdir .
* APPEND $list_rgdir.
* ENDIF.
* ENDLOOP.
*
* ELSE.
* rgdir -> list_rgdir
LOOP AT $rgdir.
*Ö»×·¼ÓÒÑÍ˳öн×ʼÆËãÒÔºóµÄÄêÔµÄн×ʽá¹û--ZXY
IF $rgdir-inper+0(6) > zny OR
( $rgdir-inper+0(6) = zny AND zzt <> 3 ).
list_rgdir-persnr = $persnr.
MOVE-CORRESPONDING $rgdir TO $list_rgdir .
APPEND $list_rgdir.
ENDIF.
ENDLOOP.
* ENDIF.
ENDFORM. "fill_rgdir
**********************************************
*********************************************************************
* Form print_list
*********************************************************************
FORM print_list TABLES $list_rgdir STRUCTURE list_rgdir
USING $persnr LIKE persnr
CHANGING $hide_seqnr LIKE list_rgdir-seqnr
$hide_persnr LIKE $persnr.
DATA: intensified_on TYPE i VALUE 0.
PERFORM print_header USING $persnr
CHANGING $hide_persnr.
LOOP AT $list_rgdir WHERE persnr = $persnr. " only for current pernr
IF intensified_on = 0.
FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
intensified_on = 1.
ELSE.
FORMAT COLOR COL_NORMAL INTENSIFIED ON.
intensified_on = 0.
ENDIF.
PERFORM buch_test USING $list_rgdir $persnr.
"print line in red if result is already booked
PERFORM write_line USING $list_rgdir.
$hide_seqnr = $list_rgdir-seqnr.
HIDE: $hide_seqnr, $hide_persnr. "QNY270997
ENDLOOP.
CLEAR: $hide_seqnr, $hide_persnr.
WRITE: /1 sy-uline(139).
IF first = 1.
first = 0.
IF sy-subrc NE 0.
SET PF-STATUS 'MENU'. "empty status
MESSAGE e116(3g) WITH persnr. "no payroll results for persnr
ENDIF.
ENDIF.
ENDFORM. " print_list
*********************************************************************
* Form print_header
*********************************************************************
* adapted from form print_header in RPUDIR00
* 'selec' checkbox added -> different spacing
*----------------------------------------------------------------------*
FORM print_header USING $persnr LIKE pernr-pernr
CHANGING $hide_persnr LIKE hide_persnr.
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
SKIP 1.
WRITE: /1 icon_collapse AS ICON HOTSPOT,
4 icon_select_all AS ICON HOTSPOT,
6 icon_deselect_all AS ICON HOTSPOT,
13 text-003 , " 'Personalnummer...........'(t01),
28 $persnr.
$hide_persnr = $persnr.
HIDE: $hide_persnr.
FORMAT RESET.
WRITE:/12 sy-uline(59),
71 sy-uline(32),
/12 sy-vline,
13(58) 'Für-Information'(h39) COLOR COL_HEADING INTENSIFIED
ON,
70 sy-vline,
71 sy-vline,
72(31) 'In-Information'(h40) COLOR COL_HEADING INTENSIFIED
ON,
102 sy-vline.
WRITE:/1 sy-uline(139),
/1 sy-vline,
3 sy-vline,
4(5) 'Seqnr'(h01) COLOR COL_HEADING INTENSIFIED ON,
9 sy-vline,
10(1) 'S'(h02) COLOR COL_HEADING INTENSIFIED ON,
11 sy-vline,
12 sy-vline,
13(2) 'AK'(h03) COLOR COL_HEADING INTENSIFIED ON,
15 sy-vline,
16(2) 'PM'(h04) COLOR COL_HEADING INTENSIFIED ON,
18 sy-vline,
19(7) 'Periode'(h05) COLOR COL_HEADING INTENSIFIED ON,
26 sy-vline,
27(10) 'Beginn'(h06) COLOR COL_HEADING INTENSIFIED ON,
37 sy-vline,
38(10) 'Ende'(h07) COLOR COL_HEADING INTENSIFIED ON,
48 sy-vline,
49(2) 'PT'(h08) COLOR COL_HEADING INTENSIFIED ON,
51 sy-vline,
52(2) 'PI'(h09) COLOR COL_HEADING INTENSIFIED ON,
54 sy-vline,
55(10) 'SDatum'(h10) COLOR COL_HEADING INTENSIFIED ON,
65 sy-vline,
66 'JuPe'(h38) COLOR COL_HEADING INTENSIFIED ON,
70 sy-vline,
71 sy-vline,
72(2) 'AK'(h11) COLOR COL_HEADING INTENSIFIED ON,
74 sy-vline,
75(2) 'PM'(h12) COLOR COL_HEADING INTENSIFIED ON,
77 sy-vline,
78(7) 'Periode'(h13) COLOR COL_HEADING INTENSIFIED ON,
85 sy-vline,
86(10) 'Ende'(h14) COLOR COL_HEADING INTENSIFIED ON,
96 sy-vline,
97(2) 'PT'(h15) COLOR COL_HEADING INTENSIFIED ON,
99 sy-vline,
100(2) 'PI'(h16) COLOR COL_HEADING INTENSIFIED ON,
102 sy-vline,
103 sy-vline,
104(10) 'ZahlDatum'(h17) COLOR COL_HEADING INTENSIFIED ON,
114 sy-vline,
115(1) 'V'(h18) COLOR COL_HEADING INTENSIFIED ON,
116 sy-vline,
117(2) 'SG'(h19) COLOR COL_HEADING INTENSIFIED ON,
119 sy-vline,
120(10) 'LDatum'(h20) COLOR COL_HEADING INTENSIFIED ON,
130 sy-vline,
131(8) 'LZeit'(h21) COLOR COL_HEADING INTENSIFIED ON,
139 sy-vline,
/1 sy-uline(139).
ENDFORM. "print_header
*********************************************************************
* Form write_line
*********************************************************************
* adapted from form write_line in RPUDIR00
* 'selec' checkbox added -> position+3
*----------------------------------------------------------------------*
FORM write_line USING $rgdir STRUCTURE list_rgdir.
WRITE:/1 sy-vline,
2 $rgdir-selec AS CHECKBOX,
3 sy-vline,
4(5) $rgdir-seqnr,
9 sy-vline,
10(1) $rgdir-srtza,
11 sy-vline,
12 sy-vline,
13(2) $rgdir-abkrs,
15 sy-vline,
16(2) $rgdir-permo,
18 sy-vline.
IF $rgdir-fpper IS INITIAL OR
$rgdir-fpper CO '0'.
WRITE: 19(7) space.
ELSE.
WRITE: 19(2) $rgdir-fpper+4(2),
21(1) '.',
22(4) $rgdir-fpper(4).
ENDIF.
WRITE: 26 sy-vline.
IF $rgdir-fpbeg IS INITIAL.
WRITE: 27(10) space.
ELSE.
WRITE: 27(10) $rgdir-fpbeg DD/MM/YYYY.
ENDIF.
WRITE: 37 sy-vline.
IF $rgdir-fpend IS INITIAL.
WRITE: 38(10) space.
ELSE.
WRITE: 38(10) $rgdir-fpend DD/MM/YYYY.
ENDIF.
WRITE: 48 sy-vline,
49(2) $rgdir-payty,
51 sy-vline,
52(2) $rgdir-payid,
54 sy-vline.
IF $rgdir-bondt IS INITIAL.
WRITE: 55(10) space.
ELSE.
WRITE: 55(10) $rgdir-bondt DD/MM/YYYY.
ENDIF.
WRITE: 65 sy-vline,
66 $rgdir-juper,
70 sy-vline,
71 sy-vline,
72(2) $rgdir-iabkrs,
74 sy-vline,
75(2) $rgdir-iperm,
77 sy-vline.
IF $rgdir-inper IS INITIAL OR
$rgdir-inper CO '0'.
WRITE: 78(7) space.
ELSE.
WRITE: 78(2) $rgdir-inper+4(2),
80(1) '.',
81(4) $rgdir-inper(4).
ENDIF.
WRITE: 85 sy-vline.
IF $rgdir-ipend IS INITIAL.
WRITE: 86(10) space.
ELSE.
WRITE: 86(10) $rgdir-ipend DD/MM/YYYY.
ENDIF.
WRITE: 96 sy-vline,
97(2) $rgdir-inpty,
99 sy-vline,
100(2) $rgdir-inpid,
102 sy-vline,
103 sy-vline.
IF $rgdir-paydt IS INITIAL.
WRITE: 104(10) space.
ELSE.
WRITE: 104(10) $rgdir-paydt DD/MM/YYYY.
ENDIF.
WRITE: 114 sy-vline,
115(1) $rgdir-void,
116 sy-vline,
117(2) $rgdir-voidr,
119 sy-vline.
IF $rgdir-rundt IS INITIAL.
WRITE: 120(10) space.
ELSE.
WRITE: 120(10) $rgdir-rundt DD/MM/YYYY.
ENDIF.
WRITE: 130 sy-vline.
IF $rgdir-runtm IS INITIAL.
WRITE: 131(8) space.
ELSE.
WRITE: 131(8) $rgdir-runtm.
ENDIF.
WRITE: 139 sy-vline.
ENDFORM. "write_line
*********************************************************************
* form maintain_list.
*********************************************************************
FORM maintain_list TABLES $list_rgdir STRUCTURE list_rgdir
USING $hide_seqnr LIKE list_rgdir-seqnr
$clicked_seqnr LIKE list_rgdir-seqnr
$hide_persnr LIKE hide_persnr.
DATA: selected_persnr LIKE hide_persnr.
selected_persnr = $hide_persnr.
DO.
CLEAR: $hide_seqnr, $hide_persnr.
READ LINE sy-index.
IF sy-subrc NE 0.
EXIT.
ENDIF.
CHECK NOT $hide_seqnr IS INITIAL.
READ TABLE $list_rgdir WITH KEY seqnr = $hide_seqnr
persnr = $hide_persnr.
IF sy-subrc = 0. "only if entry exists
$list_rgdir-selec = sy-lisel+1(1). "read 2nd column
IF $hide_seqnr = $clicked_seqnr "if line selected by double click
AND $hide_persnr = selected_persnr. "only for current pernr
IF list_rgdir-selec = ' '. "toggle marked/unmarked
list_rgdir-selec = 'X'.
ELSE.
list_rgdir-selec = ' '.
ENDIF.
ENDIF.
MODIFY $list_rgdir INDEX sy-tabix.
ELSE. "refresh list of payroll results (if some already deleted)
MESSAGE i899(5a) WITH
'Einige der markierten Abrechnungsergebnisse'(041)
'existieren nicht.'(042)
'Der folgende Bildschirm zeigt die aktuelle Liste.'(043) .
sy-ucomm = return-entmark.
EXIT.
ENDIF.
ENDDO.
ENDFORM. "MAINTAIN_LIST
***********************************************************************
* Authority check.
***********************************************************************
FORM check_authority USING $relid LIKE relid.
* Check if the user is authorized to modify the payroll cluster.
AUTHORITY-CHECK OBJECT 'P_PCLX'
ID 'RELID' FIELD $relid
ID 'AUTHC' FIELD 'U'.
IF sy-subrc NE 0.
MESSAGE e899(5a) WITH
'Es liegt keine Pflegeberechtigung vor für Cluster'(005) $relid .
ENDIF.
ENDFORM. "CHECK_AUTHORITY
***********************************************************************
* form application_log.
***********************************************************************
* Add info on deletion of payroll records
* to object HRPU in the application log.
*---------------------------------------------------------------------*
FORM application_log.
DATA: BEGIN OF prot_head.
INCLUDE STRUCTURE balhdri.
DATA: END OF prot_head.
DATA: datum LIKE sy-datum,
date TYPE i.
DATA: client_role LIKE t000-cccategory. "XJS note 387263
date = sy-datum + 365.
datum = date.
prot_head-object = prot_obj.
prot_head-aldate = sy-datum.
prot_head-altime = sy-uzeit.
prot_head-aluser = sy-uname.
prot_head-altcode = sy-tcode(4).
prot_head-alprog = sy-repid(8).
prot_head-altext = text-112.
prot_head-aldate_del = datum.
* XJS note 387263 {
CALL FUNCTION 'TR_SYS_PARAMS'
IMPORTING
system_client_role = client_role.
IF client_role = 'P'.
prot_head-del_before = 'X'. "im Prod.-System nicht vorher löschbar
ENDIF.
* XJS note 387263 }
CALL FUNCTION 'APPL_LOG_INIT'
EXPORTING
object = prot_obj
EXCEPTIONS
object_not_found = 1
subobject_not_found = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE w579(54).
ENDIF.
CALL FUNCTION 'APPL_LOG_WRITE_HEADER'
EXPORTING
header = prot_head
EXCEPTIONS
object_not_found = 1
subobject_not_found = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE w579(54).
ENDIF.
CALL FUNCTION 'APPL_LOG_WRITE_MESSAGES'
EXPORTING
object = prot_obj
TABLES
messages = prot_mes
EXCEPTIONS
object_not_found = 1
subobject_not_found = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE w579(54).
ENDIF.
CALL FUNCTION 'APPL_LOG_WRITE_DB'
EXPORTING
object = prot_obj
TABLES
object_with_lognumber = prot_nr
EXCEPTIONS
object_not_found = 1
subobject_not_found = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc NE 0.
MESSAGE w579(54).
ENDIF.
ENDFORM. "APPLICATION_LOG
***********************************************************************
* Specify data for application log *
***********************************************************************
FORM anwend_prot_ini USING persnr LIKE persnr_list-persnr.
prot_obj = 'HRPU'.
prot_mes-msgty = 'I'.
prot_mes-msgid = '54'.
IF ( list_rgdir-fpper = 000000 ).
prot_mes-msgno = '580'.
prot_mes-msgv1 = list_rgdir-bondt.
prot_mes-msgv2 = list_rgdir-payid.
prot_mes-msgv3 = persnr.
ELSE.
prot_mes-msgno = '584'.
prot_mes-msgv1 = list_rgdir-fpper.
prot_mes-msgv2 = list_rgdir-inper.
prot_mes-msgv3 = persnr.
ENDIF.
APPEND prot_mes.
ENDFORM. "ANWEND_PROT_INI
************************************************************************
* Form PERNR_INVISIBLE
************************************************************************
* display only pernr + warning if resluts are marked for deletion.
************************************************************************
FORM pernr_invisible USING $persnr LIKE persnr.
LOOP AT list_rgdir WHERE
persnr = $persnr AND
selec = 'X'.
ENDLOOP.
IF sy-subrc = 4. "no payroll results selected
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
WRITE: /1 icon_expand AS ICON HOTSPOT,
13 text-003 , " 'Personalnummer...........'
28 $persnr.
ELSE. "some payroll results are selected for deletion!!!
WRITE: /1 icon_expand AS ICON HOTSPOT,
13 text-003 , " 'Personalnummer...........'
28 $persnr COLOR COL_NEGATIVE,
38 'enthält zum Löschen markierte Ergebnisse!'(071)
COLOR COL_NEGATIVE.
ENDIF.
ENDFORM. " PERNR_INVISIBLE
************************************************************************
* Form PRINT_BAD_PERSNR
************************************************************************
* list enqueud persnr or persnr with other errors
************************************************************************
FORM print_bad_persnr TABLES $bad_persnr_list STRUCTURE bad_persnr_list
USING $display_bad LIKE display_bad.
FORMAT RESET.
ULINE.
IF $display_bad = 'X'.
WRITE: /1 icon_collapse AS ICON HOTSPOT, "QNY270997
13 'nicht anzeigbar (ohne Abr.erg., gesperrt, fehlerhaft)'(076)
COLOR COL_NORMAL INTENSIFIED OFF.
hide_icontype = 'BADOUT'. "QNY270997
HIDE: hide_icontype. "QNY270997
CLEAR hide_icontype. "QNY270997
LOOP AT $bad_persnr_list.
WRITE: /13 text-003, " 'Personalnummer...........'(t01),
28 $bad_persnr_list-persnr
COLOR COL_NEGATIVE INTENSIFIED OFF,
38 $bad_persnr_list-texts.
ENDLOOP.
ELSE.
LOOP AT $bad_persnr_list.
ENDLOOP.
IF sy-subrc = 4. "empty list of persnrs with error
WRITE: /1 icon_collapse AS ICON, "QNY270997
13 '0 ' COLOR COL_NORMAL,
15 'nicht anzeigbar (ohne Abr.erg., gesperrt, fehlerhaft)'(076)
COLOR COL_NORMAL INTENSIFIED OFF.
hide_icontype = 'BADOUT'. "QNY270997
HIDE: hide_icontype. "QNY270997
CLEAR hide_icontype. "QNY270997
ULINE.
EXIT.
ENDIF.
WRITE: /1 icon_expand AS ICON HOTSPOT, "QNY270997
13 'nicht anzeigbar (ohne Abr.erg., gesperrt, fehlerhaft)'(076)
COLOR COL_NORMAL INTENSIFIED OFF.
hide_icontype = 'BADIN '. "QNY270997
HIDE: hide_icontype. "QNY270997
CLEAR hide_icontype. "QNY270997
ENDIF.
ULINE.
ENDFORM. " PRINT_BAD_PERSNR
************************************************************************
* Form PRINT_DELETED_LIST "QNY240997
************************************************************************
* list of deleted payroll results
************************************************************************
FORM print_deleted_list TABLES $deleted_list STRUCTURE deleted_list
USING $display_deleted LIKE display_deleted.
FORMAT RESET.
ULINE.
IF $display_deleted = 'X'.
SORT $deleted_list BY persnr fpper inper payid.
hide_icontype = 'DELOUT'. "QNY270997
HIDE: hide_icontype. "QNY270997
CLEAR hide_icontype. "QNY270997
WRITE: /1 icon_collapse AS ICON HOTSPOT, "QNY270997
13 'gelöschte Abrechnungsergebnisse'(079) COLOR COL_POSITIVE.
LOOP AT $deleted_list.
WRITE: /13 text-003, " 'Personalnummer...........'
28 $deleted_list-persnr COLOR COL_NORMAL INTENSIFIED OFF,
38 'Fürperiode'(088),
50 $deleted_list-fpper COLOR COL_NORMAL INTENSIFIED OFF,
58 'Inperiode'(089),
70 $deleted_list-inper.
IF NOT $deleted_list-bondt IS INITIAL. "QNY021097
WRITE: 80 'SDatum'(h10), "QNY021097
88 $deleted_list-bondt DD/MM/YYYY, "QNY021097
100 'PI'(h09),"consecutive number of bonus runs "QNY021097
103 $deleted_list-payid. "QNY021097
ENDIF. "QNY021097
ENDLOOP.
ELSE.
LOOP AT $deleted_list.
ENDLOOP.
IF sy-subrc = 4. "empty list of persnrs with error
WRITE: /1 icon_collapse AS ICON, "QNY270997
13 '0 ' COLOR COL_NORMAL,
15 'gelöschte Abrechnungsergebnisse'(079)
COLOR COL_NORMAL INTENSIFIED OFF.
hide_icontype = 'DELOUT'. "QNY270997
HIDE: hide_icontype. "QNY270997
CLEAR hide_icontype. "QNY270997
EXIT.
ENDIF.
hide_icontype = 'DELIN '. "QNY270997
HIDE: hide_icontype. "QNY270997
CLEAR hide_icontype. "QNY270997
WRITE: /1 icon_expand AS ICON HOTSPOT,
13 'gelöschte Abrechnungsergebnisse'(079)
COLOR COL_NORMAL INTENSIFIED OFF.
ENDIF.
ENDFORM. " PRINT_BAD_PERSNR
************************************************************************
FORM check_client. "P30K041899 in rpchrt00 - simplified: QNY
************************************************************************
* checks the status of the client and warns the user if the status
* is 'productive' or 'unspecified'.
************************************************************************
SELECT SINGLE * FROM t000 WHERE mandt EQ sy-mandt.
IF sy-subrc NE 0. "should not occur
WRITE: / 'Kein Eintrag in Tabelle T000 zu Mandant:'(075), sy-mandt.
STOP.
ELSE.
CASE t000-cccategory.
WHEN ' '. "not specified
CLEAR answer.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
defaultoption = 'N'
diagnosetext1 = 'Sie befinden sich in einem unspezif. Mandanten.'(081)
diagnosetext2 = 'Dieser Report ist aber nur für Testzwecke gedacht,'(082)
diagnosetext3 = 'da er kann zu Inkonsistenzen im Datenbestand führen kann!'(083)
textline1 = ' '
textline2 = 'Möchten Sie trotzdem fortfahren?'(084)
titel = 'Warnung: evtl. Produktivmandant!'(085)
start_column = 25
start_row = 6
IMPORTING
answer = answer
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE e241(57) "error in function module &1 with ret.code &2
WITH 'POPUP_TO_CONFIRM_WITH_MESSAGE' sy-subrc.
ENDIF.
IF answer = 'N'.
STOP.
ELSEIF answer = 'A'.
STOP.
ENDIF.
WHEN 'P'. "productive
CLEAR answer.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
defaultoption = 'N'
diagnosetext1 = 'Sie befinden sich im Produktivmandanten.'(080)
diagnosetext2 = 'Dieser Report ist aber nur für Testzwecke gedacht,'(082)
diagnosetext3 = 'da er kann zu Inkonsistenzen im Datenbestand führen kann!'(083)
textline1 = ' '
textline2 = 'Möchten Sie trotzdem fortfahren?'(084)
titel = 'Warnung: Produktivmandant!'(086)
start_column = 25
start_row = 6
IMPORTING
answer = answer
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE e241(57) "error in function module &1 with ret.code &2
WITH 'POPUP_TO_CONFIRM_WITH_MESSAGE' sy-subrc.
ENDIF.
IF answer = 'N'.
STOP.
ELSEIF answer = 'A'.
STOP.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDIF.
ENDFORM. "CHECK_CLIENT
*&---------------------------------------------------------------------*
*& Form BUCH_TEST
*&---------------------------------------------------------------------*
* print results in red if they are already booked
*----------------------------------------------------------------------*
FORM buch_test USING $list_rgdir LIKE list_rgdir
$persnr LIKE persnr.
DATA: p_evaluated TYPE c,
p_runid LIKE pevst-runid.
CALL FUNCTION 'HR_EVAL_EVP_CHECK'
EXPORTING
type = 'PP'
persnum = $persnr
seqno = $list_rgdir-seqnr
srtza = $list_rgdir-srtza
IMPORTING
evaluated = p_evaluated
runid = p_runid
EXCEPTIONS
OTHERS = 0.
IF sy-subrc IS INITIAL. ENDIF.
IF NOT p_evaluated EQ space.
FORMAT COLOR COL_NEGATIVE.
ENDIF.
ENDFORM. " BUCH_TEST