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