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