核心代码

需要注意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.