Разработка и Конфигурация · 9 мин
Как выразить представление как строку в запросе 1С
Как получить строковое представление ссылки в запросе 1С: функция ПРЕДСТАВЛЕНИЕ, ВЫРАЗИТЬ, ограничения, объединение строк и типичные ошибки разработчиков.
В языке запросов 1С ссылочные поля (документы, справочники, перечисления) нельзя напрямую складывать со строками или выводить в виде текста — запрос вернёт значение ссылочного типа. Чтобы получить читаемое текстовое представление объекта прямо в запросе, используется функция ПРЕДСТАВЛЕНИЕ(), а для приведения результата к строке фиксированной длины — оператор ВЫРАЗИТЬ.
Типовая задача выглядит так: нужно в отчёте или в выгрузке получить номенклатуру, контрагента или документ в виде строки, чтобы объединить её с другим текстом, сгруппировать или передать во внешнюю систему. Без специальных функций запроса разработчику пришлось бы обходить выборку в коде и вызывать Строка(Ссылка) для каждой записи, что заметно медленнее.
Ниже разобраны оба механизма — ПРЕДСТАВЛЕНИЕ и ВЫРАЗИТЬ, их совместное использование, ограничения платформы и ошибки, которые чаще всего приводят к неработающим запросам.
Что делает функция ПРЕДСТАВЛЕНИЕ в запросе
Функция ПРЕДСТАВЛЕНИЕ() принимает поле ссылочного типа и возвращает его текстовое представление — то же самое, что пользователь видит в интерфейсе в полях ввода и списках. Для справочника это обычно наименование, для документа — строка вида «Реализация товаров 0000000123 от 12.05.2026», для перечисления — синоним значения.
Пример простого запроса:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(Номенклатура) КАК НоменклатураПредставление,
ПРЕДСТАВЛЕНИЕ(Склад) КАК СкладПредставление
ИЗ
Документ.РеализацияТоваровУслуг.Товары
Результатом будут строки, а не ссылки. Это удобно для выгрузок в CSV, формирования печатных форм через запрос и передачи данных в системы, которые не понимают ссылочные типы 1С.
Важно понимать: ПРЕДСТАВЛЕНИЕ работает только со ссылочными типами. Применить её к числу или дате нельзя — конструктор запроса выдаст ошибку. Для дат и чисел приведение к строке в языке запросов напрямую не поддерживается, и это частая точка недопонимания.
Как применить ВЫРАЗИТЬ к представлению
Оператор ВЫРАЗИТЬ приводит значение к указанному типу. В связке с представлением он нужен в двух случаях: когда требуется строка фиксированной длины и когда результат участвует в операциях, требующих явного строкового типа.
ВЫБРАТЬ
ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Ссылка) КАК Строка(150)) КАК ДокументСтрокой
ИЗ
Документ.ПоступлениеТоваровУслуг КАК Поступление
Длина в скобках ограничивает результат: если представление длиннее указанного значения, оно будет обрезано. Поэтому длину стоит выбирать с запасом — для документов обычно достаточно 100–150 символов, для наименований контрагентов с полными названиями лучше закладывать 200 и более.
Когда ВЫРАЗИТЬ обязателен
Явное приведение необходимо при объединении запросов через ОБЪЕДИНИТЬ: типы полей в объединяемых выборках должны совпадать. Если в одной части представление имеет тип Строка(100), а в другой — Строка(250), результат может обрезаться по меньшей длине. Приведение обеих частей к одному типу решает проблему.
Объединение представления с другими строками
Частая задача — собрать составную строку, например «Контрагент: ООО Ромашка, договор № 45». В языке запросов строки соединяются оператором +, но все операнды должны быть строками:
ВЫБРАТЬ
"Контрагент: " + ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Контрагент) КАК Строка(200)) КАК Описание
ИЗ
Документ.СчетНаОплатуПокупателю КАК Счет
Если хотя бы один операнд — не строка (число, дата, ссылка), запрос не выполнится. Для чисел и дат обходной путь — вычисляемые поля в СКД, где доступна функция Формат(), либо сборка итоговой строки уже в коде модуля после выполнения запроса.
Учитывайте, что конкатенация представлений в запросе выполняется на сервере СУБД и на больших выборках добавляет нагрузку. Если строка нужна только для показа в отчёте, часто выгоднее собирать её в настройках СКД, а не в тексте запроса.
ВЫБРАТЬ
ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура) КАК Строка(200)) КАК ТоварСтрокой
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК ТоварыПредставление ссылок составного типа и NULL
Если поле имеет составной тип (например, «Партнёр» может ссылаться на разные справочники), ПРЕДСТАВЛЕНИЕ корректно вернёт текст для любого из возможных типов. Дополнительных действий не требуется — платформа сама определяет представление по фактическому значению ссылки.
С пустыми значениями ситуация тоньше. Для пустой ссылки функция вернёт пустую строку, а для NULL (например, при левом соединении без найденной записи) результатом будет NULL, а не строка. При конкатенации NULL «съедает» всю строку — результат тоже станет NULL. Поэтому в соединениях представление стоит оборачивать в ЕСТЬNULL:
ВЫБРАТЬ
ЕСТЬNULL(ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Контрагенты.Ссылка) КАК Строка(200)), "<не указан>") КАК КонтрагентСтрокой
ИЗ
Документ.ЗаказПокупателя КАК Заказ
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Заказ.Контрагент = Контрагенты.Ссылка
Представление в отчётах на СКД
В системе компоновки данных есть отдельный механизм: поле ссылочного типа в наборе данных СКД автоматически получает поле-представление, которое можно вывести в отчёт без изменения запроса. Достаточно в настройках добавить в ресурсы или поля нужную ссылку — СКД сама покажет её текстовое представление.
Если же нужна именно произвольная строка (склейка нескольких полей, форматирование дат), используйте вычисляемые поля СКД с функциями языка выражений: там доступны Строка(), Формат() и другие возможности, которых нет в языке запросов. Это правильное место для сложного форматирования — не перегружайте запрос тем, что эффективнее делается на уровне компоновки.
Способы получить строку
Подходит для ссылок, работает на уровне СУБД; не применимо к датам и числам
Подходят для склейки строк, форматирования дат и чисел; работают только внутри отчёта на СКД
Максимальная гибкость через Строка() и Формат(), но медленнее на больших объёмах данных
Производительность и ограничения
Функция ПРЕДСТАВЛЕНИЕ заставляет СУБД для каждой строки результата дополнительно обращаться к таблице справочника или документа за наименованием. На выборках в сотни тысяч записей это заметно увеличивает время выполнения. Если представление нужно только для финального вывода, а промежуточная обработка идёт по ссылкам, выбирайте в запросе и ссылку, и представление — фильтрацию и группировку выполняйте по ссылке.
Ещё одно ограничение: представление нельзя использовать в условиях соединения таблиц и в параметрах виртуальных таблиц. Соединения всегда строятся по ссылкам, иначе запрос потеряет индексы и резко замедлится.
Как проверить результат
Колонка имеет тип Строка, значения читаемы как текст
Колонка содержит ссылки или значение NULL там, где ожидалась строка
Номер и дата документа видны целиком
Строка обрезана — увеличьте длину в Строка(N)
Для ненайденных записей выводится заглушка или пустая строка
Вся склеенная строка пустая из-за NULL в одном из операндов
FAQ
Можно ли преобразовать дату в строку прямо в запросе?
Нет, язык запросов 1С не поддерживает приведение даты и числа к строке. Используйте вычисляемые поля СКД с функцией Формат() или формируйте строку в коде после выполнения запроса.
Что вернёт ПРЕДСТАВЛЕНИЕ для перечисления?
Синоним значения перечисления — тот текст, который пользователь видит в интерфейсе. Например, для значения с синонимом «Отгружен» вернётся строка «Отгружен».
Чем ПРЕДСТАВЛЕНИЕ отличается от ПРЕДСТАВЛЕНИЕССЫЛКИ?
ПРЕДСТАВЛЕНИЕ работает со ссылочным полем напрямую. ПРЕДСТАВЛЕНИЕССЫЛКИ применяется к полям произвольного типа и для ссылочных значений возвращает их представление, а для примитивных типов — строковое отображение. В большинстве задач достаточно ПРЕДСТАВЛЕНИЕ.
Почему запрос с ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(...) КАК Строка(50)) обрезает данные?
Оператор ВЫРАЗИТЬ жёстко ограничивает длину строки указанным числом. Если представление длиннее 50 символов, оно усекается. Увеличьте длину с запасом — для документов обычно до 150, для контрагентов до 200 и более.
Можно ли сгруппировать результат по представлению?
Технически можно, но делать так не стоит: группировка по строке медленнее и опасна совпадением представлений у разных объектов (два контрагента с одинаковым наименованием сольются в одну группу). Группируйте по ссылке, а представление выводите как дополнительное поле.
Что важно запомнить
Строковое представление ссылки в запросе получают функцией ПРЕДСТАВЛЕНИЕ, а при необходимости фиксированной длины или объединения запросов дополнительно применяют ВЫРАЗИТЬ(... КАК Строка(N)). Даты и числа в строку запросом не преобразуются — для этого есть СКД и код. При соединениях оборачивайте результат в ЕСТЬNULL, а фильтрацию и группировку выполняйте по ссылке, а не по представлению.