首页 > 其他 > 详细

HR 删除工资数据

时间:2019-09-19 19:20:26      阅读:158      评论:0      收藏:0      [点我收藏+]
******************************************************
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

 

HR 删除工资数据

原文:https://www.cnblogs.com/ckstock/p/11551527.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!