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

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

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

Теперь мы знаем, что проблема не с отображением, а именно с сохранением названия региона в ИТ 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 не затираются и после сохраняются в БД.

На этом все. Надеюсь, было интересно.
Следить за выходом новых постов можно в telegram канале.
Изображение поста взято здесь: Designed by vectorjuice / Freepik