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

Разработка и Конфигурация · 9 мин

Как соединить две строки в запросе 1С 8

Способы соединить две строки в запросе 1С 8: оператор +, ограничения типов, обработка NULL, функция СОЕДИНИТЬ и типичные ошибки разработчиков.

Язык запросов 1С 8 поддерживает операцию конкатенации строк, но по сравнению с SQL она имеет заметные ограничения. Оператор «+» работает только для строковых значений, не позволяет смешивать типы без явного приведения и ведёт себя неочевидно при встрече с NULL. Из-за этого типичная задача «склеить фамилию, имя и отчество» или «собрать наименование с артикулом» часто заканчивается ошибкой запроса или пустым результатом.

Разработчику важно понимать три вещи: какие операнды допустимы в конкатенации, как защититься от NULL в исходных данных и когда вместо оператора «+» стоит использовать функцию СОЕДИНИТЬ или вынести сборку строки на уровень встроенного языка. Ниже разобраны рабочие синтаксисы, ограничения платформы и способы проверки результата.

Как работает оператор «+» для строк в запросе 1С

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

ВЫБРАТЬ

Сотрудники.Фамилия + " " + Сотрудники.Имя КАК ФИО

ИЗ

Справочник.Сотрудники КАК Сотрудники

Строковые литералы в запросе заключаются в двойные кавычки. Если внутри литерала нужна кавычка, она удваивается: "Иван ""Иваныч"" Петров". Это частая причина синтаксических ошибок при переносе текста запроса из встроенного языка в консоль запросов и обратно.

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

Ограничения по типам: почему запрос выдаёт ошибку

Ключевое ограничение платформы: оператор «+» в запросе требует, чтобы оба операнда имели одинаковый тип. Соединить строку с числом, датой или булево напрямую нельзя — конструктор запроса выдаст ошибку «Несовместимые типы» или подобное сообщение. Это принципиальное отличие от встроенного языка 1С, где неявное преобразование разрешено.

Поля составного типа (например, реквизит, который может хранить и строку, и ссылку) тоже вызовут конфликт. Прежде чем соединять такие поля, их нужно привести к конкретному строковому типу функцией ВЫРАЗИТЬ:

ВЫБРАТЬ

ВЫРАЗИТЬ(Комментарий.Значение КАК СТРОКА(200)) + " / доп." КАК Текст

ИЗ

РегистрСведений.Комментарии КАК Комментарий

Типичные ошибки
01
Соединение строки с числом или датой без ПРЕДСТАВЛЕНИЕ — запрос падает с ошибкой несовместимых типов
02
Игнорирование NULL: если хотя бы один операнд NULL, вся склеенная строка становится NULL
03
Составной тип поля не приведён через ВЫРАЗИТЬ — ошибка ещё на этапе проверки запроса
04
Потеря разделителя: фамилия и имя сливаются в одно слово из-за пропущенного пробела-литерала

Как обработать NULL при конкатенации

Если любой из операндов конкатенации равен NULL, результат всего выражения тоже будет NULL. На практике это проявляется так: поле «Отчество» у части сотрудников не заполнено, и в итоговой выборке у этих людей пропадает ФИО целиком, хотя фамилия и имя есть.

Стандартная защита — функция ЕСТЬNULL, которая подставляет значение по умолчанию вместо NULL. Для строк обычно подставляют пустую строку:

ВЫБРАТЬ

Сотрудники.Фамилия + " " + Сотрудники.Имя + " "

+ ЕСТЬNULL(Сотрудники.Отчество, "") КАК ФИО

ИЗ

Справочник.Сотрудники КАК Сотрудники

Альтернатива — конструкция ВЫБОР КОГДА ... ТОГДА, если логика подстановки сложнее: например, при пустом отчестве нужно не просто опустить его, но и убрать лишний пробел. В простых случаях ЕСТЬNULL компактнее и читается легче.

Соединение строки с числом и датой: функция ПРЕДСТАВЛЕНИЕ

Чтобы встроить в строку число, дату или ссылку, используется функция ПРЕДСТАВЛЕНИЕ. Она преобразует значение любого типа в его строковое представление, после чего конкатенация становится допустимой:

ВЫБРАТЬ

"Документ № " + ПРЕДСТАВЛЕНИЕ(Реализация.Номер)

+ " от " + ПРЕДСТАВЛЕНИЕ(Реализация.Дата) КАК Описание

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

У ПРЕДСТАВЛЕНИЕ есть особенности, о которых нужно помнить. Формат строки зависит от региональных настроек сервера: дата может вывести как «01.03.2026», так и в другом формате, а числа — с разделителем групп разрядов. Если результат конкатенации участвует в дальнейших сравнениях или выгружается во внешние системы, такая нестабильность формата становится источником ошибок.

