SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Get payroll result



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> FI
View previous topic :: View next topic  
Author Message
admin
Администратор
Администратор



Joined: 01 Sep 2007
Posts: 1639

PostPosted: Thu Feb 19, 2009 3:14 pm    Post subject: Get payroll result Reply with quote

Code:
FUNCTION ZHRCM_PAYROLL_RESULTS_GET.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(PERNR) TYPE  PERNR_D
*"     REFERENCE(PAYDT) TYPE  DATUM OPTIONAL
*"     REFERENCE(BEGDA) TYPE  BEGDA OPTIONAL
*"     REFERENCE(ENDDA) TYPE  ENDDA OPTIONAL
*"     REFERENCE(PAYRO) TYPE  CHAR1 OPTIONAL
*"     REFERENCE(INCEN) TYPE  CHAR1 OPTIONAL
*"     REFERENCE(RETRO) TYPE  CHAR1 OPTIONAL
*"     REFERENCE(SRTZA) TYPE  SRTZA
*"     REFERENCE(OCRSN) TYPE  PAY_OCRSN OPTIONAL
*"     REFERENCE(PAYID) TYPE  PAYID OPTIONAL
*"  EXPORTING
*"     REFERENCE(SUBRC) TYPE  SYSUBRC
*"     REFERENCE(MOLGA) TYPE  MOLGA
*"     REFERENCE(PAYROLL_RESULT_TAB) TYPE  HRPAY99_TAB_OF_RESULTS
*"----------------------------------------------------------------------

  DATA: RGDIR_TAB          TYPE STANDARD TABLE OF PC261
                                WITH NON-UNIQUE DEFAULT KEY,
        RGDIR_FILTERED_TAB TYPE STANDARD TABLE OF PC261
                                WITH NON-UNIQUE DEFAULT KEY,
        RGDIR_WA           TYPE PC261,
        T500L_WA           TYPE T500L,
        PAYROLL_RESULT_WA  TYPE PAY99_RESULT.

  DATA: P_OCRSN LIKE T52OCR-OCRSN .            "Payroll reason

  DATA: LW_PAYDT TYPE D.

* initialize export parameters
  CLEAR: PAYROLL_RESULT_TAB,
         SUBRC.

  LW_PAYDT = PAYDT.

* read RGDIR
  CALL FUNCTION 'CU_READ_RGDIR'
    EXPORTING
      PERSNR          = PERNR
    IMPORTING
      MOLGA           = MOLGA
    TABLES
      IN_RGDIR        = RGDIR_TAB[]
    EXCEPTIONS
      NO_RECORD_FOUND = 1
      OTHERS          = 2.
  IF SY-SUBRC <> 0.
    SUBRC = 1.
  ELSE.
*    IF paydt IS INITIAL.
**   filter RGDIR
*      CALL FUNCTION 'CD_READ_DATE_RANGE_WITH_PAYDT'
*        EXPORTING
*          begda     = begda
*          endda     = endda
*        TABLES
*          rgdir_in  = rgdir_tab
*          rgdir_out = rgdir_filtered_tab.
*
*      rgdir_tab = rgdir_filtered_tab.
*
*      LOOP AT rgdir_tab INTO rgdir_wa.
*        lw_paydt = rgdir_wa-paydt.
*      ENDLOOP.
*  ENDIF.

*   determine cluster ID
    CALL FUNCTION 'HRPY_READ_T500L'
         EXPORTING
              MOLGA          = MOLGA
         IMPORTING
              T500L_ENTRY    = T500L_WA
*        TABLES
*             ERRORTEXT      =
         EXCEPTIONS
              NO_ENTRY_FOUND = 1
            OTHERS         = 2.
    IF SY-SUBRC <> 0.
      SUBRC = 2.
    ELSE.
