Подсчёт сумм в 1С: от табличной части до запросов и СКД

· 9 мин

Содержание

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

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

Быстрый подсчёт прямо на экране

Когда сумма нужна «здесь и сейчас», без сохранения и настроек, работает выделение ячеек.

В любом табличном документе — сформированном отчёте, печатной форме накладной, оборотно-сальдовой ведомости — выделите мышью диапазон числовых ячеек. В нижней части окна (строка состояния) программа покажет сразу три значения: Сумма, Количество и Среднее по выделенным числам. Выделять можно и несмежные ячейки, удерживая Ctrl.

Это работает только с числами. Если в выделение попали пустые или текстовые ячейки, они просто игнорируются — на сумму не влияют.

Для арифметики в пару действий есть встроенный Калькулятор (Сервис → Калькулятор или сочетание клавиш — название пункта зависит от конфигурации). Результат из калькулятора можно скопировать и вставить в поле документа.

Этот способ не оставляет следов в базе и не требует прав на отчёты. Минус один: результат нигде не сохраняется, при закрытии окна он пропадает.

Автоитог по колонке в документе и списках

У документов с товарной частью (реализация, поступление, счёт) итог по колонке Сумма считается автоматически. Откройте документ — под табличной частью программа уже показывает «Всего» по сумме, НДС и количеству. Пересчёт происходит сразу при вводе новой строки, ничего нажимать не надо.

Если итоговой строки под таблицей не видно, разверните область внизу формы — она может быть свёрнута. Набор колонок с итогами задан в конфигурации документа.

Со списком документов сложнее. Вывести итог по сумме за период прямо в журнале можно не везде — это зависит от формы списка:

  • в некоторых списках в командной панели есть команда настройки итогов (ищите в меню Еще);
  • если такой команды нет, сумму по отбору считают отчётом (следующий раздел) — это надёжнее.

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

Готовые отчёты для подсчёта сумм

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

Оборотно-сальдовая ведомость (Отчёты → Оборотно-сальдовая ведомость) даёт обороты и остатки по всем счетам. По одному счёту — оборотно-сальдовая ведомость по счёту, с разбивкой по субконто (контрагенты, договоры, номенклатура).

Анализ счёта и Карточка счёта показывают, из каких проводок сложилась сумма по счёту. Это способ не просто увидеть итог, а понять, откуда он взялся.

Когда сумма нужна в разрезе объекта аналитики — по конкретному контрагенту, договору или статье затрат — берите Анализ субконто. Он собирает обороты по выбранным видам субконто и выводит итог по каждому значению. Это удобнее, чем вручную фильтровать ведомость.

Когда стандартного отчёта под задачу нет, выручает Универсальный отчёт (Отчёты → Универсальный отчёт). Он строит сумму по любому объекту:

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

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

Конструктор и язык запросов: функция СУММА

Когда нужна сумма по своим условиям, а готового отчёта нет, помогает запрос. Для бухгалтера проще зайти через консоль запросов (внешняя обработка) или универсальный отчёт, для разработчика — через конструктор запроса в Конфигураторе или расширении.

Суммирование в языке запросов делает агрегатная функция СУММА(). Группировку задаёт СГРУППИРОВАТЬ ПО. Простой пример — сумма продаж по каждому контрагенту:

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

Чтобы к детальным строкам добавить ещё и общий итог по всем контрагентам, используют конструкцию ИТОГИ ... ПО:

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

Конструкция ИТОГИ ПО ОБЩИЕ добавляет к результату отдельную итоговую строку. Если вместо ОБЩИЕ указать поле (например, месяц), получите промежуточные итоги по этому разрезу — удобно для отчётов «по месяцам с итогом за год».

Конструктор запроса (в Конфигураторе — правой кнопкой по тексту запроса, пункт о конструкторе) сам пишет синтаксис. Вы расставляете галочки на полях и агрегатных функциях — текст запроса собирается автоматически.

Подсчёт сумм во встроенном языке

Разработчику сумма чаще нужна внутри кода — в обработке проведения документа, во внешней обработке, в расширении. Способ зависит от того, где лежат данные.

Сумма по колонке таблицы значений или табличной части считается методом Итог(). Он суммирует все строки по указанной колонке:

ИтогПоСумме = Объект.Товары.Итог("Сумма");

Здесь Товары — табличная часть документа, Сумма — её числовой реквизит. Метод вернёт одно число. Складывать строки в цикле вручную для этого не нужно.

Сумма по данным базы — через запрос и выборку. Запрос с СУММА() возвращает уже посчитанный результат, разворачивать строки не требуется:

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    СУММА(Продажи.Сумма) КАК Всего
    |ИЗ
    |    РегистрНакопления.Продажи КАК Продажи";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
    Всего = Выборка.Всего;
Иначе
    Всего = 0;
КонецЕсли;

Сообщить(СтрШаблон("Итого продаж: %1", Формат(Всего, "ЧГ=0")));

Обратите внимание на две детали. Первая: СУММА по пустому набору строк вернёт NULL, поэтому ветка Иначе с нулём обязательна. Вторая: число в строку склеивают через Формат() или СтрШаблон(), а не прямым сложением — иначе получите неформатированное значение или ошибку типов.

Если всё же нужно пройти строки циклом (например, суммировать только часть по условию), накапливайте сумму в переменной:

Итог = 0;
Для Каждого Строка Из Объект.Товары Цикл
    Если Строка.Сумма > 0 Тогда
        Итог = Итог + Строка.Сумма;
    КонецЕсли;
КонецЦикла;

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

Суммы в отчёте на СКД

Система компоновки данных (СКД) — штатный способ делать отчёты в 1С 8.3. Сумма в ней считается не в коде, а настройкой ресурса.

Порядок такой:

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

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

Если в отчёте на СКД сумма не считается, почти всегда причина в том, что поле осталось обычным, а не перенесено в Ресурсы. Без ресурса СКД выводит значение из первой строки группы, а не сумму.

Автоматизация подсчёта: обработки и расширения

Когда один и тот же подсчёт нужен регулярно, его оформляют так, чтобы не собирать запрос каждый раз.

  • Внешняя обработка (.epf) — отдельный файл, который открывают через Файл → Открыть. Внутри — форма с запросом или отчёт на СКД. Удобно раздать коллегам, не меняя конфигурацию.
  • Расширение конфигурации (.cfe) — добавляет отчёт или команду прямо в интерфейс базы, не снимая её с поддержки. Расширения доступны с платформы 8.3.6. Загрузка .cfe и обновление конфигурации базы — два отдельных шага.
  • Сохранённая настройка универсального отчёта или отчёта на СКД — самый лёгкий вариант: один раз настроили группировки и ресурсы, сохранили вариант, дальше открываете готовым.

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

Для разработки отчёта под уникальную задачу порядок обычно обратный типовому: сначала собираете запрос в конструкторе, проверяете цифры на консоли запросов, и только потом переносите в СКД или обработку.

Частые ошибки при подсчёте сумм

Ошибки в подсчёте почти всегда не арифметические, а логические — считают не то или не за тот период.

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

Отдельно про проверку: если итоговая цифра вызывает сомнения, разложите её. Для бухгалтерии — через Анализ счёта или карточку счёта, для запроса — уберите СУММА и СГРУППИРОВАТЬ ПО, посмотрите детальные строки. Так сразу видно, какая строка лишняя или какой суммы не хватает.

Чтобы быстро выбрать метод под свою ситуацию:

Что нужно посчитать?

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

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