Соединение в модуле OM, это инфотип 1001. Вид соединения — подтип этого самого инфотипа. Это все знают, это просто. Когда мы соединяем объекты OM друг с другом, то у нас получаются внутренние соединения объектов. Мы легко можем увидеть оба объекта в HRP1000 табличке.
Но также мы помним, что есть внешние по отношению к ОМ объекты — K — МВЗ, например. МВЗ мы не найдем в табличке HRP1000, так как он хранится в модуле Контроллинг. Чтобы как-то связать объекты HR с другими модулями существуют внешние соединения в OM.
Допустим, у нас с вами есть сдельная оплата труда. Это наиболее типичный пример, где можно воспользоваться внешними объектами. Мы сделали свою табличку для хранения номеров бригад. Хотим теперь сделать связь оргединицы или штатной должности с бригадой. Вопрос целесообразности не обсуждаем, так как есть еще несколько вариантов, как можно сделать учет бригад. Мы используем это для примера.
Создаем табличку, где будут храниться бригады:

Создаем внешний объект в оргменеджменте.

Описываем объект как внешний, а также задаем программу, которая будет отвечать за его поиск, отображение и прочие манипуляции.

Обратите внимание на PKEY1 и ZHR_ZZ. Первое это структура из SE11, которая содержит ключевые поля, по которым мы идентифицируем объект. У меня это просто ID. Для МВЗ, например, это КЕ + МВЗ (два поля).
ZHR_ZZ это пул модулей, где находятся процедуры, отвечающие за управление нашим внешним объектом. У меня простой пример и всего две процедуры: получить название объекта и проверить его существование.
PROGRAM ZHR_ZZ.
INCLUDE RHHRSDAT.
INCLUDE MPHFCOD0.
CONSTANTS: LOW_DATE LIKE OBJEC-BEGDA VALUE '19000101'.
CONSTANTS: HIGH_DATE LIKE OBJEC-ENDDA VALUE '99991231'.
FORM GET_MACO USING GM_MACO.
GM_MACO = ' '. "no match code defined
ENDFORM.
FORM GET_NAME USING VALUE(TR_TEAM) VALUE(TR_DUMM1) VALUE(TR_DUMM2)
VALUE(TR_BEGDA) VALUE(TR_ENDDA)
TR_SHORT TR_STEXT TR_SUBRC.
data: ls_team type zhr_teams-team_name.
select single team_name into ls_team from zhr_teams where team_id = tr_team.
if sy-subrc = 0.
tr_short = ls_team.
tr_stext = ls_team.
endif.
tr_subrc = sy-subrc.
ENDFORM.
FORM EXIST_EXTOBJ USING VALUE(TR_TEAM) VALUE(TR_DUMM1)
VALUE(TR_DUMM2) VALUE(TR_BEGDA)
VALUE(TR_ENDDA) TR_SUBRC.
data: ls_team type zhr_teams-team_name.
select single team_name into ls_team from zhr_teams where team_id = tr_team.
tr_subrc = sy-subrc.
if sy-subrc = 0.
TR_BEGDA = LOW_DATE.
TR_ENDDA = HIGH_DATE.
endif.
ENDFORM.
Объект готов, но его нельзя пощупать в PP01. Сделаем внешнее соединение штатной должности с нашим объектом.



Осталось сделать тяп-ляп и получить готовое соединение в PP01:

Не забывайте делиться информацией, а также пройти курс по SAP ALE для начинающих САПероводов: https://saphr.ru/2018/10/10/online-kurs-po-sap-ale/
Помните, скидки не вечны!
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.