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