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

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

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

Как объединить два значения в одно поле в запросе 1С: оператор конкатенации, функция ПОДСТРОКА, ВЫРАЗИТЬ, работа с NULL и типами данных. Примеры кода.

В языке запросов 1С объединение двух значений в одно строковое поле выполняется оператором конкатенации — знаком «+». Выражение вида Контрагенты.Наименование + " " + Контрагенты.ИНН возвращает одну колонку, в которой значения склеены через пробел. Это стандартный приём при формировании представлений ссылок, ФИО сотрудников, адресов и произвольных подписей в отчётах.

Главное ограничение: оператор «+» в запросе работает только со строками. Если хотя бы один из операндов — число, дата, булево или ссылка, запрос завершится ошибкой либо вернёт неожиданный результат. Поэтому перед склейкой нестроковые значения приводят к строке через функцию ПОДСТРОКА или выбирают строковые реквизиты объекта (например, Наименование вместо самой ссылки).

Ниже разобраны рабочие способы соединения значений, обработка NULL и разных типов данных, а также типичные ошибки, из-за которых запрос падает или возвращает пустые строки.

Базовый синтаксис: оператор «+» для склейки строк

Конкатенация в языке запросов 1С выглядит так же, как во встроенном языке: строки соединяются знаком плюс. Между значениями обычно вставляют разделитель — пробел, запятую, дефис — иначе значения слипнутся в одно слово.

ВЫБРАТЬ

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

ИЗ

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

Результатом будет одна колонка ФИО со значениями вида «Иванов Иван Иванович». Псевдоним после ключевого слова КАК обязателен, если поле будет использоваться в СКД, обходе выборки или конструкторе — без него платформа сгенерирует служебное имя, к которому неудобно обращаться.

Разделитель может быть любым строковым литералом: ", ", " — ", "/". Если разделитель не нужен, значения пишут подряд: Поле1 + Поле2.

bsl
ВЫБРАТЬ
	Контрагенты.Наименование + ", ИНН " + Контрагенты.ИНН КАК Представление
ИЗ
	Справочник.Контрагенты КАК Контрагенты

Соединение нестроковых типов: числа, даты, ссылки

Оператор «+» не приводит типы автоматически. Попытка сложить строку с числом или датой вызовет ошибку «Несовместимые типы» при выполнении запроса. Способ обхода зависит от типа исходного поля.

Числа и даты через ПОДСТРОКА

Универсальный приём — обернуть значение в ПОДСТРОКА(Поле, 1, N). Функция неявно преобразует число или дату в строковое представление и обрезает до указанной длины. Длина подбирается с запасом: для числа обычно достаточно 15–20 символов, для даты — 10–19.

ВЫБРАТЬ

"Документ № " + ПОДСТРОКА(Реализация.Номер, 1, 11)

+ " от " + ПОДСТРОКА(Реализация.Дата, 1, 10) КАК Представление

ИЗ

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

Учтите, что ПОДСТРОКА от числа возвращает значение с разделителями групп и возможными пробелами в начале, а от даты — строку в формате по умолчанию. Для аккуратного форматирования дату и число часто надёжнее склеивать уже на этапе построения отчёта в СКД или во встроенном языке через Формат().

Ссылки и их представления

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

Обработка NULL при склейке

Если хотя бы один из операндов конкатенации равен NULL, весь результат становится NULL — и в отчёте вместо строки появится пустое значение. NULL возникает при левом соединении без подходящей записи, при обращении к реквизиту через точку у незаполненной ссылки и в полях составного типа.

Стандартная защита — функция ЕСТЬNULL(Поле, ""), заменяющая NULL пустой строкой:

ВЫБРАТЬ

ЕСТЬNULL(Контрагенты.Наименование, "") + " / "

+ ЕСТЬNULL(Контрагенты.КонтактноеЛицо, "") КАК Представление

ИЗ

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

Нюанс: ЕСТЬNULL принимает только два аргумента, поэтому для каждого поля её применяют отдельно. Альтернатива — конструкция ВЫБОР КОГДА Поле ЕСТЬ NULL ТОГДА "" ИНАЧЕ Поле КОНЕЦ, она длиннее, но позволяет подставить осмысленную заглушку вроде «не указано».

Функция ВЫРАЗИТЬ и приведение типов

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

ВЫБРАТЬ

ВЫРАЗИТЬ(Товары.Номенклатура КАК СТРОКА(100)) + " ("

+ ВЫРАЗИТЬ(Товары.Характеристика КАК СТРОКА(100)) + ")" КАК Товар

ИЗ

Документ.Заказ.Товары КАК Товары

Ограничение: ВЫРАЗИТЬ к строке не выполняет форматирование — число превратится в строку «как есть», дата — в строку платформенного формата. Для красивого вывода дат и чисел с разделителями разрядов надёжнее использовать вычисляемые поля СКД с функцией Формат().

Сравнение способов склейки

Оператор +

Простой и быстрый. Подходит для строковых реквизитов. Не работает с числами, датами и ссылками напрямую.

ПОДСТРОКА

Приводит любой примитивный тип к строке. Требует указать длину, формат чисел и дат не контролируется.

ПРЕДСТАВЛЕНИЕ

Даёт пользовательское представление ссылки. Медленнее, не применяется в параметрах виртуальных таблиц.

