Подсчёт сумм в 1С: от табличной части до запросов и СКД
Содержание
Посчитать сумму в 1С можно пятью способами — от выделения ячеек мышью до запроса с группировкой. Самый быстрый: открыть отчёт или печатную форму, выделить нужные числовые ячейки — внизу окна появится их сумма и количество. Ничего настраивать не нужно.
Какой способ выбрать, зависит от задачи. Бухгалтеру чаще хватает автоитога в документе и готовых отчётов. Для разовой выборки по своим условиям удобнее конструктор запросов. Разработчику нужен встроенный язык и СКД. Ниже — каждый метод с точными действиями и примером.
Быстрый подсчёт прямо на экране
Когда сумма нужна «здесь и сейчас», без сохранения и настроек, работает выделение ячеек.
В любом табличном документе — сформированном отчёте, печатной форме накладной, оборотно-сальдовой ведомости — выделите мышью диапазон числовых ячеек. В нижней части окна (строка состояния) программа покажет сразу три значения: Сумма, Количество и Среднее по выделенным числам. Выделять можно и несмежные ячейки, удерживая Ctrl.
Это работает только с числами. Если в выделение попали пустые или текстовые ячейки, они просто игнорируются — на сумму не влияют.
Для арифметики в пару действий есть встроенный Калькулятор (Сервис → Калькулятор или сочетание клавиш — название пункта зависит от конфигурации). Результат из калькулятора можно скопировать и вставить в поле документа.
Этот способ не оставляет следов в базе и не требует прав на отчёты. Минус один: результат нигде не сохраняется, при закрытии окна он пропадает.
Автоитог по колонке в документе и списках
У документов с товарной частью (реализация, поступление, счёт) итог по колонке Сумма считается автоматически. Откройте документ — под табличной частью программа уже показывает «Всего» по сумме, НДС и количеству. Пересчёт происходит сразу при вводе новой строки, ничего нажимать не надо.
Если итоговой строки под таблицей не видно, разверните область внизу формы — она может быть свёрнута. Набор колонок с итогами задан в конфигурации документа.
Со списком документов сложнее. Вывести итог по сумме за период прямо в журнале можно не везде — это зависит от формы списка:
- в некоторых списках в командной панели есть команда настройки итогов (ищите в меню
Еще); - если такой команды нет, сумму по отбору считают отчётом (следующий раздел) — это надёжнее.
Итог в списке считается по текущему отбору. Прежде чем доверять цифре, проверьте, какой период и какие фильтры сейчас включены, — иначе сумма будет не за тот интервал.
Готовые отчёты для подсчёта сумм
Для сумм по счёту, контрагенту, номенклатуре или за период в типовых конфигурациях (БП 3.0, УТ 11, ЗУП 3.1) уже есть стандартные отчёты. Это основной инструмент бухгалтера.
Оборотно-сальдовая ведомость (Отчёты → Оборотно-сальдовая ведомость) даёт обороты и остатки по всем счетам. По одному счёту — оборотно-сальдовая ведомость по счёту, с разбивкой по субконто (контрагенты, договоры, номенклатура).
Анализ счёта и Карточка счёта показывают, из каких проводок сложилась сумма по счёту. Это способ не просто увидеть итог, а понять, откуда он взялся.
Когда сумма нужна в разрезе объекта аналитики — по конкретному контрагенту, договору или статье затрат — берите Анализ субконто. Он собирает обороты по выбранным видам субконто и выводит итог по каждому значению. Это удобнее, чем вручную фильтровать ведомость.
Когда стандартного отчёта под задачу нет, выручает Универсальный отчёт (Отчёты → Универсальный отчёт). Он строит сумму по любому объекту:
- Выберите тип данных — документ, регистр накопления или справочник.
- Укажите конкретный объект (например, регистр
Продажиили табличную часть документа реализации). - В настройках (
Показать настройки → Поля и сортировки) добавьте в ресурсы поле суммы, а в группировки — разрез, который нужен (контрагент, месяц). - Нажмите Сформировать.
Результат — табличный документ, в котором снова работает выделение ячеек из первого раздела. Настройку универсального отчёта можно сохранить в избранное и переиспользовать.
Конструктор и язык запросов: функция СУММА
Когда нужна сумма по своим условиям, а готового отчёта нет, помогает запрос. Для бухгалтера проще зайти через консоль запросов (внешняя обработка) или универсальный отчёт, для разработчика — через конструктор запроса в Конфигураторе или расширении.
Суммирование в языке запросов делает агрегатная функция СУММА(). Группировку задаёт СГРУППИРОВАТЬ ПО. Простой пример — сумма продаж по каждому контрагенту:
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
СУММА(Продажи.Сумма) КАК СуммаПродаж
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Контрагент
Чтобы к детальным строкам добавить ещё и общий итог по всем контрагентам, используют конструкцию ИТОГИ ... ПО:
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
СУММА(Продажи.Сумма) КАК СуммаПродаж
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Контрагент
ИТОГИ
СУММА(СуммаПродаж)
ПО
ОБЩИЕ
Конструкция ИТОГИ ПО ОБЩИЕ добавляет к результату отдельную итоговую строку. Если вместо ОБЩИЕ указать поле (например, месяц), получите промежуточные итоги по этому разрезу — удобно для отчётов «по месяцам с итогом за год».
Конструктор запроса (в Конфигураторе — правой кнопкой по тексту запроса, пункт о конструкторе) сам пишет синтаксис. Вы расставляете галочки на полях и агрегатных функциях — текст запроса собирается автоматически.
Подсчёт сумм во встроенном языке
Разработчику сумма чаще нужна внутри кода — в обработке проведения документа, во внешней обработке, в расширении. Способ зависит от того, где лежат данные.
Сумма по колонке таблицы значений или табличной части считается методом Итог(). Он суммирует все строки по указанной колонке:
ИтогПоСумме = Объект.Товары.Итог("Сумма");
Здесь Товары — табличная часть документа, Сумма — её числовой реквизит. Метод вернёт одно число. Складывать строки в цикле вручную для этого не нужно.
Сумма по данным базы — через запрос и выборку. Запрос с СУММА() возвращает уже посчитанный результат, разворачивать строки не требуется:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(Продажи.Сумма) КАК Всего
|ИЗ
| РегистрНакопления.Продажи КАК Продажи";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Всего = Выборка.Всего;
Иначе
Всего = 0;
КонецЕсли;
Сообщить(СтрШаблон("Итого продаж: %1", Формат(Всего, "ЧГ=0")));
Обратите внимание на две детали. Первая: СУММА по пустому набору строк вернёт NULL, поэтому ветка Иначе с нулём обязательна. Вторая: число в строку склеивают через Формат() или СтрШаблон(), а не прямым сложением — иначе получите неформатированное значение или ошибку типов.
Если всё же нужно пройти строки циклом (например, суммировать только часть по условию), накапливайте сумму в переменной:
Итог = 0;
Для Каждого Строка Из Объект.Товары Цикл
Если Строка.Сумма > 0 Тогда
Итог = Итог + Строка.Сумма;
КонецЕсли;
КонецЦикла;
Если же нужно сгруппировать таблицу значений и получить суммы по разрезам, не собирая запрос, подойдёт метод Свернуть(): первым параметром — колонки группировки, вторым — колонки, которые нужно просуммировать. После свёртки в каждой строке останется готовый итог по группе.
Суммы в отчёте на СКД
Система компоновки данных (СКД) — штатный способ делать отчёты в 1С 8.3. Сумма в ней считается не в коде, а настройкой ресурса.
Порядок такой:
- В схеме компоновки на вкладке Наборы данных задайте запрос (обычно с полем суммы).
- Перейдите на вкладку Ресурсы и перенесите поле суммы в ресурсы.
- В колонке выражения укажите агрегатную функцию —
Сумм(Сумма). - На вкладке Настройки добавьте нужные группировки (контрагент, период) — СКД сама посчитает суммы по каждой группе и общий итог.
Главное отличие от обычного запроса: в СКД не нужно вручную писать ИТОГИ ПО и СГРУППИРОВАТЬ ПО под каждый разрез. Вы задаёте ресурс один раз, а итоги по всем уровням группировок система строит сама — в зависимости от того, как пользователь настроит отчёт.
Если в отчёте на СКД сумма не считается, почти всегда причина в том, что поле осталось обычным, а не перенесено в Ресурсы. Без ресурса СКД выводит значение из первой строки группы, а не сумму.
Автоматизация подсчёта: обработки и расширения
Когда один и тот же подсчёт нужен регулярно, его оформляют так, чтобы не собирать запрос каждый раз.
- Внешняя обработка (
.epf) — отдельный файл, который открывают черезФайл → Открыть. Внутри — форма с запросом или отчёт на СКД. Удобно раздать коллегам, не меняя конфигурацию. - Расширение конфигурации
(
.cfe) — добавляет отчёт или команду прямо в интерфейс базы, не снимая её с поддержки. Расширения доступны с платформы 8.3.6. Загрузка.cfeи обновление конфигурации базы — два отдельных шага. - Сохранённая настройка универсального отчёта или отчёта на СКД — самый лёгкий вариант: один раз настроили группировки и ресурсы, сохранили вариант, дальше открываете готовым.
Внешние обработки из непроверенных источников не запускайте в рабочей базе: в обработке может быть любой код, в том числе изменяющий данные. Открывайте только то, в чём уверены, и лучше сначала на копии базы.
Для разработки отчёта под уникальную задачу порядок обычно обратный типовому: сначала собираете запрос в конструкторе, проверяете цифры на консоли запросов, и только потом переносите в СКД или обработку.
Частые ошибки при подсчёте сумм
Ошибки в подсчёте почти всегда не арифметические, а логические — считают не то или не за тот период.
Отдельно про проверку: если итоговая цифра вызывает сомнения, разложите её. Для бухгалтерии — через Анализ счёта или карточку счёта, для запроса — уберите СУММА и СГРУППИРОВАТЬ ПО, посмотрите детальные строки. Так сразу видно, какая строка лишняя или какой суммы не хватает.
Чтобы быстро выбрать метод под свою ситуацию:
Частые вопросы
Как посчитать сумму выделенных ячеек в 1С?
Ctrl.Почему в отчёте сумма не совпадает с суммой документов?
Какой функцией считают сумму в языке запросов 1С?
СУММА() вместе с конструкцией СГРУППИРОВАТЬ ПО. Для общих и промежуточных итогов добавляют ИТОГИ ... ПО. По пустому набору строк функция возвращает NULL.Как посчитать сумму по колонке табличной части в коде?
Итог(): например, Объект.Товары.Итог("Сумма") вернёт сумму по колонке Сумма всей табличной части. Перебирать строки циклом для этого не нужно.Почему сумма в отчёте на СКД не считается?
Сумм(Сумма). Без этого СКД выводит значение строки, а не итог группы.