ПРОДУКТЫ И ПЕРЕХОДЫP1L2

SAP Journal в EDWH: ключи, валюты, история и сверка

Контракт извлечения строк журнала, устойчивые ключи ACDOCA API, версии поздних корректировок и сверка агрегатов без предположений о CDC.

Ревизия 4 Сравнение контекстов Частичное покрытие Контекст: CTX-S4-PUBLICКонтекст: CTX-S4-ONPREM документальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

Перед передачей финансовых строк в EDWH зафиксируйте контракт чтения: источник и выпуск, уровень детализации строки, ключ, ledger, компанию, год, временную семантику, валютный тип, фильтр извлечения, правила повторной загрузки и сверки. Само название Universal Journal не задаёт готовый контракт для любого API, представления или выпуска SAP.

Сначала зафиксируйте уровень детализации и ключ#

Для line-item чтения G/L Account Line Items API документация SAP приводит среди ключевых полей AccountingDocument, CompanyCode, FiscalYear, Ledger, LedgerGLLineItem и SourceLedger. Она отдельно уточняет, что AccountingDocumentItem (ACDOCA-BUZEI) используется для ассоциаций с представлениями BSEG. Это предупреждение против выбора поля BUZEI как универсального идентификатора строки любого ledger-view сценария.

Ключ нужно брать из контракта выбранного released API или CDS view, затем проверять на целевом выпуске и реальных данных. Не удаляйте ledger, компанию, финансовый год или источник из ключа при переносе в DWH, если они различают записи источника. Храните исходный ключ целиком либо его детерминированное представление с возможностью восстановить поля.

Ограничьте извлечение#

SAP предупреждает, что API чтения строк не предназначен для полной выгрузки огромного Universal Journal. Для line-item уровня документация рекомендует сильную фильтрацию и явное включение ключевых полей; примеры часто используют агрегацию, когда нужна аналитическая сумма, а не детализация каждой строки.

Поэтому отдельно опишите initial load и delta-процесс. Укажите допустимый диапазон ledger, компании, финансового года, периода и ключа продолжения. Не называйте процесс CDC, change data capture или гарантированно полным, пока такая возможность не подтверждена для выбранного интерфейса. Если интерфейс не даёт надёжного маркера изменений, спроектируйте повторное чтение контролируемого окна и сверку его результата.

Разделяйте дату проводки и момент знания#

Дата проводки отвечает за отнесение суммы к финансовому периоду. observed_at в EDWH фиксирует, когда конкретная версия строки стала доступна вашему процессу извлечения. Это поле наблюдения DWH, а не вывод о наличии такого timestamp в ACDOCA.

При поздней корректировке сохраняйте прежнюю версию строки и добавляйте следующую с новым временем наблюдения. Тогда запрос «что было известно на дату закрытия» можно отделить от запроса «какая версия известна сейчас». Повторная загрузка того же ключа с тем же содержимым должна быть идемпотентной; конфликтующее содержимое с тем же идентификатором версии должно быть ошибкой, а не молчаливой заменой.

Не складывайте разные валютные оценки#

Universal Journal поддерживает параллельные валюты, настраиваемые в контексте ledger и компании. Поэтому сумма должна проходить через EDWH вместе с валютой и типом валюты, а агрегат должен сохранять валютный контекст. Совпадение числовой суммы в разных валютах не означает, что строки можно объединять.

Перед агрегацией определите целевую валюту, источник курса, дату курса, точность и правило округления. Эти параметры относятся к отдельному преобразованию. Нельзя вывести их только из того, что строки находятся в одной таблице источника.

Сверяйте детали и агрегаты#

Практический контроль строится на двух уровнях:

  1. Построчная сверка по контрактному ключу: отсутствующие, неожиданные, повторные и изменившиеся строки.
  2. Агрегатная сверка по ledger, компании, финансовому году/периоду, счёту, валютному типу и валюте. Сравнивайте количества строк и суммы с явно согласованными фильтрами.

Нулевой итог по всему набору не доказывает полноту: пропуск и лишняя строка могут взаимно компенсироваться. Сначала сравните состав ключей, затем суммы по каждой сопоставимой группе. Зафиксируйте снимок входа, версию контракта, параметры фильтра, момент знания и ожидаемые отличия.

Варианты извлечения и доступность дельты#

Для SAP-источника сначала проверьте поддерживаемый в целевой редакции интерфейс. Operational Data Provisioning (ODP) предоставляет инфраструктуру извлечения и репликации для ABAP-приложений. В числе провайдеров SAP документирует DataSources/extractors, ABAP CDS views и SAP Landscape Transformation Replication Server (SLT). Для поддерживаемых delta-процедур ODP записывает изменения в Operational Delta Queue (ODQ), откуда их забирают подписчики. Это описание инфраструктуры, а не утверждение, что любой CDS, API или SLT-сценарий доступен в каждом продукте.

