Для этой задачи использование ФМ 'HR_TIME_EVALUATION' слишком тяжеловесное решение. Все равно, что при потребности в 1 кг песка, купить целый КАМАЗ песка, один кг взять, а остальное выкинуть.
Сгенерированные графики хранятся в таблице T552A. Нужно лишь считать из этой таблицы данные и подсчитать по ним число рабочих дней. Можно использовать ФМ HR_READ_552A_AUTOGEN - он считывает таблицу T552A, а при необходимости и генерирует графики.
Пример кода в общем случае
Code:
SELECT SINGLE *
FROM t001p
INTO ls_t001p
WHERE
werks = p0001-werks AND
btrtl = p0001-btrtl.
*
SELECT SINGLE *
FROM t503
INTO ls_t503
WHERE
persg = p0001-persg AND
persk = p0001-persk.
*
PROVIDE * FROM p0007
BETWEEN ab-begda AND ab-endda.
EXIT.
ENDPROVIDE.
l_cur_date = ab-begda.
l_month = l_cur_date+4(2).
CALL FUNCTION 'HR_READ_552A_AUTOGEN'
EXPORTING
zeity = ls_t503-zeity
mofid = ls_t001p-mofid
mosid = ls_t001p-mosid
schkz = p0007-schkz
kjahr = l_cur_date(4)
monat = l_month
autogen = 'X'
read_first = 'X'
IMPORTING
z552a = lt_t552a
EXCEPTIONS
custom_error = 1
cant_happen = 2
OTHERS = 3.
l_day = l_cur_date.
DO 31 TIMES
VARYING l_tpr FROM lt_t552a-tpr01 NEXT lt_t552a-tpr02
VARYING l_ttp FROM lt_t552a-ttp01 NEXT lt_t552a-ttp02
VARYING l_var FROM lt_t552a-var01 NEXT lt_t552a-var02.
CHECK NOT l_tpr IS INITIAL. " день существует?
UNPACK sy-index TO l_day+6(2).
* подсчет нормы-времени
IF l_ttp IS INITIAL.
mnormatime = mnormatime + 1.
CALL FUNCTION 'HR_DWS_RE550'
EXPORTING
motpr = lt_t552a-mosid
tprog = l_tpr
varia = l_var
date = l_day
IMPORTING
daygen = l_daygen
EXCEPTIONS
error_occured.
IF sy-subrc EQ 0.
mnormatime = mnormatime + l_daygen-sollz.
ENDIF.
ENDIF.
ENDIF.
ENDDO.
2 xont
Этот код можно использоввать и для посчета нормы по "чужому" графику.
Если же речь идет о получении данные в программе HRUCALC0, то можно использовать процедуру build_pws_for_genps, которая отвечает за обработку графиков.
Пример.
Code:
DATA: BEGIN OF t_xpsp OCCURS 33.
INCLUDE STRUCTURE ptpsp.
DATA: END OF t_xpsp.
PERFORM build_pws_for_genps
TABLES
t_xpsp
USING
aper-PBEGD
aper-PENDD
no "consider p2003
no "consider IT2001
no."consider IT2002
CLEAR: aTime, aDay.
LOOP AT t_xpsp WHERE stdaz GT 0.
ADD 1 TO aDay.
aTime = aTime + t_xpsp-stdaz.
ENDLOOP.
Эта функция, например, используется в RUSI0 для подсчета дней в будущем.