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