Суммы, промежуточные и общие итоги в 1С 8.3: что умеет пользователь и что делает программист

· 10 мин

Содержание

Быстрее всего посчитать итог в 1С так: сформируйте отчёт, выделите мышью нужные ячейки с числами, и сумма появится в командной панели над таблицей отчёта. Если нужен итог по группам (по контрагентам, месяцам, счетам), включите группировку в настройках отчёта: строки «Итого» по каждой группе и общий итог платформа добавит сама.

Способов посчитать итоги в 1С пять, и выбирают их по задаче. Разово сложить несколько строк — выделение ячеек. Регулярная сводка — группировки в отчёте. Итог по строкам документа — подвал табличной части. Для разработчика остаются запрос с ИТОГИ, ресурсы системы компоновки данных (СКД) и расчёт в коде. Всё ниже — для платформы 8.3 с интерфейсом «Такси», примеры меню — по 1С:Бухгалтерии 3.0.

СпособКто делаетКогда подходит
Выделение ячеек в отчётепользовательразово сложить 5–50 чисел
Группировки в настройках отчётапользовательрегулярный отчёт с подытогами
Подвал табличной частипрограммист (один раз)итог по колонке документа
ИТОГИ в запросепрограммистобработки, печатные формы, выгрузки
Ресурсы СКДпрограммистотчёты с итогами на любом уровне

Итог в готовом отчёте: выделение ячеек и группировки

Сумма выделенных ячеек

В отчётах типовых конфигураций (БП 3.0, ЗУП 3.1, УТ 11) над табличным документом есть поле, которое считает выделенное:

  1. Сформируйте отчёт, например Отчеты → Оборотно-сальдовая ведомость.
  2. Выделите ячейки мышью. Несмежные диапазоны выделяйте с зажатой клавишей Ctrl.
  3. Посмотрите на число в командной панели отчёта. Рядом с ним выпадающий список: можно переключить «Сумма» на «Количество», «Среднее», «Минимум» или «Максимум».

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

Если в обработке или нетиповом отчёте такого поля нет, сохраните таблицу в Excel кнопкой с дискетой (формат .xlsx) и сложите там. Встроенный калькулятор 1С открывается сочетанием Ctrl+F2, но для десятков строк он неудобен.

Подытоги по группам

Группировка даёт строку «Итого» под каждой группой. В отчётах на СКД (почти все отчёты БП 3.0, кроме регламентированных):

  1. Нажмите Настройки.
  2. Переключите вид настроек на «Расширенный», если он доступен.
  3. На вкладке группировок добавьте поле: «Контрагент», «Номенклатура», «Период».
  4. Для периода выберите периодичность: день, месяц, квартал, год.
  5. Нажмите Закрыть и сформировать.

В стандартных бухгалтерских отчётах (оборотно-сальдовая ведомость, анализ счёта, карточка счёта) итоги встроены. Там управляют детализацией: в Показать настройки на вкладке группировки отметьте «По субсчетам» и добавьте аналитику, например контрагентов по счёту 62. Ведомость покажет итог по счёту, по субсчету и по каждому контрагенту.

Где выводить общий итог

Общий итог по умолчанию стоит внизу. Чтобы он был сверху, в расширенных настройках отчёта найдите параметр расположения общих итогов. Варианты: в начале, в конце, в начале и в конце, не выводить. Для длинных ведомостей удобнее «в начале»: итог виден без прокрутки.

Итоги табличной части документа и списков

Строка «Итого» под табличной частью

В документах вроде «Реализация (акт, накладная)» итог по сумме и НДС выводится под таблицей товаров. Это подвал таблицы формы. Пользователь включить подвал для новой колонки не может: в Ещё → Изменить форму доступны видимость и порядок колонок, но не формулы итогов. Подвал для колонки «Количество» или «Вес» добавляет программист, лучше через расширение, чтобы не снимать конфигурацию с поддержки.

Итог по списку документов или элементов справочника

В списках (журнал документов , справочник номенклатуры) колонок «Итого» нет. Два рабочих приёма:

  1. Ещё → Вывести список. Отметьте нужные колонки, выведите в табличный документ, затем выделите колонку суммы, как в отчёте, или сохраните в Excel.
  2. Отчёт по тем же данным. Для продаж за период правильнее взять отчёт, а не складывать список: список показывает и непроведённые, и помеченные на удаление документы.

Итог по «Вывести список» включает все строки, которые видит список, в том числе непроведённые документы. Перед подсчётом установите отбор по статусу или по флагу «Проведен».

Конструктор запроса: группировка и итоги без кода

Программисту и опытному пользователю консоли запросов конструктор даёт два уровня итогов.

Агрегатные функции и группировка

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

Вкладка «Итоги»

Вкладка «Итоги» добавляет к результату строки-итоги, не теряя детальных строк. Выберите поля группировки итогов, итоговые поля и, при необходимости, флажок общих итогов. Конструктор допишет в текст секцию ИТОГИ ... ПО.

Пример по табличной части реализаций в БП 3.0:

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

Результат: сверху общий итог, под ним итог по каждому контрагенту, под ним строки по номенклатуре.

Итоги регистров: виртуальные таблицы

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

Расчёт итогов на встроенном языке

Итог колонки таблицы значений и табличной части

У таблицы значений и табличной части объекта есть метод Итог(). Он работает на сервере:

&НаСервере
Процедура ПосчитатьИтогНаСервере()
    ДокументОбъект = РеквизитФормыВЗначение("Объект");
    ИтогоКоличество = ДокументОбъект.Товары.Итог("Количество");
КонецПроцедуры

На клиенте проще пройти строки циклом. Это работает с любой коллекцией данных формы:

&НаКлиенте
Процедура ПересчитатьИтогВес()
    ИтогоВес = 0;
    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        ИтогоВес = ИтогоВес + СтрокаТЧ.Вес;
    КонецЦикла;
КонецПроцедуры

Чтобы показать итог под таблицей формы:

  1. Создайте реквизит формы ИтогоВес с типом «Число».
  2. У таблицы Товары установите свойство «Подвал» = Истина.
  3. У колонки «Вес» в свойстве «Путь к данным подвала» укажите ИтогоВес.
  4. Вызывайте ПересчитатьИтогВес() в ПриОткрытии формы, а также после изменения, добавления и удаления строк таблицы.

Итоги из результата запроса

Если в запросе есть секция ИТОГИ, читайте результат обходом по группировкам:

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

Тип строки (детальная, итог по группировке, общий итог) возвращает метод выборки ТипЗаписи(). Сравнивайте его со значениями ТипЗаписиЗапроса.ДетальнаяЗапись, ТипЗаписиЗапроса.ИтогПоГруппировке, ТипЗаписиЗапроса.ОбщийИтог. Это нужно, когда итоговые строки в печатной форме выделяют жирным.

Не складывайте результат запроса в цикле, если можно добавить СУММА или ИТОГИ в сам запрос. На 100 000 строк разница во времени заметная: СУБД считает быстрее, чем перебор строк на сервере 1С.

Итоги в системе компоновки данных

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

Ресурсы

На вкладке «Ресурсы» схемы перенесите числовые поля. По умолчанию выражение — Сумма(Поле). Без ресурса поле в строке группировки будет пустым, итог по нему не посчитается.

Выражения ресурсов:

ЗадачаВыражение ресурса
Сумма продажСумма(Сумма)
Число документовКоличество(Различные Документ)
Средняя цена (взвешенная)Выбор Когда Сумма(Количество) = 0 Тогда 0 Иначе Сумма(Сумма) / Сумма(Количество) Конец
Максимальная отгрузкаМаксимум(Сумма)

Колонка «Рассчитывать по» ограничивает, на каких группировках считать ресурс. Например, норматив по номенклатуре имеет смысл в группировке «Номенклатура», а в общем итоге его сумма не нужна.

Структура и общие итоги

  1. На вкладке «Настройки» добавьте группировки в структуру отчёта: сначала «Контрагент», внутри — «Номенклатура».
  2. Для детальных строк добавьте группировку без полей («Детальные записи»).
  3. В «Других настройках» задайте расположение общих итогов по вертикали и по горизонтали. Для таблицы с колонками по месяцам горизонтальный итог даёт колонку «Итого» справа.
  4. Для группировки по периоду укажите тип дополнения (месяц, квартал), чтобы в отчёте появились и пустые периоды.

Вычисляемые итоги

Нарастающий итог и долю в процентах считают функциями выражений СКД. Нарастающий итог по месяцам: ресурс с выражением ВычислитьВыражение("Сумма(Сумма)", , , "Первая", "Текущая"). Долю в общем итоге: Сумма(Сумма) / ВычислитьВыражение("Сумма(Сумма)", , "ОбщийИтог") * 100. Проверьте результат на двух-трёх строках вручную до передачи отчёта пользователям.

Почему итог в 1С получается неверным

Диагностика: выберите симптом

Ещё два частых источника расхождений не связаны с кодом. В отчёт попали документы другой организации: проверьте отбор по организации. И границы периода: если в одном отчёте период заканчивается 31.03, а в другом 01.04, обороты за 1 апреля попадут только во второй.

Пересчёт итогов регистров и автоматизация

Что такое итоги регистра и когда их пересчитывать

Регистры накопления и бухгалтерии хранят готовые итоги, чтобы отчёт не перебирал все движения с начала учёта. Если итоги повреждены (сбой при записи, аварийное завершение сервера), отчёты и проводки по остаткам начинают врать, хотя сами документы в порядке.

Как пересчитать:

  1. В пользовательском режиме: Все функции → Стандартные → Управление итогами. Включите полные возможности, выберите регистры, нажмите пересчёт итогов. Если Все функции не видно, включите их в Сервис и настройки → Параметры.
  2. В конфигураторе: Администрирование → Тестирование и исправление, флажок «Пересчёт итогов».

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

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

Регламентные задания и внешние обработки

Повторяющийся расчёт итогов не делают руками каждый раз:

  • 🕐 Рассылка отчётов. В типовых конфигурациях на БСП отчёт с нужными итогами можно отправлять по расписанию на почту. Создаётся из формы отчёта или из списка рассылок в администрировании.
  • ⚙️ Регламентное задание. Программист пишет процедуру общего модуля, которая считает итоги запросом и записывает их в регистр сведений или отправляет письмо. Задание с расписанием (например, каждую ночь в 02:00) добавляется в конфигурацию или в расширение.
  • 📦 Дополнительная обработка. Не меняет конфигурацию: подключается через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Обработке с серверной командой можно задать расписание в её карточке.
  • 🗂 Период рассчитанных итогов. В БСП есть регламентное задание, которое сдвигает этот период раз в месяц. Проверьте, что оно включено в Администрирование → Обслуживание → Регламентные операции.

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

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