*      DATA: ok.
*     IMPORT p_ocrsn FROM MEMORY ID ok.
*     read payroll results
*      LOOP AT rgdir_filtered_tab INTO rgdir_wa.
      IF RETRO = ''. "급여결과
        IF PAYRO = 'X'.
*       LOOP AT rgdir_filtered_tab INTO rgdir_wa

          LOOP AT RGDIR_TAB INTO RGDIR_WA
            WHERE SRTZA = SRTZA
              AND FPBEG = BEGDA
              AND FPEND = ENDDA
              AND OCRSN = OCRSN.

            CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
                 EXPORTING
                      CLUSTERID                    = T500L_WA-RELID
                      EMPLOYEENUMBER               = PERNR
                      SEQUENCENUMBER               = RGDIR_WA-SEQNR
*                 READ_ONLY_BUFFER             = ' '
                      READ_ONLY_INTERNATIONAL      = 'X'
*                 CHECK_READ_AUTHORITY         = 'X'
*            IMPORTING
*                 VERSION_NUMBER_PAYVN         =
*                 VERSION_NUMBER_PCL2          =
                 CHANGING
                      PAYROLL_RESULT               = PAYROLL_RESULT_WA
                 EXCEPTIONS
                      ILLEGAL_ISOCODE_OR_CLUSTERID = 1
                      ERROR_GENERATING_IMPORT      = 2
                      IMPORT_MISMATCH_ERROR        = 3
                      SUBPOOL_DIR_FULL             = 4
                      NO_READ_AUTHORITY            = 5
                      NO_RECORD_FOUND              = 6
                      VERSIONS_DO_NOT_MATCH        = 7
                      OTHERS                       = 8.

            IF SY-SUBRC = 0.
              PAYROLL_RESULT_WA-EVP = RGDIR_WA.
              APPEND PAYROLL_RESULT_WA TO PAYROLL_RESULT_TAB.
            ELSE.
*         error handling
            ENDIF.
          ENDLOOP.
        ELSEIF INCEN = 'X'. "상여일경우
* 퇴직충당금을 구하기 위해서 지급일과 같을경우만 가져온다.

          IF OCRSN <> ''. "급여사유가 있는 경우.

* 급여 ID 추가 - 비정기상여가 같은 날에 지급될 수 있음. - 2005.09.06 PJI
            LOOP AT RGDIR_TAB INTO RGDIR_WA
              WHERE SRTZA = SRTZA
                AND PAYDT = LW_PAYDT
                AND OCRSN = OCRSN
                AND PAYID = PAYID.

              CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
                   EXPORTING
                        CLUSTERID                    = T500L_WA-RELID
                        EMPLOYEENUMBER               = PERNR
                        SEQUENCENUMBER               = RGDIR_WA-SEQNR
*                 READ_ONLY_BUFFER             = ' '
                        READ_ONLY_INTERNATIONAL      = 'X'
*                 CHECK_READ_AUTHORITY         = 'X'
*            IMPORTING
*                 VERSION_NUMBER_PAYVN         =
*                 VERSION_NUMBER_PCL2          =
                   CHANGING
                        PAYROLL_RESULT               = PAYROLL_RESULT_WA
                   EXCEPTIONS
                        ILLEGAL_ISOCODE_OR_CLUSTERID = 1
                        ERROR_GENERATING_IMPORT      = 2
                        IMPORT_MISMATCH_ERROR        = 3
                        SUBPOOL_DIR_FULL             = 4
                        NO_READ_AUTHORITY            = 5
                        NO_RECORD_FOUND              = 6
                        VERSIONS_DO_NOT_MATCH        = 7
                        OTHERS                       = 8.

              IF SY-SUBRC = 0.
                PAYROLL_RESULT_WA-EVP = RGDIR_WA.
                APPEND PAYROLL_RESULT_WA TO PAYROLL_RESULT_TAB.
              ELSE.
