Динамические мероприятия

Итак, есть боевая задача. Нужно сделать динамическое мероприятие для отслеживания изменения грейда сотрудника при переводе. Если грейд поменялся, то для назначения новой программы ДМС (Добровольное Медицинское Страхование) нужно создать управляющую запись в определенном инфотипе.

Грейд по стандарту хранится на уровне штатной должности/должности в инфотипе 1050 «Результаты оценки должностей». Подтип это метод оценки. Например, HAY, PWC, Watson Wyatt или внутренняя оценка компании.

Для анализа изменения грейда на штатной должности при переводе сотрудника на другую позицию мы делаем подобное динамическое мероприятие для инфотипа 0001 «Организационное присвоение»:

0001 06 700 * *—- СОЗДАЕМ ИТ0378 ДЛЯ ЛЬГОТ
0001 06 701 P T001P-MOLGA=’33’
0001 06 710 P PSPAR-MASSN=’A9′
0001 06 730 F CHECK_GRADE_CHANGE(ZHR_DYNACT)
0001 06 740 P RP50D-FLAG1=’X’
0001 06 750 I INS,0378,CHNG,,(P0001-BEGDA),(P0001-ENDDA)/D

В строчке 710 проверяем на нужный нам код мероприятия (В моем примере перевод это A9). Пишем маленькую процедуру в своей программе. У меня это процелура CHECK_GRADE_CHANGE в программе ZHR_DYNACT. Если грейд изменился, то создаем запись инфотипа 0378 с даты перевода с подтипом CHNG «Перевод». Вот и все.

Вот примерный код:

*&---------------------------------------------------------------------*
*& Form check_grade_change
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM check_grade_change.
* Проверяем, изменился ли грейд сотрудника при переводе
DATA:
lt_old_p1050 TYPE TABLE OF p1050 WITH HEADER LINE,
lt_new_p1050 TYPE TABLE OF p1050 WITH HEADER LINE,
p_old_p0001 LIKE p0001.

rp50d-flag1 = ' '. " Если Х, то грейд изменился.

CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
EXPORTING
prelp = csave
IMPORTING
pnnnn = p_old_p0001.

CALL FUNCTION 'RH_READ_INFTY'
EXPORTING
plvar = '01'
otype = 'S'
objid = p0001-plans
infty = '1050'
begda = p0001-begda
endda = p0001-endda
TABLES
innnn = lt_new_p1050
EXCEPTIONS
OTHERS = 6.

IF sy-subrc <> 0.
EXIT.
ENDIF.

CALL FUNCTION 'RH_READ_INFTY'
EXPORTING
plvar = '01'
otype = 'S'
objid = p_old_p0001-plans
infty = '1050'
endda = p0001-begda" begda = p0001-endda
TABLES
innnn = lt_old_p1050
EXCEPTIONS
OTHERS = 6.

IF sy-subrc <> 0.
EXIT.
ENDIF.

IF lt_old_p1050 IS INITIAL.
EXIT.
ENDIF.

LOOP AT lt_old_p1050.
EXIT.
ENDLOOP.

LOOP AT lt_new_p1050.
EXIT.
ENDLOOP.

IF ( lt_old_p1050-evpts NE lt_new_p1050-evpts )
OR ( lt_old_p1050-evgrd NE lt_new_p1050-evgrd ).
rp50d-flag1 = 'X'.
ENDIF.
ENDFORM. "check_grade_change

Добавить комментарий