Внешние соединения объектов

Соединение в модуле OM, это инфотип 1001. Вид соединения – подтип этого самого инфотипа. Это все знают, это просто. Когда мы соединяем объекты OM друг с другом, то у нас получаются внутренние соединения объектов. Мы легко можем увидеть оба объекта в HRP1000 табличке.

Но также мы помним, что есть внешние по отношению к ОМ объекты – K – МВЗ, например. МВЗ мы не найдем в табличке HRP1000, так как он хранится в модуле Контроллинг. Чтобы как-то связать объекты HR с другими модулями существуют внешние соединения в OM.

Допустим, у нас с вами есть сдельная оплата труда. Это наиболее типичный пример, где можно воспользоваться внешними объектами. Мы сделали свою табличку для хранения номеров бригад. Хотим теперь сделать связь оргединицы или штатной должности с бригадой. Вопрос целесообразности не обсуждаем, так как есть еще несколько вариантов, как можно сделать учет бригад. Мы используем это для примера.

Создаем табличку, где будут храниться бригады:

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

Ракурс T777O

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

Ракурс T77EO

Обратите внимание на 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. Сделаем внешнее соединение штатной должности с нашим объектом.

Добавляем подтип для ИТ1001 в V_778U
Создаем вид соединения для ИТ1001 в T778V
Разрешаем соединение со штатной должностью

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

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

Помните, скидки не вечны!