*         error handling
              ENDIF.
            ENDLOOP.
          ELSE. "급여사유가 없을경우.
            LOOP AT RGDIR_TAB INTO RGDIR_WA
              WHERE SRTZA = SRTZA
                AND PAYDT = LW_PAYDT
                AND OCRSN <> ''.

              CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
                   EXPORTING
                        CLUSTERID                    = T500L_WA-RELID
                        EMPLOYEENUMBER               = PERNR
                        SEQUENCENUMBER               = RGDIR_WA-SEQNR
*                 READ_ONLY_BUFFER             = ' '
                        READ_ONLY_INTERNATIONAL      = 'X'
*                 CHECK_READ_AUTHORITY         = 'X'
*            IMPORTING
*                 VERSION_NUMBER_PAYVN         =
*                 VERSION_NUMBER_PCL2          =
                   CHANGING
                        PAYROLL_RESULT               = PAYROLL_RESULT_WA
                   EXCEPTIONS
                        ILLEGAL_ISOCODE_OR_CLUSTERID = 1
                        ERROR_GENERATING_IMPORT      = 2
                        IMPORT_MISMATCH_ERROR        = 3
                        SUBPOOL_DIR_FULL             = 4
                        NO_READ_AUTHORITY            = 5
                        NO_RECORD_FOUND              = 6
                        VERSIONS_DO_NOT_MATCH        = 7
                        OTHERS                       = 8.

              IF SY-SUBRC = 0.
                PAYROLL_RESULT_WA-EVP = RGDIR_WA.
                APPEND PAYROLL_RESULT_WA TO PAYROLL_RESULT_TAB.
              ELSE.
*         error handling
              ENDIF.

            ENDLOOP.
          ENDIF.
        ENDIF.

* 소급계산일 경우에는 정기급여와 비정기급여를 일괄처리한다.
      ELSEIF RETRO = 'X'. "소급결과
        LOOP AT RGDIR_TAB INTO RGDIR_WA
          WHERE SRTZA = SRTZA.

* 정기급여일 경우는 급여일자로 읽고, 비정기급여일 경우는 급여기간으로
* 가져온다.
          IF ( RGDIR_WA-OCRSN = '' AND RGDIR_WA-PAYDT = LW_PAYDT )
            OR ( RGDIR_WA-OCRSN <> ''
            AND RGDIR_WA-PAYDT >= BEGDA AND RGDIR_WA-PAYDT <= ENDDA ).

            CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
                 EXPORTING
                      CLUSTERID                    = T500L_WA-RELID
                      EMPLOYEENUMBER               = PERNR
                      SEQUENCENUMBER               = RGDIR_WA-SEQNR
*                 READ_ONLY_BUFFER             = ' '
                      READ_ONLY_INTERNATIONAL      = 'X'
*                 CHECK_READ_AUTHORITY         = 'X'
*            IMPORTING
*                 VERSION_NUMBER_PAYVN         =
*                 VERSION_NUMBER_PCL2          =
                 CHANGING
                      PAYROLL_RESULT               = PAYROLL_RESULT_WA
                 EXCEPTIONS
                      ILLEGAL_ISOCODE_OR_CLUSTERID = 1
                      ERROR_GENERATING_IMPORT      = 2
                      IMPORT_MISMATCH_ERROR        = 3
                      SUBPOOL_DIR_FULL             = 4
                      NO_READ_AUTHORITY            = 5
                      NO_RECORD_FOUND              = 6
                      VERSIONS_DO_NOT_MATCH        = 7
                      OTHERS                       = 8.

            IF SY-SUBRC = 0.
              PAYROLL_RESULT_WA-EVP = RGDIR_WA.
              APPEND PAYROLL_RESULT_WA TO PAYROLL_RESULT_TAB.
            ELSE.
*         error handling
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDIF.

    ENDIF.
  ENDIF.

* check for payroll results
  IF PAYROLL_RESULT_TAB[] IS INITIAL.
    SUBRC = 3.
  ENDIF.

ENDFUNCTION.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> FI All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.