Как известно, инфо-тип 0006 в SAP HCM довольно специфичен. Во многом это объясняется тем, что он часто изменяется. Сначала в нем использовался справочник адресов КЛАДР. Затем был переход на ФИАС. На момент написания этой статьи (ноябрь 2021 года) выполняется переход на ГАР (Государственный адресный реестр).

В этом посте я хочу рассказать об одной из особенностей ИТ 0006 которую необходимо иметь в виду при его расширении с помощью CMOD или BAdI.

Начну с обнаруженного некорректного поведения инфо-типа при работе в PA30, которое заключалось в том, что при указании кода региона, его название успешно «подтягивалось» в поля экрана ИТ 0006,

tcode pa30, ИТ 0006. Название региона подтянулось

но не сохранялось в инфо-тип.

tcode pa30, ИТ 0006. После сохранения

Давайте попробуем разобраться. Мы знаем, что часть адресных данных хранится в ИТ 3433. В частности, в нем хранится поле REGIONNAME, которое нас сейчас интересует. Убедимся, что оно действительно пустое, посмотрев содержимое ИТ 3433 в se16n.

tcode se16n, ИТ 3433

Теперь мы знаем, что проблема не с отображением, а именно с сохранением названия региона в ИТ 3433.

Проведя некоторое время в отладчике, удалось выяснить, что проблема в user exit’е CMOD->PBAS0001, в котором, изменяется структура INNNN (тип PRELP).

В расширении выполнялся такой код:

При работе с ИТ 0006 в структуре innnn хранятся данные не только ИТ 0006, но и ИТ 3433. При выполнении метода cl_hr_pnnnn_type_cast=>prelp_to_pnnnn в структуру ls_p0006 перекладываются только поля ИТ 0006.

Далее, при выполнении метода cl_hr_pnnnn_type_cast=>pnnnn_to_prelp структура innnn перезаписывается из ls_p0006 и в этот момент данные ИТ 3433 теряются.

Поэтому, при сохранении ИТ 0006 в PA30 все данные ИТ 3433 не сохраняются.

Одним из выходов и сложившейся ситуации может быть следующее:

Т.е. сначала мы вычисляем длину структуры ИТ 0006, а затем в innnn перезаписываем только данные, относящиеся к ИТ 0006. Таким образом, данные ИТ 3433 не затираются и после сохраняются в БД.

tcode se16n, ИТ 3433

На этом все. Надеюсь, было интересно.

Следить за выходом новых постов можно в telegram канале.

Изображение поста взято здесь: Designed by vectorjuice / Freepik


Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.