Введение

Программа ODTF_REPL_CC используется для передачи центров затрат из SAP ERP CO в Employee Central, что включает следующие данные: уникальный код центра затрат (т.е. с кодом контроллинговой единицы), краткий код центра затрат, дата начала действия, статус, имя, описание, юридическое лицо (т.н. балансовая единица) и руководитель центра затрат.[1] [2]

В этой статье мы детально опишем возможности по передаче поля «Руководитель центра затрат».

Но прежде чем мы перейдем к статье, я хочу поблагодарить Ольгу Беляеву за помощь с ABAP на проекте и проверку программного кода, которым мы делимся в этой статье.

Поле «Руководитель центра затрат»

В модуле SAP ERP Controlling руководитель центра затрат хранится в таблице CSKS в поле VERAK_USER «Ответственный пользователь», как показано на Рисунке 1.

Рисунок 1. Создание центра затрат в транзакции KS01 модуля SAP ERP C
Рисунок 1. Создание центра затрат в транзакции KS01 модуля SAP ERP C

В модуле Employee Central руководитель центра затрат хранится в MDF-объекте CostCenter в стандартном поле costCenterManager, как показано на Рисунке 2.

Рисунок 2. Создание центра затрат с помощью средства «Управлять данными» в модуле Employee Central
Рисунок 2. Создание центра затрат с помощью средства «Управлять данными» в модуле Employee Central

Опции для определения руководителей центров затрат

Как показано на Рисунке 3, программа ODTF_REPL_CC предоставляет следующие четыре опции для оценки UserID руководителя центра затрат:

  1. Оставить UserID пустым

  2. Считать UserID из поля VERAK_USER «Ответственный пользователь»

  3. Считать UserID из поля VERAK «Ответственный»

  4. Установить UserID при помощи BAdI ODTF_CO_REPL_IDOC_COST_CENTERS

Рисунок 3. Опции для оценки UserID руководителя центра затрат
Рисунок 3. Опции для оценки UserID руководителя центра затрат

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

Опции 2 и 3 никогда не используются, поскольку ни VERAK_USER, ни, тем более, VERAK не подходит для поля UserID в Employee Central. Таблица 1 обобщает различия между полем UserID в модуле Employee Central и полем VERAK_USER в модуле SAP ERP Controlling.

Таблица 1. Различия между полем VERAK_USER «Ответственный пользователь» в системе SAP ERP и полем costCenterManager «Руководитель центра затрат» в модуле Employee Central

Поле VERAK_USER таблицы CSKS в системе SAP ERP

Поле costCenterManager объекта CostCenter в модуле Employee Central

Значение поля – это имя SAP-пользователя длиной не более 12 символов как в транзакции SU01 в SAP ERP (напр., CGRANT)

Значение поля – это идентификатор UserID, который соответствует табельному номеру в SAP HCM (напр., 00012345)1

Поле не проверяет присвоение SAP-пользователя табельному номеру.2 Более того, поле может независимым от времени3

Поле зависит от времени и проверяет, активен ли сотрудник в Employee Central на дату начала действия соответствующей записи в объекте CostCenter

1 Подробности о соответствии идентификатора UserID в модуле Employee Central табельному номеру в SAP HCM см. в справочном руководстве Employee Central Core Hybrid: Handling Employee Identifiers. 2 SAP-пользователь присваивается табельному номеру в инфотипе 0105 в подтипе 0001. На одну дату SAP-пользователь может быть присвоен только одному табельному, и наоборот. 3 Транзакция OKEH в модуле SAP CO показывает, какие поля места возникновения затрат зависят от времени, а какие нет

Передача руководителей центров затрат

Опция 4 с использованием BAdI – это единственный способ передать руководителя центра затрат, определенного на основании поля VERAK_USER в таблице CSKS, SAP-пользователя в инфотипе 0105 подтипе 0001 и, наконец, статуса занятости в инфотипе 0000, синхронизированного между Employee Central и SAP HCM. Особенно важно для этой опции развернуть интеграцию в SAP HCM, а не в SAP CO, так как определение идентификатора руководителя центра затрат требует актуальные данные по кадровым мероприятиям.

