К статье
Практический материал

Разработка и Конфигурация · 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 — это частый источник ошибок в сообщениях пользователю.

Типичные ошибки
01
Сложение строки с числом без Строка() или Формат() — получение ошибки выполнения в момент обращения к коду
02
Пропущенный параметр в СтрШаблон — в сообщении пользователю остаётся маркер вида %2
03
Потерянный пробел или разделитель при длинной цепочке «+» — склеенный текст вида «ИвановПётр»
04
Использование Формат() без форматной строки — число и дата выводятся в зависимости от региональных настроек сеанса

Объединение массива строк через СтрСоединить

Если фрагменты строки уже собраны в массив — например, список товаров, ФИО из трёх полей, части адреса — их объединяют функцией СтрСоединить. Она принимает массив и необязательный разделитель:

ЧастиАдреса = Новый Массив;

ЧастиАдреса.Добавить("г. Москва");

ЧастиАдреса.Добавить("ул. Примерная");

ЧастиАдреса.Добавить("д. 1");

Адрес = СтрСоединить(ЧастиАдреса, ", ");

// "г. Москва, ул. Примерная, д. 1"

Перед соединением полезно отфильтровать пустые элементы, иначе в результате появятся двойные разделители: «г. Москва, , д. 1». Проверяйте каждый фрагмент на пустоту перед добавлением в массив или очищайте массив от пустых значений заранее.

Существует и обратная функция — СтрРазделить, которая раскладывает строку в массив по разделителю. Пара этих функций покрывает большинство задач разбора и сборки составных строк без ручного перебора символов.

Порядок действий при сборке составной строки
  1. 1
    Определите источник данных: отдельные переменные, реквизиты объекта или массив значений
  2. 2
    Приведите нестроковые значения к строке через Строка() или Формат() с явной форматной строкой
  3. 3
    Выберите способ соединения: «+» для пары строк, СтрШаблон для шаблона, СтрСоединить для массива
  4. 4
    Отфильтруйте пустые фрагменты, чтобы не получить лишние разделители
  5. 5
    Проверьте результат в отладчике или через Сообщить() на типовых и граничных данных

Сложение строк в запросах

В языке запросов 1С конкатенация тоже выполняется оператором «+». Это используют, чтобы получить составное представление уже на выходе из запроса, не обрабатывая выборку в коде:

ВЫБРАТЬ

Контрагенты.Фамилия + " " + Контрагенты.Имя КАК ПолноеИмя

ИЗ

Справочник.Контрагенты КАК Контрагенты

Ограничения существенные: в запросе нельзя складывать строки неограниченной длины, а при сложении строк с другими типами нужно явное приведение через ВЫРАЗИТЬ или ПРЕДСТАВЛЕНИЕ. Функция ПРЕДСТАВЛЕНИЕ возвращает строковое представление ссылки, что удобно для отчётов, но замедляет запрос на больших выборках.

Практическая рекомендация: если составная строка нужна только для вывода пользователю, а выборка большая, часто выгоднее получить отдельные поля и склеить их уже в коде или в СКД через вычисляемое поле. Это снижает нагрузку на СУБД и упрощает отладку.

Сравнение способов сложения строк

Оператор «+»

Подходит для 2–4 коротких фрагментов; при большом числе частей код плохо читается, легко потерять разделитель

СтрШаблон

Лучший выбор для сообщений и печатных текстов с подстановкой значений; ограничение — до %10 и строгое соответствие параметров

СтрСоединить

Идеальна для массива однотипных фрагментов с единым разделителем; требует предварительной сборки массива

Конкатенация в запросе

Удобна для представлений в выборках; не работает со строками неограниченной длины и может замедлять запрос

Производительность и сборка строк в цикле

Частая задача — собрать длинный текст в цикле: сформировать тело письма, XML-фрагмент, протокол обработки. На небольшом числе итераций обычный оператор «+» справляется, но на тысячах проходов цепочка конкатенаций может ощутимо замедлить выполнение, поскольку каждый раз создаётся новая строка.

