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