Итоги в 1С 8.3: от группировок в отчёте до запроса
Содержание
Итоги в 1С — это суммы и количества по группам строк: по складу, контрагенту, счёту, месяцу. В стандартных отчётах они считаются автоматически, нужно лишь задать группировки в настройках. В своём отчёте итоги задают через ресурсы и структуру, а в запросе на встроенном языке — через ключевое слово ИТОГИ. Отдельная тема — пересчёт итогов регистров, когда отчёты начинают показывать неверные цифры.
Бухгалтер открывает оборотно-сальдовую ведомость и видит общую сумму, но без разбивки по субконто. Программист пишет запрос и получает плоскую таблицу вместо сгруппированной. Обе задачи — про одни и те же итоги, только с разных сторон. Разберём каждый случай с точными путями и примерами кода.
Пути указаны для «1С:Бухгалтерии» 3.0 и платформы 8.3 в интерфейсе «Такси». В «1С:ЗУП» 3.1 и «Управлении торговлей» 11 логика та же, отличаются только названия конкретных отчётов.
Где итоги уже посчитаны: стандартные отчёты
Большинство бухгалтерских итогов не нужно считать вручную — они есть в типовых отчётах.
Откройте Отчёты → Стандартные отчёты → Оборотно-сальдовая ведомость. Нажмите кнопку Показать настройки. На вкладке Группировка добавьте поля, по которым хотите видеть промежуточные итоги: субсчета, субконто, подразделения. По каждой группе 1С посчитает сальдо и обороты, а внизу выведет общий итог.
Так же устроены и другие отчёты раздела:
- 📊 Оборотно-сальдовая ведомость по счёту — итоги по аналитике одного счёта.
- 📑 Анализ счёта — обороты с корреспонденцией и итогами по субконто.
- 📈 Карточка счёта — движения с нарастающим итогом в последней колонке.
- 🧾 Универсальный отчёт — произвольные итоги по любому регистру или справочнику.
Если нужный разрез не выводится, проверьте на вкладке Отбор, не стоит ли там фильтр, и на вкладке Группировка — добавлено ли само поле аналитики.
Итог по группе показывается только тогда, когда группировка добавлена в настройки. Поэтому «нет итогов по складам» почти всегда означает, что поле Склад просто не включили в группировку.
Разберём на примере. Нужна оборотка по счёту 41 с разбивкой по складам и внутри — по номенклатуре. В настройках на вкладке Группировка добавляют два поля в таком порядке: сначала Склад, затем Номенклатура. Отчёт выдаст по каждому складу промежуточный итог (например, 1 250 000 руб.), под ним — строки товаров, а в самом низу общий итог по всем складам. Переставив поля местами, вы получите разбивку сначала по номенклатуре, а внутри — по складам. Порядок полей в группировке задаёт уровни итогов.
Группировки и промежуточные итоги в своём отчёте
Когда готового отчёта не хватает, строят отчёт на системе компоновки данных (СКД). Итоги там складываются из двух настроек — ресурсов и структуры.
Ресурс — это поле, которое суммируется. В конструкторе схемы компоновки на вкладке Ресурсы отметьте числовые поля и выберите для них функцию, обычно Сумма. Можно также Количество, Минимум, Максимум, Среднее.
Структура задаёт уровни группировки. На вкладке Настройки в дереве структуры добавьте группировки: например, Контрагент, внутри него Договор. По каждому уровню СКД автоматически подведёт итог отмеченных ресурсов, а наверху — общий итог отчёта.
Порядок настройки:
- В конструкторе запроса выберите нужные поля, включая суммируемое.
- На вкладке
Ресурсыотметьте это поле и функциюСумма. - В структуре добавьте группировки — от верхнего уровня к детальным.
- При необходимости включите в настройках пользователя флажок вывода общих итогов.
Готовый вариант отчёта пользователь дорабатывает без конфигуратора. В открытом отчёте нажмите Ещё → Изменить вариант отчёта — откроется та же структура с группировками и ресурсами, где можно переставить уровни или добавить новый итог.
Итоги в запросе на языке 1С: ключевое слово ИТОГИ
В коде итоги подводит секция ИТОГИ ... ПО в запросе. Она превращает плоскую выборку в иерархическую: сначала строки детализации, затем итоги по группам.
ВЫБРАТЬ
ТоварыНаСкладах.Склад КАК Склад,
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
ТоварыНаСкладах.КоличествоОстаток КАК Количество
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах
ИТОГИ
СУММА(Количество)
ПО
Склад,
Номенклатура
Разберём секцию ИТОГИ:
- после
ИТОГИперечисляют агрегатные функции —СУММА,КОЛИЧЕСТВО,МАКСИМУМ,МИНИМУМ,СРЕДНЕЕ; - после
ПОперечисляют поля-группировки в порядке вложенности; ПО ОБЩИЕдобавляет одну строку с общим итогом по всему результату.
Чтобы получить и общий итог, и разбивку, пишут так:
ИТОГИ
СУММА(Количество)
ПО
ОБЩИЕ,
Склад
Главная тонкость — как читать результат. Если обойти его обычным способом, итоги потеряются, вы получите только строки детализации. Иерархию раскрывает обход ПоГруппировкам:
Результат = Запрос.Выполнить();
ВыборкаПоСкладу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоСкладу.Следующий() Цикл
// ВыборкаПоСкладу.Количество — это итог по складу
ВыборкаТоваров = ВыборкаПоСкладу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаТоваров.Следующий() Цикл
// строки детализации внутри склада
КонецЦикла;
КонецЦикла;
Если обходить результат через ОбходРезультатаЗапроса.Прямой, секция ИТОГИ не сработает — выборка вернёт плоский список без итоговых строк. Это самая частая причина жалобы «написал ИТОГИ, а их нет».
У каждой строки группировочной выборки доступны и поля-измерения, и посчитанные ресурсы. То есть ВыборкаПоСкладу.Склад вернёт конкретный склад, а ВыборкаПоСкладу.Количество — итоговое количество по нему. Вложенные выборки получают из родительской методом Выбрать с тем же параметром обхода — так спускаются с уровня на уровень вплоть до строк детализации. Глубина вложенности равна числу полей в секции ПО.
Многоуровневые итоги и расшифровки без ошибок
Когда группировок несколько, в дело вступают дополнительные варианты секции ИТОГИ.
Итоги по периодам. Для разбивки по датам применяют конструкцию ПЕРИОДАМИ. Она добавляет строки даже за те дни или месяцы, где не было движений, — удобно для равномерных графиков:
ИТОГИ
СУММА(Сумма)
ПО
ДатаДокумента ПЕРИОДАМИ(МЕСЯЦ, &НачалоПериода, &КонецПериода)
Итоги по иерархии справочника. Если группировка идёт по иерархическому справочнику (например, группы номенклатуры), добавляют ТОЛЬКО ИЕРАРХИЯ или ИЕРАРХИЯ, а результат обходят через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией. Так итог посчитается и по папке-группе, а не только по конечным элементам.
Типичная ошибка в многоуровневых итогах — задвоение сумм в расшифровке. Возникает, когда к регистру присоединяют таблицу с несколькими строками на одну запись: одна проводка размножается, и СУММА считает её дважды. Проверка простая: сверьте общий итог запроса с итогом стандартного отчёта по тому же регистру. Если расходятся — ищите соединение «один ко многим» и либо агрегируйте подзапросом до соединения, либо используйте РАЗЛИЧНЫЕ.
Поле, по которому строится итог, должно присутствовать в списке выборки. Нельзя подводить ИТОГИ ... ПО Склад, если Склад не выбран в секции ВЫБРАТЬ — запрос вернёт ошибку.
Пересчёт итогов регистров, когда цифры «поехали»
У слова «итоги» в 1С есть второй смысл — служебные таблицы итогов регистров. Платформа хранит заранее посчитанные остатки и обороты, чтобы отчёты строились быстро. Если эти таблицы разошлись с реальными движениями, отчёты показывают неверные суммы, хотя документы в порядке.
Когда это случается:
- 🔁 правили или перепроводили документы в закрытых прошлых периодах;
- 💾 восстановили базу из резервной копии или перенесли данные;
- ⚡ было аварийное завершение работы во время проведения.
Лечится пересчётом итогов. Инструмент — стандартная обработка Управление итогами. Чтобы её открыть, включите команду «Все функции»: Главное меню → Сервис → Параметры и флажок Отображать команду «Все функции». После этого Главное меню → Все функции → Стандартные → Управление итогами.
В обработке по каждому регистру видно период рассчитанных итогов — дату, до которой итоги хранятся готовыми. Две основные операции:
Пересчитать— перестраивает таблицы итогов за выбранный период.Установить период расчёта итогов— сдвигает границу готовых итогов.
Пересчёт итогов — ресурсоёмкая операция. На большой базе она нагружает сервер и может идти долго. Сделайте резервную копию и запускайте в нерабочее время, когда пользователи не проводят документы. Прерывать процесс на середине не стоит.
В «1С:Бухгалтерии» есть и более мягкий сценарий: закрытие месяца
и операция Экспресс-проверка ведения учёта часто выявляют расхождения итогов и предлагают их перепровести без полного пересчёта.
Чтобы отчёты с итогами не тормозили
Скорость отчётов с итогами упирается в тот самый период рассчитанных итогов.
Запрос за период, который попадает в рассчитанные итоги, берёт готовые суммы и работает быстро. Запрос за даты позже границы итогов считает остатки «на лету», перебирая движения, — и тормозит тем сильнее, чем больше документов.
Отсюда практические приёмы:
- 📅 Держите границу рассчитанных итогов на конце последнего закрытого месяца. После закрытия периода сдвигайте её вперёд.
- 🎯 В запросах указывайте отбор по периоду и измерениям сразу, а не фильтруйте уже полученную выборку в коде.
- 🧮 Для оборотных регистров накопления с тяжёлой аналитикой в конфигураторе настраивают агрегаты — отдельные предрасчитанные срезы. Их включают и пересчитывают, после чего отчёты по этим разрезам ускоряются.
Прежде чем оптимизировать, посмотрите план запроса в технологическом журнале или замерьте время через ЗамерПроизводительности. Часто проблема не в итогах, а в отсутствии нужного отбора.
Автоматизация: внешние отчёты и регламентный пересчёт
Разовые итоги удобно оформить внешним отчётом, а регулярные — поставить на расписание.
Внешний отчёт. Создаётся в конфигураторе как файл .erf на основе той же СКД, что и встроенный. Подключается без изменения конфигурации через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки (механизм библиотеки стандартных подсистем). Пользователь получает свой отчёт с нужными итогами, не трогая типовую конфигурацию
.
Регламентный пересчёт. Чтобы итоги регистров не «уплывали», пересчёт можно вынести в регламентное задание и запускать ночью. Настраивается в Администрирование → Обслуживание → Регламентные операции (в клиент-серверном варианте — в консоли кластера). Так база сама поддерживает актуальность итогов без ручного запуска обработки.
Для разработчиков: в коде границу итогов и пересчёт регистра выполняют методами менеджера регистра — УстановитьМаксимальныйПериодРассчитанныхИтогов и ПересчитатьИтоги. Точные сигнатуры и доступные методы смотрите в синтакс-помощнике конфигуратора по конкретному типу регистра.
Типичные ошибки с итогами
Ошибки с итогами почти всегда сводятся к нескольким шаблонным ситуациям.
| Симптом | Причина | Что делать |
|---|---|---|
| В стандартном отчёте нет разбивки | Поле не добавлено в группировку | Открыть настройки, добавить поле на вкладку Группировка |
| В отчёте на СКД итог пустой | Поле не отмечено как ресурс | Отметить поле на вкладке Ресурсы с функцией Сумма |
Написал ИТОГИ, а их нет в выборке | Обход результата Прямой | Читать через ОбходРезультатаЗапроса.ПоГруппировкам |
| Итог в запросе вдвое больше правды | Соединение «один ко многим» до агрегации | Агрегировать подзапросом или применить РАЗЛИЧНЫЕ |
| Отчёт показывает неверные остатки | Разошлись таблицы итогов регистра | Пересчитать итоги через Управление итогами |
Частые вопросы
Чем «итоги» в отчёте отличаются от «итогов» регистра?
Нужен ли монопольный режим для пересчёта итогов?
Можно ли сделать итог не суммой, а, например, средним?
Среднее, Минимум или Максимум. В запросе в секции ИТОГИ пишут соответствующую агрегатную функцию — СРЕДНЕЕ(...), МАКСИМУМ(...).Как вывести общий итог по всему отчёту в запросе?
ПО ОБЩИЕ. Платформа вернёт отдельную строку верхнего уровня с итогом по всей выборке.