Работа с табличными частями в 1С:Предприятие — одна из самых частых задач, с которыми сталкиваются и бухгалтеры, и программисты. Нужно ли подсчитать общую сумму заказа, проверить правильность начислений в ведомости или сгруппировать данные для отчета — без умения быстро получить итоги по колонке не обойтись. Но если в Excel для этого достаточно кликнуть на значок автосуммы, то в 1С вариантов действий гораздо больше: от простых встроенных инструментов до написания собственного кода.
В этой статье мы разберем 5 рабочих способов подсчета суммы колонки — от самых простых (доступных даже пользователям без навыков программирования) до продвинутых (для разработчиков). Вы узнаете, как использовать стандартные функции платформы, где найти скрытые кнопки для быстрого расчета, и когда без написания скрипта не обойтись. А еще — типичные ошибки, которые портят итоги, и как их избежать.
Все примеры актуальны для 1С:Предприятие 8.3 (включая последние релизы 2026 года) и частично применимы к версии 8.2. Если вы работаете с управляемыми формами или обычными формами — найдете решения для обоих случаев.
1. Встроенная кнопка «Итоги» — самый быстрый способ
Если вам нужно срочно посчитать сумму колонки без программирования, первым делом ищите кнопку Итоги (или Показать итоги) в панели инструментов табличной части. Она доступна в большинстве стандартных документов и справочников — от Заказа покупателя до Ведомости на выдачу зарплаты.
Как это работает:
- 🔍 Откройте документ или справочник с табличной частью (например,
Заказ клиентаилиПриходная накладная). - 📊 Найдите в верхней панели кнопку с пиктограммой Σ (сигма) или надписью
Итоги. В управляемых формах она может скрываться под менюЕщё → Показать итоги. - ✅ Нажмите на кнопку — внизу таблицы появится строка с суммами по всем числовым колонкам. Для колонок с типами
ЧислоилиДенежныйитог посчитается автоматически.
Этот метод подходит для оперативного контроля — например, когда нужно быстро сверить сумму накладной перед проведением. Однако у него есть ограничения:
- 🚫 Не работает в пользовательских табличных частях (только в стандартных объектах конфигурации).
- 🚫 Не позволяет настроить условия суммирования (например, посчитать только строки с определенным статусом).
- 🚫 В некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) итоги могут отображаться некорректно, если в таблице есть группировки.
Если кнопки Итоги нет на панели, попробуйте нажать ПКМ на заголовок табличной части и выбрать Итоги в контекстном меню.
2. Использование функции «Сумма» в запросах 1С
Когда нужно посчитать сумму с учетом фильтров или дополнительных условий, на помощь приходит язык запросов 1С. Этот метод универсален и работает в любых конфигурациях, включая 1С:ERP и 1С:УТ 11.
Пример запроса для подсчета суммы колонки СуммаНДС в табличной части документа РеализацияТоваровУслуг:
ВЫБРАТЬ
СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК ИтоговаяСуммаНДС
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
РеализацияТоваровУслугТовары.Ссылка = &СсылкаНаДокумент
Как выполнить такой запрос:
- Откройте консоль запросов (
Сервис → Отладка → ЗапросыилиCtrl+Alt+Q). - Вставьте текст запроса, заменив
&СсылкаНаДокументна реальную ссылку на документ (ее можно получить черезСсылка.УникальныйИдентификатор()). - Нажмите
Выполнить— результат появится в нижней панели.
Преимущества метода:
- 🔧 Гибкость: можно суммировать с группировкой, фильтрацией и другими условиями.
- 📈 Работает даже с большими таблицами (тысячи строк).
- 🔄 Результат запроса можно сразу использовать в отчетах или обработках.
Как передать параметр в запрос?
Чтобы передать параметр (например, ссылку на документ) в запрос, используйте конструкцию &ИмяПараметра в тексте запроса. Перед выполнением запроса добавьте параметр через метод Запрос.УстановитьПараметр("ИмяПараметра", Значение).
Важный нюанс: если в табличной части есть колонки с типом Булево (флажки), их нельзя суммировать напрямую. В этом случае используйте конструкцию СУММА(ВЫБОР КОГДА Товары.ПометкаУдаления = ИСТИНА ТОГДА 1 ИНАЧЕ 0 КОНЕЦ).
3. Программный расчет суммы через встроенный язык
Когда стандартных инструментов недостаточно, на помощь приходит встроенный язык 1С. Этот метод требует минимальных знаний программирования, но дает полный контроль над логикой расчета.
Пример кода для подсчета суммы колонки Количество в табличной части Товары документа ПоступлениеТоваров:
СуммаКоличества = 0;
// Перебираем все строки табличной части
Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
СуммаКоличества = СуммаКоличества + СтрокаТовары.Количество;
КонецЦикла;
Сообщить("Итоговое количество: " + СуммаКоличества);
Где разместить этот код:
- 📝 В обработке (создайте новую обработку через
Файл → Новый → Обработка). - 📋 В модуле документа (если нужно, чтобы сумма считалась при проведении).
- 🖥️ В внешней обработке для повторного использования.
Расширенный вариант с учетом отбора:
СуммаПоУсловию = 0;
Для Каждого Строка Из ДокументОбъект.Товары Цикл
Если Строка.Номенклатура.ЭтоГруппа() = Ложь И Строка.Количество > 0 Тогда
СуммаПоУсловию = СуммаПоУсловию + Строка.Количество;
КонецЕсли;
КонецЦикла;
Используете ли вы актуальную ссылку на документ?|Проверены ли права доступа к табличной части?|Учтены ли пустые строки (где значение = 0)?|Есть ли обработка исключений (например, для нечисловых значений)?-->
Для управляемых форм код будет немного отличаться:
Сумма = 0;
ТабличнаяЧасть = ЭтотОбъект.Товары;
// Получаем данные табличной части
Для Каждого Строка Из ТабличнаяЧасть Цикл
Сумма = Сумма + Строка.Сумма;
КонецЦикла;
4. Суммирование через отчеты и обработки
Если вам нужно не просто посчитать сумму, а вывести ее в печатную форму или использовать в аналитике, удобнее всего создать отчет или внешнюю обработку. Этот метод подходит для регулярных расчетов — например, ежемесячного подсчета итогов по зарплатным ведомостям.
Пошаговая инструкция для создания простого отчета:
- В дереве конфигурации перейдите в ветку
Отчетыи добавьте новый отчет (ПКМ → Добавить). - В конструкторе схемы компоновки данных (
СКД) укажите источник данных — табличную часть документа. - Добавьте поле для суммирования (например,
Товары.Сумма) и настройте группировку. - В настройках поля установите функцию
Сумма. - Сохраните отчет и запустите его через
Отчеты → ВашНовыйОтчет.
Пример схемы компоновки данных для суммирования колонки СуммаДокумента:
| Поле | Тип | Функция | Пример значения |
|---|---|---|---|
Дата |
Дата | Группировка | 15.05.2026 |
Контрагент |
СправочникСсылка.Контрагенты | Группировка | ООО "Ромашка" |
СуммаДокумента |
Число | Сумма | 45 678.90 |
КоличествоСтрок |
Число | Количество | 12 |
Для внешних обработок (например, для массового пересчета сумм) можно использовать следующий шаблон:
Процедура КомандаВыполнить(Команда)
Результат = Новый Структура;
Результат.Вставить("Сумма", 0);
Для Каждого Док Из Документы.РеализацияТоваровУслуг.Выбрать() Цикл
Для Каждого Строка Из Док.Товары Цикл
Результат.Сумма = Результат.Сумма + Строка.Сумма;
КонецЦикла;
КонецЦикла;
Сообщить("Общая сумма по всем документам: " + Результат.Сумма);
КонецПроцедуры
5. Суммирование с учетом иерархии и группировок
Если в табличной части есть группы строк (например, в документе Инвентаризация товаров или Акт сверки), стандартные методы суммирования могут давать некорректные результаты. В этом случае нужно использовать специальные функции для работы с иерархией.
Пример кода для суммирования с учетом группировки по Номенклатуре:
СуммаПоГруппам = Новый Соответствие;
// Перебираем строки с учетом иерархии
Для Каждого Строка Из ДокументОбъект.Товары Цикл
Если НЕ Строка.ЭтоГруппа Тогда
ТекущаяГруппа = Строка.Номенклатура.Родитель;
Если НЕ СуммаПоГруппам.СодержитКлюч(ТекущаяГруппа) Тогда
СуммаПоГруппам.Вставить(ТекущаяГруппа, 0);
КонецЕсли;
СуммаПоГруппам[ТекущаяГруппа] = СуммаПоГруппам[ТекущаяГруппа] + Строка.Сумма;
КонецЕсли;
КонецЦикла;
Для управляемых форм с динамическими списками можно использовать следующий подход:
Процедура РассчитатьИтогиПоГруппам()
Данные = ЭтотОбъект.Товары;
Итоги = Новый Структура;
Для Каждого Строка Из Данные Цикл
Если НЕ Строка.ЭтоГруппа Тогда
КлючГруппы = Строка.Номенклатура.Родитель.Наименование;
Если НЕ Итоги.СодержитКлюч(КлючГруппы) Тогда
Итоги.Вставить(КлючГруппы, 0);
КонецЕсли;
Итоги[КлючГруппы] = Итоги[КлючГруппы] + Строка.Сумма;
КонецЕсли;
КонецЦикла;
Сообщить(Новый ОписаниеОповещения(Итоги, "Итоги по группам номенклатуры"));
КонецПроцедуры
Особенности работы с группировками:
- 🔹 Строки-группы имеют свойство
ЭтоГруппа = Истина. - 🔹 Для доступа к родительской группе используйте
Строка.Номенклатура.Родитель. - 🔹 В 1С:ERP и 1С:КА 2 группировки могут быть многоуровневыми — учитывайте это в коде.
При суммировании по группам всегда проверяйте свойство ЭтоГруппа, чтобы избежать двойного учета заголовков групп.
6. Типичные ошибки и как их избежать
Даже опытные пользователи 1С иногда сталкиваются с некорректными итогами. Вот 5 самых распространенных ошибок и способы их исправления:
⚠️ Внимание: Если в табличной части есть строки с пустыми значениями (NULL), функцияСУММА()в запросе их проигнорирует, а цикл по строкам может выдать ошибку. Всегда проверяйте значения наЗначениеЗаполнено().
| Ошибка | Причина | Решение |
|---|---|---|
| Сумма не совпадает с ручным подсчетом | В таблице есть скрытые строки или фильтры | Проверьте настройки отбора и видимость строк (ТолькоПомеченныеНаУдаление = Ложь) |
| Ошибка "Тип не совпадает" | П попытка сложить число с нечисловым значением (например, строка или булево) | Используйте Число(Строка.Сумма) для приведения типов |
| Итоги не обновляются при изменении данных | Кэширование формы или неверное событие пересчета | Вызывайте пересчет в обработчике ПриИзменении или ПередЗаписью |
| Запрос работает слишком долго | Отсутствуют индексы по полям фильтрации | Добавьте индексы в конфигураторе или оптимизируйте запрос |
| Сумма округляется некорректно | Настройки точности хранения чисел в конфигурации | Используйте Окр(Сумма, 2) для явного указания точности |
Еще несколько критических моментов, которые часто упускают:
- 🔸 В управляемых формах данные табличной части могут подгружаться порциями (ленивая загрузка). В этом случае суммирование в цикле даст неверный результат. Используйте
Объект.Товары.Выгрузить()для полной загрузки данных. - 🔸 При работе с валютными суммами не забывайте учитывать курс валюты на дату документа. Используйте
СуммаВВалюте()илиСуммаВРублях(). - 🔸 В 1С:ЗУП 3.1 при суммировании начислений проверяйте период действия записей — некоторые строки могут быть неактуальны на дату расчета.
⚠️ Внимание: В конфигурациях с регламентированным учетом (например, 1С:Бухгалтерия 3.0) итоги по колонкам могут зависеть от настроек учетной политики. Всегда сверяйте результаты с данными стандартных отчетов (например, Оборотно-сальдовая ведомость).
FAQ: Ответы на частые вопросы
Можно ли посчитать сумму колонки в мобильном приложении 1С?
В мобильной версии 1С:Предприятие (например, в приложении 1С:Мобильная платформа) стандартная кнопка Итоги может отсутствовать. Однако вы можете:
- Использовать отчеты, адаптированные для мобильных устройств (они должны быть заранее настроены в десктопной версии).
- Создать внешнюю обработку с кнопкой расчета суммы и загрузить ее в мобильное приложение.
- В некоторых конфигурациях (например, 1С:УНФ) итоги отображаются автоматически в нижней части экрана.
Ограничение: в мобильной версии нет возможности писать код на встроенном языке, поэтому программное суммирование доступно только через серверные обработки.
Как посчитать сумму только по отмеченным строкам?
Если в табличной части есть колонка с флажками (например, Отметка), используйте следующий код:
СуммаОтмеченных = 0;
Для Каждого Строка Из ДокументОбъект.Товары Цикл
Если Строка.Отметка = Истина Тогда
СуммаОтмеченных = СуммаОтмеченных + Строка.Сумма;
КонецЕсли;
КонецЦикла;
Для управляемых форм проверяйте свойство Пометка:
Сумма = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл
Если Строка.Пометка Тогда
Сумма = Сумма + Строка.Сумма;
КонецЕсли;
КонецЦикла;
Почему сумма в запросе и сумма в цикле отличаются?
Разница обычно возникает из-за:
- Фильтров в запросе: проверьте условия в секции
ГДЕ. - Пустых значений: запрос игнорирует NULL, а цикл может их учитывать как 0.
- Типов данных: если в колонке есть нечисловые значения, запрос их проигнорирует, а цикл выдаст ошибку.
- Прав доступа: в цикле могут быть видны не все строки из-за ограничений RLS (разграничение прав).
Чтобы найти причину, сравните количество строк в запросе (ВЫБРАТЬ КОЛИЧЕСТВО(*)) и в цикле (ДокументОбъект.Товары.Количество()).
Как вывести сумму колонки в печатную форму документа?
Добавьте в макет печатной формы новый реквизит и заполните его в процедуре ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СуммаДляПечати = 0;
Для Каждого Строка Из ДокументОбъект.Товары Цикл
СуммаДляПечати = СуммаДляПечати + Строка.Сумма;
КонецЦикла;
Данные = Новый Структура;
Данные.Вставить("ИтоговаяСумма", СуммаДляПечати);
ДокументРезультат.Параметры.Данные = Данные;
КонецПроцедуры
В макете добавьте поле с выражением {Данные.ИтоговаяСумма}.
Можно ли автоматически обновлять сумму при изменении строк?
Да, для этого используйте обработчик события ПриИзменении для табличной части:
Процедура ТоварыПриИзменении(Элемент)
ЭтотОбъект.ИтоговаяСумма = 0;
Для Каждого Строка Из ЭтотОбъект.Товары Цикл
ЭтотОбъект.ИтоговаяСумма = ЭтотОбъект.ИтоговаяСумма + Строка.Сумма;
КонецЦикла;
КонецПроцедуры
Для управляемых форм используйте событие ПриИзмененииНаСервере:
Процедура ТоварыПриИзмененииНаСервере(Элемент)
Сумма = 0;
Для Каждого Строка Из Товары Цикл
Сумма = Сумма + Строка.Сумма;
КонецЦикла;
ИтоговаяСумма = Сумма;
КонецПроцедуры
Не забудьте добавить реквизит ИтоговаяСумма в форму и привязать его к элементу отображения (например, полю ввода).