Нашел в старых записках описание, как создавать отпуск за вредные/особые условия труда. Критиковать кривизну реализации бессмысленно, так как это было в «мохнатые» годы. Поэтому приветствуется только улучшайзинг! В САП главное понять принцип, получить вектор, а дальше включить фантазию 😉
Для генерации отпусков за работу во вредных условиях труда (ВУТ) создаем лимит (например, код 06) с автоматической генерацией в оценке времени. Для генерации лимита необходимы два условия:
- Наличие связи штатной должности (S) с объектом вредных условий (CH). Для объекта CH создаем инфотип 9100, в котором указывается количество дней отпуска за ВУТ (IT9100-ZDAYS). При генерации лимита в user-exit EXIT_SAPLHRLV_004 читается этот ИТ на оцениваемую дату и устанавливается количество базового права в лимите согласно HRP9100-ZDAYS. Транзакция CMOD для создания расширения.
- Сотрудник должен отработать более 50% рабочего времени за смену для получения права на отпуск. Для этого используется вид времени 9000. В правиле вычисляется процент отработанного времени путем: вид времени 0002/вид времени 0050. Если больше 0.5, то вид времени 9000 = 1, иначе – 0. В функции QUOTA при генерации лимита производится умножение начисленного права на отпуск за день на вид времени 9000 «Фактич время > 50%». То есть, отработал больше 0.5 смены, то умножаем начисленное право на 1, в противном случае на ноль.
При накоплении права на отпуск кратного целой единице, система переносит целую единицу в 2006 ИТ. То есть, за 3 дня накопили 1,12 дня отпуска, то один день отпуска начислится в ИТ2006.
Текст EXIT_SAPLHRLV_004 инклуд ZXPLAU05
*&———————————————————————*
*& Include ZXPLAU05
*&———————————————————————*
infotypes: 9100.
data:
l_sobid like hrp1001-sobid,
l_ch_objid like hrp1001-objid.
* Read base entitlement for hazardous work conditions from CH object IT9100-ZDAYS
* We do this only quota type 06 «Hazardous work conditions»
if xqtype = ’06’.
xlvnum = 0.
loop at xp0001 where begda le xgdate and endda ge xgdate.
select single sobid from hrp1001 into l_sobid where
otype = ‘S’ and
objid = xp0001-plans and
plvar = ’01’ and
istat = ‘1’ and
begda le xgdate and
endda ge xgdate and
sclas = ‘CH’.
if sy-subrc <> 0.
exit.
endif.
l_ch_objid = l_sobid(8).
CALL FUNCTION ‘RH_READ_INFTY’
EXPORTING
AUTHORITY = ‘DISP’
* WITH_STRU_AUTH = ‘X’
PLVAR = ’01’
OTYPE = ‘CH’
OBJID = l_ch_objid
INFTY = ‘9100’
ISTAT = ‘1’
* EXTEND = ‘X’
* SUBTY = ‘ ‘
BEGDA = xgdate
ENDDA = xgdate
TABLES
INNNN = p9100.
loop at p9100.
xlvnum = p9100-zdays.
exit.
endloop.
endloop.
endif.
One Comment
Vasiliy
Функциональность начисление отпуска за вредные условия труда с помощью отчета HRUTQTA0 появилась в EHP5. Подробнее не копал.
Бизнес-функция:
HCM_LOC_CI_19
• Process absence quotas for employees who work in certain professions that entitle them to additional leave, for example, if they work in hazardous conditions