hr abap

FUNCTION Z_PERSON_RES_SAL.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(IPERNR) TYPE  PERNR_D DEFAULT '80000001'
*"     VALUE(BEGIN) TYPE  SYDATUM DEFAULT SY-DATUM
*"  EXPORTING
*"     VALUE(SAL) TYPE  PAD_AMT7S
*"     VALUE(RET) TYPE  BAPIRET2
*"----------------------------------------------------------------------

  data: PNP-SW-FOUND type c,
        pnp-sy-tabix LIKE sy-tabix.

  data endda like p0001-begda.
  data bdate like p0001-begda.
  data tmp(8type c.
  data:p3010 type PAD_AMT7S,
       p3011 type PAD_AMT7S,
       p3110 type PAD_AMT7S.

  data : tmplg like p0008-lga01,
         tmpbetrg like p0008-bet01,
         tmpanz like p0008-anz01.

  data : it0008 type p0008 occurs 10 with header line,
         it0014 type p0014 occurs 10 with HEADER LINE.

  CONCATENATE begin+0(6)
              '01'
              into tmp.
  move tmp to endda.
  CONCATENATE begin+0(4)
              '0301'
              into tmp.
  move tmp to bdate.


  CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
*   TCLAS                 = 'A'
      PERNR                 = ipernr
      INFTY                 = '0008'
      BEGDA                 = bdate
      ENDDA                 = endda
*   BYPASS_BUFFER         = ' '
*   LEGACY_MODE           = ' '
* IMPORTING
*   SUBRC                 =
    TABLES
      INFTY_TAB             = it0008
   EXCEPTIONS
     INFTY_NOT_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.
    ret-type = 'E'.
    ret-message = '0008'.
    exit.
  ENDIF.

  CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
*   TCLAS                 = 'A'
      PERNR                 = ipernr
      INFTY                 = '0014'
      BEGDA                 = bdate
      ENDDA                 = endda
*   BYPASS_BUFFER         = ' '
*   LEGACY_MODE           = ' '
* IMPORTING
*   SUBRC                 =
    TABLES
      INFTY_TAB             = it0014
   EXCEPTIONS
     INFTY_NOT_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.
    ret-type = 'E'.
    ret-message = '0014'.
    exit.
  ENDIF.

  endda = bdate.
  SAL = 0.


  CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
     EXPORTING
       I_DATE        = bdate
    IMPORTING
      E_DATE        = endda
             .
  do 12 times.
    clear:p3011,p3010,p3110.


    rp-provide-from-last it0008 space bdate endda.
    if pnp-sw-found eq '1'.
      do 40 times varying tmplg from it0008-lga01 next it0008-lga02
                  varying tmpbetrg from it0008-bet01 next it0008-bet02
                  varying tmpanz from it0008-anz01 next it0008-anz02.
        if tmplg eq '3010'.
          p3010 = tmpbetrg.
        endif.
        if tmplg eq '3011'.
          p3011 = tmpanz.
        endif.
      enddo.
    endif.

    rp-provide-from-last it0014 '3110' bdate endda.
    if pnp-sw-found eq '1'.
      p3110 = it0014-betrg.
    endif.

    sal = sal + ( p3010 * p3011 / 100 ) - p3110.

    CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
      EXPORTING
        DATE            = bdate
        DAYS            = '00'
        MONTHS          = '01'
        SIGNUM          = '+'
        YEARS           = '00'
      IMPORTING
        CALC_DATE       = bdate
              .
 CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
     EXPORTING
       I_DATE        = bdate
    IMPORTING
      E_DATE        = endda
             .

    if endda >= BEGIN.
      exit.
    endif.
  enddo.

ENDFUNCTION.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值