Стал лазить отладчиком. Вообще хрень какая-то получается, если честно.
Отчет вызывает ФМ RPAQ_GET_AF_0000. В этом ФМ есть отдельная секция для определения даты приема. Первым делом идут такие строчки:
Code:
if begda_sel = endda_sel. "VLDN561514
enter_begda = begda_sel. "VLDN561514
enter_endda = begda_sel. "VLDN561514
else. "VLDN561514
то есть, обрабатывается вариант, когда анализируемый период равен одному дню. Видно, что значение переменных enter_begda и enter_endda становятся равным.
Далее вызывается ФМ HR_ENTRY_DATE с параметрами даты enter_begda - enter_endda.
Code:
CALL FUNCTION 'HR_ENTRY_DATE'
EXPORTING
PERSNR = C_IT0000-PERNR
* BEGDA = C_IT0000-BEGDA "XWSN327157
* ENDDA = C_IT0000-ENDDA "XWSN327157
"VLDN561514 begin
* ENDDA = C_IT0000-ENDDA "XWSN376062
begda = enter_begda
endda = enter_endda
который по сути является обертышем для ФМ HR_ENTRY_DATE_CALC.
В ФМ HR_ENTRY_DATE_CALC зачитываются и обрабатываются периоды из ИТ 0000,0001,0041, при этом формируются две таблицы date и entry_dates, в которые попадают периоды работы. В этих таблицах только одно поле даты – начала периода. Для самого простого случая (сотрудник принят и работает) там будет одна запись с даты приема.
Далее идут 4 интересные строки
Code:
* Berќcksichtigung des (optionalen) Auswertungszeitraums bei der
* Ermittlung des Eintrittsdatums.
DELETE date WHERE begda LT begda.
DELETE date WHERE begda GT endda.
* Berќcksichtigung des (optionalen) Auswertungszeitraums bei der
* Ermittlung der Ausgabetabelle.
DELETE entry_dates WHERE begda LT begda.
DELETE entry_dates WHERE begda GT endda.
begda и endda, напомню, равны. Значит эти строки просто очистят таблицы, если только период анализа не равен дате приема сотрудника. Ну а дальше
Code:
READ TABLE date INDEX 1.
IF sy-subrc NE 0.
RAISE entry_date_not_found.
ENDIF.
Приехали, называется.
В se37 запускаю HR_ENTRY_DATE_CALC на тестирование для любого ТН с равными begda-ennda, естественно всегда получаю entry_date_not_found.
Что еще удивляет, вроде простое действие - определить дату према, а там весь код в исправления. САП долго и упорно переписывает этот кусок, а он все равно не работает
