ABAP 模拟工资核算

核心代码
需要注意2点
1、需在标准核算程序里面对每个工资核算范围保存个变式(比如A1变式名字就叫A1)
2、对于报错,因为簇表不会返回具体的错误消息,所以根据某些表是不是为空来判断

*&---------------------------------------------------------------------*
*& FORM FRM_GET_PAY_932_1
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> <FS_PERNR_RANGE>
*&      --> LV_BEGDA
*&      <-- ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_GET_PAY_932_1  USING    P_PA0001 STRUCTURE PA0001
                               P_DAY_IN TYPE SY-DATUM
                          CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT.


  DATA: LT_SIM_PERNR TYPE TABLE OF PAY_SIM_PERNR.
  DATA: BUFFER            TYPE HRPAY_BUFFER,
        LS_RGDIR_LINE     LIKE PC261,
        LV_MOLGA          TYPE MOLGA.

  DATA: BEGIN OF RX-KEY.            "CLUSTER KEY
           INCLUDE STRUCTURE PC200.
  DATA: END   OF RX-KEY.
  DATA:LS_PAYRESULT TYPE PAYCN_RESULT.
  DATA:LV_VARIANT TYPE VARIANT.
  LV_VARIANT = P_PA0001-ABKRS.

  CLEAR:LT_SIM_PERNR.
  LT_SIM_PERNR = VALUE #( ( PERNR = P_PA0001-PERNR ) ).

  CALL FUNCTION 'HR_PAYROLL'
    EXPORTING
      PAYROLL_AREA = P_PA0001-ABKRS
      PAYROLL_PERIOD = P_DAY_IN+4(2)
      PAYROLL_YEAR = P_DAY_IN(4)
      SELECTION_VARIANT = LV_VARIANT
      PROGRAM_NAME = 'HCNCALC0'
      SCHEMA       = 'ZN28'
*   TST_ON = 'X'
    TABLES
      EMPLOYEE_NUMBERS = LT_SIM_PERNR
      BUFFER = TBUFF
      BUFFER_DIRECTORY = BUFFER_DIR
      DELETE_PCLX = DEL_PCLX_TAB
    EXCEPTIONS
      PROGRAM_NOT_EXIST = 1
      VARIANT_NOT_EXIST = 2
      MISSING_PARAMETER = 3
      WRONG_PARAMETER = 4
      WRONG_COUNTRY_GROUP = 5
      OTHERS = 6.

  BUFFER-TBUFF[] = TBUFF[].
  BUFFER-BUFFER_DIR[] = BUFFER_DIR[].
  BUFFER-DEL_PCLX_TAB[] = DEL_PCLX_TAB[].

  CALL FUNCTION 'CU_READ_RGDIR'
    EXPORTING
      PERSNR = P_PA0001-PERNR
      BUFFER = BUFFER
    IMPORTING
      MOLGA  = LV_MOLGA
    TABLES
      IN_RGDIR = RGDIR
    EXCEPTIONS
      NO_RECORD_FOUND = 1
    OTHERS = 2.

  DELETE RGDIR WHERE FPPER NE P_DAY_IN+0(6).
  IF RGDIR[] IS INITIAL.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_RED_LIGHT.
    P_ES_SOCIAL_INSURANCE-MESSAGE = TEXT-E04.
    CONCATENATE  P_USER  SY-DATUM TEXT-E03 P_ES_SOCIAL_INSURANCE-MESSAGE INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
    RETURN.
  ENDIF.

  CALL FUNCTION 'CD_READ_LAST_RESULT_IN_RGDIR'
    IMPORTING
      PTX_RGDIR_NV = LS_RGDIR_LINE
    TABLES
      PT_RGDIR = RGDIR.

  RX-KEY-PERNR = P_PA0001-PERNR.
  RX-KEY-SEQNO = LS_RGDIR_LINE-SEQNR.
  RP-IMP-C2-CN."RP

  IF RP-IMP-CN-SUBRC = 0.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_GREEN_LIGHT.
    CONCATENATE  SY-UNAME  SY-DATUM TEXT-S03 INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
  ELSE.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_RED_LIGHT.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            INTO P_ES_SOCIAL_INSURANCE-MESSAGE
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    CONCATENATE  P_USER  SY-DATUM TEXT-E03 P_ES_SOCIAL_INSURANCE-MESSAGE INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
    RETURN.
  ENDIF.

  SORT RT  BY LGART.
*  SORT PI  BY LGART.
*  SORT MI  BY LGART.
*  SORT UI  BY LGART.
*  SORT II  BY LGART.
*  SORT BI  BY LGART.
*  SORT SUI BY LGART.

 
ENDFORM.

完整代码

*&---------------------------------------------------------------------*
*& 
*&---------------------------------------------------------------------*
*程序名称  ZHRI0045
*程序名称  模拟运算程序
*所属模块   HR
*程序开发  Jokr
*开发时间  2021.03.16
*功能说明书编号
*&---------------------------------------------------------------------*
*逻辑概要:
* 1. 用于模拟工资核算 just for CN28
* 2.
* 3.
*&---------------------------------------------------------------------*
*修改历史:
*&---------------------------------------------------------------------*
*  修改管理        修改日        修改者         修改概要
*  S4DK123456      2021.03.16    Joker          创建,初始版本
*
*&---------------------------------------------------------------------*
REPORT ZHRI0045.


INCLUDE ZHRI0045TOP.

INCLUDE ZHRI0045SCN.

INCLUDE ZHRI0045F01.

ZHRI0045TOP

*&---------------------------------------------------------------------*
*& 包含               ZFID086TOP
*&---------------------------------------------------------------------*
TABLES:PA0001.
"INCLUDE FOR PAYROLL simulation begin joker
TYPE-POOLS: hrpay.
TABLES: pcl1,pcl2. "IMPORT/EXPORT
DATA:rp-imp-CN-subrc TYPE SY-SUBRC.
*---------------------------------------------------------------------*
* VERSION CONTROL
*---------------------------------------------------------------------*
DATA: BEGIN OF  CN-VERSION.
*        INCLUDE STRUCTURE PC201.                        "XTWPH9K008656
         INCLUDE STRUCTURE PC201_PAY.                    "XTWPH9K008656
DATA: END OF  CN-VERSION.
DATA: BEGIN OF OCN-VERSION.
*       INCLUDE STRUCTURE PC201.                         "XTWPH9K008656
        INCLUDE STRUCTURE PC201_PAY.                     "XTWPH9K008656
DATA: END OF OCN-VERSION.

DATA: TAX   TYPE  HRPAYCN_TAX,
      PHF   TYPE  HRPAYCN_PHF,
      PI    TYPE  HRPAYCN_SI,
      UI    TYPE  HRPAYCN_SI,
      MI    TYPE  HRPAYCN_SI,
      II    TYPE  HRPAYCN_SI,
      BI    TYPE  HRPAYCN_SI,
      SUI   TYPE  HRPAYCN_SUI,
      SAD   TYPE  HRPAYCN_SAD,
      SFEE  TYPE  HRPAYCN_SFEE,
      TCRT  TYPE  HRPAYCN_TCRT,
      CNSP  TYPE  HRPAYCN_SP,
      CNREO TYPE  HRPAYCN_RETR,
      CNREI TYPE  HRPAYCN_RETR.


INCLUDE RPC2CD09.
INCLUDE RPC2RX02.
INCLUDE RPPPXD00.
INCLUDE RPPPXD10.
INCLUDE RPPPXM00.
*INCLUDE RPC2RKK0.
INCLUDE RPC2RX29.
INCLUDE RPC2RX39.
INCLUDE HCNPAYMACRO.
"INCLUDE FOR PAYROLL simulation end joker
INCLUDE ZAFL_MACROS.
* INCLUDE LZHRG00002D...                     " LOCAL CLASS DEFINITION
TYPES:BEGIN OF TY_OUTPUT.
        INCLUDE STRUCTURE ZHRS_I_PY932_1.
        TYPES:
        SLBOX    TYPE C,

        ICON     TYPE ICON-ID,
*        MESSAGE  TYPE STRING,
      END OF TY_OUTPUT,
      BEGIN OF TY_OUTPUT_CPF.
        INCLUDE STRUCTURE ZHRS_I_PY932_2.
        TYPES:
        SLBOX    TYPE C,

        ICON     TYPE ICON-ID,
*        MESSAGE  TYPE STRING,
      END OF TY_OUTPUT_CPF.


DATA:GT_OUTPUT     TYPE TABLE OF TY_OUTPUT,
     GS_OUTPUT     LIKE LINE  OF GT_OUTPUT,
     GT_OUTPUT_CPF TYPE TABLE OF TY_OUTPUT_CPF,
     GS_OUTPUT_CPF LIKE LINE  OF GT_OUTPUT_CPF.

*&---------------------------------------------------------------------*
*&DEFINE ALV
*&---------------------------------------------------------------------*
DATA: GV_REPID        TYPE SY-REPID,
      GS_LAYOUT       TYPE LVC_S_LAYO,
      GS_REPID        TYPE SY-REPID,
      GT_ALV_FILEDCAT TYPE LVC_T_FCAT,
      GS_ALV_FILED    LIKE LVC_S_FCAT.

DATA:GV_TABLE_NAME TYPE STRING,
     GV_GUID       TYPE ZE_EHR_GUID,
     GV_SYSID      TYPE STRING VALUE '9000',
     GT_IF001      TYPE TABLE OF ZHRT_IF001,
     GS_IF001      LIKE LINE  OF GT_IF001,
     GT_IF002      TYPE TABLE OF ZHRT_IF002,
     GS_IF002      LIKE LINE  OF GT_IF002,
     GV_TYPE       TYPE STRING,
     GV_MESSAGE    TYPE STRING,
     GV_ZTMS       TYPE I."拆包条目数

DATA:GT_ZHRT_0008 TYPE TABLE OF ZHRT_0008,
     GT_ZHRT_0009 TYPE TABLE OF ZHRT_0009.

*&---------------------------------------------------------------------*
*& Multi-threading
*&---------------------------------------------------------------------*
DATA:GV_TASK_NAME TYPE STRING,
     GV_SND_JOBS TYPE I,
     GV_open_task_num TYPE i,   "启动任务数量
     GV_WP TYPE I VALUE '5'."并发进程数

ZHRI0045SCN

*&---------------------------------------------------------------------*
*& 包含               ZHRI0001SCN
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_PERIO     TYPE CHAR6.

SELECT-OPTIONS:S_ABKRS FOR PA0001-ABKRS NO INTERVALS,
               S_PERNR FOR PA0001-PERNR NO INTERVALS.
PARAMETERS    :P_NOSHOW  TYPE C NO-DISPLAY,
               P_USER    TYPE ZEHRUSER,
               P_POST    TYPE C AS CHECKBOX .
SELECTION-SCREEN END OF BLOCK B1.


"SELECTION-SCREEN FUNCTION KEY 1.


*-----------------------------------------------------------------------
* AT SELECTION-SCREEN OUTPUT   --- PBO
*-----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.



*-----------------------------------------------------------------------
* INITIALIZATION
*-----------------------------------------------------------------------
INITIALIZATION.
  PERFORM FRM_INIT.




*-----------------------------------------------------------------------
* START-OF-SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.

  PERFORM FRM_START_INIT.
  PERFORM FRM_CHECK.

  IF GV_TYPE NE 'E'.
    PERFORM FRM_SET_INDICATOR USING TEXT-T01.
    PERFORM FRM_GET_DOCUMENT.
    PERFORM FRM_GET_DOCUMENT_CPF.
    PERFORM FRM_SAVE_LOG.
    PERFORM FRM_SAVE_LOG_CPF.
  ENDIF.



*-----------------------------------------------------------------------
* END-OF-SELECTION
*-----------------------------------------------------------------------

END-OF-SELECTION.
  CHECK P_NOSHOW NE 'X'.
  IF GV_TYPE NE 'E' AND GV_TYPE NE 'S' AND SY-BATCH NE 'X' .
    PERFORM FRM_SHOW.
  ELSE.
    MESSAGE GV_MESSAGE TYPE 'I' DISPLAY LIKE GV_TYPE.
  ENDIF.

ZHRI0045F01

