Практическая модель чтения через ABAP SQL: клиент, выбор полей, соединения, агрегаты и проверка семантики до переноса результата в финансовую логику.
3 мин чтения·База знаний
Ревизия 2Общие понятияЧастичное покрытиеКонтекст: CTX-GENERALдокументальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.
ABAP SQL - язык доступа ABAP-программ к данным стандартной базы текущей AS ABAP. SQL-операторы обрабатывает ABAP SQL engine: он может передавать запрос интерфейсу базы данных или выполнять поддерживаемые операции над буферизованными таблицами и внутренними таблицами. Поэтому ABAP SQL - не просто переносимый текст SQL: поведение включает механизмы платформы ABAP, а доступные выражения зависят от версии языка.
Для финансовой выборки сначала задайте смысл результата: что представляет одна строка, какие ключи её различают, на каком уровне допустимо суммирование и какие периоды, ledger, компания, валюта и статус включены. Только после этого выбирайте поля, соединения и агрегаты. Если сначала агрегировать строки разной природы, потеря исходной детализации может стать необратимой.
Для клиент-зависимых источников ABAP SQL по умолчанию применяет неявную обработку клиента текущего входа. При соединении таких источников платформа согласует клиентские колонки. Не следует добавлять клиентскую колонку как обычное условие или самостоятельно отключать стандартную защиту без конкретного документированного основания. Клиент - только одна граница области данных: компания, ledger, год, период, валюта и полномочия всё равно требуют явного отбора в соответствии с задачей.
Проверьте также, не читается ли источник через CDS entity с собственной семантикой и контролями доступа. Наличие доступа к таблице или view не доказывает, что выборка соответствует отчёту или учетной политике.
Используйте явный список полей и условия с host variables, чтобы контракт чтения был виден в коде. Для join заранее определите ключ соответствия и ожидаемую кратность. Соединение заголовка и строк обычно должно сохранять уровень детализации строк; join с историей статусов, текстами или несколькими назначениями может размножить сумму. Перед агрегированием сравните число строк и суммы до и после join на синтетическом примере или в тестовой системе.
Считайте результат запроса отдельной моделью данных. SQL NULL, начальное значение ABAP и отсутствие строки - разные состояния; учитывайте операторы и выражения, которыми они обрабатываются. Для агрегатов документируйте уровень группировки и валюту/единицу измерения: сумма разных валют не становится осмысленной от того, что запрос компилируется.
Переносите подходящий фильтр и проекцию в запрос, избегайте чтения всех строк с последующей фильтрацией в приложении. Для больших выборок обрабатывайте данные пакетами только при корректном порядке и устойчивом ключе продолжения. OFFSET без детерминированного порядка и ключа может пропускать или повторять строки при изменении набора.
Измеряйте запрос на репрезентативных данных целевой системы: план, объём, селективность, буферизация и индексы зависят от версии и конкретной схемы. Это руководство не содержит замеров или выполнения в SAP runtime.
Зафиксировать уровень детализации результата и ключи.
Проверить клиент, организационные ограничения и авторизационную модель источника.
Проверить кратность каждого join и влияние на суммы.
Сверить периоды, ledger, валюты, знаки и обработку пустых значений.
Сопоставить итог с независимым контрольным расчётом на фиксированном наборе.
Проверить синтаксис и доступность конструкций в целевом релизе и языковой версии.
Это справочная модель проектирования, а не готовый запрос к конкретной системе. Здесь не проверялись клиентская конфигурация, CDS-авторизации, объёмы таблиц или результат в SAP runtime.
ABAP SQL lets ABAP programs access data in the standard database of the current AS ABAP. The ABAP SQL engine can pass a statement to the database interface or execute supported operations over buffered tables and internal tables. Its behavior includes ABAP platform mechanisms, and available expressions depend on the language version.
Start with the meaning of the result: what one row represents, which keys distinguish it, at what level aggregation is valid, and which periods, ledger, company, currency, and status are in scope. Then choose fields, joins, and aggregates. Aggregating rows with different meanings can irreversibly discard detail.
For client-dependent sources, ABAP SQL applies implicit handling of the current logon client by default. Joins between such sources also align their client columns. Do not treat client as an ordinary filter or disable platform handling without a specific documented reason. Client is only one boundary: company, ledger, year, period, currency, and authorization still require explicit consideration.
Check whether a source is a CDS entity with its own semantics and access controls. Access to a table or view alone does not prove that a query matches a report or accounting policy.
Use an explicit field list and host variables so the read contract is visible. Define the join key and expected cardinality before joining. A join to status history, text, or multiple assignments may multiply amounts. Compare row counts and totals before and after joins on synthetic data or in a test system.
Treat query output as a separate data model. SQL NULL, an initial ABAP value, and a missing row are different states. Document grouping grain and currency/unit for aggregates; summing different currencies does not become meaningful because the query compiles.
Push suitable filters and projections into the query rather than reading every row and filtering in application code. For large reads, batching is safe only with a stable key and deterministic order. OFFSET without those properties can skip or repeat rows as the set changes.
Measure on representative data in the target system. Plans, volumes, selectivity, buffering, and indexes depend on the release and schema. No SAP runtime measurements were performed for this article.
Check client, organizational limits, and source authorization model.
Verify join cardinalities and their effect on amounts.
Reconcile periods, ledger, currencies, signs, and empty-value handling.
Compare totals with an independent control calculation on a fixed dataset.
Check syntax and feature availability for the target release and language version.
This is a design reference, not a query for a specific system. Client configuration, CDS authorizations, table volumes, and SAP runtime results were not checked.