Итоги в 1С 8.3: от группировок в отчёте до запроса

· 9 мин

Содержание

Итоги в 1С — это суммы и количества по группам строк: по складу, контрагенту, счёту, месяцу. В стандартных отчётах они считаются автоматически, нужно лишь задать группировки в настройках. В своём отчёте итоги задают через ресурсы и структуру, а в запросе на встроенном языке — через ключевое слово ИТОГИ. Отдельная тема — пересчёт итогов регистров, когда отчёты начинают показывать неверные цифры.

Бухгалтер открывает оборотно-сальдовую ведомость и видит общую сумму, но без разбивки по субконто. Программист пишет запрос и получает плоскую таблицу вместо сгруппированной. Обе задачи — про одни и те же итоги, только с разных сторон. Разберём каждый случай с точными путями и примерами кода.

Пути указаны для «1С:Бухгалтерии» 3.0 и платформы 8.3 в интерфейсе «Такси». В «1С:ЗУП» 3.1 и «Управлении торговлей» 11 логика та же, отличаются только названия конкретных отчётов.

Где итоги уже посчитаны: стандартные отчёты

Большинство бухгалтерских итогов не нужно считать вручную — они есть в типовых отчётах.

Откройте Отчёты → Стандартные отчёты → Оборотно-сальдовая ведомость. Нажмите кнопку Показать настройки. На вкладке Группировка добавьте поля, по которым хотите видеть промежуточные итоги: субсчета, субконто, подразделения. По каждой группе 1С посчитает сальдо и обороты, а внизу выведет общий итог.

Так же устроены и другие отчёты раздела:

  • 📊 Оборотно-сальдовая ведомость по счёту — итоги по аналитике одного счёта.
  • 📑 Анализ счёта — обороты с корреспонденцией и итогами по субконто.
  • 📈 Карточка счёта — движения с нарастающим итогом в последней колонке.
  • 🧾 Универсальный отчёт — произвольные итоги по любому регистру или справочнику.

Если нужный разрез не выводится, проверьте на вкладке Отбор, не стоит ли там фильтр, и на вкладке Группировка — добавлено ли само поле аналитики.

Итог по группе показывается только тогда, когда группировка добавлена в настройки. Поэтому «нет итогов по складам» почти всегда означает, что поле Склад просто не включили в группировку.

Разберём на примере. Нужна оборотка по счёту 41 с разбивкой по складам и внутри — по номенклатуре. В настройках на вкладке Группировка добавляют два поля в таком порядке: сначала Склад, затем Номенклатура. Отчёт выдаст по каждому складу промежуточный итог (например, 1 250 000 руб.), под ним — строки товаров, а в самом низу общий итог по всем складам. Переставив поля местами, вы получите разбивку сначала по номенклатуре, а внутри — по складам. Порядок полей в группировке задаёт уровни итогов.

Группировки и промежуточные итоги в своём отчёте

Когда готового отчёта не хватает, строят отчёт на системе компоновки данных (СКД). Итоги там складываются из двух настроек — ресурсов и структуры.

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

Структура задаёт уровни группировки. На вкладке Настройки в дереве структуры добавьте группировки: например, Контрагент, внутри него Договор. По каждому уровню СКД автоматически подведёт итог отмеченных ресурсов, а наверху — общий итог отчёта.

Порядок настройки:

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

Готовый вариант отчёта пользователь дорабатывает без конфигуратора. В открытом отчёте нажмите Ещё → Изменить вариант отчёта — откроется та же структура с группировками и ресурсами, где можно переставить уровни или добавить новый итог.

Что проверить, если итоги в отчёте на СКД не считаются
Выполнено: 0 / 5

Итоги в запросе на языке 1С: ключевое слово ИТОГИ

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

ВЫБРАТЬ
    ТоварыНаСкладах.Склад КАК Склад,
    ТоварыНаСкладах.Номенклатура КАК Номенклатура,
    ТоварыНаСкладах.КоличествоОстаток КАК Количество
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах
ИТОГИ
    СУММА(Количество)
ПО
    Склад,
    Номенклатура