Рисунок 4 демонстрирует данные, требуемые для оценки идентификатора UserID руководителя центра затрат, и последующую передачу вычисленного значения из модуля SAP HCM через систему SAP Cloud Integration в модуль Employee Central. Передача данных инициируется указателями изменений ODTF_CCTR при создании и изменении мест возникновений затрат.

Рисунок 4. Последовательность определения и передачи руководителя центра затрат из модуля SAP HCM в модуль Employee Central
Рисунок 4. Последовательность определения и передачи руководителя центра затрат из модуля SAP HCM в модуль Employee Central

* Внешний параметр PERSON_RESP_TARGET_FIELD используется для сопоставления поля ASS_MGR_EE_TEXT в IDoc ODTF_CCTR в SAP HCM с полем costCenterManager in MDF-объекте CostCenter в Employee Central. Подробности о данном сопоставлении см. в справочном руководстве Replicating Cost Centers from SAP ERP to Employee Central Using SAP Cloud Platform Integration as the Middleware, § 5.3.5 Configuring the Integration Flow for Cost Center Replication, стр. 29

Программный код 1 демонстрирует пример определения идентификатора UserID руководителя центра затрат, используя поле VERAK_USER в таблице CSKS. Данный код предполагает, что поле VERAK_USER не зависит от времени и содержит актуального SAP-пользователя руководителя, инфотип 0105 подтип содержит актуальную информацию о SAP-пользователях табельных номеров, даты приема и увольнения в инфотипе 0000 синхронизированы с Employee Central.

Код использует поле VERAK_USER для получения PERNR и добавляет PERNR в IDoc с даты, с которой табельный номер является активным.

Программаный код 1. Определение идентификатора руководителя центра затрат, используя BAdI ODTF_CO_REPL_IDOC_COST_CENTERS

  METHOD if_odtf_co_repl_idoc_cost_cent~modify_cost_center_extractor.
    DATA:
      lt_p0000      TYPE STANDARD TABLE OF p0000,
      ls_p0000      TYPE p0000,
      lv_pernr      TYPE pernr_d,
      lv_start_old  TYPE datum,
      lv_start_new  TYPE datum.
    LOOP AT cs_cost_centers_idoc-cost_centre ASSIGNING FIELD-SYMBOL(<ls_cost_centre>).
      LOOP AT <ls_cost_centre>-cost_centre_attributes 
        ASSIGNING FIELD-SYMBOL(<ls_cost_centre_attributes>).
        CLEAR: lv_pernr, lv_start_new, lv_start_old.
        CALL FUNCTION 'ODTF_CC_GET_PERNR_FOR_USER'
          EXPORTING
            user  = <ls_cost_centre_attributes>-ass_mgr_ee_user_account_id
          IMPORTING
            pernr = <ls_cost_centre_attributes>-ass_mgr_ee_text.
        IF sy-subrc <> 0.
          CLEAR <ls_cost_centre_attributes>-ass_mgr_ee_text.
        ELSE.
          WRITE <ls_cost_centre_attributes>-ass_mgr_ee_text TO lv_pernr.
          lv_start_old = <ls_cost_centre_attributes>-validity_period_start_date.
          READ TABLE lt_p0000 TRANSPORTING NO FIELDS WITH KEY pernr = lv_pernr.
          IF sy-subrc = 4.
            CALL FUNCTION 'HR_READ_INFOTYPE'
              EXPORTING
                tclas           = 'A'
                pernr           = lv_pernr
                infty           = '0000'
                begda           = '19000101'
                endda           = '99991231'
              TABLES
                infty_tab       = lt_p0000
              EXCEPTIONS
                infty_not_found = 1
                invalid_input   = 2
                OTHERS          = 3.
            IF sy-subrc <> 0.
              CLEAR <ls_cost_centre_attributes>-ass_mgr_ee_text.
            ENDIF.
          ENDIF.
          LOOP AT lt_p0000 TRANSPORTING NO FIELDS
            WHERE pernr = lv_pernr AND stat2 = '3'
            AND begda <= lv_start_old AND endda >= lv_start_old.
          ENDLOOP.
          IF sy-subrc <> 0.
            CLEAR <ls_cost_centre_attributes>-ass_mgr_ee_text.
            SORT lt_p0000 DESCENDING BY pernr begda.
            LOOP AT lt_p0000 INTO ls_p0000
             WHERE pernr = lv_pernr AND stat2 = '3'
             AND begda >= lv_start_old
             AND endda <= <ls_cost_centre_attributes>-validity_period_end_date.
              lv_start_new = ls_p0000-begda.
            ENDLOOP.
            IF sy-subrc = 0.
              <ls_cost_centre_attributes>-validity_period_start_date = lv_start_new.
              APPEND <ls_cost_centre_attributes> TO <ls_cost_centre>-cost_centre_attributes.
              <ls_cost_centre_attributes>-validity_period_start_date = lv_start_old.
              <ls_cost_centre_attributes>-validity_period_end_date = lv_start_new - 1.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDMETHOD.