Более устойчивый приём — добавлять фрагменты в массив и в конце один раз вызвать СтрСоединить. Для текстовых документов удобен объект ТекстовыйДокумент с методом ДобавитьСтроку, а для потоковой записи в файл — ЗаписьТекста. Эти подходы избегают многократного пересоздания строки и лучше контролируют переносы строк.

Если в цикле собирается протокол обработки или лог, добавляйте в массив сразу готовые строки с разделителем переноса, а в конце вызывайте СтрСоединить(Массив, Символы.ПС). Код получается короче, чем серия Текст = Текст +.., и легче отлаживается.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

После сборки строки результат стоит проверить до того, как он уйдёт в печатную форму, файл или сообщение контрагенту. Самый простой способ — точка останова и просмотр значения в отладчике либо временный вывод через Сообщить(). Для длинных текстов удобно вывести строку в поле текстового документа на тестовой форме.

Контролируйте три вещи: наличие разделителей между фрагментами, отсутствие «висячих» маркеров шаблона вида %2 и корректный формат чисел и дат. Отдельно проверяйте граничные случаи: пустые исходные поля, значение Неопределено, NULL из запроса — все они при прямом обращении могут дать либо пустую строку, либо ошибку.

Контрольные точки

Как проверить результат

Разделители между фрагментами
Норма

Между частями ровно один пробел, запятая или перенос строки

Тревожный признак

Склеенные слова или двойные разделители из-за пустых элементов

Маркеры шаблона
Норма

В итоговом тексте нет фрагментов вида %1, %2

Тревожный признак

Остался маркер — значит, параметр не передан в СтрШаблон

Числа и даты
Норма

Формат соответствует ожиданиям получателя или формату файла обмена

Тревожный признак

Представление зависит от региональных настроек сеанса

Пустые исходные данные
Норма

Пустые поля аккуратно пропущены, строка остаётся читаемой

Тревожный признак

Ошибка выполнения или лишние разделители при NULL и Неопределено

Частые вопросы

Можно ли сложить строку с числом без преобразования?

Нет. Встроенный язык 1С не выполняет неявное приведение числа к строке при операции «+» — возникнет ошибка выполнения. Сначала преобразуйте значение функцией Строка() или Формат(), а затем складывайте.

Чем СтрШаблон лучше цепочки операторов «+»?

Шаблон хранит текст сообщения целиком, отдельно от подставляемых значений. Такую строку проще читать, править и переводить, а риск потерять пробел или разделитель заметно ниже, чем в длинной цепочке сложений.

Как вставить перенос строки в результат?

Используйте Символы.ПС (перевод строки), Символы.ВК для возврата каретки или многострочный строковый литерал с вертикальной чертой в начале продолжающих строк. Для файлов обмена уточняйте требуемую комбинацию символов конца строки в формате приёмника.

Почему в запросе не складываются строки?

Чаще всего причина в типах: в запросе нельзя складывать строки неограниченной длины, а нестроковые поля требуют приведения через ВЫРАЗИТЬ или ПРЕДСТАВЛЕНИЕ. Также проверьте, что поле не содержит NULL — результат сложения с NULL будет NULL.

Как склеить значения из таблицы значений в одну строку?

Пройдите по строкам таблицы циклом, добавляйте нужное значение в массив, пропуская пустые, а после цикла вызовите СтрСоединить(Массив, ", "). Это стандартный приём для списков товаров, контрагентов и подобных перечислений.

Что выведет Строка(Ссылка) для справочника или документа?

Функция вернёт представление объекта: для справочника обычно наименование, для документа — строку вида «Реализация 0001 от 01.01.2026». Если нужен конкретный реквизит, обратитесь к нему через точку и преобразуйте уже его.

Итог

Что важно запомнить

Для пары строк используйте оператор «+», для сообщений с параметрами — СтрШаблон, для массива — СтрСоединить. Нестроковые значения всегда приводите через Строка() или Формат() с явной форматной строкой, пустые фрагменты фильтруйте, а результат проверяйте на разделители, маркеры шаблона и формат чисел и дат.