Работа с отчетами в платформе 1С Предприятие невозможна без глубокого понимания механизма формирования временных таблиц. Новички часто путаются в том, как правильно структурировать данные перед выводом на экран или в печатную форму. Выбор правильной группировки — это фундамент, на котором строится логика всего отчета.

В языке запросов 1С существуют два основных подхода к агрегации данных: использование ключевого слова ПО в основном теле запроса и применение конструкции ИТОГЫ. Оба метода имеют свои сценарии использования и влияют на производительность системы по-разному.

Если вы планируете создавать сложные аналитические отчеты, вам необходимо досконально разобраться в синтаксисе ОПРЕДЕЛИТЬ. Неправильное использование параметров группировки может привести к тому, что отчет покажет некорректные суммы или вообще не выполнится из-за синтаксической ошибки.

Базовая группировка с использованием ключевых слов

Самый простой способ объединить строки выборки — использовать ключевое слово ПО в конце инструкции ВЫБРАТЬ. Этот метод напоминает стандартный SQL-запрос с GROUP BY. Вы перечисляете поля, по которым нужно сгруппировать записи, и применяете агрегатные функции к остальным полям.

Например, если вам нужно получить обороты товаров по складам, вы группируете по ссылке на Склад. При этом все остальные поля, не участвующие в группировке и не подпадающие под агрегатные функции (такие как СУММА, МИНИМУМ), должны быть исключены из выборки или также добавлены в выражение ПО.

Это удобно для простых списков, но ограничивает возможности многоуровневой аналитики. Для более сложных задач лучше использовать механизм ИТОГЫ.

⚠️ Внимание: При использовании агрегатных функций в запросе без явного указания ПО или ИТОГЫ, система попытается сгруппировать данные по всем выбранным полям, что может привести к отсутствию агрегации вообще или ошибке выполнения.

📊 Какой метод группировки вы используете чаще?
ПО (классический)
ИТОГЫ (расширенный)
Смешанный
Только СКД

Конструкция ИТОГЫ и определение уровней

Ключевое слово ИТОГЫ открывает доступ к мощному инструменту аналитики, позволяющему получать промежуточные итоги на разных уровнях иерархии. Синтаксис начинается со слова ОПРЕДЕЛИТЬ, за которым следуют параметры группировки.

Вы можете явно указать, по каким полям считать итоги. Например, ИТОГЫ ПО Контрагент, Период создаст строки с общими суммами для каждого контрагента и отдельно для каждого периода. Если же указать ИТОГЫ ПО АВТОПОДБОР, система сама решит, какие уровни детализации необходимы, основываясь на полях выборки.

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

☑️ Проверка настроек ИТОГОВ

Выполнено: 0 / 4

Использование ИТОГЫ позволяет избежать множественных проходов по данным. Вместо того чтобы делать несколько запросов для получения общего итога и итогов по подразделениям, вы получаете всё в одном проходе. Это существенно экономит ресурсы сервера.

Работа с секциями и параметрами SECTION

Для управления тем, какие именно строки попадут в результат, используется ключевое слово СЕКЦИИ. Оно позволяет фильтровать уровни итогов, оставляя только нужные. Без этого параметра запрос может вернуть избыточное количество строк с промежуточными расчетами.

Синтаксис выглядит следующим образом: СЕКЦИИ ПО Контрагент. Это означает, что в результат попадут только детальные строки и строки итогов по контрагентам, но, например, общий итог по всем контрагентам (если он был бы рассчитан) может быть исключен, если не указан явно.

Вы можете комбинировать несколько полей в секциях, создавая сложные структуры отчета. Например, СЕКЦИИ ПО Номенклатура, Склад обеспечит наличие итогов по каждой номенклатуре и по каждому складу в отдельности.

Ключевое слово Назначение Влияние на производительность
ПО Простая группировка "плоских" данных Среднее
ИТОГЫ Многоуровневая агрегация и расчеты Высокое (зависит от кол-ва уровней)
СЕКЦИИ Фильтрация уровней итогов Низкое (фильтрация результата)
РАЗРЕШЕННЫЕ Ограничение доступных полей итогов Низкое

⚠️ Внимание: Если вы используете СЕКЦИИ, убедитесь, что поля, указанные в секциях, действительно присутствуют в определении ИТОГЫ. В противном случае запрос завершится с ошибкой синтаксиса.

Параметр РАЗРЕШЕННЫЕ для оптимизации

Иногда механизм ИТОГЫ рассчитывает больше вариантов группировки, чем требуется для конкретного отчета. Чтобы избежать лишних вычислений, используется параметр РАЗРЕШЕННЫЕ. Он явно указывает системе, по каким полям допустимо делать разрезы.

Например, если вам нужны итоги только по Организации и Валюте, вы пишете: РАЗРЕШЕННЫЕ Организация, Валюта. Это запрещает системе считать итоги по другим полям, даже если они есть в выборке, что может ускорить выполнение запроса на больших объемах данных.

