Если кому интересно, в HRULCAL0_CE сделано следующим образом.
Класс CL_HR_PAYROLL_MAIN_BASIS
метод FILL_SDATES
Code:
METHOD fill_sdates .
DATA: l_p0000 TYPE p0000,
l_p0001 TYPE p0001,
l_persp TYPE t530-persp,
l_sdate TYPE hrpy_sdates,
l_first TYPE rp_xfeld,
l_last_juper TYPE p0001-juper,
l_dummy(1) TYPE c, "#EC NEEDED
l_msg_main TYPE hrplog_msg_main.
LOOP AT pp0000 INTO l_p0000
WHERE pernr EQ imp_peras
AND begda GE imp_begda
AND begda LE endda.
SELECT SINGLE persp INTO l_persp
FROM t530
WHERE massn = l_p0000-massn
AND massg = l_p0000-massg.
IF sy-subrc NE 0.
MESSAGE e729(hrpay99calc) WITH l_p0000-massn l_p0000-massg
INTO l_dummy.
* Kein Eintrag in Tabelle T530 für Massnahme &1 Grund &2
raise_error_occured l_msg_main chn_messages 'E' space
imp_peras '0' 'A'.
ENDIF.
IF l_persp EQ 'X'.
l_sdate = l_p0000-begda.
INSERT l_sdate INTO TABLE chn_sdates.
ENDIF.
ENDLOOP.
* Hier werden zusätzlich alle JUPER-Wechsel abgestellt, damit später
* die anderen Verträge nachgesplittet werden können. Dies ersetzt
* jedoch nicht den JUPER-Splitt in FILL_APER_REGULAR_PERAS, da dort
* die APER mit dem richtigen Wert für JUPER gefüllt wird.
LOOP AT pp0001 INTO l_p0001
WHERE pernr EQ imp_peras
AND endda GE imp_begda
AND begda LE endda.
IF l_first EQ space.
l_last_juper = l_p0001-juper.
l_first = 'X'.
ENDIF.
IF l_last_juper NE l_p0001-juper.
l_sdate = l_p0001-begda.
INSERT l_sdate INTO TABLE chn_sdates.
ENDIF.
ENDLOOP.
ENDMETHOD.
Я был не прав и признак из V_530_E всё же используется.