Нет, нет, на этапе ФМ HR_RU_DAQ_NDFL_AMOUNT уже поздно что-либо делать. Нужно на этапе сбора данных работать, аналогично 2НДФЛ.
В 6НДФЛ на этапе сбора данных работает класс CL_HRPAYRU_PLTAXRUN_CS_PRR, метод collect_outwage_ce. В самом начале организуется цикло по расчетам (
LOOP AT it_results ASSIGNING <lo_result>.). <lo_result> - это будет текущий расчет (для-период).
Далее едет код
Code:
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 - это будет ссылка на расчет, в котором периоде это произошло (в-период).
Далее идет обработка сумм и в итоге, вызов me->raise_payroll_evt и генерация события RAISE EVENT if_hrpayru_report_control_cs~check_wage. Обратите внимание, как много параметров при этом передается
Code:
me->raise_payroll_evt(
EXPORTING
i_pernr = <lo_result>->pernr
is_wpbp_check = <ls_wpbp_check>-wpbp_check
is_evp = <lo_result>->period
is_rt = <ls_rt>
irefs_inter = lrefs_inter
irefs_nat = lrefs_nat
irefs_versc = lrefs_versc
irefs_inter_pers = lrefs_inter_person
irefs_natio_pers = lrefs_natio_person
ireft_rgdir = lreft_rgdir
it_pyres_follower = lt_pyres_follower
io_pyres_actual = lo_pyres_actual
CHANGING
cs_outwage = ls_outwage ).
Все эти irefs* формируются относительно для-периода, но там есть и lo_pyres_actual - нужный нам в-период.
Событие check_wage получают все подписанные объекты. За определение ОКТМО отвечает CL_HRPAYRU_TAXAGENT, у него есть метод CHECK_WAGE, который получит все эти параметры. Вот тут и нужно действовать - нужно определяться ОКТМО не по irefs*, а по расчету lo_pyres_actual. Модификация заключается в том, чтобы, например, прочитать данные wpbp из lo_pyres_actual, а дальше определять ОКТМО по нему.