1 Code listing for: ZHRR011
2
3 Description: 考勤明细表
4
5
6
7 *&---------------------------------------------------------------------*
8 *& Report ZHRR011
9 *&---------------------------------------------------------------------*
10 ********************************************************************
11 * 事务代码: *
12 * 程序名称:ZHRR011 *
13 * 程序目的: 考勤明细表 *
14 * 使用变式: *
15 * 设 计 人: *
16 * 设计时间:2018-06-11 *
17 * 程序类型: ABAP/4 程序 ,报表 *
18 * 输入文件: *
19 * 输出文件: *
20 * 应用类型: HR *
21 * 描 述: 考勤明细表 *
22 *(修改日志)-------------------------------------------------------- *
23 * *
24 * 日志号 修改人 修改时间 修改说明 传输号码 *
25 * ---- ---- ------ -----------
26 * 001 20180611 创建 *
27 ********************************************************************
28 *&---------------------------------------------------------------------*
29
30
31 REPORT zhrr011.
32
33
34 *----------------------------------------------------------------------*
35 * 数据字典引用
36 *----------------------------------------------------------------------*
37
38
39 TABLES: pernr.
40 INFOTYPES: 0000,0001,0002,0008,0529,3527, 0105,0041,0016,9006,9009,2001,2010,0007.
41
42 TYPES:BEGIN OF ty_alv,
43 flag,
44
45
46 * zmonth TYPE char02, "月份
47
48
49 zdatas TYPE sy-datum, "考勤日期
50 stext20 TYPE hrp1000-stext, "公司
51 stext30 TYPE hrp1000-stext, "一级部门
52 stext40 TYPE hrp1000-stext, "二级部门
53 stext50 TYPE hrp1000-stext, "三级部门
54 stext60 TYPE hrp1000-stext, "四级部门
55 stext70 TYPE hrp1000-stext, "五级部门
56 pernr TYPE pernr_d, "员工编号
57 cname TYPE pa0002-cname, "姓名
58 stat2 TYPE text40, "岗位状态
59 plans TYPE pa0001-plans, "职位ID
60 stext TYPE hrp1000-stext, "职位名称
61 zsfzhm TYPE pa9006-zsfzhm, "身份证号码
62 ttext TYPE t550s-ttext, "班次
63 zshij TYPE pa2001-abwtg, "事假(/天)
64 zcbj TYPE pa2001-abwtg, "长病假(/天)
65 zbj TYPE pa2001-abwtg, "病假(/天)
66 zsj TYPE pa2001-abwtg, "直系亲属丧假(/天)
67 zfsj TYPE pa2001-abwtg, "非直系亲属丧假(/天)
68 zcj TYPE pa2001-abwtg, "产假(/天)
69 zlcj TYPE pa2001-abwtg, "流产假(/天)
70 zpcj TYPE pa2001-abwtg, "陪产假(/天)
71 zhj TYPE pa2001-abwtg, "婚假(/天)
72 ztx TYPE pa2001-abwtg, "调休(/小时)
73 znj TYPE pa2001-abwtg, "年假(/天)
74 zgs TYPE pa2001-abwtg, "工伤(/天)
75 zprj TYPE pa2001-abwtg, "哺乳假(/小时)
76 zsbjxj TYPE pa2001-abwtg, "设备检修假(/天)
77 zlxj TYPE pa2001-abwtg, "轮休假(/天)
78 zgkpkj TYPE pa2001-abwtg, "高考陪考假(/天)
79 ztqj TYPE pa2001-abwtg, "探亲假(/天)
80 zkg TYPE pa2010-anzhl, "旷工(/次)
81 zcd TYPE pa2010-anzhl, "迟到(/次)
82 zzt TYPE pa2010-anzhl, "早退(/次)
83 zsjcq TYPE pa2010-anzhl, "实际出勤(/天)
84 END OF ty_alv,
85
86 BEGIN OF ty_hrp1000,
87 objid TYPE hrobjid,
88 stext TYPE stext,
89 END OF ty_hrp1000.
90
91
92 *---------------------------------------------------------------------*
93 * 内表结构定义 *
94 *---------------------------------------------------------------------*
95
96
97 DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
98 gs_alv TYPE ty_alv.
99
100 DATA:gv_flag TYPE c.
101
102 "&ALV报表属性字段定义
103 DATA: gs_layout TYPE lvc_s_layo,
104 gt_fieldcat TYPE lvc_t_fcat,
105 gs_fieldcat TYPE lvc_s_fcat.
106
107 DATA:gt_t529u TYPE TABLE OF t529u,
108 gt_hrp1000 TYPE SORTED TABLE OF ty_hrp1000 WITH NON-UNIQUE KEY objid,
109 gt_t550s TYPE STANDARD TABLE OF t550s,
110 gt_t550a TYPE STANDARD TABLE OF t550a.
111
112
113
114 *----------------------------------------------------------------------*
115 * 选择屏幕
116 *----------------------------------------------------------------------*
117
118
119 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
120 SELECTION-SCREEN END OF BLOCK b1.
121
122
123 *----------------------------------------------------------------------*
124 * Selection Screen/选择屏幕
125 *----------------------------------------------------------------------*
126
127
128 INITIALIZATION.
129
130 PERFORM f_initialization.
131
132
133
134 *----------------------------------------------------------------------*
135 * 选择屏幕显示控制
136 *----------------------------------------------------------------------*
137
138
139 AT SELECTION-SCREEN OUTPUT.
140
141
142
143 *----------------------------------------------------------------------*
144 * 检查用户输入
145 *----------------------------------------------------------------------*
146
147
148 AT SELECTION-SCREEN.
149
150 PERFORM f_at_selection.
151
152
153
154 *----------------------------------------------------------------------*
155 * start-of-selection/开始选择屏幕
156 *----------------------------------------------------------------------*
157
158
159 START-OF-SELECTION.
160
161 PERFORM frm_get_initialization.
162
163 GET pernr.
164
165 PERFORM frm_get_data.
166
167
168
169 *----------------------------------------------------------------------*
170 * end-of-selection/结束选择屏幕(程序结束处理,输出等)
171 *----------------------------------------------------------------------*
172
173
174 END-OF-SELECTION.
175
176 PERFORM frm_display_result.
177
178
179
180 *&---------------------------------------------------------------------*
181 *& Form FRM_GET_INITIALIZATION
182 *&---------------------------------------------------------------------*
183 *& text
184 *&---------------------------------------------------------------------*
185 *& --> p1 text
186 *& <-- p2 text
187 *&---------------------------------------------------------------------*
188
189
190 FORM frm_get_initialization .
191 SELECT *
192 INTO CORRESPONDING FIELDS OF TABLE gt_t529u
193 FROM t529u
194 WHERE sprsl = sy-langu
195 AND statn = '1'.
196
197 SELECT objid
198 stext
199 INTO CORRESPONDING FIELDS OF TABLE gt_hrp1000
200 FROM hrp1000
201 WHERE plvar = '01'
202 AND otype = 'S'
203 AND endda >= sy-datum
204 AND begda <= sy-datum.
205 SELECT *
206 FROM t550s
207 INTO CORRESPONDING FIELDS OF TABLE gt_t550s
208 WHERE spras = sy-langu
209 AND motpr = '28'.
210 SELECT *
211 INTO TABLE gt_t550a
212 FROM t550a
213 WHERE motpr = '28'.
214
215 ENDFORM.
216
217
218 *&---------------------------------------------------------------------*
219 *& Form GET_DATA
220 *&---------------------------------------------------------------------*
221 *& text
222 *&---------------------------------------------------------------------*
223 *& --> p1 text
224 *& <-- p2 text
225 *&---------------------------------------------------------------------*
226
227
228 FORM frm_get_data.
229
230 DATA:lv_begda TYPE sy-datum,
231 lv_endda TYPE sy-datum.
232 DATA:lv_date TYPE p0001-begda.
233 lv_begda = pn-begda.
234
235
236 * BREAK HANDZX.
237
238
239 AUTHORITY-CHECK OBJECT 'P_ORGIN'
240 ID 'PERSA' FIELD p0001-werks
241 ID 'VDSK1' FIELD p0001-vdsk1.
242 IF sy-subrc <> 0.
243 EXIT.
244 ENDIF.
245 DO.
246 lv_date = lv_begda.
247 CLEAR:gv_flag.
248 PERFORM frm_get_detail USING lv_begda.
249 CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
250 EXPORTING
251 date = lv_date
252 days = '1'
253 months = '0'
254 signum = '+'
255 years = '0'
256 IMPORTING
257 calc_date = lv_begda.
258 IF lv_begda GT pn-endda.
259 EXIT.
260 ENDIF.
261
262 ENDDO.
263
264
265 ENDFORM.
266
267
268 *&---------------------------------------------------------------------*
269 *& Form FRM_GET_DETAIL
270 *&---------------------------------------------------------------------*
271 *& text
272 *&---------------------------------------------------------------------*
273
274
275 FORM frm_get_detail USING pv_begda.
276
277 DATA:lt_pernr TYPE STANDARD TABLE OF pdpnr,
278 lt_psp TYPE STANDARD TABLE OF pdpsp,
279 lt_daypsp TYPE STANDARD TABLE OF pdsppsp.
280
281 DATA: ls_sturc TYPE zshr_struc,
282 ls_pernr TYPE pdpnr,
283 ls_psp TYPE pdpsp.
284
285 DATA: lv_abwtg TYPE pa2001-abwtg,
286 lv_awart TYPE pa2001-awart,
287 lv_kaltg TYPE pa2001-kaltg.
288
289 READ TABLE p0000 WITH KEY massn = 'Z7'.
290 IF sy-subrc = 0.
291 CHECK pv_begda < p0000-begda.
292 ENDIF.
293
294 CHECK pv_begda >= p0007-begda.
295
296 rp_provide_from_last p0000 space pv_begda pv_begda.
297 rp_provide_from_last p0001 space pv_begda pv_begda.
298 rp_provide_from_last p0002 space pv_begda pv_begda.
299 rp_provide_from_last p9006 space pv_begda pv_begda.
300 rp_provide_from_last p0007 space pv_begda pv_begda.
301 rp_provide_from_last p2010 space pv_begda pv_begda.
302
303 CLEAR: gs_alv.
304
305
306 * gs_alv-zmonth = pv_begda+4(2).
307
308
309 gs_alv-zdatas = pv_begda.
310 gs_alv-pernr = p0001-pernr."员工编号
311 gs_alv-plans = p0001-plans."职位ID
312 gs_alv-cname = p0002-nachn && p0002-vorna."姓名
313 gs_alv-zsfzhm = p9006-zsfzhm."身份证号
314 call function 'ZZHR_GET_STRUC'
315 EXPORTING
316 i_orgeh = p0001-orgeh
317 i_begda = pv_begda
318 i_endda = pv_begda
319 IMPORTING
320 e_struc = ls_sturc.
321 MOVE-CORRESPONDING ls_sturc TO gs_alv.
322
323 CLEAR: ls_pernr, lt_pernr[], lt_psp[].
324 ls_pernr-pernr = pernr-pernr.
325 APPEND ls_pernr TO lt_pernr.
326
327 CALL FUNCTION 'HR_PERSON_READ_WORK_SCHEDULE'
328 EXPORTING
329 begin_date = pv_begda
330 end_date = pv_begda
331 TABLES
332 pernr_tab = lt_pernr
333 psp = lt_psp
334 day_psp = lt_daypsp
335 EXCEPTIONS
336 error_in_build_psp = 1
337 OTHERS = 2.
338
339 LOOP AT lt_psp INTO ls_psp WHERE datum = pv_begda AND ftkla <> '1' AND tpkla = '1'.
340
341
342
343 * CHECK p0007-zterf = 0.
344
345
346
347 LOOP AT p2001 WHERE begda <= pv_begda AND endda >= pv_begda.
348
349 IF p2001-abwtg > 1.
350 lv_abwtg = 1.
351 ENDIF.
352
353 lv_awart = p2001-awart.
354
355 IF p2001-kaltg > 1.
356 lv_kaltg = 1..
357 ENDIF.
358
359 ENDLOOP.
360
361 CASE lv_awart.
362 WHEN '6000'.
363 IF lv_kaltg EQ 0.
364 gs_alv-zcbj = lv_abwtg."长病假(/天)
365 ELSE.
366 gs_alv-zcbj = lv_kaltg."长病假(/天)
367 ENDIF.
368
369 WHEN '6001'.
370 IF lv_kaltg EQ 0.
371 gs_alv-zbj = lv_abwtg."病假(/天)
372 ELSE.
373 gs_alv-zbj = lv_kaltg."病假(/天)
374 ENDIF.
375
376 WHEN '6002'.
377 IF lv_kaltg EQ 0.
378 gs_alv-zshij = lv_abwtg."事假(/天)
379 ELSE.
380 gs_alv-zshij = lv_kaltg."事假(/天)
381 ENDIF.
382
383 WHEN '6009'.
384 gs_alv-zsj = lv_abwtg."亲属丧假(/天)
385
386 WHEN '6005'.
387 IF lv_kaltg EQ 0.
388 gs_alv-zcj = lv_abwtg."产假(/天)
389 ELSE.
390 gs_alv-zcj = lv_kaltg."产假(/天)
391 ENDIF.
392
393 WHEN '6006'.
394 gs_alv-zlcj = lv_abwtg."流产假(/天)
395
396 WHEN '6007'.
397 gs_alv-zpcj = lv_abwtg."陪产假(/天)
398
399 WHEN '6004'.
400 gs_alv-zhj = lv_abwtg."婚假(/天)
401
402 WHEN '6010'.
403 gs_alv-ztx = lv_abwtg."调休(/天)
404
405 WHEN '6003'.
406 gs_alv-znj = lv_abwtg."年假(/天)
407
408 WHEN '6008'.
409 IF lv_kaltg EQ 0.
410 gs_alv-zgs = lv_abwtg."工伤(/天)
411 ELSE.
412 gs_alv-zgs = lv_kaltg."工伤(/天)
413 ENDIF.
414
415 WHEN '6011'.
416 gs_alv-zprj = lv_abwtg."哺乳假(/天)
417
418 WHEN '6012'.
419 IF lv_kaltg EQ 0.
420 gs_alv-zsbjxj = lv_abwtg."设备检修假(/天)
421 ELSE.
422 gs_alv-zsbjxj = lv_kaltg."设备检修假(/天)
423 ENDIF.
424
425 WHEN '6013'.
426 gs_alv-zgkpkj = lv_abwtg."高考陪考假(/天)
427
428 WHEN '6014'.
429 gs_alv-ztqj = lv_abwtg."探亲假(/天)
430
431 WHEN '6015'.
432 gs_alv-zfsj = gs_alv-zsj + lv_abwtg."非直系亲属丧假(/天)
433
434 WHEN '6016'.
435 gs_alv-zlxj = gs_alv-ztqj + lv_abwtg."轮休假/天)
436
437 WHEN OTHERS.
438 ENDCASE.
439
440 LOOP AT p2010 WHERE begda <= ls_psp-datum AND endda >= ls_psp-datum.
441 CASE p2010-lgart.
442 WHEN '4080'.
443 gs_alv-zkg = p2010-anzhl."旷工(/天)
444 WHEN '4071'.
445 gs_alv-zcd = p2010-anzhl."迟到(/次)
446 WHEN '4070'.
447 gs_alv-zzt = p2010-anzhl."早退(/次)
448 WHEN OTHERS.
449 ENDCASE.
450 ENDLOOP.
451
452 "班次
453 READ TABLE gt_t550s INTO DATA(gs_t550s) WITH KEY tprog = ls_psp-tprog.
454 IF sy-subrc = 0.
455 gs_alv-ttext = gs_t550s-ttext.
456 ENDIF.
457
458 CLEAR:lv_awart,ls_psp,lv_abwtg.
459
460 ENDLOOP.
461
462 "出勤天数
463 gs_alv-zsjcq = 1 - ( gs_alv-zbj / 2 + gs_alv-zshij + gs_alv-zcj + gs_alv-zkg + gs_alv-zsbjxj + gs_alv-zcbj ).
464
465 "岗位状态
466 READ TABLE gt_t529u INTO DATA(ls_t529u) WITH KEY statv = p0000-stat1.
467 IF sy-subrc = 0.
468 gs_alv-stat2 = ls_t529u-text1.
469 ENDIF.
470 "职位名称
471 READ TABLE gt_hrp1000 INTO DATA(ls_hrp1000) WITH KEY objid = p0001-plans.
472 IF sy-subrc = 0.
473 gs_alv-stext = ls_hrp1000-stext.
474 ENDIF.
475
476 APPEND gs_alv TO gt_alv.
477
478 ENDFORM.
479
480
481 *&---------------------------------------------------------------------*
482 *& Form FRM_DISPLAY_RESULT
483 *&---------------------------------------------------------------------*
484 *& text
485 *&---------------------------------------------------------------------*
486
487
488 FORM frm_display_result .
489
490 sy-title = sy-title && ':' && | |
491 && pn-begda+(4) && '年' && pn-begda+4(2) && '月' && pn-begda+6(2) && '日'
492 && | ~ |
493 && pn-endda+(4) && '年' && pn-endda+4(2) && '月' && pn-endda+6(2) && '日'.
494
495 PERFORM frm_layout.
496
497 PERFORM frm_fieldcat.
498
499 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
500 EXPORTING
501 i_callback_program = sy-repid
502 is_layout_lvc = gs_layout
503 it_fieldcat_lvc = gt_fieldcat
504 i_save = 'A'
505 TABLES
506 t_outtab = gt_alv
507 EXCEPTIONS
508 program_error = 1
509 OTHERS = 2.
510
511 ENDFORM.
512
513
514
515 *&---------------------------------------------------------------------*
516 *& Form FRM_LAYOUT
517 *&---------------------------------------------------------------------*
518 *& text
519 *&---------------------------------------------------------------------*
520
521
522 FORM frm_layout .
523 gs_layout-zebra = abap_true.
524 gs_layout-box_fname = 'FLAG'.
525 gs_layout-cwidth_opt = abap_true.
526 ENDFORM.
527
528
529 *&---------------------------------------------------------------------*
530 *& Form FRM_FIELDCAT
531 *&---------------------------------------------------------------------*
532 *& text
533 *&---------------------------------------------------------------------*
534
535
536 FORM frm_fieldcat .
537
538
539
540 *----------------------------------------------------------------------*
541 * 宏定义
542 *----------------------------------------------------------------------*
543
544
545 DEFINE mac_add_fieldcat.
546 CLEAR gs_fieldcat.
547 gs_fieldcat-fieldname = &1.
548 gs_fieldcat-coltext = &2.
549 APPEND gs_fieldcat TO gt_fieldcat.
550 END-OF-DEFINITION.
551
552 mac_add_fieldcat:
553
554
555 * 'ZMONTH' TEXT-001,
556
557
558 'ZDATAS' TEXT-002,
559 'STEXT20' TEXT-003,
560 'STEXT30' TEXT-004,
561 'STEXT40' TEXT-005,
562 'STEXT50' TEXT-006,
563 'STEXT60' TEXT-007,
564 'STEXT70' TEXT-008,
565 'PERNR' TEXT-009,
566 'CNAME' TEXT-010,
567 'STAT2' TEXT-011,
568 'PLANS' TEXT-012,
569 'STEXT' TEXT-013,
570 'ZSFZHM' TEXT-014,
571 'TTEXT' TEXT-015,
572 'ZSHIJ' TEXT-016,
573 'ZCBJ' TEXT-017,
574 'ZBJ' TEXT-018,
575 'ZSJ' TEXT-019,
576 'ZFSJ' TEXT-035,
577 'ZCJ' TEXT-020,
578 'ZLCJ' TEXT-021,
579 'ZPCJ' TEXT-022,
580 'ZHJ' TEXT-023,
581 'ZTX' TEXT-024,
582 'ZNJ' TEXT-025,
583 'ZGS' TEXT-026,
584 'ZPRJ ' TEXT-027,
585 'ZSBJXJ' TEXT-028,
586 'ZGKPKJ ' TEXT-029,
587 'ZTQJ ' TEXT-030,
588 'ZLXJ' TEXT-036,
589 'ZKG ' TEXT-031,
590 'ZCD' TEXT-032,
591 'ZZT' TEXT-033,
592 'ZSJCQ ' TEXT-034.
593
594 ENDFORM.
595
596
597
598 *&---------------------------------------------------------------------*
599 *& Form F_INITIALIZATION
600 *&---------------------------------------------------------------------*
601 *& Initail
602 *&---------------------------------------------------------------------*
603
604
605 FORM f_initialization .
606
607 PERFORM f_ger_period.
608
609 ENDFORM.
610
611 FORM f_at_selection.
612
613 IF sy-ucomm = '$TIM'.
614 PERFORM f_ger_period.
615 ENDIF.
616
617 ENDFORM.
618
619 FORM f_ger_period.
620
621 DATA: lt_periods TYPE TABLE OF t549q.
622
623 CALL FUNCTION 'HR_PAYROLL_PERIODS_GET'
624 EXPORTING
625 get_begda = sy-datum
626 get_endda = sy-datum
627 TABLES
628 get_periods = lt_periods.
629
630 LOOP AT lt_periods ASSIGNING FIELD-SYMBOL(<ls_period>).
631 pnpbegda = pn-begda = <ls_period>-begda.
632 pnpendda = pn-endda = <ls_period>-endda.
633 EXIT.
634 ENDLOOP.
635
636 ENDFORM.
637
638
639
640 *Text elements
641 *----------------------------------------------------------
642 * 001 月份
643 * 002 考勤日期
644 * 003 公司
645 * 004 一级部门
646 * 005 二级部门
647 * 006 三级部门
648 * 007 四级部门
649 * 008 五级部门
650 * 009 员工编号
651 * 010 姓名
652 * 011 岗位状态
653 * 012 职位ID
654 * 013 职位名称
655 * 014 身份证号码
656 * 015 班次
657 * 016 事假(/天)
658 * 017 长病假(/天)
659 * 018 病假(/天)
660 * 019 直系亲属丧假(/天)
661 * 020 产假(/天)
662 * 021 流产假(/天)
663 * 022 陪产假(/天)
664 * 023 婚假(/天)
665 * 024 调休(/小时)
666 * 025 年假(/天)
667 * 026 工伤(/天)
668 * 027 哺乳假(/小时)
669 * 028 设备检修假(/天)
670 * 029 高考陪考假(/天)
671 * 030 探亲假(/天)
672 * 031 旷工(/次)
673 * 032 迟到(/次)
674 * 033 早退(/次)
675 * 034 实际出勤(/天)
676 * 035 非直系亲属丧假(/天)
677 * 036 轮休假(/天)
678
679
680
681 Extracted by Mass Download version 1.5.5 - E.G.Mellodew. 1998-2022. Sap Release 752
682
683 Code listing for: ZHRR011
684
685 Description: 考勤明细表
686
687
688
689 *&---------------------------------------------------------------------*
690 *& Report ZHRR011
691 *&---------------------------------------------------------------------*
692 ********************************************************************
693 * 事务代码: *
694 * 程序名称:ZHRR011 *
695 * 程序目的: 考勤明细表 *
696 * 使用变式: *
697 * 设 计 人:HANDZX *
698 * 设计时间:2018-06-11 *
699 * 程序类型: ABAP/4 程序 ,报表 *
700 * 输入文件: *
701 * 输出文件: *
702 * 应用类型: HR *
703 * 描 述: 考勤明细表 *
704 *(修改日志)-------------------------------------------------------- *
705 * *
706 * 日志号 修改人 修改时间 修改说明 传输号码 *
707 * ---- ---- ------ -----------
708 * 001 HANDZX 20180611 创建 *
709 ********************************************************************
710 *&---------------------------------------------------------------------*
711
712
713 REPORT zhrr011.
714
715
716 *----------------------------------------------------------------------*
717 * 数据字典引用
718 *----------------------------------------------------------------------*
719
720
721 TABLES: pernr.
722 INFOTYPES: 0000,0001,0002,0008,0529,3527, 0105,0041,0016,9006,9009,2001,2010,0007.
723
724 TYPES:BEGIN OF ty_alv,
725 flag,
726
727
728 * zmonth TYPE char02, "月份
729
730
731 zdatas TYPE sy-datum, "考勤日期
732 stext20 TYPE hrp1000-stext, "公司
733 stext30 TYPE hrp1000-stext, "一级部门
734 stext40 TYPE hrp1000-stext, "二级部门
735 stext50 TYPE hrp1000-stext, "三级部门
736 stext60 TYPE hrp1000-stext, "四级部门
737 stext70 TYPE hrp1000-stext, "五级部门
738 pernr TYPE pernr_d, "员工编号
739 cname TYPE pa0002-cname, "姓名
740 stat2 TYPE text40, "岗位状态
741 plans TYPE pa0001-plans, "职位ID
742 stext TYPE hrp1000-stext, "职位名称
743 zsfzhm TYPE pa9006-zsfzhm, "身份证号码
744 ttext TYPE t550s-ttext, "班次
745 zshij TYPE pa2001-abwtg, "事假(/天)
746 zcbj TYPE pa2001-abwtg, "长病假(/天)
747 zbj TYPE pa2001-abwtg, "病假(/天)
748 zsj TYPE pa2001-abwtg, "直系亲属丧假(/天)
749 zfsj TYPE pa2001-abwtg, "非直系亲属丧假(/天)
750 zcj TYPE pa2001-abwtg, "产假(/天)
751 zlcj TYPE pa2001-abwtg, "流产假(/天)
752 zpcj TYPE pa2001-abwtg, "陪产假(/天)
753 zhj TYPE pa2001-abwtg, "婚假(/天)
754 ztx TYPE pa2001-abwtg, "调休(/小时)
755 znj TYPE pa2001-abwtg, "年假(/天)
756 zgs TYPE pa2001-abwtg, "工伤(/天)
757 zprj TYPE pa2001-abwtg, "哺乳假(/小时)
758 zsbjxj TYPE pa2001-abwtg, "设备检修假(/天)
759 zlxj TYPE pa2001-abwtg, "轮休假(/天)
760 zgkpkj TYPE pa2001-abwtg, "高考陪考假(/天)
761 ztqj TYPE pa2001-abwtg, "探亲假(/天)
762 zkg TYPE pa2010-anzhl, "旷工(/次)
763 zcd TYPE pa2010-anzhl, "迟到(/次)
764 zzt TYPE pa2010-anzhl, "早退(/次)
765 zsjcq TYPE pa2010-anzhl, "实际出勤(/天)
766 END OF ty_alv,
767
768 BEGIN OF ty_hrp1000,
769 objid TYPE hrobjid,
770 stext TYPE stext,
771 END OF ty_hrp1000.
772
773
774 *---------------------------------------------------------------------*
775 * 内表结构定义 *
776 *---------------------------------------------------------------------*
777
778
779 DATA:gt_alv TYPE STANDARD TABLE OF ty_alv,
780 gs_alv TYPE ty_alv.
781
782 DATA:gv_flag TYPE c.
783
784 "&ALV报表属性字段定义
785 DATA: gs_layout TYPE lvc_s_layo,
786 gt_fieldcat TYPE lvc_t_fcat,
787 gs_fieldcat TYPE lvc_s_fcat.
788
789 DATA:gt_t529u TYPE TABLE OF t529u,
790 gt_hrp1000 TYPE SORTED TABLE OF ty_hrp1000 WITH NON-UNIQUE KEY objid,
791 gt_t550s TYPE STANDARD TABLE OF t550s,
792 gt_t550a TYPE STANDARD TABLE OF t550a.
793
794
795
796 *----------------------------------------------------------------------*
797 * 选择屏幕
798 *----------------------------------------------------------------------*
799
800
801 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
802 SELECTION-SCREEN END OF BLOCK b1.
803
804
805 *----------------------------------------------------------------------*
806 * Selection Screen/选择屏幕
807 *----------------------------------------------------------------------*
808
809
810 INITIALIZATION.
811
812 PERFORM f_initialization.
813
814
815
816 *----------------------------------------------------------------------*
817 * 选择屏幕显示控制
818 *----------------------------------------------------------------------*
819
820
821 AT SELECTION-SCREEN OUTPUT.
822
823
824
825 *----------------------------------------------------------------------*
826 * 检查用户输入
827 *----------------------------------------------------------------------*
828
829
830 AT SELECTION-SCREEN.
831
832 PERFORM f_at_selection.
833
834
835
836 *----------------------------------------------------------------------*
837 * start-of-selection/开始选择屏幕
838 *----------------------------------------------------------------------*
839
840
841 START-OF-SELECTION.
842
843 PERFORM frm_get_initialization.
844
845 GET pernr.
846
847 PERFORM frm_get_data.
848
849
850
851 *----------------------------------------------------------------------*
852 * end-of-selection/结束选择屏幕(程序结束处理,输出等)
853 *----------------------------------------------------------------------*
854
855
856 END-OF-SELECTION.
857
858 PERFORM frm_display_result.
859
860
861
862 *&---------------------------------------------------------------------*
863 *& Form FRM_GET_INITIALIZATION
864 *&---------------------------------------------------------------------*
865 *& text
866 *&---------------------------------------------------------------------*
867 *& --> p1 text
868 *& <-- p2 text
869 *&---------------------------------------------------------------------*
870
871
872 FORM frm_get_initialization .
873 SELECT *
874 INTO CORRESPONDING FIELDS OF TABLE gt_t529u
875 FROM t529u
876 WHERE sprsl = sy-langu
877 AND statn = '1'.
878
879 SELECT objid
880 stext
881 INTO CORRESPONDING FIELDS OF TABLE gt_hrp1000
882 FROM hrp1000
883 WHERE plvar = '01'
884 AND otype = 'S'
885 AND endda >= sy-datum
886 AND begda <= sy-datum.
887 SELECT *
888 FROM t550s
889 INTO CORRESPONDING FIELDS OF TABLE gt_t550s
890 WHERE spras = sy-langu
891 AND motpr = '28'.
892 SELECT *
893 INTO TABLE gt_t550a
894 FROM t550a
895 WHERE motpr = '28'.
896
897 ENDFORM.
898
899
900 *&---------------------------------------------------------------------*
901 *& Form GET_DATA
902 *&---------------------------------------------------------------------*
903 *& text
904 *&---------------------------------------------------------------------*
905 *& --> p1 text
906 *& <-- p2 text
907 *&---------------------------------------------------------------------*
908
909
910 FORM frm_get_data.
911
912 DATA:lv_begda TYPE sy-datum,
913 lv_endda TYPE sy-datum.
914 DATA:lv_date TYPE p0001-begda.
915 lv_begda = pn-begda.
916
917
918 * BREAK HANDZX.
919
920
921 AUTHORITY-CHECK OBJECT 'P_ORGIN'
922 ID 'PERSA' FIELD p0001-werks
923 ID 'VDSK1' FIELD p0001-vdsk1.
924 IF sy-subrc <> 0.
925 EXIT.
926 ENDIF.
927 DO.
928 lv_date = lv_begda.
929 CLEAR:gv_flag.
930 PERFORM frm_get_detail USING lv_begda.
931 CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
932 EXPORTING
933 date = lv_date
934 days = '1'
935 months = '0'
936 signum = '+'
937 years = '0'
938 IMPORTING
939 calc_date = lv_begda.
940 IF lv_begda GT pn-endda.
941 EXIT.
942 ENDIF.
943
944 ENDDO.
945
946
947 ENDFORM.
948
949
950 *&---------------------------------------------------------------------*
951 *& Form FRM_GET_DETAIL
952 *&---------------------------------------------------------------------*
953 *& text
954 *&---------------------------------------------------------------------*
955
956
957 FORM frm_get_detail USING pv_begda.
958
959 DATA:lt_pernr TYPE STANDARD TABLE OF pdpnr,
960 lt_psp TYPE STANDARD TABLE OF pdpsp,
961 lt_daypsp TYPE STANDARD TABLE OF pdsppsp.
962
963 DATA: ls_sturc TYPE zshr_struc,
964 ls_pernr TYPE pdpnr,
965 ls_psp TYPE pdpsp.
966
967 DATA: lv_abwtg TYPE pa2001-abwtg,
968 lv_awart TYPE pa2001-awart,
969 lv_kaltg TYPE pa2001-kaltg.
970
971 READ TABLE p0000 WITH KEY massn = 'Z7'.
972 IF sy-subrc = 0.
973 CHECK pv_begda < p0000-begda.
974 ENDIF.
975
976 CHECK pv_begda >= p0007-begda.
977
978 rp_provide_from_last p0000 space pv_begda pv_begda.
979 rp_provide_from_last p0001 space pv_begda pv_begda.
980 rp_provide_from_last p0002 space pv_begda pv_begda.
981 rp_provide_from_last p9006 space pv_begda pv_begda.
982 rp_provide_from_last p0007 space pv_begda pv_begda.
983 rp_provide_from_last p2010 space pv_begda pv_begda.
984
985 CLEAR: gs_alv.
986
987
988 * gs_alv-zmonth = pv_begda+4(2).
989
990
991 gs_alv-zdatas = pv_begda.
992 gs_alv-pernr = p0001-pernr."员工编号
993 gs_alv-plans = p0001-plans."职位ID
994 gs_alv-cname = p0002-nachn && p0002-vorna."姓名
995 gs_alv-zsfzhm = p9006-zsfzhm."身份证号
996 call function 'ZZHR_GET_STRUC'
997 EXPORTING
998 i_orgeh = p0001-orgeh
999 i_begda = pv_begda
1000 i_endda = pv_begda
1001 IMPORTING
1002 e_struc = ls_sturc.
1003 MOVE-CORRESPONDING ls_sturc TO gs_alv.
1004
1005 CLEAR: ls_pernr, lt_pernr[], lt_psp[].
1006 ls_pernr-pernr = pernr-pernr.
1007 APPEND ls_pernr TO lt_pernr.
1008
1009 CALL FUNCTION 'HR_PERSON_READ_WORK_SCHEDULE'
1010 EXPORTING
1011 begin_date = pv_begda
1012 end_date = pv_begda
1013 TABLES
1014 pernr_tab = lt_pernr
1015 psp = lt_psp
1016 day_psp = lt_daypsp
1017 EXCEPTIONS
1018 error_in_build_psp = 1
1019 OTHERS = 2.
1020
1021 LOOP AT lt_psp INTO ls_psp WHERE datum = pv_begda AND ftkla <> '1' AND tpkla = '1'.
1022
1023
1024
1025 * CHECK p0007-zterf = 0.
1026
1027
1028
1029 LOOP AT p2001 WHERE begda <= pv_begda AND endda >= pv_begda.
1030
1031 IF p2001-abwtg > 1.
1032 lv_abwtg = 1.
1033 ENDIF.
1034
1035 lv_awart = p2001-awart.
1036
1037 IF p2001-kaltg > 1.
1038 lv_kaltg = 1..
1039 ENDIF.
1040
1041 ENDLOOP.
1042
1043 CASE lv_awart.
1044 WHEN '6000'.
1045 IF lv_kaltg EQ 0.
1046 gs_alv-zcbj = lv_abwtg."长病假(/天)
1047 ELSE.
1048 gs_alv-zcbj = lv_kaltg."长病假(/天)
1049 ENDIF.
1050
1051 WHEN '6001'.
1052 IF lv_kaltg EQ 0.
1053 gs_alv-zbj = lv_abwtg."病假(/天)
1054 ELSE.
1055 gs_alv-zbj = lv_kaltg."病假(/天)
1056 ENDIF.
1057
1058 WHEN '6002'.
1059 IF lv_kaltg EQ 0.
1060 gs_alv-zshij = lv_abwtg."事假(/天)
1061 ELSE.
1062 gs_alv-zshij = lv_kaltg."事假(/天)
1063 ENDIF.
1064
1065 WHEN '6009'.
1066 gs_alv-zsj = lv_abwtg."亲属丧假(/天)
1067
1068 WHEN '6005'.
1069 IF lv_kaltg EQ 0.
1070 gs_alv-zcj = lv_abwtg."产假(/天)
1071 ELSE.
1072 gs_alv-zcj = lv_kaltg."产假(/天)
1073 ENDIF.
1074
1075 WHEN '6006'.
1076 gs_alv-zlcj = lv_abwtg."流产假(/天)
1077
1078 WHEN '6007'.
1079 gs_alv-zpcj = lv_abwtg."陪产假(/天)
1080
1081 WHEN '6004'.
1082 gs_alv-zhj = lv_abwtg."婚假(/天)
1083
1084 WHEN '6010'.
1085 gs_alv-ztx = lv_abwtg."调休(/天)
1086
1087 WHEN '6003'.
1088 gs_alv-znj = lv_abwtg."年假(/天)
1089
1090 WHEN '6008'.
1091 IF lv_kaltg EQ 0.
1092 gs_alv-zgs = lv_abwtg."工伤(/天)
1093 ELSE.
1094 gs_alv-zgs = lv_kaltg."工伤(/天)
1095 ENDIF.
1096
1097 WHEN '6011'.
1098 gs_alv-zprj = lv_abwtg."哺乳假(/天)
1099
1100 WHEN '6012'.
1101 IF lv_kaltg EQ 0.
1102 gs_alv-zsbjxj = lv_abwtg."设备检修假(/天)
1103 ELSE.
1104 gs_alv-zsbjxj = lv_kaltg."设备检修假(/天)
1105 ENDIF.
1106
1107 WHEN '6013'.
1108 gs_alv-zgkpkj = lv_abwtg."高考陪考假(/天)
1109
1110 WHEN '6014'.
1111 gs_alv-ztqj = lv_abwtg."探亲假(/天)
1112
1113 WHEN '6015'.
1114 gs_alv-zfsj = gs_alv-zsj + lv_abwtg."非直系亲属丧假(/天)
1115
1116 WHEN '6016'.
1117 gs_alv-zlxj = gs_alv-ztqj + lv_abwtg."轮休假/天)
1118
1119 WHEN OTHERS.
1120 ENDCASE.
1121
1122 LOOP AT p2010 WHERE begda <= ls_psp-datum AND endda >= ls_psp-datum.
1123 CASE p2010-lgart.
1124 WHEN '4080'.
1125 gs_alv-zkg = p2010-anzhl."旷工(/天)
1126 WHEN '4071'.
1127 gs_alv-zcd = p2010-anzhl."迟到(/次)
1128 WHEN '4070'.
1129 gs_alv-zzt = p2010-anzhl."早退(/次)
1130 WHEN OTHERS.
1131 ENDCASE.
1132 ENDLOOP.
1133
1134 "班次
1135 READ TABLE gt_t550s INTO DATA(gs_t550s) WITH KEY tprog = ls_psp-tprog.
1136 IF sy-subrc = 0.
1137 gs_alv-ttext = gs_t550s-ttext.
1138 ENDIF.
1139
1140 CLEAR:lv_awart,ls_psp,lv_abwtg.
1141
1142 ENDLOOP.
1143
1144 "出勤天数
1145 gs_alv-zsjcq = 1 - ( gs_alv-zbj / 2 + gs_alv-zshij + gs_alv-zcj + gs_alv-zkg + gs_alv-zsbjxj + gs_alv-zcbj ).
1146
1147 "岗位状态
1148 READ TABLE gt_t529u INTO DATA(ls_t529u) WITH KEY statv = p0000-stat1.
1149 IF sy-subrc = 0.
1150 gs_alv-stat2 = ls_t529u-text1.
1151 ENDIF.
1152 "职位名称
1153 READ TABLE gt_hrp1000 INTO DATA(ls_hrp1000) WITH KEY objid = p0001-plans.
1154 IF sy-subrc = 0.
1155 gs_alv-stext = ls_hrp1000-stext.
1156 ENDIF.
1157
1158 APPEND gs_alv TO gt_alv.
1159
1160 ENDFORM.
1161
1162
1163 *&---------------------------------------------------------------------*
1164 *& Form FRM_DISPLAY_RESULT
1165 *&---------------------------------------------------------------------*
1166 *& text
1167 *&---------------------------------------------------------------------*
1168
1169
1170 FORM frm_display_result .
1171
1172 sy-title = sy-title && ':' && | |
1173 && pn-begda+(4) && '年' && pn-begda+4(2) && '月' && pn-begda+6(2) && '日'
1174 && | ~ |
1175 && pn-endda+(4) && '年' && pn-endda+4(2) && '月' && pn-endda+6(2) && '日'.
1176
1177 PERFORM frm_layout.
1178
1179 PERFORM frm_fieldcat.
1180
1181 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
1182 EXPORTING
1183 i_callback_program = sy-repid
1184 is_layout_lvc = gs_layout
1185 it_fieldcat_lvc = gt_fieldcat
1186 i_save = 'A'
1187 TABLES
1188 t_outtab = gt_alv
1189 EXCEPTIONS
1190 program_error = 1
1191 OTHERS = 2.
1192
1193 ENDFORM.
1194
1195
1196
1197 *&---------------------------------------------------------------------*
1198 *& Form FRM_LAYOUT
1199 *&---------------------------------------------------------------------*
1200 *& text
1201 *&---------------------------------------------------------------------*
1202
1203
1204 FORM frm_layout .
1205 gs_layout-zebra = abap_true.
1206 gs_layout-box_fname = 'FLAG'.
1207 gs_layout-cwidth_opt = abap_true.
1208 ENDFORM.
1209
1210
1211 *&---------------------------------------------------------------------*
1212 *& Form FRM_FIELDCAT
1213 *&---------------------------------------------------------------------*
1214 *& text
1215 *&---------------------------------------------------------------------*
1216
1217
1218 FORM frm_fieldcat .
1219
1220
1221
1222 *----------------------------------------------------------------------*
1223 * 宏定义
1224 *----------------------------------------------------------------------*
1225
1226
1227 DEFINE mac_add_fieldcat.
1228 CLEAR gs_fieldcat.
1229 gs_fieldcat-fieldname = &1.
1230 gs_fieldcat-coltext = &2.
1231 APPEND gs_fieldcat TO gt_fieldcat.
1232 END-OF-DEFINITION.
1233
1234 mac_add_fieldcat:
1235
1236
1237 * 'ZMONTH' TEXT-001,
1238
1239
1240 'ZDATAS' TEXT-002,
1241 'STEXT20' TEXT-003,
1242 'STEXT30' TEXT-004,
1243 'STEXT40' TEXT-005,
1244 'STEXT50' TEXT-006,
1245 'STEXT60' TEXT-007,
1246 'STEXT70' TEXT-008,
1247 'PERNR' TEXT-009,
1248 'CNAME' TEXT-010,
1249 'STAT2' TEXT-011,
1250 'PLANS' TEXT-012,
1251 'STEXT' TEXT-013,
1252 'ZSFZHM' TEXT-014,
1253 'TTEXT' TEXT-015,
1254 'ZSHIJ' TEXT-016,
1255 'ZCBJ' TEXT-017,
1256 'ZBJ' TEXT-018,
1257 'ZSJ' TEXT-019,
1258 'ZFSJ' TEXT-035,
1259 'ZCJ' TEXT-020,
1260 'ZLCJ' TEXT-021,
1261 'ZPCJ' TEXT-022,
1262 'ZHJ' TEXT-023,
1263 'ZTX' TEXT-024,
1264 'ZNJ' TEXT-025,
1265 'ZGS' TEXT-026,
1266 'ZPRJ ' TEXT-027,
1267 'ZSBJXJ' TEXT-028,
1268 'ZGKPKJ ' TEXT-029,
1269 'ZTQJ ' TEXT-030,
1270 'ZLXJ' TEXT-036,
1271 'ZKG ' TEXT-031,
1272 'ZCD' TEXT-032,
1273 'ZZT' TEXT-033,
1274 'ZSJCQ ' TEXT-034.
1275
1276 ENDFORM.
1277
1278
1279
1280 *&---------------------------------------------------------------------*
1281 *& Form F_INITIALIZATION
1282 *&---------------------------------------------------------------------*
1283 *& Initail
1284 *&---------------------------------------------------------------------*
1285
1286
1287 FORM f_initialization .
1288
1289 PERFORM f_ger_period.
1290
1291 ENDFORM.
1292
1293 FORM f_at_selection.
1294
1295 IF sy-ucomm = '$TIM'.
1296 PERFORM f_ger_period.
1297 ENDIF.
1298
1299 ENDFORM.
1300
1301 FORM f_ger_period.
1302
1303 DATA: lt_periods TYPE TABLE OF t549q.
1304
1305 CALL FUNCTION 'HR_PAYROLL_PERIODS_GET'
1306 EXPORTING
1307 get_begda = sy-datum
1308 get_endda = sy-datum
1309 TABLES
1310 get_periods = lt_periods.
1311
1312 LOOP AT lt_periods ASSIGNING FIELD-SYMBOL(<ls_period>).
1313 pnpbegda = pn-begda = <ls_period>-begda.
1314 pnpendda = pn-endda = <ls_period>-endda.
1315 EXIT.
1316 ENDLOOP.
1317
1318 ENDFORM.
1319
1320
1321
1322 *Text elements
1323 *----------------------------------------------------------
1324 * 001 月份
1325 * 002 考勤日期
1326 * 003 公司
1327 * 004 一级部门
1328 * 005 二级部门
1329 * 006 三级部门
1330 * 007 四级部门
1331 * 008 五级部门
1332 * 009 员工编号
1333 * 010 姓名
1334 * 011 岗位状态
1335 * 012 职位ID
1336 * 013 职位名称
1337 * 014 身份证号码
1338 * 015 班次
1339 * 016 事假(/天)
1340 * 017 长病假(/天)
1341 * 018 病假(/天)
1342 * 019 直系亲属丧假(/天)
1343 * 020 产假(/天)
1344 * 021 流产假(/天)
1345 * 022 陪产假(/天)
1346 * 023 婚假(/天)
1347 * 024 调休(/小时)
1348 * 025 年假(/天)
1349 * 026 工伤(/天)
1350 * 027 哺乳假(/小时)
1351 * 028 设备检修假(/天)
1352 * 029 高考陪考假(/天)
1353 * 030 探亲假(/天)
1354 * 031 旷工(/次)
1355 * 032 迟到(/次)
1356 * 033 早退(/次)
1357 * 034 实际出勤(/天)
1358 * 035 非直系亲属丧假(/天)
1359 * 036 轮休假(/天)
1360
1361
1362
1363 Extracted by Mass Download version 1.5.5 - E.G.Mellodew. 1998-2022. Sap Release 752