Разберём секцию ИТОГИ:

  • после ИТОГИ перечисляют агрегатные функции — СУММА, КОЛИЧЕСТВО, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ;
  • после ПО перечисляют поля-группировки в порядке вложенности;
  • ПО ОБЩИЕ добавляет одну строку с общим итогом по всему результату.

Чтобы получить и общий итог, и разбивку, пишут так:

ИТОГИ
    СУММА(Количество)
ПО
    ОБЩИЕ,
    Склад

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

Результат = Запрос.Выполнить();
ВыборкаПоСкладу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоСкладу.Следующий() Цикл
    // ВыборкаПоСкладу.Количество — это итог по складу
    ВыборкаТоваров = ВыборкаПоСкладу.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаТоваров.Следующий() Цикл
        // строки детализации внутри склада
    КонецЦикла;
КонецЦикла;

Если обходить результат через ОбходРезультатаЗапроса.Прямой, секция ИТОГИ не сработает — выборка вернёт плоский список без итоговых строк. Это самая частая причина жалобы «написал ИТОГИ, а их нет».

У каждой строки группировочной выборки доступны и поля-измерения, и посчитанные ресурсы. То есть ВыборкаПоСкладу.Склад вернёт конкретный склад, а ВыборкаПоСкладу.Количество — итоговое количество по нему. Вложенные выборки получают из родительской методом Выбрать с тем же параметром обхода — так спускаются с уровня на уровень вплоть до строк детализации. Глубина вложенности равна числу полей в секции ПО.

Многоуровневые итоги и расшифровки без ошибок

Когда группировок несколько, в дело вступают дополнительные варианты секции ИТОГИ.

Итоги по периодам. Для разбивки по датам применяют конструкцию ПЕРИОДАМИ. Она добавляет строки даже за те дни или месяцы, где не было движений, — удобно для равномерных графиков:

ИТОГИ
    СУММА(Сумма)
ПО
    ДатаДокумента ПЕРИОДАМИ(МЕСЯЦ, &НачалоПериода, &КонецПериода)

Итоги по иерархии справочника. Если группировка идёт по иерархическому справочнику (например, группы номенклатуры), добавляют ТОЛЬКО ИЕРАРХИЯ или ИЕРАРХИЯ, а результат обходят через ОбходРезультатаЗапроса.ПоГруппировкамСИерархией. Так итог посчитается и по папке-группе, а не только по конечным элементам.

Типичная ошибка в многоуровневых итогах — задвоение сумм в расшифровке. Возникает, когда к регистру присоединяют таблицу с несколькими строками на одну запись: одна проводка размножается, и СУММА считает её дважды. Проверка простая: сверьте общий итог запроса с итогом стандартного отчёта по тому же регистру. Если расходятся — ищите соединение «один ко многим» и либо агрегируйте подзапросом до соединения, либо используйте РАЗЛИЧНЫЕ.

Поле, по которому строится итог, должно присутствовать в списке выборки. Нельзя подводить ИТОГИ ... ПО Склад, если Склад не выбран в секции ВЫБРАТЬ — запрос вернёт ошибку.

Пересчёт итогов регистров, когда цифры «поехали»

У слова «итоги» в 1С есть второй смысл — служебные таблицы итогов регистров. Платформа хранит заранее посчитанные остатки и обороты, чтобы отчёты строились быстро. Если эти таблицы разошлись с реальными движениями, отчёты показывают неверные суммы, хотя документы в порядке.

Когда это случается:

  • 🔁 правили или перепроводили документы в закрытых прошлых периодах;
  • 💾 восстановили базу из резервной копии или перенесли данные;
  • ⚡ было аварийное завершение работы во время проведения.

Лечится пересчётом итогов. Инструмент — стандартная обработка Управление итогами. Чтобы её открыть, включите команду «Все функции»: Главное меню → Сервис → Параметры и флажок Отображать команду «Все функции». После этого Главное меню → Все функции → Стандартные → Управление итогами.

В обработке по каждому регистру видно период рассчитанных итогов — дату, до которой итоги хранятся готовыми. Две основные операции:

  1. Пересчитать — перестраивает таблицы итогов за выбранный период.
  2. Установить период расчёта итогов — сдвигает границу готовых итогов.

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

