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