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