Для разработчиков, не знакомых с HCM, будет полезным узнать подходе к разработке, основанном на логических базах данных.
Если кратко, то ЛБД позволяет извлекать типовые данные HCM, не используя SELECT и даже FM-ы для чтения. Они, конечно, используются в глубине логики ЛБД, но скрыты от разработчика.
Небольшая оговорка для не HCM программистов - когда вы используете для доступа к инфо-типам SELECT, в 99% случаях вы делаете не правильно. Бегом читать курс HR350. Модуль HCM работает с персональными данными людей, данная информация всегда жестко защищена законодательством и несанкционированный доступ к ней карается. Если вы не используете ЛБД или специализированные ФМ-мы необходимо проверять полномочия отдельно.
Кроме того, ЛБД создает экран программы(рис 1.), который удовлетворяет большинство потребностей HCM приложений. Будем честны, как правило, они не так уж и сложны. При этом экран можно настраивать.
Разберем создание отчета на базе ЛБД PCH, данная ЛБД используется для доступа к данным организационного менеджмента, т.к. очень хорошо работает с организационной структурой.
Создание отчета на основе ЛБД PCH
- Необходимо прописать логическую базу данных в свойствах. В нашем случае PCH
Далее необходимо написать код(пример в блоке ниже). Все, готово. Если вы запустите программу увидите экран. Далее, согласно параметрам селекционного экрана, внутренние таблицы будут наполнятся данными объектов.
1 2 3 4 5 6 7 8 9 |
REPORT zhr_pch_test. TABLES : OBJEC, GDSTR. INFOTYPES: 1000, 1001, 0001, 0002. START-OF-SELECTION GET objec. … обработка END-OF-SELECTION |
Рассмотрим подробнее.
TABLES: Непосредственно влияет на экран отчета и выбор данных.
а) OBJEC - позволяет объявить событие GET OBJEC. Также в ходе выполнения события GET OBJEC можно будет обращаться к структуре OBJEC за информацией о текущем объекте.
б) GDSTR- Переключает режимы выборки. Если ее не указывать, то объекты выбираются по ключам. Если же указывать, на экране появляется дополнительный блок полей, в котором можно указать путь анализа для поиска объектов.(рис.3.) Чаще всего так и нужно делать.
Рис. 3 Блок ПараметрСтруктуры
Рассмотрим получившийся экран подробнее:
Вариант плана( PCHPLVAR) - вариант плана отображения структуры. В Российских проектах почти всегда это 01.
Тип объекта ( PCHOTYPE ) - тип объекта HR . Например О - организационная единица, S - штатная должность, С - должность и т.д.
Ид. объекта (PCHOBJID)- Ид. объекта HR.
Критерий поиска( PCHSEARK ) - в теории можно указать *Часть_имени* и должно выбирать объекты согласно этому. Но я ни разу не использовал
Статус объекта и Статус данных - позволяет выбирать объекты и данные в разных состояниях. Например Активно, Запланировано. Но на практике обычно в системе только Активные объекты.
Путь Анализа(PCHWEGID) - собственно путь анализа. Позволяет искать объекте в структуре организационного менеджмента.
Глубина просмотра( PCHDEPTH ) - позволяет указать на сколько уровней мы поднимаемся или опускаемся по организационной структуре.
Остальные поля ( Вектор статуса и Перекрытие статуса) в своей практике не использовал. Их работа связанна со статусом планирования данных, что в Российских реалиях практически не применяется.
Как это все работает.
После заполнения экрана программы и запуска, в цикле отрабатывает событие GET OBJEC. Которое предоставляет последовательный доступ к выбранным данным, согласно условиям селекционного экрана. При этом происходит заполнение внутренних таблиц pnnnn данными инфо-типов. Каких таблиц, что ты несешь? спросите вы. А вот тех, которые мы объявили в операторе INFOTYPES:. Да, да, это не просто какое-то перечисление инфо-типов, а именно объявление таблиц для последующего автоматического сбора данных.
Все очень удобно. Однако, при работе с PCH есть небольшая особенность. Отдельные инфо-типы организационного менеджмента являются табличными. Т.е. данные хранятся не только в таблицe HRP*, а еще и в таблице HRT*, связанной по ключу TABNR с первой. Вот тут возникает необходимость выбрать их в дополнительную таблицу на основе структуры HRT*. Есть два пути.
1. Использование макроса ЛБД PCH RH-GET-TBDAT
1 2 |
data ls_t1222 type hrt1222. RH-GET-TBDAT p1222-infty p1222-tabnr ls_t1222. |
Этот способ самый быстрый, макрос выбирает данные из буфера ЛБД. Но если вы используете ООП, он не применим.
2. Лично мне больше нравится выбор при помощи ИТ. Тем более в HR отчетах не такие огромные объемы данных, чтобы просадка производительности была заметна.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
DATA lt_t1222 TYPE TABLE OF hrt1222. CLEAR lt_t1222. CALL FUNCTION 'RH_READ_INFTY_TABDATA' EXPORTING infty = '1222' * DBMODE = ' ' * RETURN_INITIAL = 'X' TABLES innnn = p1222[] hrtnnnn = lt_t1222 EXCEPTIONS no_table_infty = 1 innnn_empty = 2 nothing_found = 3 OTHERS = 4. |
Макросы PCH
Самые распространенные макросы при работе с ЛБД PCH следующие:
RH-GET-TBDAT - выбор табличной части ИТ;
RH_SEL_ONE_OBJID - используется в событии INITIALIZATION, чтобы гарантировать, что пользователь может ввести только один идентификатор объекта на экране выбора;
RH_SEL_KEYDATE - оставляет на экране выбора только контрольную дату;
Последовательность макросов, позволяющая выбирать данные из инфо-типов по значению поля. В данном примере выберем данные ИТ 1003 с полем ABTEL = 'X'.
1 2 3 4 5 6 7 8 |
START-OF-SELECTION. RH-SET-INDEX-INFTY '1003'. RH-CONDITION-LINE ABTEL EQ 'X' SPACE. RH-SET-INDEX-INFTY-CONDITION. GET OBJEC. ..... |
Более подробно можно прочитать в курсе HR350