Введение
Программа ODTF_REPL_CC используется для передачи центров затрат из SAP ERP CO в Employee Central, что включает следующие данные: уникальный код центра затрат (т.е. с кодом контроллинговой единицы), краткий код центра затрат, дата начала действия, статус, имя, описание, юридическое лицо (т.н. балансовая единица) и руководитель центра затрат.[1] [2]
В этой статье мы детально опишем возможности по передаче поля «Руководитель центра затрат».
Но прежде чем мы перейдем к статье, я хочу поблагодарить Ольгу Беляеву за помощь с ABAP на проекте и проверку программного кода, которым мы делимся в этой статье.
Поле «Руководитель центра затрат»
В модуле SAP ERP Controlling руководитель центра затрат хранится в таблице CSKS в поле VERAK_USER «Ответственный пользователь», как показано на Рисунке 1.
В модуле Employee Central руководитель центра затрат хранится в MDF-объекте CostCenter в стандартном поле costCenterManager, как показано на Рисунке 2.
Опции для определения руководителей центров затрат
Как показано на Рисунке 3, программа ODTF_REPL_CC предоставляет следующие четыре опции для оценки UserID руководителя центра затрат:
✓ Оставить UserID пустым
✗ Считать UserID из поля VERAK_USER «Ответственный пользователь»
✗ Считать UserID из поля VERAK «Ответственный»
✓ Установить UserID при помощи BAdI ODTF_CO_REPL_IDOC_COST_CENTERS
Опция 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 при создании и изменении мест возникновений затрат.
* Внешний параметр 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.
Выводы
Автоматическая передача руководителей центров затрат возможна только с помощью BAdI, только если инфотип 0000 синхронизирован с Employee Central и только если табельные номера руководителей центров затрат хранятся в самих центрах затрат в SAP HCM.
Список литературы
Латышенко В. В. 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).
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).
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.
mikleh
Интересно, существует ли на свете тиражный программный продукт, который был бы спроектирован или исполнен еще хуже, чем SAP R/3?
Latyshenko Автор
Добрый день!
На свете чего только не бывает :)
Однако нужно признать, что сап хорошо задокументировал свои решения, и это дает шанс повысить качество внедряемых решений.