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

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

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

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

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

Типовая задача выглядит так: нужно в отчёте или в выгрузке получить номенклатуру, контрагента или документ в виде строки, чтобы объединить её с другим текстом, сгруппировать или передать во внешнюю систему. Без специальных функций запроса разработчику пришлось бы обходить выборку в коде и вызывать Строка(Ссылка) для каждой записи, что заметно медленнее.

Ниже разобраны оба механизма — ПРЕДСТАВЛЕНИЕ и ВЫРАЗИТЬ, их совместное использование, ограничения платформы и ошибки, которые чаще всего приводят к неработающим запросам.

Что делает функция ПРЕДСТАВЛЕНИЕ в запросе

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

Пример простого запроса:

ВЫБРАТЬ

ПРЕДСТАВЛЕНИЕ(Номенклатура) КАК НоменклатураПредставление,

ПРЕДСТАВЛЕНИЕ(Склад) КАК СкладПредставление

ИЗ

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

Результатом будут строки, а не ссылки. Это удобно для выгрузок в CSV, формирования печатных форм через запрос и передачи данных в системы, которые не понимают ссылочные типы 1С.

Важно понимать: ПРЕДСТАВЛЕНИЕ работает только со ссылочными типами. Применить её к числу или дате нельзя — конструктор запроса выдаст ошибку. Для дат и чисел приведение к строке в языке запросов напрямую не поддерживается, и это частая точка недопонимания.

Как применить ВЫРАЗИТЬ к представлению

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

ВЫБРАТЬ

ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Ссылка) КАК Строка(150)) КАК ДокументСтрокой

ИЗ

Документ.ПоступлениеТоваровУслуг КАК Поступление

Длина в скобках ограничивает результат: если представление длиннее указанного значения, оно будет обрезано. Поэтому длину стоит выбирать с запасом — для документов обычно достаточно 100–150 символов, для наименований контрагентов с полными названиями лучше закладывать 200 и более.

Когда ВЫРАЗИТЬ обязателен

Явное приведение необходимо при объединении запросов через ОБЪЕДИНИТЬ: типы полей в объединяемых выборках должны совпадать. Если в одной части представление имеет тип Строка(100), а в другой — Строка(250), результат может обрезаться по меньшей длине. Приведение обеих частей к одному типу решает проблему.

Объединение представления с другими строками

Частая задача — собрать составную строку, например «Контрагент: ООО Ромашка, договор № 45». В языке запросов строки соединяются оператором +, но все операнды должны быть строками:

ВЫБРАТЬ

"Контрагент: " + ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Контрагент) КАК Строка(200)) КАК Описание

ИЗ

Документ.СчетНаОплатуПокупателю КАК Счет

Если хотя бы один операнд — не строка (число, дата, ссылка), запрос не выполнится. Для чисел и дат обходной путь — вычисляемые поля в СКД, где доступна функция Формат(), либо сборка итоговой строки уже в коде модуля после выполнения запроса.

Учитывайте, что конкатенация представлений в запросе выполняется на сервере СУБД и на больших выборках добавляет нагрузку. Если строка нужна только для показа в отчёте, часто выгоднее собирать её в настройках СКД, а не в тексте запроса.

bsl
ВЫБРАТЬ
	ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура) КАК Строка(200)) КАК ТоварСтрокой
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК Товары

Представление ссылок составного типа и NULL

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

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

ВЫБРАТЬ

ЕСТЬNULL(ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Контрагенты.Ссылка) КАК Строка(200)), "<не указан>") КАК КонтрагентСтрокой

ИЗ

Документ.ЗаказПокупателя КАК Заказ

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты

ПО Заказ.Контрагент = Контрагенты.Ссылка

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

Представление в отчётах на СКД

В системе компоновки данных есть отдельный механизм: поле ссылочного типа в наборе данных СКД автоматически получает поле-представление, которое можно вывести в отчёт без изменения запроса. Достаточно в настройках добавить в ресурсы или поля нужную ссылку — СКД сама покажет её текстовое представление.

Если же нужна именно произвольная строка (склейка нескольких полей, форматирование дат), используйте вычисляемые поля СКД с функциями языка выражений: там доступны Строка(), Формат() и другие возможности, которых нет в языке запросов. Это правильное место для сложного форматирования — не перегружайте запрос тем, что эффективнее делается на уровне компоновки.

Способы получить строку

ПРЕДСТАВЛЕНИЕ в запросе

Подходит для ссылок, работает на уровне СУБД; не применимо к датам и числам

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

Подходят для склейки строк, форматирования дат и чисел; работают только внутри отчёта на СКД

Обход выборки в коде

Максимальная гибкость через Строка() и Формат(), но медленнее на больших объёмах данных

Производительность и ограничения

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

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

Контрольные точки

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

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

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

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

Колонка содержит ссылки или значение NULL там, где ожидалась строка

Полнота представления
Норма

Номер и дата документа видны целиком

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

Строка обрезана — увеличьте длину в Строка(N)

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

Для ненайденных записей выводится заглушка или пустая строка

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

Вся склеенная строка пустая из-за NULL в одном из операндов

FAQ

Можно ли преобразовать дату в строку прямо в запросе?

Нет, язык запросов 1С не поддерживает приведение даты и числа к строке. Используйте вычисляемые поля СКД с функцией Формат() или формируйте строку в коде после выполнения запроса.

Что вернёт ПРЕДСТАВЛЕНИЕ для перечисления?

Синоним значения перечисления — тот текст, который пользователь видит в интерфейсе. Например, для значения с синонимом «Отгружен» вернётся строка «Отгружен».

Чем ПРЕДСТАВЛЕНИЕ отличается от ПРЕДСТАВЛЕНИЕССЫЛКИ?

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

Почему запрос с ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(...) КАК Строка(50)) обрезает данные?

Оператор ВЫРАЗИТЬ жёстко ограничивает длину строки указанным числом. Если представление длиннее 50 символов, оно усекается. Увеличьте длину с запасом — для документов обычно до 150, для контрагентов до 200 и более.

Можно ли сгруппировать результат по представлению?

Технически можно, но делать так не стоит: группировка по строке медленнее и опасна совпадением представлений у разных объектов (два контрагента с одинаковым наименованием сольются в одну группу). Группируйте по ссылке, а представление выводите как дополнительное поле.

Итог

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

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