ФМы для чтения ИТ и ЛБД в HR. Почему их надо использовать

Немного сумбурных мыслей.
Информация для разработчиков, которые ранее не работали с модулем HR и не очень понимают, зачем при разработке в данном модуле использовать ЛБД или ФМ для выборки данных вместо селектов. Как всегда более подробно в курсах. В данном случае это HR350. Не претендую на идеальное и полное изложение материала. 

Инфо-тип - это информационная единица, используемая для ведения основных данных, связанных с системами управления персоналом SAP. Проще говоря, это некий набор данных по определенной теме, описывающий объект HR. При этом объектом HR может быть как табельный номер (P) так и, например, организационная единица (O) или любой из других объектов.
Инфо-типы, относящиеся к управлению персоналом PA мы можем смотреть и редактировать в транзакциях PA20\PA30.
Для инфо-типов организационного менеджмента OM существует транзакция PP01.
Для разработчика  данные из этих ИТ могут быть доступны в таблицах PAXXXX для инфо-типов администрирования персонала и таблицах HRPXXXX для инфо-типов OM. В свою очередь, Инфо-типы ОМ разделяются на ИТ с табличной и без табличной части.

Может быть не совсем ясно, почему же мы не можем просто использовать SELECT.

Причины использования ФМ и ЛБД для выборок

Во-первых,  проверка полномочий, дело в том, что полномочия в HR это очень сложная и запутанная тема. У людей может быть очень много ограничений и вручную все эти проверки делать очень трудозатратно, да и самому все учесть практически не реально. В HCM проверка полномочий обязательна.

Во-вторых, не все, что мы видим на экране, лежит в таблицах PAXXXX или HRPXXX. Например, такой ИТ как 0008 "Основные выплаты" может содержать данные в таблице PA0008, а может и не содержать. Данные же надо собирать методом косвенной оценки.

В третьих, использование ЛБД облегчает написание кода в разы. Создание селекционного экрана, средств поиска, выборка данных из ИТ - все это ЛБД умеет из "коробки".
Пример кода. Рисуем селекционный экран, и выбираем данные ИТ 0001, 0002, 0006. Согласно заполнению экрана.

Получившийся экран:

В четвертых, простота поддержки. Относительно малый объем обрабатываемых данных позволяет не думать об оптимизации, которую дает нам прямой select. Таблицы на несколько миллионов строк, это как правило не про HR, поэтому наш супер оптимизированный запрос (а таким он не будет, я видел ваш код))), видимого для пользователя прироста скорости, скорее всего, не даст. А вот поддерживать и дорабатывать все это хозяйство, исходя из вышесказанного, довольно проблематично.
Об удобстве последующей поддержки можно говорить долго. Всегда для разработчика возникает большой соблазн собрать все данные одним "метким" селектом. Но специфика данных в HR потребует для этого слишком сложные запросы, которые в дальнейшем потребуют очень много времени на понимание. Или мы вернемся к тому, что будем считывать ИТ отдельно во внутренние таблицы и потом работать с ними также, как и при выборке через стандартные средства. 


Сравним на примере select-а который работает кое как с полученим данных при помощи ЛБД.
Сразу говорю, в код сильно вникать не надо. Изначально задача такая: Мы берем из ИТ 0295 записи только с соответствием в ИТ0296, а также выводим данные ИТ 0001 и данные ИТ 0002 инфо-типов. 

В варианте с ЛБД у нас в событии  get peras все данные ИТ уже выбраны во внутренние таблицы PXXXX. Осталось только дополнить строки таблицы PA0295  остальными. Это выглядит вот так:

Да, дополнительно мы используем некоторые методы для справочников, но это не критично для понимания удобства.

Если же мы работаем со вставкой и изменением данных, то тут и разговоров нет, ведение только через Стандартные ФМ и классы. 

Краткий итог: если видим  select к ИТ - удаляем его и переписываем так, как надо это делать в HR.

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

Ваш адрес email не будет опубликован.