В «1С:Бухгалтерии» есть и более мягкий сценарий: закрытие месяца и операция Экспресс-проверка ведения учёта часто выявляют расхождения итогов и предлагают их перепровести без полного пересчёта.

Чтобы отчёты с итогами не тормозили

Скорость отчётов с итогами упирается в тот самый период рассчитанных итогов.

Запрос за период, который попадает в рассчитанные итоги, берёт готовые суммы и работает быстро. Запрос за даты позже границы итогов считает остатки «на лету», перебирая движения, — и тормозит тем сильнее, чем больше документов.

Отсюда практические приёмы:

  • 📅 Держите границу рассчитанных итогов на конце последнего закрытого месяца. После закрытия периода сдвигайте её вперёд.
  • 🎯 В запросах указывайте отбор по периоду и измерениям сразу, а не фильтруйте уже полученную выборку в коде.
  • 🧮 Для оборотных регистров накопления с тяжёлой аналитикой в конфигураторе настраивают агрегаты — отдельные предрасчитанные срезы. Их включают и пересчитывают, после чего отчёты по этим разрезам ускоряются.

Прежде чем оптимизировать, посмотрите план запроса в технологическом журнале или замерьте время через ЗамерПроизводительности. Часто проблема не в итогах, а в отсутствии нужного отбора.

Автоматизация: внешние отчёты и регламентный пересчёт

Разовые итоги удобно оформить внешним отчётом, а регулярные — поставить на расписание.

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

Регламентный пересчёт. Чтобы итоги регистров не «уплывали», пересчёт можно вынести в регламентное задание и запускать ночью. Настраивается в Администрирование → Обслуживание → Регламентные операции (в клиент-серверном варианте — в консоли кластера). Так база сама поддерживает актуальность итогов без ручного запуска обработки.

Для разработчиков: в коде границу итогов и пересчёт регистра выполняют методами менеджера регистра — УстановитьМаксимальныйПериодРассчитанныхИтогов и ПересчитатьИтоги. Точные сигнатуры и доступные методы смотрите в синтакс-помощнике конфигуратора по конкретному типу регистра.

Типичные ошибки с итогами

Ошибки с итогами почти всегда сводятся к нескольким шаблонным ситуациям.

СимптомПричинаЧто делать
В стандартном отчёте нет разбивкиПоле не добавлено в группировкуОткрыть настройки, добавить поле на вкладку Группировка
В отчёте на СКД итог пустойПоле не отмечено как ресурсОтметить поле на вкладке Ресурсы с функцией Сумма
Написал ИТОГИ, а их нет в выборкеОбход результата ПрямойЧитать через ОбходРезультатаЗапроса.ПоГруппировкам
Итог в запросе вдвое больше правдыСоединение «один ко многим» до агрегацииАгрегировать подзапросом или применить РАЗЛИЧНЫЕ
Отчёт показывает неверные остаткиРазошлись таблицы итогов регистраПересчитать итоги через Управление итогами
Диагностика: выберите симптом

Частые вопросы

Чем «итоги» в отчёте отличаются от «итогов» регистра?
Итоги в отчёте — это суммы по группам строк, которые считаются при его формировании. Итоги регистра — служебные таблицы заранее посчитанных остатков и оборотов, которые платформа хранит для скорости. Это разные вещи, хотя слово одно.
Нужен ли монопольный режим для пересчёта итогов?
Строго — нет, пересчёт можно запускать и в многопользовательской базе. Но операция тяжёлая и конкурирует с пользователями за ресурсы, поэтому её выполняют в нерабочее время и после резервной копии.
Можно ли сделать итог не суммой, а, например, средним?
Да. В отчёте на СКД для ресурса выбирают функцию Среднее, Минимум или Максимум. В запросе в секции ИТОГИ пишут соответствующую агрегатную функцию — СРЕДНЕЕ(...), МАКСИМУМ(...).
Как вывести общий итог по всему отчёту в запросе?
Добавьте в секцию группировок ПО ОБЩИЕ. Платформа вернёт отдельную строку верхнего уровня с итогом по всей выборке.
Почему итоги в двух отчётах по одному регистру различаются?
Чаще всего из-за разных отборов или периодов. Если отборы одинаковы, а суммы всё равно расходятся, вероятно, таблицы итогов регистра устарели — пересчитайте их.