Разработка и Конфигурация · 10 мин
Как в запросе 1С соединить два значения в одно поле
Как объединить два значения в одно поле в запросе 1С: оператор конкатенации, функция ПОДСТРОКА, ВЫРАЗИТЬ, работа с NULL и типами данных. Примеры кода.
В языке запросов 1С объединение двух значений в одно строковое поле выполняется оператором конкатенации — знаком «+». Выражение вида Контрагенты.Наименование + " " + Контрагенты.ИНН возвращает одну колонку, в которой значения склеены через пробел. Это стандартный приём при формировании представлений ссылок, ФИО сотрудников, адресов и произвольных подписей в отчётах.
Главное ограничение: оператор «+» в запросе работает только со строками. Если хотя бы один из операндов — число, дата, булево или ссылка, запрос завершится ошибкой либо вернёт неожиданный результат. Поэтому перед склейкой нестроковые значения приводят к строке через функцию ПОДСТРОКА или выбирают строковые реквизиты объекта (например, Наименование вместо самой ссылки).
Ниже разобраны рабочие способы соединения значений, обработка NULL и разных типов данных, а также типичные ошибки, из-за которых запрос падает или возвращает пустые строки.
Базовый синтаксис: оператор «+» для склейки строк
Конкатенация в языке запросов 1С выглядит так же, как во встроенном языке: строки соединяются знаком плюс. Между значениями обычно вставляют разделитель — пробел, запятую, дефис — иначе значения слипнутся в одно слово.
ВЫБРАТЬ
Сотрудники.Фамилия + " " + Сотрудники.Имя + " " + Сотрудники.Отчество КАК ФИО
ИЗ
Справочник.Сотрудники КАК Сотрудники
Результатом будет одна колонка ФИО со значениями вида «Иванов Иван Иванович». Псевдоним после ключевого слова КАК обязателен, если поле будет использоваться в СКД, обходе выборки или конструкторе — без него платформа сгенерирует служебное имя, к которому неудобно обращаться.
Разделитель может быть любым строковым литералом: ", ", " — ", "/". Если разделитель не нужен, значения пишут подряд: Поле1 + Поле2.
ВЫБРАТЬ
Контрагенты.Наименование + ", ИНН " + Контрагенты.ИНН КАК Представление
ИЗ
Справочник.Контрагенты КАК КонтрагентыСоединение нестроковых типов: числа, даты, ссылки
Оператор «+» не приводит типы автоматически. Попытка сложить строку с числом или датой вызовет ошибку «Несовместимые типы» при выполнении запроса. Способ обхода зависит от типа исходного поля.
Числа и даты через ПОДСТРОКА
Универсальный приём — обернуть значение в ПОДСТРОКА(Поле, 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Определите типы обоих полей: строка, число, дата или ссылка
- 2Нестроковые поля оберните в ПОДСТРОКА или ВЫРАЗИТЬ КАК СТРОКА
- 3Каждое поле защитите функцией ЕСТЬNULL от значений NULL
- 4Соедините поля оператором + с разделителем между ними
- 5Дайте результату псевдоним через КАК и проверьте выборку в консоли запросов
Проверка результата и типичные ошибки
Проверять склейку удобнее всего в консоли запросов: сначала выведите оба поля по отдельности, убедитесь, что в них нет NULL и типы ожидаемые, затем добавьте конкатенацию. Так локализуется ошибка — сразу видно, какое именно поле ломает выражение.
Как проверить результат
Строка достаточной длины, значения полные
Числа или даты не склеились, запрос выдал ошибку типов
Поле содержит хотя бы часть значения или заглушку
Вместо строки пусто — сработал NULL
Наименования и ФИО помещаются целиком
Конец строки обрезан — увеличьте длину в ПОДСТРОКА или ВЫРАЗИТЬ
Альтернатива: склейка в СКД и встроенном языке
Если запрос питает отчёт на СКД, склейку часто выносят из текста запроса в вычисляемое поле. Там доступны СокрЛП, Формат, условия ВЫБОР и вся логика строк — запрос остаётся простым и быстрым, а форматирование сосредоточено в одном месте. Это особенно удобно для дат, чисел с разделителями и адресов с пропусками.
При программной обработке результата запроса значения иногда проще соединить уже в цикле обхода выборки средствами встроенного языка: Строка(Выборка.Поле1) + " " + Выборка.Поле2. Такой вариант оправдан, когда склеенное значение нужно один раз и не участвует в группировках, отборах и итогах запроса.
Что важно запомнить
Строки в запросе 1С соединяются оператором «+». Нестроковые типы приводят через ПОДСТРОКА или ВЫРАЗИТЬ КАК СТРОКА, NULL заменяют ЕСТЬNULL, результату дают псевдоним. Для сложного форматирования дат и чисел используют вычисляемые поля СКД.
Частые вопросы
Можно ли соединить больше двух значений?
Да, оператор «+» применяется цепочкой: Поле1 + " " + Поле2 + " " + Поле3 и так далее. Ограничений по количеству операндов нет, но каждое нестроковое поле нужно привести к строке, а каждое потенциально пустое — обернуть в ЕСТЬNULL.
Почему склеенное поле пустое, хотя оба реквизита заполнены?
Чаще всего одно из значений приходит как NULL — например, из левого соединения без подходящей записи или из реквизита незаполненной ссылки. NULL при конкатенации «заражает» весь результат. Проверьте поля по отдельности и добавьте ЕСТЬNULL к каждому.
Как склеить числа без пробелов и разделителей разрядов?
ПОДСТРОКА от числа может вернуть строку с неразрывными пробелами между разрядами. Надёжный способ — сначала умножить или привести число к целому и использовать ВЫРАЗИТЬ КАК СТРОКА, либо выполнить форматирование в вычисляемом поле СКД через Формат с шаблоном "ЧГ=0", который убирает группировку разрядов.
Чем ПРЕДСТАВЛЕНИЕ отличается от обращения к Наименование?
ПРЕДСТАВЛЕНИЕ возвращает то, что видит пользователь: для документа это «Реализация 000001 от 01.03.2026», для справочника — наименование или код. Обращение через точку к Наименование быстрее и предсказуемее, но работает только если у объекта есть такой реквизит.
Работает ли конкатенация в параметрах виртуальных таблиц?
Нет. В параметрах виртуальных таблиц и в условиях соединений допустимы только простые выражения над полями. Склейку выполняйте в списке выборки основного запроса или во временной таблице, а уже её используйте дальше.
Как ограничить длину склеенной строки?
Задайте длину в ВЫРАЗИТЬ(Поле КАК СТРОКА(N)) или обрежьте результат через ПОДСТРОКА(Выражение, 1, N). Учтите, что обрезка выполняется посимвольно и может разорвать слово — для отчётов это обычно допустимо, для печатных форм лучше переносить строку средствами макета.