*&---------------------------------------------------------------------*
*& 包含               ZHRI0045F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& FORM FRM_GET_DOCUMENT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_GET_DOCUMENT .

  DATA:ES_SOCIAL_INSURANCE LIKE LINE OF GT_OUTPUT,
       LV_PERNR            TYPE PERNR_D,
       LV_BEGDA            TYPE SY-DATUM,
       LV_ENDDA            TYPE SY-DATUM,
       LV_DATUM            TYPE SY-DATUM,
       LV_DATUM_TEMP       TYPE SY-DATUM.

  DATA:LT_RESULT_TAB     TYPE TABLE OF SWHACTOR,
       LT_HRP9302_PARENT TYPE TABLE OF HRP9302,
       LT_RESULT_OBJEC   TYPE TABLE OF OBJEC,
       LT_RESULT_STRUC   TYPE TABLE OF STRUC.

  DATA:LT_T5R05 TYPE TABLE OF T5R05,
       LS_T5R05 LIKE LINE OF LT_T5R05.


  DATA:LV_LAST_PERIO TYPE CHAR6,"上一个区间
       LV_NEXT_PERIO TYPE CHAR6."下一个区间


  DATA:LV_FIRST TYPE C.

  LV_BEGDA = P_PERIO+0(6) && '01'.

  CALL FUNCTION 'LAST_DAY_OF_MONTHS'
    EXPORTING
      DAY_IN            = LV_BEGDA
    IMPORTING
      LAST_DAY_OF_MONTH = LV_DATUM
    EXCEPTIONS
      DAY_IN_NO_DATE    = 1.


  LV_ENDDA = LV_DATUM.
  LV_DATUM_TEMP = LV_BEGDA - 1.
  LV_LAST_PERIO = LV_DATUM_TEMP+0(6).

  LV_DATUM_TEMP = LV_ENDDA + 1.
  LV_NEXT_PERIO = LV_DATUM_TEMP+0(6).




  SELECT *
    INTO TABLE @DATA(LT_PA0001)
    FROM PA0001 AS PA0001_1
   WHERE BEGDA LE @LV_ENDDA
     AND ENDDA GE @LV_BEGDA
     AND ABKRS IN @S_ABKRS
     AND PERNR IN @S_PERNR
     AND BEGDA EQ (
     SELECT MAX( BEGDA )
       FROM PA0001
      WHERE PERNR EQ PA0001_1~PERNR
        AND BEGDA LE @LV_ENDDA
        AND ENDDA GE @LV_BEGDA
        AND ABKRS IN @S_ABKRS
        AND PERNR IN @S_PERNR
    ).

  IF LT_PA0001[] IS NOT INITIAL.

    SELECT *
      INTO TABLE LT_T5R05
      FROM T5R05
     WHERE MOLGA EQ '28'.
    SORT LT_T5R05 BY MOLGA ICTYP.

    "人事事件
    SELECT *
      INTO TABLE @DATA(LT_PA0302)
      FROM PA0302
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR.

    "个人数据
    SELECT *
      INTO TABLE @DATA(LT_PA0002)
      FROM PA0002
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "合同信息
    SELECT *
      INTO TABLE @DATA(LT_PA0016)
      FROM PA0016
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "证件类型
    SELECT *
      INTO TABLE @DATA(LT_PA0185)
      FROM PA0185
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "公积金
    SELECT *
      INTO TABLE @DATA(LT_PA0530)
      FROM PA0530
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "社会保险
    SELECT *
      INTO TABLE @DATA(LT_PA0532)
      FROM PA0532
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND INTYP EQ '0001'
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "公积金缴纳主体
    SELECT *
      INTO TABLE @DATA(LT_PA9505)
      FROM PA9505
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    SELECT *
      INTO TABLE @DATA(LT_T7CN2A)
      FROM T7CN2A
     WHERE SPRSL EQ @SY-LANGU
       AND INFTY EQ '0532'
       AND INTYP EQ '0001'.

    SELECT *
      INTO TABLE @DATA(LT_T7CN23T)
      FROM T7CN23T
     WHERE SPRSL EQ @SY-LANGU.

    SELECT *
      INTO TABLE @DATA(LT_T500P)
      FROM T500P.

    "域描述
    SELECT *
      INTO TABLE @DATA(LT_DD07T)
      FROM DD07T
     WHERE DOMNAME IN ( 'ZDHR_SO','ZHR_WJYY','ZDHR_JNXX' )
       AND DDLANGUAGE  EQ @SY-LANGU.

    SORT LT_PA0302  BY PERNR MASSN.
    SORT LT_PA0001  BY PERNR.
    SORT LT_PA0002  BY PERNR.
    SORT LT_PA0016  BY PERNR.
    SORT LT_PA0185  BY PERNR ICTYP.
    SORT LT_PA0530  BY PERNR.
    SORT LT_PA0532  BY PERNR.
    SORT LT_PA9505  BY PERNR.
    SORT LT_T500P   BY PERSA.
    SORT LT_T7CN2A  BY INFTY CONAR.
    SORT LT_T7CN23T BY CONGR CONLV.
    SORT LT_DD07T   BY DOMNAME DOMVALUE_L.
  ENDIF.

  LOOP AT LT_PA0001 ASSIGNING FIELD-SYMBOL(<FS_PERNR_RANGE>).

    READ TABLE GT_ZHRT_0008 ASSIGNING FIELD-SYMBOL(<FS_ZHRT_0008>) WITH KEY PERNR = <FS_PERNR_RANGE>-PERNR BINARY SEARCH.
    CHECK SY-SUBRC NE 0 OR P_POST EQ 'X'.

    "5、  人员编号:读取人员编号PERNR.
    LV_PERNR = <FS_PERNR_RANGE>-PERNR.

    "2、  所属期:
    ES_SOCIAL_INSURANCE-PERIO = P_PERIO.

    READ TABLE LT_PA0016 ASSIGNING FIELD-SYMBOL(<FS_PA0016>) WITH KEY PERNR = LV_PERNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      ES_SOCIAL_INSURANCE-ZZHTQDZTI      = <FS_PA0016>-ZZHTQDZTI.

      READ TABLE LT_T500P ASSIGNING FIELD-SYMBOL(<FS_T500P>) WITH KEY PERSA = ES_SOCIAL_INSURANCE-ZZHTQDZTI BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_SOCIAL_INSURANCE-ZZHTQDZTI_DESC  = <FS_T500P>-NAME1.
      ENDIF.


    ENDIF.

    READ TABLE LT_PA9505 ASSIGNING FIELD-SYMBOL(<FS_PA9505>) WITH KEY PERNR = LV_PERNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      "3、  缴纳主体:
      ES_SOCIAL_INSURANCE-ZHR_SO  = <FS_PA9505>-ZHR_SO.

      "3、  缴纳主体:描述
      READ TABLE LT_DD07T ASSIGNING FIELD-SYMBOL(<FS_DD07T>) WITH KEY DOMNAME = 'ZDHR_SO' DOMVALUE_L = ES_SOCIAL_INSURANCE-ZHR_SO BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_SOCIAL_INSURANCE-ZHR_SO_DESC      = <FS_DD07T>-DDTEXT.
      ENDIF.

      IF <FS_PA9505>-ZHR_SO EQ ES_SOCIAL_INSURANCE-ZZHTQDZTI.
        ES_SOCIAL_INSURANCE-ZHR_SO_TYPE = TEXT-900."正常缴纳
      ELSE .
        ES_SOCIAL_INSURANCE-ZHR_SO_TYPE = TEXT-901."异地缴纳
      ENDIF.
    ENDIF.
    IF SY-SUBRC NE 0.
