Суммы, промежуточные и общие итоги в 1С 8.3: что умеет пользователь и что делает программист
Содержание
Быстрее всего посчитать итог в 1С так: сформируйте отчёт, выделите мышью нужные ячейки с числами, и сумма появится в командной панели над таблицей отчёта. Если нужен итог по группам (по контрагентам, месяцам, счетам), включите группировку в настройках отчёта: строки «Итого» по каждой группе и общий итог платформа добавит сама.
Способов посчитать итоги
в 1С пять, и выбирают их по задаче. Разово сложить несколько строк — выделение ячеек. Регулярная сводка — группировки в отчёте. Итог по строкам документа — подвал табличной части. Для разработчика остаются запрос с ИТОГИ, ресурсы системы компоновки данных (СКД) и расчёт в коде. Всё ниже — для платформы 8.3 с интерфейсом «Такси», примеры меню — по 1С:Бухгалтерии 3.0.
| Способ | Кто делает | Когда подходит |
|---|---|---|
| Выделение ячеек в отчёте | пользователь | разово сложить 5–50 чисел |
| Группировки в настройках отчёта | пользователь | регулярный отчёт с подытогами |
| Подвал табличной части | программист (один раз) | итог по колонке документа |
ИТОГИ в запросе | программист | обработки, печатные формы, выгрузки |
| Ресурсы СКД | программист | отчёты с итогами на любом уровне |
Итог в готовом отчёте: выделение ячеек и группировки
Сумма выделенных ячеек
В отчётах типовых конфигураций (БП 3.0, ЗУП 3.1, УТ 11) над табличным документом есть поле, которое считает выделенное:
- Сформируйте отчёт, например
Отчеты → Оборотно-сальдовая ведомость. - Выделите ячейки мышью. Несмежные диапазоны выделяйте с зажатой клавишей
Ctrl. - Посмотрите на число в командной панели отчёта. Рядом с ним выпадающий список: можно переключить «Сумма» на «Количество», «Среднее», «Минимум» или «Максимум».
Сумма учитывает только ячейки с числами. Пустые и текстовые пропускаются, поэтому выделять заодно колонку с названиями не страшно.
Если в обработке или нетиповом отчёте такого поля нет, сохраните таблицу в Excel кнопкой с дискетой (формат .xlsx) и сложите там. Встроенный калькулятор 1С открывается сочетанием Ctrl+F2, но для десятков строк он неудобен.
Подытоги по группам
Группировка даёт строку «Итого» под каждой группой. В отчётах на СКД (почти все отчёты БП 3.0, кроме регламентированных):
- Нажмите
Настройки. - Переключите вид настроек на «Расширенный», если он доступен.
- На вкладке группировок добавьте поле: «Контрагент», «Номенклатура», «Период».
- Для периода выберите периодичность: день, месяц, квартал, год.
- Нажмите
Закрыть и сформировать.
В стандартных бухгалтерских отчётах (оборотно-сальдовая ведомость, анализ счёта, карточка счёта) итоги встроены. Там управляют детализацией: в Показать настройки на вкладке группировки отметьте «По субсчетам» и добавьте аналитику, например контрагентов по счёту 62. Ведомость покажет итог по счёту, по субсчету и по каждому контрагенту.
Где выводить общий итог
Общий итог по умолчанию стоит внизу. Чтобы он был сверху, в расширенных настройках отчёта найдите параметр расположения общих итогов. Варианты: в начале, в конце, в начале и в конце, не выводить. Для длинных ведомостей удобнее «в начале»: итог виден без прокрутки.
Итоги табличной части документа и списков
Строка «Итого» под табличной частью
В документах вроде «Реализация (акт, накладная)» итог по сумме и НДС выводится под таблицей товаров. Это подвал таблицы формы. Пользователь включить подвал для новой колонки не может: в Ещё → Изменить форму доступны видимость и порядок колонок, но не формулы итогов. Подвал для колонки «Количество» или «Вес» добавляет программист, лучше через расширение, чтобы не снимать конфигурацию с поддержки.
Итог по списку документов или элементов справочника
В списках (журнал документов , справочник номенклатуры) колонок «Итого» нет. Два рабочих приёма:
Ещё → Вывести список. Отметьте нужные колонки, выведите в табличный документ, затем выделите колонку суммы, как в отчёте, или сохраните в Excel.- Отчёт по тем же данным. Для продаж за период правильнее взять отчёт, а не складывать список: список показывает и непроведённые, и помеченные на удаление документы.
Итог по «Вывести список» включает все строки, которые видит список, в том числе непроведённые документы. Перед подсчётом установите отбор по статусу или по флагу «Проведен».
Конструктор запроса: группировка и итоги без кода
Программисту и опытному пользователю консоли запросов конструктор даёт два уровня итогов.
Агрегатные функции и группировка
На вкладке «Группировка» перенесите поля, по которым считать (контрагент, номенклатура), в группируемые, а числовые — в суммируемые. Конструктор подставит СУММА(). Другие функции: КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ. Результат — одна строка на каждую комбинацию группируемых полей.
Вкладка «Итоги»
Вкладка «Итоги» добавляет к результату строки-итоги, не теряя детальных строк. Выберите поля группировки итогов, итоговые поля и, при необходимости, флажок общих итогов. Конструктор допишет в текст секцию ИТОГИ ... ПО.
Пример по табличной части реализаций в БП 3.0:
ВЫБРАТЬ
РеализацияТовары.Ссылка.Контрагент КАК Контрагент,
РеализацияТовары.Номенклатура КАК Номенклатура,
СУММА(РеализацияТовары.Количество) КАК Количество,
СУММА(РеализацияТовары.Сумма) КАК Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТовары
ГДЕ
РеализацияТовары.Ссылка.Проведен
И РеализацияТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
РеализацияТовары.Ссылка.Контрагент,
РеализацияТовары.Номенклатура
ИТОГИ
СУММА(Количество),
СУММА(Сумма)
ПО
ОБЩИЕ,
Контрагент
Результат: сверху общий итог, под ним итог по каждому контрагенту, под ним строки по номенклатуре.
Итоги регистров: виртуальные таблицы
Для остатков и оборотов не нужно складывать движения вручную. Виртуальные таблицы .Остатки, .Обороты и .ОстаткиИОбороты регистров уже возвращают суммы на дату или за период. Параметры периода и отбор задавайте в параметрах виртуальной таблицы, а не в ГДЕ. Так запрос быстрее и не ошибается на границах периода.
Расчёт итогов на встроенном языке
Итог колонки таблицы значений и табличной части
У таблицы значений и табличной части объекта есть метод Итог(). Он работает на сервере:
&НаСервере
Процедура ПосчитатьИтогНаСервере()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ИтогоКоличество = ДокументОбъект.Товары.Итог("Количество");
КонецПроцедуры
На клиенте проще пройти строки циклом. Это работает с любой коллекцией данных формы:
&НаКлиенте
Процедура ПересчитатьИтогВес()
ИтогоВес = 0;
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
ИтогоВес = ИтогоВес + СтрокаТЧ.Вес;
КонецЦикла;
КонецПроцедуры
Чтобы показать итог под таблицей формы:
- Создайте реквизит формы
ИтогоВесс типом «Число». - У таблицы
Товарыустановите свойство «Подвал» = Истина. - У колонки «Вес» в свойстве «Путь к данным подвала» укажите
ИтогоВес. - Вызывайте
ПересчитатьИтогВес()вПриОткрытииформы, а также после изменения, добавления и удаления строк таблицы.
Итоги из результата запроса
Если в запросе есть секция ИТОГИ, читайте результат обходом по группировкам:
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
// уровень Контрагент: Выборка.Контрагент, Выборка.Сумма
ВыборкаДетали = Выборка.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
// строки по номенклатуре: ВыборкаДетали.Номенклатура, ВыборкаДетали.Сумма
КонецЦикла;
КонецЦикла;
Тип строки (детальная, итог по группировке, общий итог) возвращает метод выборки ТипЗаписи(). Сравнивайте его со значениями ТипЗаписиЗапроса.ДетальнаяЗапись, ТипЗаписиЗапроса.ИтогПоГруппировке, ТипЗаписиЗапроса.ОбщийИтог. Это нужно, когда итоговые строки в печатной форме выделяют жирным.
Не складывайте результат запроса в цикле, если можно добавить СУММА или ИТОГИ в сам запрос. На 100 000 строк разница во времени заметная: СУБД считает быстрее, чем перебор строк на сервере 1С.
Итоги в системе компоновки данных
В СКД итоги задаются один раз в схеме, а пользователь потом сам меняет группировки, и итоги пересчитываются на любом уровне.
Ресурсы
На вкладке «Ресурсы» схемы перенесите числовые поля. По умолчанию выражение — Сумма(Поле). Без ресурса поле в строке группировки будет пустым, итог по нему не посчитается.
Выражения ресурсов:
| Задача | Выражение ресурса |
|---|---|
| Сумма продаж | Сумма(Сумма) |
| Число документов | Количество(Различные Документ) |
| Средняя цена (взвешенная) | Выбор Когда Сумма(Количество) = 0 Тогда 0 Иначе Сумма(Сумма) / Сумма(Количество) Конец |
| Максимальная отгрузка | Максимум(Сумма) |
Колонка «Рассчитывать по» ограничивает, на каких группировках считать ресурс. Например, норматив по номенклатуре имеет смысл в группировке «Номенклатура», а в общем итоге его сумма не нужна.
Структура и общие итоги
- На вкладке «Настройки» добавьте группировки в структуру отчёта: сначала «Контрагент», внутри — «Номенклатура».
- Для детальных строк добавьте группировку без полей («Детальные записи»).
- В «Других настройках» задайте расположение общих итогов по вертикали и по горизонтали. Для таблицы с колонками по месяцам горизонтальный итог даёт колонку «Итого» справа.
- Для группировки по периоду укажите тип дополнения (месяц, квартал), чтобы в отчёте появились и пустые периоды.
Вычисляемые итоги
Нарастающий итог и долю в процентах считают функциями выражений СКД. Нарастающий итог по месяцам: ресурс с выражением ВычислитьВыражение("Сумма(Сумма)", , , "Первая", "Текущая"). Долю в общем итоге: Сумма(Сумма) / ВычислитьВыражение("Сумма(Сумма)", , "ОбщийИтог") * 100. Проверьте результат на двух-трёх строках вручную до передачи отчёта пользователям.
Почему итог в 1С получается неверным
Ещё два частых источника расхождений не связаны с кодом. В отчёт попали документы другой организации: проверьте отбор по организации. И границы периода: если в одном отчёте период заканчивается 31.03, а в другом 01.04, обороты за 1 апреля попадут только во второй.
Пересчёт итогов регистров и автоматизация
Что такое итоги регистра и когда их пересчитывать
Регистры накопления и бухгалтерии хранят готовые итоги, чтобы отчёт не перебирал все движения с начала учёта. Если итоги повреждены (сбой при записи, аварийное завершение сервера), отчёты и проводки по остаткам начинают врать, хотя сами документы в порядке.
Как пересчитать:
- В пользовательском режиме:
Все функции → Стандартные → Управление итогами. Включите полные возможности, выберите регистры, нажмите пересчёт итогов. ЕслиВсе функциине видно, включите их вСервис и настройки → Параметры. - В конфигураторе:
Администрирование → Тестирование и исправление, флажок «Пересчёт итогов».
Перед пересчётом сделайте резервную копию базы. На больших базах пересчёт идёт часами и нагружает сервер. Запускайте его вне рабочего времени. Тестирование и исправление требует монопольного доступа: все пользователи должны выйти из базы.
В той же форме управления итогами задаётся период рассчитанных итогов. Если сдвинуть его к текущему месяцу, запись документов «задним числом» в закрытых периодах станет медленнее, а свежие отчёты — быстрее.
Регламентные задания и внешние обработки
Повторяющийся расчёт итогов не делают руками каждый раз:
- 🕐 Рассылка отчётов. В типовых конфигурациях на БСП отчёт с нужными итогами можно отправлять по расписанию на почту. Создаётся из формы отчёта или из списка рассылок в администрировании.
- ⚙️ Регламентное задание. Программист пишет процедуру общего модуля, которая считает итоги запросом и записывает их в регистр сведений или отправляет письмо. Задание с расписанием (например, каждую ночь в 02:00) добавляется в конфигурацию или в расширение.
- 📦 Дополнительная обработка. Не меняет конфигурацию: подключается через
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Обработке с серверной командой можно задать расписание в её карточке. - 🗂 Период рассчитанных итогов. В БСП есть регламентное задание, которое сдвигает этот период раз в месяц. Проверьте, что оно включено в
Администрирование → Обслуживание → Регламентные операции.