Я с этой проблемой сталкивался, но решал ее не на уровне BADI cl*im*factx.
В методе CL_HRPAYRU_PLTAXRUN_CS_PRR есть метод get_associated_pyres, которые определяет актуальный (или в-период) расчет для текущего результата расчета. В актуальном расчете и будут храниться данные, необходимые для определения необходимых атрибутов в разрезе в-период.
В методе CL_HRPAYRU_PLTAXRUN_CS_PRR.COLLECT_OUTWAGE_CE есть следующие строки
Code:
LOOP AT it_results ASSIGNING <lo_result>.
GET REFERENCE OF <lo_result>->inter INTO lrefs_inter.
GET REFERENCE OF <lo_result>->natio INTO lrefs_nat.
get_associated_pyres( exporting it_results = it_results
is_curr_evp = <lo_result>->period
importing et_pyres_follower = lt_pyres_follower
eo_pyres_actual = lo_pyres_actual ).
Вот в lo_pyres_actual и должен оказаться актуальный расчет. Вот только если у физика 2 и более ТН, то в it_results будут результаты по всем ТН, а get_associated_pyres при определении актуального расчета не учитывает этот момент. Поэтому get_associated_pyres при работе с одним ТН может выдать ссылку на расчет другого ТН. Далее необходимые для 6НДФЛ атрибуты, в том числе даты, будут определяться относительно другого ТН. Если эти атрибуты у разных ТН одного физика не совпадают, то возникает ошибка в заполнении.
Я исправлял эту проблему подламывая get_associated_pyres, добавив в условие поиска поле ТН. После этого get_associated_pyres выдает актуальный расчет с учетом ТН, а в BADI cl*im*factx проблем с датами не возникает, даже при отсутствии ТН в буфере дат.