Этот параметр особенно полезен в системах с высокой нагрузкой, где каждый миллисекунд выполнения запроса имеет значение. Ограничение пространства перебора для агрегации снижает нагрузку на процессор СУБД.

Особенности работы РАЗРЕШЕННЫЕ

Параметр РАЗРЕШЕННЫЕ работает только в связке с ИТОГЫ. Если вы используете простое ПО, этот параметр игнорируется или вызывает ошибку. Всегда проверяйте документацию по конкретной версии платформы 1С, так как поведение оптимизатора может меняться.

Использование РАЗРЕШЕННЫЕ также помогает избежать ситуации, когда пользователь отчета случайно получает данные в разрезе, который не должен видеть из соображений безопасности или логики бизнеса.

Агрегатные функции и вычисляемые поля

Внутри запросов с группировкой активно применяются агрегатные функции. Самые популярные из них: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ. Эти функции применяются к полям, которые не вошли в группу.

Вы можете создавать вычисляемые поля прямо в выражении группировки. Например, рассчитать маржу как разницу между суммой продажи и суммой себестоимости. Для этого используются арифметические операторы внутри агрегатной функции или после неё.

ВЫБРАТЬ

Номенклатура,

СУММА(СуммаПродажи) КАК Сумма,

СУММА(СуммаПродажи - Себестоимость) КАК Маржа

ИЗ

РегистрНакопления.Продажи

ИТОГЫ ПО

Номенклатура

Важно корректно именовать такие поля, используя конструкцию КАК. Это делает код читаемым и позволяет легко обращаться к этим полям в последующих запросах или в СКД (Системе Компоновки Данных).

💡

При расчете сложных формул в итогах (например, средний чек) лучше вычислять их во внешнем запросе, после того как получены суммы и количества. Это упрощает отладку логики.

Частые ошибки и отладка запросов

Одной из самых распространенных ошибок является попытка выбрать поле, которое не участвует в группировке и не агрегировано. Система 1С строго следит за этим правилом и выдаст ошибку: "Неверное использование агрегатной функции" или "Поле не сгруппировано".

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

Для отладки сложных запросов с ИТОГАМИ рекомендуется использовать консоль запросов. Там можно пошагово включать и отключать уровни итогов, наблюдая за изменением структуры результирующего набора данных.

⚠️ Внимание: В конфигурациях на базе БСП (Библиотека Стандартных Подсистем) часто используются служебные поля для группировок. Будьте осторожны при копировании запросов из старых отчетов — структура регистров могла измениться.

💡

Правильная группировка в 1С — это баланс между детализацией данных и производительностью системы. Используйте ИТОГЫ для аналитики и ПО для простых списков.

Интеграция с Системой Компоновки Данных (СКД)

Хотя запросы можно писать вручную, в современных конфигурациях 1С чаще используется СКД. В ней группировки настраиваются визуально, но под капотом система генерирует те же самые конструкции ИТОГЫ и СЕКЦИИ.

Понимание того, как работает группировка на уровне запроса, критически важно для настройки СКД. Вы можете создавать вычисляемые поля в настройках отчета, которые будут использовать логику, описанную выше.

Если стандартных возможностей СКД недостаточно, вы можете написать свой макет компоновки данных, внедрив туда оптимизированный ручной запрос с нужной структурой итогов. Это дает максимальную гибкость и контроль над выводом.

В чем разница между ПО и ИТОГЫ?

ПО используется для простой группировки "плоского" набора данных, аналогично SQL GROUP BY. ИТОГЫ — это расширенный механизм 1С, позволяющий получать многоуровневые промежуточные итоги, добавлять вычисляемые поля итогов и гибко управлять структурой отчета через СЕКЦИИ и РАЗРЕШЕННЫЕ.

Можно ли использовать ИТОГЫ без СЕКЦИЙ?

Да, можно. Если не указать СЕКЦИИ, то в результат выборки попадут все рассчитанные уровни итогов, включая общий итог (если он предусмотрен) и все промежуточные уровни. Это может привести к дублированию данных или выводу служебных строк, которые не нужны пользователю.

Как ускорить запрос с группировкой?

Используйте параметр РАЗРЕШЕННЫЕ для ограничения количества рассчитываемых итогов. Также убедитесь, что по полям группировки и отбора существуют индексы в базе данных. Избегайте группировки по полям с высокой кардинальностью (уникальными значениями), если это не требуется логикой отчета.

Что такое АВТОПОДБОР в ИТОГАХ?

ИТОГЫ ПО АВТОПОДБОР — это режим, при котором система 1С автоматически определяет поля для группировки на основе полей, выбранных в секции ВЫБРАТЬ. Это удобно для быстрых запросов, но менее гибко и потенциально менее производительно, чем явное указание полей.