Вычисляемые поля СКД

Гибкое форматирование через Формат() и СокрЛП(). Работает только в отчётах на СКД, не в обычных запросах.

Практические сценарии

ФИО из трёх полей

Классическая задача — собрать фамилию, имя и отчество в одну колонку. Поля склеивают через пробел, каждое оборачивают в ЕСТЬNULL, потому что отчество часто не заполнено. Если отчество пустое, в строке останется двойной пробел — при желании его убирают через вложенный ВЫБОР или уже в СКД функцией СокрЛП.

Номер и дата документа

Для подписей в отчётах документ представляют строкой «№ 000001 от 01.03.2026». Номер — строковый реквизит, склеивается напрямую, дату приводят через ПОДСТРОКА. Если нужен формат «ДД.ММ.ГГГГ» независимо от региональных настроек, используют вычисляемое поле СКД с Формат(Дата, "ДЛФ=D").

Адрес из нескольких реквизитов

Адреса в типовых конфигурациях хранятся по частям: регион, город, улица, дом. Склейка через запятую с ЕСТЬNULL по каждому полю даёт рабочий результат, но при незаполненных частях появляются лишние запятые. Аккуратное решение — собирать адрес в вычисляемом поле СКД, где доступны условия и функции строк.

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

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

Проверять склейку удобнее всего в консоли запросов: сначала выведите оба поля по отдельности, убедитесь, что в них нет NULL и типы ожидаемые, затем добавьте конкатенацию. Так локализуется ошибка — сразу видно, какое именно поле ломает выражение.

Типичные ошибки
01
Склейка строки с числом без ПОДСТРОКА — запрос падает с ошибкой несовместимых типов
02
Отсутствие ЕСТЬNULL — строки с NULL в любом из полей возвращают пустое значение вместо результата
03
Пропущенный разделитель — значения слипаются в одно слово, например «ИвановИван»
04
Слишком маленькая длина в ВЫРАЗИТЬ КАК СТРОКА(10) — длинные наименования обрезаются без предупреждения
05
Использование ПРЕДСТАВЛЕНИЕ в соединениях и группировках — резкое замедление запроса на больших таблицах
Контрольные точки

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

Тип поля в результате
Норма

Строка достаточной длины, значения полные

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

Числа или даты не склеились, запрос выдал ошибку типов

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

Поле содержит хотя бы часть значения или заглушку

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

Вместо строки пусто — сработал NULL

Длина результата
Норма

Наименования и ФИО помещаются целиком

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

Конец строки обрезан — увеличьте длину в ПОДСТРОКА или ВЫРАЗИТЬ

Альтернатива: склейка в СКД и встроенном языке

Если запрос питает отчёт на СКД, склейку часто выносят из текста запроса в вычисляемое поле. Там доступны СокрЛП, Формат, условия ВЫБОР и вся логика строк — запрос остаётся простым и быстрым, а форматирование сосредоточено в одном месте. Это особенно удобно для дат, чисел с разделителями и адресов с пропусками.

При программной обработке результата запроса значения иногда проще соединить уже в цикле обхода выборки средствами встроенного языка: Строка(Выборка.Поле1) + " " + Выборка.Поле2. Такой вариант оправдан, когда склеенное значение нужно один раз и не участвует в группировках, отборах и итогах запроса.

Итог

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

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

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

Можно ли соединить больше двух значений?

Да, оператор «+» применяется цепочкой: Поле1 + " " + Поле2 + " " + Поле3 и так далее. Ограничений по количеству операндов нет, но каждое нестроковое поле нужно привести к строке, а каждое потенциально пустое — обернуть в ЕСТЬNULL.

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

Чаще всего одно из значений приходит как NULL — например, из левого соединения без подходящей записи или из реквизита незаполненной ссылки. NULL при конкатенации «заражает» весь результат. Проверьте поля по отдельности и добавьте ЕСТЬNULL к каждому.

Как склеить числа без пробелов и разделителей разрядов?

ПОДСТРОКА от числа может вернуть строку с неразрывными пробелами между разрядами. Надёжный способ — сначала умножить или привести число к целому и использовать ВЫРАЗИТЬ КАК СТРОКА, либо выполнить форматирование в вычисляемом поле СКД через Формат с шаблоном "ЧГ=0", который убирает группировку разрядов.

Чем ПРЕДСТАВЛЕНИЕ отличается от обращения к Наименование?

ПРЕДСТАВЛЕНИЕ возвращает то, что видит пользователь: для документа это «Реализация 000001 от 01.03.2026», для справочника — наименование или код. Обращение через точку к Наименование быстрее и предсказуемее, но работает только если у объекта есть такой реквизит.

Работает ли конкатенация в параметрах виртуальных таблиц?

Нет. В параметрах виртуальных таблиц и в условиях соединений допустимы только простые выражения над полями. Склейку выполняйте в списке выборки основного запроса или во временной таблице, а уже её используйте дальше.

Как ограничить длину склеенной строки?

Задайте длину в ВЫРАЗИТЬ(Поле КАК СТРОКА(N)) или обрежьте результат через ПОДСТРОКА(Выражение, 1, N). Учтите, что обрезка выполняется посимвольно и может разорвать слово — для отчётов это обычно допустимо, для печатных форм лучше переносить строку средствами макета.