Мне не ответили.
На мой взгляд, там есть довольно просто решение. Нужно просто в таблицу собранных доходов добавить строки с нулевой суммой для каждой записи из межрасчета, для которой не соответствующей записи в регулярном расчете. Тогда существующий алгоритм справляется проблемой. Могу поделиться кодом, он не сложный. Он у меня сразу заработал, каких-либо проблем обнаружено не было.
Класс CL_HRPAYRU_PAYFACTX, метод POST_PROCESS_WAGES. Там в начале есть такие строчки
Code:
    lt_wages = mo_pltaxrun->at_wages[].
    SORT: lt_wages[] BY wcode per.
После них нужно вставить такой код
Code:
    FIELD-SYMBOLS: <zs_wages_of_regular>        LIKE LINE OF mo_pltaxrun->at_wages[],
                   <zs_wages_of_offcycle>       LIKE LINE OF mo_pltaxrun->at_wages[],
                   <zs_payment_fact_for_run>    LIKE LINE OF mt_payment_fact_for_run[],
                   <zs_payment_fact_for_run_oc> LIKE LINE OF mt_payment_fact_for_run_oc[].
* REZ_RR   ***************************************************************
    data: z_found type boolean,
          lt_xages type prupy_t_wages,
          zs_wages_offcycle LIKE LINE OF mo_pltaxrun->at_wages[].
* ищем запись, которая есть в межрасчетах, но нет в регулярном
    LOOP AT zt_wages[] into zs_wages_offcycle.
      zv_anyk = get_classification_key_obj(
        iv_pernr = iv_pernr
        iv_wages_objid =  zs_wages_offcycle-objid ).
      READ TABLE mt_payment_fact_for_run_oc[] ASSIGNING <zs_payment_fact_for_run_oc>
        WITH KEY anyk = zv_anyk.
*     это межрасчет
      CHECK: sy-subrc = 0.
*     ищем в регулярном
      clear z_found.
      LOOP AT zt_wages[] ASSIGNING <zs_wages_of_regular>
        WHERE wtype = zs_wages_offcycle-wtype AND
              wcode = zs_wages_offcycle-wcode AND
              per   = zs_wages_offcycle-per   AND
              exkey = zs_wages_offcycle-exkey AND
              cntr1 = zs_wages_offcycle-cntr1 AND
              objid <> zs_wages_offcycle-objid.
        zv_anyk = get_classification_key_obj( iv_pernr = iv_pernr
          iv_wages_objid =  <zs_wages_of_regular>-objid ).
        READ TABLE mt_payment_fact_for_run[] ASSIGNING <zs_payment_fact_for_run> WITH KEY anyk = zv_anyk.
        if sy-subrc = 0.
*         есть такая
          z_found = abap_true.
          exit.
        endif.
      endloop.
      if z_found = abap_false.
*       не нашли, создадим пустую
*       выберем регулярный расчет
        LOOP at mt_payment_fact_for_run[] ASSIGNING <zs_payment_fact_for_run>
          where fpper = <zs_payment_fact_for_run_oc>-fpper.
**1            and Z_FPBEG <= <zs_payment_fact_for_run_oc>-PAYROLL_RUN_ID-BONDT
**1            and Z_FPEND >= <zs_payment_fact_for_run_oc>-PAYROLL_RUN_ID-BONDT.
*         Ищю любую запись, мне нужен OBJID
          loop at zt_wages[] ASSIGNING <zs_wages_of_regular>.
            zv_anyk = get_classification_key_obj(
              iv_pernr = iv_pernr
              iv_wages_objid =  <zs_wages_of_regular>-objid ).
            if <zs_payment_fact_for_run>-anyk = zv_anyk.
              z_found = abap_true.
              exit.
            endif.
          endloop.
          if z_found = abap_true. exit. endif.
        ENDLOOP.
        if z_found = abap_true.
          zs_wages_offcycle-OBJID =  <zs_wages_of_regular>-OBJID.
          clear zs_wages_offcycle-SUM.
          append zs_wages_offcycle to lt_xages.
        endif.
      endif.
    endloop.
    if LINES( lt_xages ) > 0.
      append lines of lt_xages[] to zt_wages[].
      SORT: zt_wages[] BY wcode per.
    endif.
* REZ_RR   ***********************************************************************
Далее идет стандартный код.
Замечания.
1. код вставлялся путем расширения (ENHANCEMENT), поэтому все штатные переменные переименнованны, например lt_wages[] стал zt_wages[].
2. У меня структура mt_payment_fact_for_run расширена. САП почему-то различает регулярные расчеты только по периоду (fpper). Если расчета месяц сплитован, то будет более одного расчета за месяц, и отделить их друг от друга никак нельзя. Я дополнительно для себя сохраняю даты периодов. У вас этого расширения не будет, поэтому я эти строчки закомментировал (отмечены как **1).