Для отдельных CDS views возможность полного или delta-извлечения задаётся публикацией и метаданными конкретного view. Наличие CDS API само по себе не доказывает, что view подходит для репликации. Более того, для пользовательского CDS view, созданного через Data Extraction scenario в SAP S/4HANA Cloud Public Edition, SAP указывает поддержку только полной загрузки, без delta. Не переносите поддержку дельты с другого view, продукта или выпуска.

Разделяйте интерфейс чтения детальных строк и интерфейс извлечения для аналитики. API чтения строки журнала может иметь ограничения на объём и фильтрацию; аналитический экстрактор или ODP-провайдер имеет отдельный контракт. До проектирования загрузки зафиксируйте доступность механизма, полный ключ, исходную дату и время изменения, правила удаления, порядок сообщений, срок хранения delta-состояния и процедуру начальной загрузки.

Контракт доставки в Financial DWH#

Целевой DWH должен сохранять ключ источника полностью и обеспечивать повторное применение одной и той же поставки без двойного учёта. Для этого удобно отдельно хранить исходное событие, номер или время наблюдаемой версии, идентификатор загрузки и результат применения. Если источник прислал позднюю коррекцию, сохраняйте её как новую версию и пересчитывайте целевое представление по объявленному правилу. Не называйте процесс exactly once только потому, что очередь или API присылает последовательный пакет: повторная доставка и восстановление после сбоя требуют идемпотентности на стороне приёмника.

Контроль полноты должен сверять не только общую сумму. Сравните количество и состав ключей, затем суммы по ledger, компании, году, периоду и типу валюты. Явно обработайте физическое удаление, отмену, сторно и изменение задним числом. Если интерфейс не предоставляет маркер изменения или семантику удаления, нельзя считать инкрементальную загрузку полной без отдельного восстановления, сканирования или иной проверяемой процедуры.

Здесь описана граница между SAP-источником и инженерной моделью финансового хранилища. Отдельный сайт Financial EDWH посвящён моделям, загрузкам, истории и сверкам на стороне хранилища; эта страница ограничена выбором SAP-интерфейса и контрактом передачи. Ни один из сайтов не утверждает, что связанная промышленная интеграция уже настроена.

Порядок сообщений и продвижение загрузки#

Если интерфейс доставляет несколько версий одной строки, применяйте их по маркеру версии источника или по иной документированной последовательности. Более старая версия, пришедшая после новой, не должна молча перезаписать актуальное состояние; сохраните её как поздно доставленное событие и отправьте на повторную обработку либо карантин согласно контракту. Время поступления в DWH само по себе не определяет порядок изменений в источнике.

Показывайте наблюдаемые этапы отдельно: прочитано из источника, принято в landing, применено, отклонено, повторно обработано и помещено в карантин. Для отклонения или карантина сохраняйте идентификатор поставки, ключ строки, версию, причину и ссылку на исходное сообщение. Продвигайте checkpoint только после долговечной фиксации соответствующих данных и результата применения; иначе сбой между фиксацией checkpoint и записью данных может пропустить изменения. При повторном запуске тот же пакет должен безопасно пройти снова.

Границы локального примера#

В SAP-лаборатории есть независимая Python-модель строк с ключом ledger/company/year/document/ledger-item/source-ledger/currency-type. Она хранит версии неизменяемо, проверяет повторный импорт, позднюю корректировку, баланс документа по каждой валютной оценке и сверку агрегатов на синтетических данных. Это учебная модель контракта, а не эмуляция ACDOCA, SAP API, CDC или продуктивного DWH.

Официальные источники относятся к конкретным редакциям и интерфейсам S/4HANA Cloud и on-premise. Перед внедрением проверьте точный выпуск, доступность API/CDS, ограничения извлечения и полномочия в вашей системе. Реального SAP runtime здесь нет.

Связанные материалы#

Источники и документация

  1. SAP S/4HANA Cloud: G/L Account Line Items - Read (A2X) ↗
  2. SAP S/4HANA: Currencies Managed in Parallel in the Universal Journal ↗
  3. Operational Data Provisioning, SAP S/4HANA Cloud Public Edition 2608 ↗
  4. Data Extraction for Analytics, S/4HANA On-Premise 2025 FPS01 ↗
  5. Data Extraction with Custom CDS Views, SAP S/4HANA Cloud Public Edition ↗
  6. Data Integration and CDS Extraction Annotations, SAP S/4HANA Cloud Public Edition ↗

Источники нужны для самостоятельной проверки. Примеры и интерпретации на сайте могут быть учебными упрощениями.