Разработка и Конфигурация · 11 мин
Как сложить ячейки в 1С: все рабочие способы
Как сложить ячейки в 1С: сумма в табличном документе, итоги в табличной части, СКД, запросы и программное сложение на встроенном языке.
Под «сложением ячеек» в 1С пользователи обычно понимают несколько разных задач: посчитать сумму чисел в табличном документе (похожем на Excel), вывести итог по колонке табличной части документа, получить сумму в отчёте на СКД или сложить значения программно в модуле. Способ зависит от того, где именно находятся данные, и ошибочный выбор инструмента — самая частая причина «не считается».
В отличие от Excel, табличный документ 1С не пересчитывает формулы автоматически при вводе данных: формулы в ячейках работают только если их включили специально, а в большинстве конфигураций итоги выводятся программно. Поэтому важно сначала определить сценарий, а уже потом применять конкретный приём.
Ниже разобраны все основные способы сложения ячеек: от простой суммы в табличном документе до агрегатных функций в запросах и ресурсов СКД. Для каждого способа приведены условия применения, ограничения и типичные ошибки.
Определяем, где находятся ячейки: табличный документ, табличная часть или отчёт
Первый шаг — понять тип данных. Табличный документ — это печатная форма или макет, похожий на лист Excel: ячейки адресуются по строкам и колонкам. Табличная часть — это колонки и строки внутри документа или справочника (например, «Товары» в реализации). Отчёт на СКД — это отдельный механизм с собственными итогами.
Признак табличного документа: вы видите сетку с адресами ячеек и можете открыть свойства ячейки. Признак табличной части: строки добавляются кнопкой «Добавить», есть колонки с названиями реквизитов. Отчёт СКД обычно имеет кнопку «Сформировать» и настройки вариантов.
Как выбрать способ
Сложение ячеек формулой в табличном документе
Табличный документ 1С поддерживает формулы, похожие на Excel, но с синтаксисом адресации R1C1. Чтобы вставить формулу, откройте табличный документ (например, через «Файл — Новый — Табличный документ» или в макете конфигуратора), выделите ячейку и в свойствах установите «СодержитЗначение» — нет, а в поле «Текст» введите формулу, начиная со знака равенства.
Адресация работает так: R2C3 означает строка 2, колонка 3. Диапазон задаётся через двоеточие: R2C1:R10C1 — ячейки первой колонки со 2-й по 10-ю строку. Относительные смещения записываются в квадратных скобках: R[-1]C — ячейка выше в той же колонке.
=Сумма(R2C3:R15C3)
=R2C3+R3C3+R4C3
=Сумма(R[-5]C:R[-1]C)Важное ограничение: формулы в табличном документе пересчитываются не всегда автоматически. Если документ заполняется программно, формулы сработают только если у ячеек включён режим вычисления, а у документа не отключён пересчёт. В типовых печатных формах итоги почти всегда подставляются кодом, а не формулами — это надёжнее.
Программное сложение ячеек табличного документа
Если табличный документ формируется из кода, сумму удобнее посчитать встроенным языком и вывести готовое число. Для чтения значения ячейки используется объект ТабличныйДокумент и его методы Область() или прямое обращение по адресу.
Типовой приём — пройти циклом по строкам области данных и накапливать сумму. При этом значение ячейки нужно проверять на тип: если в ячейке текст или пусто, сложение выдаст ошибку либо некорректный результат. Перед сложением лучше привести значение к числу функцией Число() с проверкой.
Сумма = 0;
Для НомерСтроки = 2 По 15 Цикл
ЗначениеЯчейки = ТабДок.Область("R" + НомерСтроки + "C3").Текст;
Если ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
Сумма = Сумма + Число(ЗначениеЯчейки);
КонецЕсли;
КонецЦикла;
ТабДок.Область("R16C3").Текст = Сумма;Обратите внимание: свойство «Текст» возвращает строку, поэтому прямое сложение даст конкатенацию, а не сумму. Всегда преобразуйте текст в число. Если ячейка содержит значение (заполнена программно как число), можно обращаться через параметр ячейки или хранить сумму в переменной ещё на этапе заполнения документа — это самый надёжный вариант.
Сумма по колонке табличной части документа
Для табличных частей в модуле объекта или формы есть встроенный метод Итог(). Он возвращает сумму по указанной колонке за одну строку кода и корректно обрабатывает пустые значения. Это стандартный способ, который используется в типовых конфигурациях для расчёта «Всего» по документу.
// В модуле объекта документа
СуммаДокумента = Товары.Итог("Сумма");
// На форме
ИтогоПоДокументу = Объект.Товары.Итог("Сумма");Если нужно сложить не все строки, а только часть (например, по условию), метод Итог() не подойдёт — используйте цикл с проверкой условия. Также учитывайте: на управляемой форме табличная часть может быть представлена как ДанныеФормыКоллекция, и метод Итог() вызывается так же, но обращение идёт через Объект.
- 1Откройте модуль формы документа
- 2Напишите: ИтогСумма = Объект.Товары.Итог("Сумма") — с именем вашей табличной части и колонки
- 3Выведите результат в поле формы или в заголовок элемента
- 4Если итог должен обновляться при редактировании, добавьте пересчёт в обработчик ПриИзменении колонки суммы и при удалении строки
- 5Проверьте: добавьте две строки с известными суммами и сверьте итог вручную
Сложение в запросах: функция СУММА
Когда данные нужно сложить по базе — по всем документам за период, по контрагенту, по складу — правильный инструмент это запрос с агрегатной функцией СУММА(). Запрос выполняется на сервере и не требует перебора записей в коде, что намного быстрее на больших объёмах.
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
СУММА(Продажи.Количество) КАК Количество,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
ИТОГИ
СУММА(Количество),
СУММА(Сумма)
ПО ОБЩИЕКонструкция ИТОГИ ПО ОБЩИЕ добавляет в результат запроса строку с общей суммой, а ИТОГИ ПО полю — промежуточные итоги по группам. При обходе результата запроса строки итогов имеют тип записи «ИтогПоГруппировке» или «ОбщийИтог» — это нужно учитывать в коде обхода.
Частая ошибка — применять СУММА() к полю, которое содержит NULL (например, из левого соединения). СУММА игнорирует NULL, но если все значения NULL, результат тоже будет NULL, и сравнение или вывод могут работать неожиданно. Используйте ЕСТЬNULL(СУММА(Поле), 0) для гарантированного числа.
Итоги в отчётах на СКД: ресурсы и группировки
В системе компоновки данных суммы по ячейкам-колонкам настраиваются без кода. Откройте схему компоновки, перейдите на закладку «Ресурсы» и добавьте поле с выражением Сумма(Сумма). После этого СКД автоматически посчитает итоги по каждой группировке и общий итог отчёта.
Где именно выводить итоги, задаётся на закладке «Настройки»: у группировки можно включить «Общий итог», а в параметрах вывода — расположение итогов (в начале, в конце, вертикально). Если ресурс добавлен, но итог в отчёте не виден, проверьте, что у выбранной группировки включён вывод итогов и ресурс не ограничен списком группировок в колонке «Рассчитывать по».
Как проверить результат
Итог по группировке равен сумме детальных строк и общему итогу
Итог больше детальных строк — вероятно задвоение из-за соединения таблиц в запросе
Возвращает число, равное ручной сумме видимых строк
Возвращает 0 — проверьте имя колонки и что суммы заполнены
Ячейка показывает число после ввода данных
Ячейка показывает саму формулу текстом — не включён режим формулы для ячейки
Частые ошибки и их последствия
Самая распространённая проблема — сложение строк вместо чисел. В табличном документе ячейки хранят текст, и выражение «100» + «200» даст «100200», а не 300. Всегда приводите значения к числу перед сложением.
Вторая типовая ошибка — задвоение сумм в запросах из-за соединения таблиц. Если соединить документ с двумя таблицами, где связь «один ко многим», строки перемножатся и СУММА() завысится. Проверяйте результат на контрольном примере с известным итогом.
Проверка результата и границы самостоятельной работы
Любой способ сложения проверяйте на малом контрольном наборе: две-три строки с числами, которые легко сложить в уме. Сверьте итог программы с ручным расчётом. Для отчётов полезно сравнить общий итог с суммой по группировкам — они должны совпадать.
Если итоги используются в учётных документах (счета, накладные, регистры), помните о риске: ошибка в формуле или запросе приведёт к неверным суммам в проводках и отчётности. Перед изменением типовой печатной формы или модуля документа сделайте копию информационной базы и проверьте изменения на копии.
Если требуется сложить значения по сложным условиям (иерархия, курсы валют, взаиморасчёты), разумнее использовать готовые механизмы конфигурации или привлечь специалиста по 1С — самодельный расчёт рядом с типовым часто даёт расхождения при закрытии периода.
Что важно запомнить
Способ сложения ячеек в 1С выбирается по месту данных: формула R1C1 или код — для табличного документа, Итог() — для табличной части, СУММА() — для запроса, ресурсы — для СКД. Всегда приводите текст к числу, обрабатывайте NULL и проверяйте итог на контрольном примере.
Частые вопросы
Почему формула =Сумма(...) в табличном документе показывает сам текст формулы?
Для ячейки не включён режим формулы. Откройте свойства ячейки и проверьте, что текст начинается со знака «=», а в свойствах табличного документа не отключено вычисление формул. В макетах конфигурации формулы обычно не применяют — там итоги выводятся программно.
Как сложить только строки, отмеченные флажком, в табличной части?
Метод Итог() считает все строки, поэтому нужен цикл: переберите строки табличной части и накапливайте сумму только для строк, где реквизит-флажок равен Истина. На управляемой форме такой пересчёт вызывают в обработчике ПриИзменении флажка.
СУММА() в запросе возвращает пустое значение вместо нуля. Что делать?
Это NULL — он возникает, когда по группировке нет ни одной строки со значением (например, при левом соединении). Оберните выражение в ЕСТЬNULL: ЕСТЬNULL(СУММА(Поле), 0) — и результат станет числом 0.
Можно ли в 1С складывать ячейки как в Excel, протянув диапазон?
Интерактивного автосуммирования как в Excel в табличном документе 1С нет. Диапазон указывается вручную в формуле вида =Сумма(R2C1:R10C1), а автоматического пересчёта при вводе данных по умолчанию не происходит.
Почему итог в отчёте СКД вдвое больше суммы строк?
Почти всегда причина в запросе набора данных: соединение с таблицей, где на одну строку приходится несколько связанных строк, дублирует суммы. Проверьте соединения в запросе, уберите лишние или перенесите данные в отдельный набор со связью на уровне СКД.
Как сложить ячейки из разных областей табличного документа?
В формуле перечислите ячейки через плюс: =R2C3+R5C3+R8C3. Программно — прочитайте каждую область методом Область(), преобразуйте текст в число и сложите в переменной, затем запишите результат в итоговую ячейку.