Слабым местом в данной интеграции является возможность присвоить новый табельный номер существующему SAP-пользователю без соответствующих изменений в месте возникновения затрат, что, в свою очередь, не создает указателя изменений ODTF_CCTR, а следовательно, и не инициирует передачи нового идентификатора существующего менеджера.

Эту проблему можно решить сохранением табельного номера в МВЗ. Так актуализация табельного номера, связанного с SAP-пользователем в поле VERAK_USER, создаст указатель изменений с типом сообщений ODTF_CCTR.

Рисунок 5 демонстрирует, как клиентская программа, обновляющая табельные номера в поле VERAK, встраивается в дельта-репликацию. Подробнее об указателях изменений с типом сообщений ODTF_CCTR см. в справочном руководстве Replicating Cost Centers from SAP ERP to Employee Central Using SAP Cloud Platform Integration as the Middleware, § 7.4 Configuring and Running Delta Replication, стр. 48.

Рисунок 5. Схема интеграционного потока для передачи изменений в местах возникновения затрат
Рисунок 5. Схема интеграционного потока для передачи изменений в местах возникновения затрат

Выводы

Автоматическая передача руководителей центров затрат возможна только с помощью BAdI, только если инфотип 0000 синхронизирован с Employee Central и только если табельные номера руководителей центров затрат хранятся в самих центрах затрат в SAP HCM.

Список литературы

  1. Латышенко В. В. The Core Hybrid integration model on the example of Cost Centers [Электронный ресурс] // SAPinsider. 2020. URL: https://www.sapinsideronline.com/wp-content/uploads/2020/12/The-Core-Hybrid-Integration-Model-on-the-Example-of-Cost-Centers.pdf (Дата обращения: 10.04.2022).

  2. Replicating Cost Centers from SAP ERP to Employee Central Using SAP Cloud Integration as the Middleware. Document Version: 1H 2022 – 2022-04-07 [Электронный ресурс]. URL: https://help.sap.com/doc/6e943d18c1f347b88e91b1e605d502e2/latest/en-US/SF_ERP_EC_CC_HCI_en-US.pdf (Дата обращения: 10.04.2022).

  3. Employee Central Core Hybrid: Handling Employee Identifiers. Document Version: 1.5 [Электронный ресурс]. URL: https://d.dam.sap.com/a/Q3ABoSy/IDP Employee Central Core Hybrid - Employee Identifiers V1.6.pdf (Дата обращения: 10.04.2022).


[1] Центры затрат в русском переводе SAP ERP называются местами возникновения затрат, сокращенно МВЗ
[2] Если есть выбор передачи центров затрат либо из SAP CO, либо из SAP HCM, то выбор SAP HCM является более предпочтительным, чтобы обеспечить одинаковый список центров затрат в SAP HCM и Employee Central.

Комментарии (2)


  1. mikleh
    11.04.2022 10:36
    +1

    Интересно, существует ли на свете тиражный программный продукт, который был бы спроектирован или исполнен еще хуже, чем SAP R/3?


    1. Latyshenko Автор
      11.04.2022 15:54
      +1

      Добрый день!

      На свете чего только не бывает :)

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