*
    ENDIF.


    READ TABLE LT_PA0532 ASSIGNING FIELD-SYMBOL(<FS_PA0532>) WITH KEY PERNR = LV_PERNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.

      "社保所属期
      IF <FS_PA0532>-ZHR_JNXX = '10'."当月缴当月
        ES_SOCIAL_INSURANCE-ZHR_SO_PERIO = P_PERIO.
      ELSEIF <FS_PA0532>-ZHR_JNXX = '20'."当月缴次月.
        ES_SOCIAL_INSURANCE-ZHR_SO_PERIO = LV_NEXT_PERIO.
      ELSEIF <FS_PA0532>-ZHR_JNXX = '30'."当月缴上月.
        ES_SOCIAL_INSURANCE-ZHR_SO_PERIO = LV_LAST_PERIO.
      ENDIF.

      "社保缴纳月份
      READ TABLE LT_DD07T ASSIGNING <FS_DD07T> WITH KEY DOMNAME = 'ZDHR_JNXX' DOMVALUE_L = <FS_PA0532>-ZHR_JNXX BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_SOCIAL_INSURANCE-ZHR_SO_PERIO_DESC      = <FS_DD07T>-DDTEXT.
      ENDIF.

      "参保城市
      ES_SOCIAL_INSURANCE-CONAR = <FS_PA0532>-CONAR.
      READ TABLE LT_T7CN2A ASSIGNING FIELD-SYMBOL(<FS_T7CN2A>) WITH KEY INFTY = '0532' CONAR = ES_SOCIAL_INSURANCE-CONAR BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_SOCIAL_INSURANCE-CONAR_DESC = <FS_T7CN2A>-ARTXT.
      ENDIF.

      "参保级别
      ES_SOCIAL_INSURANCE-CONLV = <FS_PA0532>-CONLV.
      READ TABLE LT_T7CN23T ASSIGNING FIELD-SYMBOL(<FS_T7CN23T>) WITH KEY CONGR = <FS_PA0532>-CONGR CONLV = ES_SOCIAL_INSURANCE-CONLV BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_SOCIAL_INSURANCE-CONLV_DESC = <FS_T7CN23T>-CONLVT.
      ENDIF.

      IF <FS_PA0532>-PBYER EQ 3.
        ES_SOCIAL_INSURANCE-ZHR_SO_TYPE = TEXT-902."不缴纳
      ENDIF.

    ENDIF.

    "5、  人员编号:读取人员编号PERNR.
    ES_SOCIAL_INSURANCE-PERNR = LV_PERNR.
    ES_SOCIAL_INSURANCE-ABKRS = <FS_PERNR_RANGE>-ABKRS.

    "4、  发薪主体:根据界面期间所选条件读取到人员的PERNR;读取PA0001- WERKS字段值文本
    ES_SOCIAL_INSURANCE-WERKS = <FS_PERNR_RANGE>-WERKS.
    READ TABLE LT_T500P ASSIGNING <FS_T500P> WITH KEY PERSA = ES_SOCIAL_INSURANCE-WERKS BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      ES_SOCIAL_INSURANCE-NAME1  = <FS_T500P>-NAME1.
    ENDIF.

    "6、  姓名:根据人员编号PERNR,读取P0001-ENAME.
    ES_SOCIAL_INSURANCE-ENAME = <FS_PERNR_RANGE>-SNAME.

    "10、  任职组织全称:根据人员编号PERNR通过现有函数ZFM_EHR_GET_COMPANY读取
    CLEAR:LT_RESULT_TAB ,LT_RESULT_OBJEC ,LT_RESULT_STRUC.
    PERFORM FRM_RH_STRUC_GET TABLES LT_RESULT_TAB LT_RESULT_OBJEC LT_RESULT_STRUC USING 'O' <FS_PERNR_RANGE>-ORGEH 'O-O' LV_ENDDA LV_ENDDA.
    LOOP AT LT_RESULT_OBJEC ASSIGNING FIELD-SYMBOL(<FS_RESULT_OBJEC>) WHERE OTYPE = 'O'.

      CLEAR:LV_FIRST.

      AT FIRST.
        ES_SOCIAL_INSURANCE-RZ_ORGEH_NAME = <FS_RESULT_OBJEC>-STEXT && ES_SOCIAL_INSURANCE-RZ_ORGEH_NAME.
        LV_FIRST = 'X'.
      ENDAT.

      IF LV_FIRST IS INITIAL .
        ES_SOCIAL_INSURANCE-RZ_ORGEH_NAME = <FS_RESULT_OBJEC>-STEXT && '_' && ES_SOCIAL_INSURANCE-RZ_ORGEH_NAME.
      ENDIF.

    ENDLOOP.

    "7、  身份证号:根据人员编号PERNR,读取PA0185子类型ICTYP= 01 对应的ICNUM值;
    LOOP AT LT_T5R05 ASSIGNING FIELD-SYMBOL(<FS_T5R05>).
      READ TABLE LT_PA0185 ASSIGNING FIELD-SYMBOL(<FS_PA0185>) WITH KEY PERNR = LV_PERNR ICTYP = <FS_T5R05>-ICTYP BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_SOCIAL_INSURANCE-ICNUM = <FS_PA0185>-ICNUM.
        EXIT.
      ENDIF.
    ENDLOOP.

    "8、  入职日期:根据人员编号PERNR通过入职日期函数读取
    PERFORM FRM_GET_HIRE_DATE USING LV_PERNR CHANGING LV_DATUM.
    ES_SOCIAL_INSURANCE-BEGDA_Z1 = LV_DATUM.

    "9、  离职日期:根据人员编号PERNR通过离职日期函数读取
    PERFORM FRM_GET_FIRE_DATE USING LV_PERNR CHANGING LV_DATUM.
    ES_SOCIAL_INSURANCE-BEGDA_ZA = LV_DATUM.

    "取金额
    PERFORM FRM_GET_PAY_932_1 USING <FS_PERNR_RANGE> LV_BEGDA CHANGING ES_SOCIAL_INSURANCE.

    ES_SOCIAL_INSURANCE-CREATE_USER  = P_USER.
    ES_SOCIAL_INSURANCE-CREATE_DATUM = SY-DATUM.
    ES_SOCIAL_INSURANCE-CREATE_UZEIT = SY-UZEIT.
    APPEND ES_SOCIAL_INSURANCE TO GT_OUTPUT.
    CLEAR:ES_SOCIAL_INSURANCE.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SHOW
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SHOW .
  PERFORM FRM_SET_FIELDCAT.
  PERFORM FRM_SET_LAYOUT.
  PERFORM FRM_SHOW_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SET_FIELDCAT .
  CLEAR:GT_ALV_FILEDCAT.
  PERFORM FRM_FILL_FIELDCAT USING 'PERNR'   TEXT-001  'X' '' '' '' ''."人员编号
  PERFORM FRM_FILL_FIELDCAT USING 'ENAME'   TEXT-002  'X' '' '' '' ''."姓名
  PERFORM FRM_FILL_FIELDCAT USING 'ABKRS'   TEXT-003  'X' '' '' '' ''."工资核算范围
  PERFORM FRM_FILL_FIELDCAT USING 'PERIO'   TEXT-004  'X' '' '' '' ''."核算周期
  PERFORM FRM_FILL_FIELDCAT USING 'ICON'    TEXT-005  'X' '' '' '' ''."图标
  PERFORM FRM_FILL_FIELDCAT USING 'MESSAGE' TEXT-006  'X' '' '' '' ''."消息

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SET_LAYOUT .
  GS_REPID = SY-REPID.
  GS_LAYOUT-ZEBRA = 'X'.
  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-BOX_FNAME = 'SLBOX'.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SHOW_ALV
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SHOW_ALV .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = GS_REPID
      I_SAVE                   = 'A'
      IT_FIELDCAT_LVC          = GT_ALV_FILEDCAT[]
      I_GRID_TITLE             = CONV LVC_TITLE( |#总条目数:{ LINES( GT_OUTPUT ) }| )
*     IT_SORT_LVC              = GS_SORTINFO[]
*     I_GRID_SETTINGS          = GS_GLAY
      IS_LAYOUT_LVC            = GS_LAYOUT
*     IT_EVENTS                = GS_EVENT
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
    TABLES
      T_OUTTAB                 = GT_OUTPUT
    EXCEPTIONS
      PROGRAM_ERROR            = 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.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> FIELDNAME
*&      --> COLTEXT
*&      --> KEY
*&      --> REF_TABLE
*&      --> REF_FIELD
*&      --> OUTPUTLEN
*&      --> NO_ZERO
*&---------------------------------------------------------------------*
FORM FRM_FILL_FIELDCAT  USING    P_FIELDNAME
                                 P_COLTEXT
                                 P_KEY
                                 P_REF_TABLE
                                 P_REF_FIELD
                                 P_OUTPUTLEN
                                 P_NO_ZERO.

  DATA:LS_ALV_FILED LIKE GS_ALV_FILED.

    LS_ALV_FILED-FIELDNAME     =  P_FIELDNAME.
    LS_ALV_FILED-COLTEXT       =  P_COLTEXT.
    LS_ALV_FILED-OUTPUTLEN     =  P_OUTPUTLEN.
    LS_ALV_FILED-NO_ZERO       =  P_NO_ZERO.
    LS_ALV_FILED-KEY           =  P_KEY.
    LS_ALV_FILED-REF_TABLE     =  P_REF_TABLE.
    LS_ALV_FILED-REF_FIELD     =  P_REF_FIELD.
    APPEND LS_ALV_FILED TO GT_ALV_FILEDCAT.
ENDFORM.
FORM PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

  DATA FCODE TYPE RSMPE-FUNC.

  SET PF-STATUS 'STD' EXCLUDING RT_EXTAB.

ENDFORM.
FORM USER_COMMAND  USING R_UCOMM TYPE SY-UCOMM
                          RS_SELFIELD TYPE SLIS_SELFIELD.
  DATA:LR_GRID    TYPE REF TO CL_GUI_ALV_GRID.
  DATA:LV_TABIX TYPE SY-TABIX,
       LV_INDICATOR_TEXT TYPE STRING.
* 将界面中的选择数据更新到内表中
*=====GET_GLOBALS_FROM_SLVC_FULLSCR  START==========
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LR_GRID.
  CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
*=====GET_GLOBALS_FROM_SLVC_FULLSCR  END============
  CASE R_UCOMM.
    WHEN '&IC1'. "ALV双击事件
      PERFORM FRM_DOUBLE_CLICK USING RS_SELFIELD-TABINDEX.
    WHEN 'CLEAR'.
      PERFORM FRM_SET_INDICATOR USING TEXT-T02.
    WHEN 'SAVE'.
      PERFORM FRM_SAVE_LOG.
    WHEN 'BACK'.
      CLEAR:GT_OUTPUT,GT_ALV_FILEDCAT.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.

  ENDCASE.
*  RS_SELFIELD-ROW_STABLE = 'X'.
*  RS_SELFIELD-COL_STABLE = 'X'.
  RS_SELFIELD-REFRESH = 'X'.
ENDFORM.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*& FORM FRM_INIT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_INIT .
  CALL FUNCTION 'ZNUMBER_GET_NEXT'
    EXPORTING
      NR_RANGE_NR             = '01'
      OBJECT                  = 'ZEHR_GUID'
    IMPORTING
      NUMBER                  = GV_GUID
    EXCEPTIONS
      INTERVAL_NOT_FOUND      = 1
      NUMBER_RANGE_NOT_INTERN = 2
      OBJECT_NOT_FOUND        = 3
      QUANTITY_IS_0           = 4
      QUANTITY_IS_NOT_1       = 5
      INTERVAL_OVERFLOW       = 6
      BUFFER_OVERFLOW         = 7
      OTHERS                  = 8.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_CHECK
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_CHECK .

ENDFORM.

*&---------------------------------------------------------------------*
*& FORM FRM_SET_INDICATOR
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> TEXT_T01
*&---------------------------------------------------------------------*
FORM FRM_SET_INDICATOR  USING    P_TEXT_T01.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  EXPORTING
      TEXT       = P_TEXT_T01.   "TEXT FOR PROCESS
ENDFORM.

*&---------------------------------------------------------------------*
*& FORM FRM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_DOUBLE_CLICK USING P_INDEX.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SHOW_SALV
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> LT_BSIS
*&---------------------------------------------------------------------*
FORM FRM_SHOW_SALV  TABLES   P_LT_TABLE.

DATA: LO_ALV TYPE REF TO CL_SALV_TABLE,
      LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST.
  CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = LO_ALV
                        CHANGING  T_TABLE   = P_LT_TABLE[] ).



  LR_FUNCTIONS = LO_ALV->GET_FUNCTIONS( ).
  LR_FUNCTIONS->SET_ALL( 'X' ).

  LO_ALV->SET_SCREEN_STATUS(
    PFSTATUS      =  'STANDARD_FULLSCREEN'
    REPORT        =  'SAPLKKBL'
    SET_FUNCTIONS = LO_ALV->C_FUNCTIONS_ALL ).

  LO_ALV->SET_SCREEN_POPUP(
    START_COLUMN = 1
    END_COLUMN   = 100
    START_LINE   = 1
    END_LINE     = 20 ).

  LO_ALV->DISPLAY( ).

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SAVE_MESSAGE
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SAVE_MESSAGE .


ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_START_INIT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_START_INIT .
*  IF S_ABKRS IS INITIAL.
*    SELECT *
*      INTO TABLE @DATA(LT_T549T)
*      FROM T549T
*     WHERE SPRSL EQ @SY-LANGU.
*    LOOP AT LT_T549T ASSIGNING FIELD-SYMBOL(<FS_T549T>).
*      S_ABKRS = VALUE #( SIGN ='I' OPTION = 'EQ' LOW = <FS_T549T>-ABKRS ).
*      APPEND S_ABKRS.
*      CLEAR:S_ABKRS.
*    ENDLOOP.
*  ENDIF.

  SELECT *
    INTO TABLE GT_ZHRT_0008
    FROM ZHRT_0008
   WHERE PERIO EQ P_PERIO
     AND PERNR IN S_PERNR
     AND ABKRS IN S_ABKRS.

  SELECT *
    INTO TABLE GT_ZHRT_0009
    FROM ZHRT_0009
   WHERE PERIO EQ P_PERIO
     AND PERNR IN S_PERNR
     AND ABKRS IN S_ABKRS.

  SORT GT_ZHRT_0008 BY PERNR.
  SORT GT_ZHRT_0009 BY PERNR.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_GET_PAY_932_1
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> <FS_PERNR_RANGE>
*&      --> LV_BEGDA
*&      <-- ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_GET_PAY_932_1  USING    P_PA0001 STRUCTURE PA0001
                               P_DAY_IN TYPE SY-DATUM
                          CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT.


  DATA: LT_SIM_PERNR TYPE TABLE OF PAY_SIM_PERNR.
  DATA: BUFFER            TYPE HRPAY_BUFFER,
        LS_RGDIR_LINE     LIKE PC261,
        LV_MOLGA          TYPE MOLGA.

  DATA: BEGIN OF RX-KEY.            "CLUSTER KEY
           INCLUDE STRUCTURE PC200.
  DATA: END   OF RX-KEY.
  DATA:LS_PAYRESULT TYPE PAYCN_RESULT.
  DATA:LV_VARIANT TYPE VARIANT.
  LV_VARIANT = P_PA0001-ABKRS.

  CLEAR:LT_SIM_PERNR.
  LT_SIM_PERNR = VALUE #( ( PERNR = P_PA0001-PERNR ) ).

  CALL FUNCTION 'HR_PAYROLL'
    EXPORTING
      PAYROLL_AREA = P_PA0001-ABKRS
      PAYROLL_PERIOD = P_DAY_IN+4(2)
      PAYROLL_YEAR = P_DAY_IN(4)
      SELECTION_VARIANT = LV_VARIANT
      PROGRAM_NAME = 'HCNCALC0'
      SCHEMA       = 'ZN28'
