SAP HR 考勤明细表
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本