zoukankan      html  css  js  c++  java
  • HR 删除工资数据

    ******************************************************
    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
  • 相关阅读:
    Python 学习笔记(九)Python元组和字典(二)
    Python 学习笔记(九)Python元组和字典(一)
    Java适配器模式
    Java原型模式
    Java建造者模式
    java工厂模式
    封装图片处理方法
    TP中的图片水印
    THINKphp中复杂的查询
    THINKphp中常见的Request请求类
  • 原文地址:https://www.cnblogs.com/ckstock/p/11551527.html
Copyright © 2011-2022 走看看