Для ссылочных типов ПРЕДСТАВЛЕНИЕ возвращает то же, что пользователь видит в интерфейсе (например, наименование контрагента). Это удобно для отчётов, но не подходит для программной логики, где нужны стабильные значения — там лучше соединять конкретные реквизиты объекта.

Функция СОЕДИНИТЬ и альтернативные подходы

В свежих версиях платформы 1С доступна функция СОЕДИНИТЬ, которая объединяет несколько строковых аргументов. Её преимущество перед цепочкой операторов «+» — более компактная запись при большом числе фрагментов. Синтаксис: СОЕДИНИТЬ(Строка1, Строка2, ...), количество аргументов ограничено платформой.

Если целевая версия платформы не поддерживает эту функцию, остаются два рабочих варианта. Первый — классическая конкатенация через «+» с ЕСТЬNULL и ПРЕДСТАВЛЕНИЕ. Второй — вынести сборку строки из запроса: выбрать отдельные поля, выгрузить результат в таблицу значений и склеить строки в цикле встроенного языка, где доступны СтрШаблон и гибкое форматирование.

Сравнение вариантов

Оператор «+»

Универсальный способ, работает во всех версиях. Минусы: громоздко при многих фрагментах, требует ЕСТЬNULL и ПРЕДСТАВЛЕНИЕ

Функция СОЕДИНИТЬ

Компактнее при большом числе аргументов. Ограничение: доступна только в новых версиях платформы, типы аргументов всё равно должны быть строковыми

Сборка во встроенном языке

Максимальная гибкость форматирования через СтрШаблон. Минусы: дополнительный цикл обработки, не подходит для группировок и итогов внутри запроса

Практические сценарии и проверка результата

Сборка ФИО из трёх полей

Классическая задача — объединить фамилию, имя и отчество с пробелами. Рабочий шаблон с защитой от NULL: Фамилия + " " + Имя + " " + ЕСТЬNULL(Отчество, ""). Если отчество может быть пустой строкой, а не NULL, дополнительно проверяйте условие через ВЫБОР, чтобы не получить двойной пробел в конце.

Наименование с артикулом для печатной формы

Типовой пример: Наименование + " (арт. " + ПРЕДСТАВЛЕНИЕ(Артикул) + ")". Артикул часто хранится как строка — тогда ПРЕДСТАВЛЕНИЕ не нужно. Проверьте тип реквизита в конфигураторе перед написанием запроса: это избавит от лишних преобразований.

Порядок действий
  1. 1
    Определите типы соединяемых полей в конфигураторе или через консоль запросов
  2. 2
    Приведите нестроковые значения через ПРЕДСТАВЛЕНИЕ, составные — через ВЫРАЗИТЬ
  3. 3
    Оберните поля, которые могут содержать NULL, функцией ЕСТЬNULL
  4. 4
    Добавьте разделители строковыми литералами в двойных кавычках
  5. 5
    Выполните запрос в консоли и проверьте строки с пустыми исходными полями
Контрольные точки

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

Записи с незаполненным отчеством или артикулом
Норма

Строка собрана, лишних пробелов и пустот нет

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

Вся склеенная строка пустая — значит, NULL не обработан

Поле даты или числа внутри строки
Норма

Значение выведено в ожидаемом формате

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

Ошибка несовместимых типов при выполнении запроса

Составной реквизит
Норма

Конкатенация выполняется без ошибок

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

Ошибка ещё при проверке текста запроса — нужен ВЫРАЗИТЬ

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

Можно ли соединить строки в запросе через функцию СЦЕПИТЬ, как в Excel?

Нет, в языке запросов 1С функции СЦЕПИТЬ не существует. Используется оператор «+» или функция СОЕДИНИТЬ в новых версиях платформы. Синтаксис ближе к SQL, чем к табличным редакторам.

Почему в результате конкатенации пустая строка, хотя поля заполнены?

Почти всегда причина в NULL: одно из полей получено соединением таблиц без совпадения и содержит NULL, который «обнуляет» всё выражение. Оберните подозрительные поля в ЕСТЬNULL(Поле, "") и повторите запрос.

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

В языке запросов нет прямого аналога Символы.ПС из встроенного языка. Если перенос нужен для вывода, соберите строку в запросе без переноса, а затем обработайте результат во встроенном языке, заменив служебный маркер на Символы.ПС.

Ограничена ли длина итоговой строки при конкатенации?

Если результат присваивается полю, определённому через ВЫРАЗИТЬ с фиксированной длиной, строка обрежется до указанного размера. Для полей неограниченной длины обрезания нет, но чрезмерно длинные строки замедляют выборку и занимают память.

Работает ли конкатенация в условиях ГДЕ и соединениях?

Да, оператор «+» допустим в условиях, например: ГДЕ Фамилия + " " + Имя = &ФИО. Однако такие условия не используют индексы и выполняются медленно на больших таблицах — по возможности сравнивайте поля по отдельности.

Итог

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

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