*   TST_ON = 'X'
    TABLES
      EMPLOYEE_NUMBERS = LT_SIM_PERNR
      BUFFER = TBUFF
      BUFFER_DIRECTORY = BUFFER_DIR
      DELETE_PCLX = DEL_PCLX_TAB
    EXCEPTIONS
      PROGRAM_NOT_EXIST = 1
      VARIANT_NOT_EXIST = 2
      MISSING_PARAMETER = 3
      WRONG_PARAMETER = 4
      WRONG_COUNTRY_GROUP = 5
      OTHERS = 6.

  BUFFER-TBUFF[] = TBUFF[].
  BUFFER-BUFFER_DIR[] = BUFFER_DIR[].
  BUFFER-DEL_PCLX_TAB[] = DEL_PCLX_TAB[].

  CALL FUNCTION 'CU_READ_RGDIR'
    EXPORTING
      PERSNR = P_PA0001-PERNR
      BUFFER = BUFFER
    IMPORTING
      MOLGA  = LV_MOLGA
    TABLES
      IN_RGDIR = RGDIR
    EXCEPTIONS
      NO_RECORD_FOUND = 1
    OTHERS = 2.

  DELETE RGDIR WHERE FPPER NE P_DAY_IN+0(6).
  IF RGDIR[] IS INITIAL.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_RED_LIGHT.
    P_ES_SOCIAL_INSURANCE-MESSAGE = TEXT-E04.
    CONCATENATE  P_USER  SY-DATUM TEXT-E03 P_ES_SOCIAL_INSURANCE-MESSAGE INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
    RETURN.
  ENDIF.

  CALL FUNCTION 'CD_READ_LAST_RESULT_IN_RGDIR'
    IMPORTING
      PTX_RGDIR_NV = LS_RGDIR_LINE
    TABLES
      PT_RGDIR = RGDIR.

  RX-KEY-PERNR = P_PA0001-PERNR.
  RX-KEY-SEQNO = LS_RGDIR_LINE-SEQNR.
  RP-IMP-C2-CN."RP

  IF RP-IMP-CN-SUBRC = 0.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_GREEN_LIGHT.
    CONCATENATE  SY-UNAME  SY-DATUM TEXT-S03 INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
  ELSE.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_RED_LIGHT.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            INTO P_ES_SOCIAL_INSURANCE-MESSAGE
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    CONCATENATE  P_USER  SY-DATUM TEXT-E03 P_ES_SOCIAL_INSURANCE-MESSAGE INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
    RETURN.
  ENDIF.

  SORT RT  BY LGART.
*  SORT PI  BY LGART.
*  SORT MI  BY LGART.
*  SORT UI  BY LGART.
*  SORT II  BY LGART.
*  SORT BI  BY LGART.
*  SORT SUI BY LGART.

  "25、  取暖费单位金额(小计):取暖费单位金额-7635
  PERFORM FRM_READ_RT TABLES RT USING '7635' 3 CHANGING P_ES_SOCIAL_INSURANCE-HEATING_BILL_SUBTOTAL . "1:BETPE 2:ANZHL 3:BETRG

  "26、  残保金单位金额(小计):残保金单位金额-7640
  PERFORM FRM_READ_RT TABLES RT USING '7640' 3 CHANGING P_ES_SOCIAL_INSURANCE-RESIDUAL_PREMIUM_SUBTOTAL . "1:BETPE 2:ANZHL 3:BETRG

  "27、  滞纳金单位金额(小计):滞纳金单位金额-7645
  PERFORM FRM_READ_RT TABLES RT USING '7645' 3 CHANGING P_ES_SOCIAL_INSURANCE-LATEFEE_SUBTOTAL . "1:BETPE 2:ANZHL 3:BETRG


  READ TABLE PI ASSIGNING FIELD-SYMBOL(<FS_PC2G2_PI>) INDEX 1.
  IF SY-SUBRC EQ 0.

    "28、  养老保险(基数): 根据人员编号PERNR及页面选择期间读取簇表PI中,EECON对应的值
    P_ES_SOCIAL_INSURANCE-EI_CARDINAL_NUMBER = <FS_PC2G2_PI>-EECON.

    "29、  养老保险(单位比例):根据人员编号PERNR及页面选择期间读取簇表PI中,ERRAT对应的值
    P_ES_SOCIAL_INSURANCE-EI_BY_COM_PROPORTIONAL = <FS_PC2G2_PI>-ERRAT.

    "31、  养老保险(个人比例):根据人员编号PERNR及页面选择期间读取簇表PI中,EERAT对应的值
    P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_PROPORTIONAL = <FS_PC2G2_PI>-EERAT.
  ENDIF.

  "30、  养老保险(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /314对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/314' 3 CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "32、  养老保险(个人金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /313对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/313' 3 CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "35、  医疗保险(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /334对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/334' 3 CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "37、  医疗保险(个人金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /333对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/333' 3 CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  READ TABLE MI ASSIGNING FIELD-SYMBOL(<FS_PC2G2_MI>) INDEX 1.
  IF SY-SUBRC EQ 0.
    "33、  医疗保险(基数): 根据人员编号PERNR及页面选择期间读取簇表MI中,EECON对应的值
    P_ES_SOCIAL_INSURANCE-MI_CARDINAL_NUMBER = <FS_PC2G2_MI>-EECON.

    "34、  医疗保险(单位比例):根据人员编号PERNR及页面选择期间读取簇表MI中,ERRAT对应的值
    P_ES_SOCIAL_INSURANCE-MI_BY_COM_PROPORTIONAL = <FS_PC2G2_MI>-ERRAT.

    "36、  医疗保险(个人比例):根据人员编号PERNR及页面选择期间读取簇表MI中,EERAT对应的值
    P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_PROPORTIONAL = <FS_PC2G2_MI>-EERAT.
  ENDIF.

  READ TABLE UI ASSIGNING FIELD-SYMBOL(<FS_PC2G2_UI>) INDEX 1.
  IF SY-SUBRC EQ 0.

    "38、  失业保险(基数): 根据人员编号PERNR及页面选择期间读取簇表UI中,EECON对应的值
    P_ES_SOCIAL_INSURANCE-UI_CARDINAL_NUMBER = <FS_PC2G2_UI>-EECON.

    "39、  失业保险(单位比例):根据人员编号PERNR及页面选择期间读取簇表UI中,ERRAT对应的值
    P_ES_SOCIAL_INSURANCE-UI_BY_COM_PROPORTIONAL = <FS_PC2G2_UI>-ERRAT.

    "41、  失业保险(个人比例):根据人员编号PERNR及页面选择期间读取簇表UI中,EERAT对应的值
    P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_PROPORTIONAL = <FS_PC2G2_UI>-EERAT.
  ENDIF.

  "40、  失业保险(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /324对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/324' 3 CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "42、  失业保险(个人金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /323对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/323' 3 CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  READ TABLE II ASSIGNING FIELD-SYMBOL(<FS_PC2G2_II>) INDEX 1.
  IF SY-SUBRC EQ 0.

    "43、  工伤保险(基数): 根据人员编号PERNR及页面选择期间读取簇表II中,EECON对应的值
    P_ES_SOCIAL_INSURANCE-WII_CARDINAL_NUMBER     = <FS_PC2G2_II>-ERCON.

    "44、  工伤保险(单位比例):根据人员编号PERNR及页面选择期间读取簇表II中,ERRAT对应的值
    P_ES_SOCIAL_INSURANCE-WII_BY_COM_PROPORTIONAL = <FS_PC2G2_II>-ERRAT.

    "44、  工伤保险(个人比例):根据人员编号PERNR及页面选择期间读取簇表II中,EERAT 对应的值
    P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_PROPORTIONAL = <FS_PC2G2_II>-EERAT.
  ENDIF.

  "45、  工伤保险(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /344 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/344' 3 CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "45、  工伤保险(个人金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /343 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/343' 3 CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  READ TABLE BI ASSIGNING FIELD-SYMBOL(<FS_PC2G2_BI>) INDEX 1.
  IF SY-SUBRC EQ 0.

    "46、  生育保险(基数): 根据人员编号PERNR及页面选择期间读取簇表BI中,EECON对应的值
    P_ES_SOCIAL_INSURANCE-CI_CARDINAL_NUMBER     = <FS_PC2G2_BI>-ERCON.

    "47、  生育保险(单位比例):根据人员编号PERNR及页面选择期间读取簇表BI中,ERRAT对应的值
    P_ES_SOCIAL_INSURANCE-CI_BY_COM_PROPORTIONAL = <FS_PC2G2_BI>-ERRAT.

    "47、  生育保险(个人比例):根据人员编号PERNR及页面选择期间读取簇表BI中,EERAT对应的值
    P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_PROPORTIONAL = <FS_PC2G2_BI>-EERAT.

  ENDIF.

  "48、  生育保险(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /354对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/354' 3 CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "48、  生育保险(个人金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /353 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/353' 3 CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  READ TABLE SUI ASSIGNING FIELD-SYMBOL(<FS_PC2G2_SUI>) INDEX 1.
  IF SY-SUBRC EQ 0.

    "49、  其他医疗(基数): 根据人员编号PERNR及页面选择期间读取簇表SUI中,EEBSE 或者 ERBSE对应的值
    "P_ES_SOCIAL_INSURANCE-SMI_CARDINAL_NUMBER     = <FS_PC2G2_SUI>-EECON.
    P_ES_SOCIAL_INSURANCE-SMI_CARDINAL_NUMBER     = <FS_PC2G2_SUI>-ERBSE.

    "50、  其他医疗(单位比例):根据人员编号PERNR及页面选择期间读取簇表SUI中,ERRAT对应的值
    P_ES_SOCIAL_INSURANCE-SMI_BY_COM_PROPORTIONAL = <FS_PC2G2_SUI>-ERRAT.

    "52、  其他医疗(个人比例):根据人员编号PERNR及页面选择期间读取簇表SUI中,EERAT对应的值
    P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_PROPORTIONAL = <FS_PC2G2_SUI>-EERAT.
  ENDIF.

  "51、  其他医疗(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /3S4对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/3S4' 3 CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "53、  其他医疗(个人金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /3S3对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/3S3' 3 CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "54、  取暖费(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7635对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7635' 3 CHANGING P_ES_SOCIAL_INSURANCE-HEATING_BILL_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "55、  残保金(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7640对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7640' 3 CHANGING P_ES_SOCIAL_INSURANCE-RESIDUAL_PREMIUM_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "56、  滞纳金(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7645对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7645' 3 CHANGING P_ES_SOCIAL_INSURANCE-LATEFEE_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "59、  养老保险单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7030对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7030' 3 CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_COM_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "61、  养老保险个人金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART=7000对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7000' 3 CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_MYSELF_MONEY . "1:BETPE 2:ANZHL 3:BETRG

  "64、  医疗保险单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7035对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7035' 3 CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "66、  医疗保险个人金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART=7005对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7005' 3 CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "69、  失业保险单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7045对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7045' 3 CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "71、  失业保险个人金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART=7015对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7015' 3 CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "74、  工伤保险单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7040对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7040' 3 CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "76、  工伤保险个人金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7010 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7010' 3 CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "77、  生育保险单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7050对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7050' 3 CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "80、  生育保险单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7050 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7050' 3 CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "82、  生育保险个人金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7020 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7020' 3 CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "86、  其他医疗单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7037对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7037' 3 CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "88、  其他医疗个人金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART=7007对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7007' 3 CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY_RF . "1:BETPE 2:ANZHL 3:BETRG

  "13、  养老保险单位金额(小计):养老保险单位金额(正常缴纳)-/314 + 养老保险单位金额(纠偏)-7030
  P_ES_SOCIAL_INSURANCE-EI_BY_COM_SUBTOTAL = P_ES_SOCIAL_INSURANCE-EI_BY_COM_MONEY + P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_COM_MONEY.

  "14、  养老保险个人金额(小计):养老保险个人金额(正常缴纳)-/313 + 养老保险个人金额(纠偏)-7000
  P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_SUBTOTAL = P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_MONEY + P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_MYSELF_MONEY.

  "15、  医疗保险单位金额(小计):医疗保险单位金额(正常缴纳)-/334 + 医疗保险单位金额(纠偏)-7035
  P_ES_SOCIAL_INSURANCE-MI_BY_COM_SUBTOTAL = P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY + P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY_RF.

  "16、  医疗保险个人金额(小计):医疗保险个人金额(正常缴纳)-/333 + 医疗保险个人金额(纠偏)-7005
  P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_SUBTOTAL = P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY + P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY_RF.

  "17、  失业保险单位金额(小计):失业保险单位金额(正常缴纳)-/324 + 失业保险单位金额(纠偏)-7045
  P_ES_SOCIAL_INSURANCE-UI_BY_COM_SUBTOTAL = P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY + P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY_RF.

  "18、  失业保险个人金额(小计):失业保险个人金额(正常缴纳)-/323 + 失业保险个人金额(纠偏)-7015
  P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_SUBTOTAL = P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY + P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY_RF.

  "19、  工伤保险单位金额(小计):工伤保险单位金额(正常缴纳)-/344 + 工伤保险单位金额(纠偏)-7040
  P_ES_SOCIAL_INSURANCE-WII_BY_COM_SUBTOTAL = P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY + P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY_RF.

  "20、  工伤保险个人金额(小计):工伤保险个人金额(正常缴纳)- /343 + 工伤保险个人金额(纠偏)-7010
  P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_SUBTOTAL = P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_MONEY + P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_MONEY_RF.

  "21、  生育保险单位金额(小计):生育保险单位金额(正常缴纳)-/354 + 生育保险单位金额(纠偏)-7050
  P_ES_SOCIAL_INSURANCE-CI_BY_COM_SUBTOTAL = P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY + P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY_RF.

  "22、  生育保险个人金额(小计):生育保险个人金额(正常缴纳)-/353 + 生育保险个人金额(纠偏)-7020
  P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_SUBTOTAL = P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_MONEY + P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_MONEY_RF.

  "23、  其他医疗单位金额(小计):其他医疗单位金额(正常缴纳)-/3S4 + 其他医疗单位金额(纠偏)-7630
  P_ES_SOCIAL_INSURANCE-SMI_BY_COM_SUBTOTAL = P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY + P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY_RF.

  "24、  其他医疗个人金额(小计):其他医疗个人金额(正常缴纳)-/3S3 + 其他医疗个人金额(纠偏)-7530
  P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_SUBTOTAL = P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY + P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY_RF.

  "11、  单位缴费金额(合计):养老保险单位金额(小计) + 医疗保险单位金额(小计) + 失业保险单位金额(小计) + 工伤保险单位金额(小计) + 生育保险单位金额(小计) + 取暖费单位金额(小计) + 残保金单位金额(小计) + 滞纳金单位金额(小计)
  P_ES_SOCIAL_INSURANCE-PAY_BY_COM_TOTAL = P_ES_SOCIAL_INSURANCE-EI_BY_COM_SUBTOTAL + P_ES_SOCIAL_INSURANCE-MI_BY_COM_SUBTOTAL + "单位缴费金额(合计):养老保险单位金额(小计) + 医疗保险单位金额(小计)
                                           P_ES_SOCIAL_INSURANCE-UI_BY_COM_SUBTOTAL + P_ES_SOCIAL_INSURANCE-WII_BY_COM_SUBTOTAL + "失业保险单位金额(小计) + 工伤保险单位金额(小计)
                                           P_ES_SOCIAL_INSURANCE-CI_BY_COM_SUBTOTAL + P_ES_SOCIAL_INSURANCE-HEATING_BILL_SUBTOTAL + "生育保险单位金额(小计) + 取暖费单位金额(小计)
                                           P_ES_SOCIAL_INSURANCE-RESIDUAL_PREMIUM_SUBTOTAL + P_ES_SOCIAL_INSURANCE-LATEFEE_SUBTOTAL + "残保金单位金额(小计) + 滞纳金单位金额(小计)
                                           P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY "其他医疗(单位金额)
                                           .



  "12、  个人缴费金额(合计):养老保险个人金额(小计) + 医疗保险个人金额(小计) + 失业保险个人金额(小计) + 工伤保险个人金额(小计) + 生育保险个人金额 (小计)
  P_ES_SOCIAL_INSURANCE-PAY_BY_MYSELF_TOTAL = P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_SUBTOTAL + P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_SUBTOTAL + "单位缴费金额(合计):养老保险单位金额(小计) + 医疗保险单位金额(小计)
                                              P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_SUBTOTAL + P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_SUBTOTAL + "失业保险单位金额(小计) + 工伤保险单位金额(小计)
                                              P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_SUBTOTAL + P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY"生育保险单位金额(小计) + 其他医疗(个人金额)
                                              .

  P_ES_SOCIAL_INSURANCE-PAY_MYSELF_AND_COM_TOTAL = P_ES_SOCIAL_INSURANCE-PAY_BY_COM_TOTAL + P_ES_SOCIAL_INSURANCE-PAY_BY_MYSELF_TOTAL.

  "去除金额
  PERFORM FRM_CONDENSE_ZHRS_I_PY932_1 CHANGING P_ES_SOCIAL_INSURANCE.

  "负号提前
  PERFORM FRM_SET_NEGATIVEPY932_1 CHANGING P_ES_SOCIAL_INSURANCE.

  "修改比例后加百分号
  PERFORM FRM_SET_BL_PY932_1 CHANGING P_ES_SOCIAL_INSURANCE.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_CONDENSE_ZHRS_I_PY931_1
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_CONDENSE_ZHRS_I_PY932_1  CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT.

  CONDENSE:P_ES_SOCIAL_INSURANCE-PAY_BY_COM_TOTAL,
           P_ES_SOCIAL_INSURANCE-PAY_BY_MYSELF_TOTAL,
           P_ES_SOCIAL_INSURANCE-PAY_MYSELF_AND_COM_TOTAL,
           P_ES_SOCIAL_INSURANCE-EI_BY_COM_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-MI_BY_COM_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-UI_BY_COM_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-WII_BY_COM_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-CI_BY_COM_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-SMI_BY_COM_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-HEATING_BILL_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-RESIDUAL_PREMIUM_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-LATEFEE_SUBTOTAL,
           P_ES_SOCIAL_INSURANCE-EI_CARDINAL_NUMBER,
           P_ES_SOCIAL_INSURANCE-EI_BY_COM_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-EI_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_MONEY,
           P_ES_SOCIAL_INSURANCE-MI_CARDINAL_NUMBER,
           P_ES_SOCIAL_INSURANCE-MI_BY_COM_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY,
           P_ES_SOCIAL_INSURANCE-UI_CARDINAL_NUMBER,
           P_ES_SOCIAL_INSURANCE-UI_BY_COM_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY,
           P_ES_SOCIAL_INSURANCE-WII_CARDINAL_NUMBER,
           P_ES_SOCIAL_INSURANCE-WII_BY_COM_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-CI_CARDINAL_NUMBER,
           P_ES_SOCIAL_INSURANCE-CI_BY_COM_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-SMI_CARDINAL_NUMBER,
           P_ES_SOCIAL_INSURANCE-SMI_BY_COM_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY,
           P_ES_SOCIAL_INSURANCE-HEATING_BILL_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-RESIDUAL_PREMIUM_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-LATEFEE_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_CARDINAL_NUMBER,
           P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_PROPORTIONAL,
           P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_COM_MONEY,
           P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_PROPORTIONAL1,
           P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_MYSELF_MONEY,
           P_ES_SOCIAL_INSURANCE-MI_CARDINAL_NUMBER_RF,
           P_ES_SOCIAL_INSURANCE-MI_BY_COM_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY_RF,
           P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY_RF,
           P_ES_SOCIAL_INSURANCE-UI_CARDINAL_NUMBER_RF,
           P_ES_SOCIAL_INSURANCE-UI_BY_COM_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY_RF,
           P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY_RF,
           P_ES_SOCIAL_INSURANCE-WII_CARDINAL_NUMBER_RF,
           P_ES_SOCIAL_INSURANCE-WII_BY_COM_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY_RF,
           P_ES_SOCIAL_INSURANCE-CI_CARDINAL_NUMBER_RF,
           P_ES_SOCIAL_INSURANCE-CI_BY_COM_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY_RF,
           P_ES_SOCIAL_INSURANCE-SMI_CARDINAL_NUMBER_RF,
           P_ES_SOCIAL_INSURANCE-SMI_BY_COM_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY_RF,
           P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_PROPORTIONAL_RF,
           P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY_RF
  NO-GAPS.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_NEGATIVEPY932
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_SET_NEGATIVEPY932_1  CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT..

  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-PAY_BY_COM_TOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-PAY_BY_MYSELF_TOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-PAY_MYSELF_AND_COM_TOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_COM_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_MYSELF_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_MYSELF_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-HEATING_BILL_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-RESIDUAL_PREMIUM_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-LATEFEE_SUBTOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-HEATING_BILL_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-RESIDUAL_PREMIUM_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-LATEFEE_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_PROPORTIONAL1.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_BY_MYSELF_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_CARDINAL_NUMBER_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_CARDINAL_NUMBER_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_CARDINAL_NUMBER_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_CARDINAL_NUMBER_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_CARDINAL_NUMBER_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_MONEY_RF.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_BL
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_SET_BL_PY932_1  CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT.

  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-CI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-EI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-EI_RECTIFYING_PROPORTIONAL1.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-MI_BY_MYSELF_PROPORTIONAL_RF.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-SMI_BY_MYSELF_PROPORTIONAL_RF.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-UI_BY_MYSELF_PROPORTIONAL_RF.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-WII_BY_COM_PROPORTIONAL_RF.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_GET_HIRE_DATE
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- LS_SOCIAL_INSURANCE_BEGDA
*&---------------------------------------------------------------------*
FORM FRM_GET_HIRE_DATE  USING P_PERNR TYPE PERNR_D
                     CHANGING P_LS_SOCIAL_INSURANCE_BEGDA.

  DATA:LV_DATUM TYPE SY-DATUM.
  CLEAR:P_LS_SOCIAL_INSURANCE_BEGDA.
  CALL FUNCTION 'RP_GET_HIRE_DATE'
    EXPORTING
      PERSNR          = P_PERNR
      CHECK_INFOTYPES = '0000'
      DATUMSART       = '01'
      STATUS2         = '3'
    IMPORTING
      HIREDATE        = LV_DATUM.

  P_LS_SOCIAL_INSURANCE_BEGDA = LV_DATUM.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_GET_FIRE_DATE
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> <FS_PA9505>_PERNR
*&      <-- LS_SOCIAL_INSURANCE_BEGDA
*&---------------------------------------------------------------------*
FORM FRM_GET_FIRE_DATE  USING    P_PERNR
                        CHANGING P_BEGDA TYPE SY-DATUM.

  DATA PERSNR   TYPE PERNR-PERNR.
  DATA FIREDATE TYPE P0000-BEGDA.
  CLEAR:P_BEGDA.
  PERSNR = P_PERNR.

  CALL FUNCTION 'RP_GET_FIRE_DATE'
    EXPORTING
      PERSNR   = PERSNR
      STATUS2  = '0'
    IMPORTING
      FIREDATE = FIREDATE.
  IF FIREDATE IS NOT INITIAL.
    P_BEGDA = FIREDATE + 1.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_READ_RT
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> LT_PC207
*&      --> P_
*&      <-- LV_/314
*&---------------------------------------------------------------------*
FORM FRM_READ_RT  TABLES   P_LT_PC207 STRUCTURE PC207
                  USING    P_LGART
                           P_INDEX "1:BETPE 2:ANZHL 3:BETRG
                  CHANGING P_LGART_VALUE.

  READ TABLE P_LT_PC207 ASSIGNING FIELD-SYMBOL(<FS_PC207>) WITH KEY LGART = P_LGART BINARY SEARCH .
  IF SY-SUBRC EQ 0.

    CASE P_INDEX.
      WHEN 1.
        P_LGART_VALUE = <FS_PC207>-BETPE.
      WHEN 2.
        P_LGART_VALUE = <FS_PC207>-ANZHL.
      WHEN 3.
        P_LGART_VALUE = <FS_PC207>-BETRG.
      WHEN OTHERS.
    ENDCASE.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_RH_STRUC_GET
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> LT_RESULT_TAB
*&      --> LT_RESULT_OBJEC
*&      --> LT_RESULT_STRUC
*&      --> <FS_PA0001>_PLANS
*&---------------------------------------------------------------------*
FORM FRM_RH_STRUC_GET  TABLES   P_LT_RESULT_TAB STRUCTURE SWHACTOR
                                P_LT_RESULT_OBJEC STRUCTURE OBJEC
                                P_LT_RESULT_STRUC STRUCTURE STRUC
                       USING   P_OTYPE
                               P_PLANS
                               P_ACT_WEGID
                               P_ACT_BEGDA
                               P_ACT_ENDDA .


  DATA:LV_ACT_OTYPE TYPE OBJEC-OTYPE,
       LV_ACT_OBJID TYPE STRING,
       LV_ACT_WEGID LIKE  GDSTR-WEGID,
       LV_ACT_BEGDA TYPE SY-DATUM,
       LV_ACT_ENDDA TYPE SY-DATUM.

  LV_ACT_OTYPE = P_OTYPE.
  LV_ACT_OBJID = P_PLANS.
  LV_ACT_WEGID = P_ACT_WEGID.
  LV_ACT_BEGDA = P_ACT_BEGDA.
  LV_ACT_ENDDA = P_ACT_ENDDA.

  CALL FUNCTION 'RH_STRUC_GET'
    EXPORTING
      ACT_OTYPE        = LV_ACT_OTYPE
      ACT_OBJID        = LV_ACT_OBJID
      ACT_WEGID        = LV_ACT_WEGID
      ACT_PLVAR        = '01'
      ACT_BEGDA        = LV_ACT_BEGDA
      ACT_ENDDA        = LV_ACT_ENDDA
      ACT_TDEPTH       = 0
      ACT_TFLAG        = 'X'
      ACT_VFLAG        = 'X'
      AUTHORITY_CHECK  = 'X'
      TEXT_BUFFER_FILL = 'X'
*     BUFFER_MODE      = 'X'
    TABLES
      RESULT_TAB       = P_LT_RESULT_TAB
      RESULT_OBJEC     = P_LT_RESULT_OBJEC
      RESULT_STRUC     = P_LT_RESULT_STRUC
    EXCEPTIONS
      NO_PLVAR_FOUND   = 1
      NO_ENTRY_FOUND   = 2
      OTHERS           = 3.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_NEGA
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE_CI_BY_CO
*&---------------------------------------------------------------------*
FORM FRM_SET_NEGA  CHANGING P_VALUE.

  DATA:LV_STR_TEMP TYPE STRING.
  LV_STR_TEMP = ABS( P_VALUE ).

  CONDENSE LV_STR_TEMP.

  IF P_VALUE LT 0.
    P_VALUE = '-' && LV_STR_TEMP.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& FORM FRM_SET_PER
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE_CI_BY_CO
*&---------------------------------------------------------------------*
FORM FRM_SET_PER  CHANGING P_VALUE.
  IF P_VALUE IS NOT INITIAL.
    P_VALUE = P_VALUE && '%'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SAVE_LOG
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SAVE_LOG .

  DATA:LT_ZHRT_0008 TYPE TABLE OF ZHRT_0008,
       LS_ZHRT_0008 LIKE LINE OF LT_ZHRT_0008,
       LT_ZHRT_0009 TYPE TABLE OF ZHRT_0009,
       LS_ZHRT_0009 LIKE LINE OF LT_ZHRT_0009.
*       GT_OUTPUT_CPF

  DATA:LS_ZHRT_IF001    TYPE ZHRT_IF001,
       LS_ZHRT_IF002    TYPE ZHRT_IF002.

  LOOP AT GT_OUTPUT ASSIGNING FIELD-SYMBOL(<FS_OUTPUT>).
    MOVE-CORRESPONDING <FS_OUTPUT> TO LS_ZHRT_0008.

    IF <FS_OUTPUT>-ICON EQ ICON_GREEN_LIGHT.
      LS_ZHRT_0008-TYPE = 'S'.
      APPEND LS_ZHRT_0008 TO LT_ZHRT_0008.
    ELSE.
      LS_ZHRT_0008-TYPE = 'E'.
      APPEND LS_ZHRT_0008 TO LT_ZHRT_0008.
    ENDIF.

    IF S_PERNR[] IS NOT INITIAL.
      DELETE FROM ZHRT_0008 WHERE PERNR = <FS_OUTPUT>-PERNR AND PERIO = P_PERIO.
    ENDIF.


    PERFORM FRM_SET_LOG USING 'PC00_M28_CALC_SIMU'
                              'P'
                              <FS_OUTPUT>-PERNR
                              <FS_OUTPUT>
                              'INS'
                              'S'
                              TEXT-S02
                         CHANGING LS_ZHRT_IF001 LS_ZHRT_IF002.
    APPEND LS_ZHRT_IF001 TO GT_IF001.
    APPEND LS_ZHRT_IF002 TO GT_IF002.
    CLEAR:LS_ZHRT_0008,LS_ZHRT_IF001,LS_ZHRT_IF002.
  ENDLOOP.
  COMMIT WORK AND WAIT.

  IF S_PERNR[] IS INITIAL..
    DELETE FROM ZHRT_0008 WHERE PERIO = P_PERIO AND ABKRS IN S_ABKRS .
  ENDIF.

  MODIFY ZHRT_0008 FROM TABLE LT_ZHRT_0008.
  COMMIT WORK AND WAIT.

  IF GT_IF001 IS NOT INITIAL.
    MODIFY ZHRT_IF001 FROM TABLE GT_IF001.
    MODIFY ZHRT_IF002 FROM TABLE GT_IF002.
    COMMIT WORK AND WAIT.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_LOG
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> P_
*&      --> P_
*&      --> <FS_OUTPUT>_PERNR
*&      --> <FS_OUTPUT>
*&      --> P_
*&      --> P_
*&      --> TEXT_E02
*&      <-- LS_ZHRT_IF001
*&      <-- LS_ZHRT_IF002
*&---------------------------------------------------------------------*
FORM FRM_SET_LOG  USING    P_SYSID
                           P_LV_OTYPE
                           P_LV_OBJID
                           P_LS_ZHRS_I_0002
                           P_OPERA
                           P_MSGTY
                           P_MSGTX
                  CHANGING LS_ZHRT_IF001 STRUCTURE GS_IF001
                           LS_ZHRT_IF002 STRUCTURE GS_IF002.

    "ZHRT_IF001
    LS_ZHRT_IF001-SYSID = GV_SYSID.
    LS_ZHRT_IF001-OTYPE = P_LV_OTYPE.
    LS_ZHRT_IF001-OBJID = P_LV_OBJID.
    LS_ZHRT_IF001-OUTID = ''.

    CALL FUNCTION 'ZFM_EHR_ABAP_TO_JSON'
      EXPORTING
        IV_DATA       = P_LS_ZHRS_I_0002
      IMPORTING
        EV_JSON       = LS_ZHRT_IF001-DATA
              .

    CALL FUNCTION 'ZFM_EHR_BASE64_ENCODE'
      EXPORTING
        IV_INPUT  = LS_ZHRT_IF001-DATA
      IMPORTING
        EV_OUTPUT = LS_ZHRT_IF001-DATA.

    "ZHRT_IF002
    LS_ZHRT_IF002-ECCID = GV_GUID.
    LS_ZHRT_IF002-SYSID = GV_SYSID.
    LS_ZHRT_IF002-OTYPE = P_LV_OTYPE.
    LS_ZHRT_IF002-OBJID = P_LV_OBJID.
    LS_ZHRT_IF002-OUTID = ''.
    LS_ZHRT_IF002-DATUM = SY-DATUM.
    LS_ZHRT_IF002-UZEIT = SY-UZEIT.
    LS_ZHRT_IF002-OPERA = P_OPERA.
    LS_ZHRT_IF002-DATA  = LS_ZHRT_IF001-DATA.
    LS_ZHRT_IF002-MSGTY = P_MSGTY.
    LS_ZHRT_IF002-CREATE_USER  = SY-UNAME.
    LS_ZHRT_IF002-CREATE_DATUM = SY-DATUM.
    LS_ZHRT_IF002-CREATE_UZEIT = SY-UZEIT.
    CONCATENATE LS_ZHRT_IF002-MSGTX P_MSGTX INTO LS_ZHRT_IF002-MSGTX SEPARATED BY SPACE.
*    LS_ZHRT_IF002-MSGTX = P_MSGTX.
    LS_ZHRT_IF002-DATA  = LS_ZHRT_IF001-DATA.


ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SAVE_SIMULATE
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SAVE_SIMULATE .




ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_GET_DOCUMENT_CPF
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_GET_DOCUMENT_CPF .

  DATA:ES_PHF        LIKE LINE OF GT_OUTPUT_CPF,
       LV_PERNR      TYPE PERNR_D,
       LV_BEGDA      TYPE SY-DATUM,
       LV_ENDDA      TYPE SY-DATUM,
       LV_DATUM      TYPE SY-DATUM,
       LV_DATUM_TEMP TYPE SY-DATUM.

  DATA:LT_RESULT_TAB     TYPE TABLE OF SWHACTOR,
       LT_HRP9302_PARENT TYPE TABLE OF HRP9302,
       LT_RESULT_OBJEC   TYPE TABLE OF OBJEC,
       LT_RESULT_STRUC   TYPE TABLE OF STRUC.

  DATA:LT_T5R05 TYPE TABLE OF T5R05,
       LS_T5R05 LIKE LINE OF LT_T5R05.

  DATA:LV_LAST_PERIO TYPE CHAR6,"上一个区间
       LV_NEXT_PERIO TYPE CHAR6."下一个区间

  DATA:LV_FIRST TYPE C.

  LV_BEGDA = P_PERIO+0(6) && '01'.

  CALL FUNCTION 'LAST_DAY_OF_MONTHS'
    EXPORTING
      DAY_IN            = LV_BEGDA
    IMPORTING
      LAST_DAY_OF_MONTH = LV_DATUM
    EXCEPTIONS
      DAY_IN_NO_DATE    = 1.


  LV_ENDDA = LV_DATUM.
  LV_DATUM_TEMP = LV_BEGDA - 1.
  LV_LAST_PERIO = LV_DATUM_TEMP+0(6).

  LV_DATUM_TEMP = LV_ENDDA + 1.
  LV_NEXT_PERIO = LV_DATUM_TEMP+0(6).


  SELECT *
    INTO TABLE @DATA(LT_PA0001)
    FROM PA0001 AS PA0001_1
   WHERE BEGDA LE @LV_ENDDA
     AND ENDDA GE @LV_BEGDA
     AND ABKRS IN @S_ABKRS
     AND PERNR IN @S_PERNR
     AND BEGDA EQ (
     SELECT MAX( BEGDA )
       FROM PA0001
      WHERE PERNR EQ PA0001_1~PERNR
        AND BEGDA LE @LV_ENDDA
        AND ENDDA GE @LV_BEGDA
        AND ABKRS IN @S_ABKRS
        AND PERNR IN @S_PERNR
    ).

  IF LT_PA0001[] IS NOT INITIAL.

    SELECT *
      INTO TABLE LT_T5R05
      FROM T5R05
     WHERE MOLGA EQ '28'.
    SORT LT_T5R05 BY MOLGA ICTYP.

    "人事事件
    SELECT *
      INTO TABLE @DATA(LT_PA0302)
      FROM PA0302
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR.

    "个人数据
    SELECT *
      INTO TABLE @DATA(LT_PA0002)
      FROM PA0002
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "合同信息
    SELECT *
      INTO TABLE @DATA(LT_PA0016)
      FROM PA0016
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "证件类型
    SELECT *
      INTO TABLE @DATA(LT_PA0185)
      FROM PA0185
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "公积金
    SELECT *
      INTO TABLE @DATA(LT_PA0530)
      FROM PA0530
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "社会保险
    SELECT *
      INTO TABLE @DATA(LT_PA0532)
      FROM PA0532
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND INTYP EQ '0001'
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    "公积金缴纳主体
    SELECT *
      INTO TABLE @DATA(LT_PA9505)
      FROM PA9505
      FOR ALL ENTRIES IN @LT_PA0001
     WHERE PERNR EQ @LT_PA0001-PERNR
       AND BEGDA LE @LV_ENDDA
       AND ENDDA GE @LV_BEGDA.

    SELECT *
      INTO TABLE @DATA(LT_T7CN2A)
      FROM T7CN2A
     WHERE SPRSL EQ @SY-LANGU
       AND INFTY EQ '0532'
       AND INTYP EQ '0001'.

    SELECT *
      INTO TABLE @DATA(LT_T7CN23T)
      FROM T7CN23T
     WHERE SPRSL EQ @SY-LANGU.

    SELECT *
      INTO TABLE @DATA(LT_T500P)
      FROM T500P.

    "域描述
    SELECT *
      INTO TABLE @DATA(LT_DD07T)
      FROM DD07T
     WHERE DOMNAME IN ( 'ZDHR_SO','ZHR_WJYY','ZDHR_JNXX' )
       AND DDLANGUAGE  EQ @SY-LANGU.

    SORT LT_PA0302  BY PERNR MASSN.
    SORT LT_PA0001  BY PERNR.
    SORT LT_PA0002  BY PERNR.
    SORT LT_PA0016  BY PERNR.
    SORT LT_PA0185  BY PERNR ICTYP.
    SORT LT_PA0530  BY PERNR.
    SORT LT_PA0532  BY PERNR.
    SORT LT_PA9505  BY PERNR.
    SORT LT_T500P   BY PERSA.
    SORT LT_T7CN2A  BY INFTY CONAR.
    SORT LT_T7CN23T BY CONGR CONLV.
    SORT LT_DD07T   BY DOMNAME DOMVALUE_L.
  ENDIF.


*  IF P_LT_PERNR_RANGE[] IS NOT INITIAL.
*
*    SELECT *
*        INTO TABLE LT_T5R05
*        FROM T5R05
*    WHERE MOLGA EQ '28'.
*    SORT LT_T5R05 BY MOLGA ICTYP.
*
*    "人事事件
*    SELECT *
*      INTO TABLE @DATA(LT_PA0302)
*      FROM PA0302
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW.
*
*    "组织分配
*    SELECT *
*      INTO TABLE @DATA(LT_PA0001)
*      FROM PA0001
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW
*       AND BEGDA LE @LV_ENDDA
*       AND ENDDA GE @LV_BEGDA
*       .
*
*    "个人数据
*    SELECT *
*      INTO TABLE @DATA(LT_PA0002)
*      FROM PA0002
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW
*       AND BEGDA LE @LV_ENDDA
*       AND ENDDA GE @LV_BEGDA.
*
*    "合同信息
*    SELECT *
*      INTO TABLE @DATA(LT_PA0016)
*      FROM PA0016
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW
*       AND BEGDA LE @LV_ENDDA
*       AND ENDDA GE @LV_BEGDA.
*
*    "证件类型
*    SELECT *
*      INTO TABLE @DATA(LT_PA0185)
*      FROM PA0185
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW
*       AND BEGDA LE @LV_ENDDA
*       AND ENDDA GE @LV_BEGDA.
*
*    "公积金
*    SELECT *
*      INTO TABLE @DATA(LT_PA0530)
*      FROM PA0530
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW
*       AND BEGDA LE @LV_ENDDA
*       AND ENDDA GE @LV_BEGDA.
*
*    "社会保险
*    SELECT *
*      INTO TABLE @DATA(LT_PA0532)
*      FROM PA0532
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW
*       AND INTYP EQ '0001'
*       AND BEGDA LE @LV_ENDDA
*       AND ENDDA GE @LV_BEGDA.
*
*    "公积金缴纳主体
*    SELECT *
*      INTO TABLE @DATA(LT_PA9505)
*      FROM PA9505
*      FOR ALL ENTRIES IN @P_LT_PERNR_RANGE
*     WHERE PERNR EQ @P_LT_PERNR_RANGE-LOW
*       AND BEGDA LE @LV_ENDDA
*       AND ENDDA GE @LV_BEGDA.
*
*    SELECT *
*      INTO TABLE @DATA(LT_T500P)
*      FROM T500P.
*
*    "域描述
*    SELECT *
*      INTO TABLE @DATA(LT_DD07T)
*      FROM DD07T
*     WHERE DOMNAME IN ( 'ZDHR_SO','ZHR_WJYY' )
*       AND DDLANGUAGE  EQ @SY-LANGU.
*
*    SORT LT_PA0302 BY PERNR MASSN.
*    SORT LT_PA0001 BY PERNR.
*    SORT LT_PA0002 BY PERNR.
*    SORT LT_PA0016 BY PERNR.
*    SORT LT_PA0185 BY PERNR ICTYP.
*    SORT LT_PA0530 BY PERNR.
*    SORT LT_PA0532 BY PERNR.
*    SORT LT_PA9505 BY PERNR.
*    SORT LT_T500P  BY PERSA.
*    SORT LT_DD07T  BY DOMNAME DOMVALUE_L.
*  ENDIF.

  LOOP AT LT_PA0001 ASSIGNING FIELD-SYMBOL(<FS_PERNR_RANGE>).

    READ TABLE GT_ZHRT_0009 ASSIGNING FIELD-SYMBOL(<FS_ZHRT_0009>) WITH KEY PERNR = <FS_PERNR_RANGE>-PERNR BINARY SEARCH.
    CHECK SY-SUBRC NE 0 OR P_POST EQ 'X'.

    "5、  人员编号:读取人员编号PERNR.
    LV_PERNR = <FS_PERNR_RANGE>-PERNR.

    "2、  所属期:
    ES_PHF-PERIO = P_PERIO.
    ES_PHF-ABKRS = <FS_PERNR_RANGE>-ABKRS.

    READ TABLE LT_PA0016 ASSIGNING FIELD-SYMBOL(<FS_PA0016>) WITH KEY PERNR = LV_PERNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      ES_PHF-ZZHTQDZTI      = <FS_PA0016>-ZZHTQDZTI.

      READ TABLE LT_T500P ASSIGNING FIELD-SYMBOL(<FS_T500P>) WITH KEY PERSA = ES_PHF-ZZHTQDZTI BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_PHF-ZZHTQDZTI_DESC  = <FS_T500P>-NAME1.
      ENDIF.
    ENDIF.

    READ TABLE LT_PA9505 ASSIGNING FIELD-SYMBOL(<FS_PA9505>) WITH KEY PERNR = LV_PERNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      "3、  缴纳主体:
      ES_PHF-ZHR_SO  = <FS_PA9505>-ZHR_PHF.

      "3、  缴纳主体:描述
      READ TABLE LT_DD07T ASSIGNING FIELD-SYMBOL(<FS_DD07T>) WITH KEY DOMNAME = 'ZDHR_SO' DOMVALUE_L = ES_PHF-ZHR_SO BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_PHF-ZHR_SO_DESC      = <FS_DD07T>-DDTEXT.
      ENDIF.

      IF <FS_PA9505>-ZHR_PHF EQ ES_PHF-ZZHTQDZTI.
        ES_PHF-ZHR_SO_TYPE = TEXT-900."正常缴纳
      ELSE .
        ES_PHF-ZHR_SO_TYPE = TEXT-901."异地缴纳
      ENDIF.
    ENDIF.

    READ TABLE LT_PA0530 ASSIGNING FIELD-SYMBOL(<FS_PA0530>) WITH KEY PERNR = LV_PERNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.

      "社保所属期
      IF <FS_PA0530>-ZHR_JJXX = '10'."当月缴当月
        ES_PHF-ZHR_SO_PERIO = P_PERIO.
      ELSEIF <FS_PA0530>-ZHR_JJXX = '20'."当月缴次月.
        ES_PHF-ZHR_SO_PERIO = LV_NEXT_PERIO.
      ELSEIF <FS_PA0530>-ZHR_JJXX = '30'."当月缴上月.
        ES_PHF-ZHR_SO_PERIO = LV_LAST_PERIO.
      ENDIF.

      "社保缴纳月份
      READ TABLE LT_DD07T ASSIGNING <FS_DD07T> WITH KEY DOMNAME = 'ZDHR_JNXX' DOMVALUE_L = <FS_PA0530>-ZHR_JJXX BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_PHF-ZHR_SO_PERIO_DESC      = <FS_DD07T>-DDTEXT.
      ENDIF.

      "参保城市
      ES_PHF-CONAR = <FS_PA0530>-CONAR.
      READ TABLE LT_T7CN2A ASSIGNING FIELD-SYMBOL(<FS_T7CN2A>) WITH KEY INFTY = '0532' CONAR = ES_PHF-CONAR BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_PHF-CONAR_DESC = <FS_T7CN2A>-ARTXT.
      ENDIF.

      "参保级别
      ES_PHF-CONLV = <FS_PA0530>-CONLV.
      READ TABLE LT_T7CN23T ASSIGNING FIELD-SYMBOL(<FS_T7CN23T>) WITH KEY CONGR = <FS_PA0530>-CONGR CONLV = ES_PHF-CONLV BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_PHF-CONLV_DESC = <FS_T7CN23T>-CONLVT.
      ENDIF.

      IF <FS_PA0530>-PBYER EQ 3.
        ES_PHF-ZHR_SO_TYPE = TEXT-902."不缴纳
      ENDIF.

    ENDIF.

    "5、  人员编号:读取人员编号PERNR.
    ES_PHF-PERNR = LV_PERNR.

    READ TABLE LT_PA0001 ASSIGNING FIELD-SYMBOL(<FS_PA0001>) WITH KEY PERNR = LV_PERNR BINARY SEARCH.
    IF SY-SUBRC EQ 0.

      "4、  发薪主体:根据界面期间所选条件读取到人员的PERNR;读取PA0001- WERKS字段值文本
      ES_PHF-WERKS = <FS_PA0001>-WERKS.
      READ TABLE LT_T500P ASSIGNING <FS_T500P> WITH KEY PERSA = ES_PHF-WERKS BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_PHF-NAME1  = <FS_T500P>-NAME1.
      ENDIF.

      "6、  姓名:根据人员编号PERNR,读取P0001-ENAME.
      ES_PHF-ENAME = <FS_PA0001>-SNAME.

      "10、  任职组织全称:根据人员编号PERNR通过现有函数ZFM_EHR_GET_COMPANY读取
      CLEAR:LT_RESULT_TAB ,LT_RESULT_OBJEC ,LT_RESULT_STRUC.
      PERFORM FRM_RH_STRUC_GET TABLES LT_RESULT_TAB LT_RESULT_OBJEC LT_RESULT_STRUC USING 'O' <FS_PA0001>-ORGEH 'O-O' LV_BEGDA LV_ENDDA.
      LOOP AT LT_RESULT_OBJEC ASSIGNING FIELD-SYMBOL(<FS_RESULT_OBJEC>) WHERE OTYPE = 'O'.

        CLEAR:LV_FIRST.

        AT FIRST.
          ES_PHF-RZ_ORGEH_NAME = <FS_RESULT_OBJEC>-STEXT && ES_PHF-RZ_ORGEH_NAME.
          LV_FIRST = 'X'.
        ENDAT.

        IF LV_FIRST IS INITIAL .
          ES_PHF-RZ_ORGEH_NAME = <FS_RESULT_OBJEC>-STEXT && '_' && ES_PHF-RZ_ORGEH_NAME.
        ENDIF.

      ENDLOOP.

    ENDIF.

    "7、  身份证号:根据人员编号PERNR,读取PA0185子类型ICTYP= 01 对应的ICNUM值;
    LOOP AT LT_T5R05 ASSIGNING FIELD-SYMBOL(<FS_T5R05>).
      READ TABLE LT_PA0185 ASSIGNING FIELD-SYMBOL(<FS_PA0185>) WITH KEY PERNR = LV_PERNR ICTYP = <FS_T5R05>-ICTYP BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        ES_PHF-ICNUM = <FS_PA0185>-ICNUM.
        EXIT.
      ENDIF.
    ENDLOOP.

    "8、  入职日期:根据人员编号PERNR通过入职日期函数读取
    CLEAR:LV_DATUM.
    PERFORM FRM_GET_HIRE_DATE USING LV_PERNR CHANGING LV_DATUM.
    ES_PHF-BEGDA_Z1 = LV_DATUM.

    "9、  离职日期:根据人员编号PERNR通过离职日期函数读取
    CLEAR:LV_DATUM.
    PERFORM FRM_GET_FIRE_DATE USING LV_PERNR CHANGING LV_DATUM.
    ES_PHF-BEGDA_ZA = LV_DATUM.

*  "取金额
    PERFORM FRM_GET_PAY_932_2 USING <FS_PERNR_RANGE> LV_BEGDA CHANGING ES_PHF.

    APPEND ES_PHF TO GT_OUTPUT_CPF.
    CLEAR:ES_PHF.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_GET_PAY_932_2
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      --> LV_BEGDA
*&      --> LV_ENDDA
*&      <-- ES_PHF
*&---------------------------------------------------------------------*
FORM FRM_GET_PAY_932_2  USING    P_PA0001 STRUCTURE PA0001
                                 P_DAY_IN TYPE SY-DATUM
                          CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT_CPF.


  DATA: LT_SIM_PERNR TYPE TABLE OF PAY_SIM_PERNR.
  DATA: BUFFER            TYPE HRPAY_BUFFER,
        LS_RGDIR_LINE     LIKE PC261,
        LV_MOLGA          TYPE MOLGA.

  DATA: BEGIN OF RX-KEY.            "CLUSTER KEY
           INCLUDE STRUCTURE PC200.
  DATA: END   OF RX-KEY.
  DATA:LS_PAYRESULT TYPE PAYCN_RESULT.

  DATA:LV_VARIANT TYPE VARIANT.
  LV_VARIANT = P_PA0001-ABKRS.

  CLEAR:LT_SIM_PERNR.
  LT_SIM_PERNR = VALUE #( ( PERNR = P_PA0001-PERNR ) ).

  CALL FUNCTION 'HR_PAYROLL'
    EXPORTING
      PAYROLL_AREA = P_PA0001-ABKRS
      PAYROLL_PERIOD = P_DAY_IN+4(2)
      PAYROLL_YEAR = P_DAY_IN(4)
      SELECTION_VARIANT = LV_VARIANT
      PROGRAM_NAME = 'HCNCALC0'
      SCHEMA       = 'ZN28'
*   TST_ON = 'X'
    TABLES
      EMPLOYEE_NUMBERS = LT_SIM_PERNR
      BUFFER = TBUFF
      BUFFER_DIRECTORY = BUFFER_DIR
      DELETE_PCLX = DEL_PCLX_TAB
    EXCEPTIONS
      PROGRAM_NOT_EXIST = 1
      VARIANT_NOT_EXIST = 2
      MISSING_PARAMETER = 3
      WRONG_PARAMETER = 4
      WRONG_COUNTRY_GROUP = 5
      OTHERS = 6.

  BUFFER-TBUFF[] = TBUFF[].
  BUFFER-BUFFER_DIR[] = BUFFER_DIR[].
  BUFFER-DEL_PCLX_TAB[] = DEL_PCLX_TAB[].

  CALL FUNCTION 'CU_READ_RGDIR'
    EXPORTING
      PERSNR = P_PA0001-PERNR
      BUFFER = BUFFER
    IMPORTING
      MOLGA  = LV_MOLGA
    TABLES
      IN_RGDIR = RGDIR
    EXCEPTIONS
      NO_RECORD_FOUND = 1
    OTHERS = 2.

  DELETE RGDIR WHERE FPPER NE P_DAY_IN+0(6).
  IF RGDIR[] IS INITIAL.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_RED_LIGHT.
    P_ES_SOCIAL_INSURANCE-MESSAGE = TEXT-E05.
    CONCATENATE  P_USER  SY-DATUM TEXT-E03 P_ES_SOCIAL_INSURANCE-MESSAGE INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
    RETURN.
  ENDIF.


  CALL FUNCTION 'CD_READ_LAST_RESULT_IN_RGDIR'
    IMPORTING
      PTX_RGDIR_NV = LS_RGDIR_LINE
    TABLES
      PT_RGDIR = RGDIR.

  RX-KEY-PERNR = P_PA0001-PERNR.
  RX-KEY-SEQNO = LS_RGDIR_LINE-SEQNR.
  RP-IMP-C2-CN."RP

  IF RP-IMP-CN-SUBRC = 0..
    P_ES_SOCIAL_INSURANCE-ICON = ICON_GREEN_LIGHT.
    CONCATENATE  SY-UNAME  SY-DATUM TEXT-S03 INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
  ELSE.
    P_ES_SOCIAL_INSURANCE-ICON = ICON_RED_LIGHT.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            INTO P_ES_SOCIAL_INSURANCE-MESSAGE
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    CONCATENATE  P_USER  SY-DATUM TEXT-E03 P_ES_SOCIAL_INSURANCE-MESSAGE INTO P_ES_SOCIAL_INSURANCE-MESSAGE SEPARATED BY '_'.
    RETURN.
  ENDIF.

  SORT RT  BY LGART.


*  DATA:LV_RT__314 TYPE CHAR20."养老保险单位金额(正常缴纳)

  READ TABLE PHF ASSIGNING FIELD-SYMBOL(<FS_PHF>) INDEX 1.
  IF SY-SUBRC EQ 0.

    "13、  公积金(基数): 根据人员编号PERNR及页面选择期间读取簇表PHF中,EECON对应的值
    P_ES_SOCIAL_INSURANCE-CPF_CARDINAL_NUMBER = <FS_PHF>-ERCON.

    "14、  公积金(单位比例):根据人员编号PERNR及页面选择期间读取簇表PHF中,ERRAT对应的值
    P_ES_SOCIAL_INSURANCE-CPF_BY_COM_PROPORTIONAL = <FS_PHF>-ERRAT.

    "16、  公积金(个人比例):根据人员编号PERNR及页面选择期间读取簇表PHF中,EERAT对应的值
    P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_PROPORTIONAL = <FS_PHF>-EERAT.
  ENDIF.

  "20、  公积金单位金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7055 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7055' 3 CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_COM_MONEY_RF .

  "22、  公积金个人金额(纠偏):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 7025 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '7025' 3 CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY_RF .

  "23、  扣费二:根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= 5420 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '5420' 3 CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY_CF .



  "15、  公积金(单位金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /363 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/363' 3 CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_COM_MONEY .

  "17、  公积金(个人金额):根据人员编号PERNR及页面选择期间读取簇表RT中,LGART= /362 对应的BETRG的值
  PERFORM FRM_READ_RT TABLES RT USING '/362' 3 CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY .

  "公积金单位金额合计
  P_ES_SOCIAL_INSURANCE-PAY_BY_COM_TOTAL = P_ES_SOCIAL_INSURANCE-CPF_BY_COM_MONEY + P_ES_SOCIAL_INSURANCE-CPF_BY_COM_MONEY_RF.

  "公积金个人金额合计
  P_ES_SOCIAL_INSURANCE-PAY_BY_MYSELF_TOTAL = P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY + P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY_RF + P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY_CF.

  "单位和个人缴费金额(合计)
  P_ES_SOCIAL_INSURANCE-PAY_MYSELF_AND_COM_TOTAL = P_ES_SOCIAL_INSURANCE-PAY_BY_COM_TOTAL + P_ES_SOCIAL_INSURANCE-PAY_BY_MYSELF_TOTAL.

  "去除空格
  PERFORM FRM_CONDENSE_ZHRS_I_PY932_2 CHANGING P_ES_SOCIAL_INSURANCE.

  "负号提前
  PERFORM FRM_SET_NEGATIVE2 CHANGING P_ES_SOCIAL_INSURANCE.

  "修改比例后加百分号
  PERFORM FRM_SET_BL2 CHANGING P_ES_SOCIAL_INSURANCE.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_CONDENSE_ZHRS_I_PY932_2
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_CONDENSE_ZHRS_I_PY932_2  CHANGING P_ES_PHF LIKE GS_OUTPUT_CPF.

    CONDENSE:
      P_ES_PHF-PAY_BY_COM_TOTAL,
      P_ES_PHF-PAY_BY_MYSELF_TOTAL,
      P_ES_PHF-PAY_MYSELF_AND_COM_TOTAL,
      P_ES_PHF-CPF_CARDINAL_NUMBER,
      P_ES_PHF-CPF_BY_COM_PROPORTIONAL,
      P_ES_PHF-CPF_BY_COM_MONEY,
      P_ES_PHF-CPF_BY_MYSELF_PROPORTIONAL,
      P_ES_PHF-CPF_BY_MYSELF_MONEY,
      P_ES_PHF-CPF_BY_MYSELF_MONEY_CF,
      P_ES_PHF-CPF_CARDINAL_NUMBER_RF,
      P_ES_PHF-CPF_BY_COM_PROPORTIONAL_RF,
      P_ES_PHF-CPF_BY_COM_MONEY_RF,
      P_ES_PHF-CPF_BY_MYSELF_PROPORTIONAL_RF,
      P_ES_PHF-CPF_BY_MYSELF_MONEY_RF
      NO-GAPS.
ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_BL2
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_SET_BL2  CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT_CPF.

    PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_COM_PROPORTIONAL.
    PERFORM FRM_SET_PER CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_PROPORTIONAL.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SET_NEGATIVE2
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*&      <-- P_ES_SOCIAL_INSURANCE
*&---------------------------------------------------------------------*
FORM FRM_SET_NEGATIVE2  CHANGING P_ES_SOCIAL_INSURANCE LIKE GS_OUTPUT_CPF.

  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-PAY_BY_COM_TOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-PAY_BY_MYSELF_TOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-PAY_MYSELF_AND_COM_TOTAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_CARDINAL_NUMBER.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_COM_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_COM_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_PROPORTIONAL.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_CARDINAL_NUMBER_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_COM_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_COM_MONEY_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_PROPORTIONAL_RF.
  PERFORM FRM_SET_NEGA CHANGING P_ES_SOCIAL_INSURANCE-CPF_BY_MYSELF_MONEY_RF.

ENDFORM.
*&---------------------------------------------------------------------*
*& FORM FRM_SAVE_LOG_CPF
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& -->  P1        TEXT
*& <--  P2        TEXT
*&---------------------------------------------------------------------*
FORM FRM_SAVE_LOG_CPF .

  DATA:LT_ZHRT_0009 TYPE TABLE OF ZHRT_0009,
       LS_ZHRT_0009 LIKE LINE OF LT_ZHRT_0009.
*

  DATA:LS_ZHRT_IF001    TYPE ZHRT_IF001,
       LS_ZHRT_IF002    TYPE ZHRT_IF002.

  LOOP AT GT_OUTPUT_CPF ASSIGNING FIELD-SYMBOL(<FS_OUTPUT>).
    MOVE-CORRESPONDING <FS_OUTPUT> TO LS_ZHRT_0009.

    IF <FS_OUTPUT>-ICON EQ ICON_GREEN_LIGHT.
      LS_ZHRT_0009-TYPE = 'S'.
      APPEND LS_ZHRT_0009 TO LT_ZHRT_0009.
    ELSE.
      LS_ZHRT_0009-TYPE = 'E'.
      APPEND LS_ZHRT_0009 TO LT_ZHRT_0009.
    ENDIF.

    IF S_PERNR[] IS NOT INITIAL.
      DELETE FROM ZHRT_0009 WHERE PERNR = <FS_OUTPUT>-PERNR AND PERIO = P_PERIO.
    ENDIF.

    PERFORM FRM_SET_LOG USING 'PC00_M28_CALC_SIMU'
                              'P'
                              <FS_OUTPUT>-PERNR
                              <FS_OUTPUT>
                              'INS'
                              'S'
                              TEXT-S02
                         CHANGING LS_ZHRT_IF001 LS_ZHRT_IF002.
    APPEND LS_ZHRT_IF001 TO GT_IF001.
    APPEND LS_ZHRT_IF002 TO GT_IF002.
    CLEAR:LS_ZHRT_0009,LS_ZHRT_IF001,LS_ZHRT_IF002.
  ENDLOOP.
  COMMIT WORK AND WAIT.

  IF S_PERNR[] IS INITIAL..
    DELETE FROM ZHRT_0009 WHERE PERIO = P_PERIO AND ABKRS IN S_ABKRS .
  ENDIF.

  MODIFY ZHRT_0009 FROM TABLE LT_ZHRT_0009.
  COMMIT WORK AND WAIT.

  IF GT_IF001 IS NOT INITIAL.
    MODIFY ZHRT_IF001 FROM TABLE GT_IF001.
    MODIFY ZHRT_IF002 FROM TABLE GT_IF002.
    COMMIT WORK AND WAIT.
  ENDIF.
ENDFORM.
posted @ 2022-01-25 17:49  linhuang  阅读(18)  评论(0编辑  收藏  举报  来源