Разработка и Конфигурация · 12 мин
Представление в запросе 1С 8.3: как вывести ссылку строкой
Как получить представление ссылки в запросе 1С 8.3: функция ПРЕДСТАВЛЕНИЕ, автопредставление ссылочных полей, типичные ошибки и примеры кода.
В языке запросов 1С 8.3 ссылочные поля по умолчанию возвращаются как ссылки — объекты, которые платформа автоматически отображает в виде строки (наименования, номера документа и т. п.). Но при программной обработке результата, экспорте данных или построении произвольных строк требуется получить именно текстовое представление. Для этого существуют два механизма: встроенная функция ПРЕДСТАВЛЕНИЕ() и автоматическое представление ссылочных полей, которое платформа подставляет сама.
Разница между этими подходами принципиальна. Автопредставление работает неявно: вы выбираете поле типа Документ.РеализацияТоваровУслуг, а при выводе в табличный документ или сообщение видите строку вида «Реализация товаров и услуг 0000-000123 от 15.03.2026». Функция ПРЕДСТАВЛЕНИЕ() даёт строку уже на уровне запроса — значение в выборке имеет тип «Строка», что важно для группировок, соединений и выгрузок.
Ниже разобраны оба способа, ограничения функции, влияние на производительность и типичные ошибки, которые приводят к неожиданным результатам в отчётах и обработках.
Как платформа формирует представление ссылок без функции
Каждый ссылочный объект в 1С имеет представление, которое формируется по правилам, заданным в конфигураторе. Для справочников это обычно наименование (или код, если длина наименования равна нулю), для документов — строка из синонима вида документа, номера и даты. Эти правила можно переопределить в модуле менеджера объекта через обработчики ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления.
Когда запрос выбирает ссылочное поле и результат выводится в табличный документ, таблицу значений на форме или сообщение, платформа сама получает представление ссылки. Дополнительных действий в тексте запроса не требуется:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Документ,
РеализацияТоваровУслуг.Контрагент КАК Контрагент
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
При обходе выборки методом Выборка.Документ вернёт ссылку, а вот Строка(Выборка.Документ) или вывод в табличный документ дадут готовое представление. Это важно понимать: строка появляется на этапе отображения, а не в самом запросе.
Функция ПРЕДСТАВЛЕНИЕ: синтаксис и базовый пример
Функция ПРЕДСТАВЛЕНИЕ() принимает один параметр — выражение, чаще всего ссылочное поле — и возвращает его представление в виде строки непосредственно в результате запроса. Синтаксис:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслуг.Ссылка) КАК ДокументСтрокой,
ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслуг.Контрагент) КАК КонтрагентСтрокой
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
В выборке поля ДокументСтрокой и КонтрагентСтрокой будут иметь тип «Строка». Это позволяет применять к ним строковые операции, сортировать по алфавиту именно по представлению и передавать результат в системы, которые не понимают тип «Ссылка» — например, при выгрузке в JSON или обмене с внешними базами.
Функция работает не только со ссылками. Для примитивных типов (число, дата, булево) она вернёт строковое отображение значения, а для перечислений — представление значения перечисления, заданное в конфигураторе. Это удобно, когда нужно вывести статус документа словами, а не ссылкой на перечисление.
Когда функция нужна, а когда избыточна
Частая ситуация — разработчик добавляет ПРЕДСТАВЛЕНИЕ() ко всем ссылочным полям «для надёжности», хотя результат выводится в обычный отчёт на СКД. Это лишняя работа: СКД и табличный документ сами получат представления ссылок. Более того, обёртка мешает пользователю открыть объект двойным кликом, потому что в ячейке оказывается строка, а не ссылка.
Определить необходимость функции помогает вопрос: что потребитель результата будет делать со значением? Если отображать — достаточно ссылки. Если обрабатывать как текст, соединять с другими строками или передавать наружу — нужна функция.
Как выбрать действие
ПРЕДСТАВЛЕНИЕ в группировках, соединениях и условиях
Функция применима в секциях СГРУППИРОВАТЬ ПО и УПОРЯДОЧИТЬ ПО. Типичный сценарий — отчёт, где строки должны идти в алфавитном порядке наименований контрагентов, а сам контрагент выводится текстом:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(Продажи.Контрагент) КАК Контрагент,
СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
ПРЕДСТАВЛЕНИЕ(Продажи.Контрагент)
УПОРЯДОЧИТЬ ПО
Контрагент
В условиях ГДЕ функцию использовать следует осторожно. Сравнение ГДЕ ПРЕДСТАВЛЕНИЕ(Контрагент) = &Наименование не сможет использовать индексы и заставит СУБД вычислять представление для каждой строки таблицы. На больших таблицах это заметно замедляет запрос. Правильнее фильтровать по ссылке или по реквизиту Наименование, а представление получать только для вывода.
В соединениях применять функцию к ключам связи нельзя — соединение по строковым представлениям не только медленное, но и опасное: два разных объекта могут иметь одинаковые наименования, и строки «склеятся» ошибочно.
Производительность и влияние на СУБД
Каждый вызов ПРЕДСТАВЛЕНИЕ() заставляет платформу получать представление объекта. Если представление строится по стандартным полям (наименование, номер, дата), платформа подсоединяет нужные поля в текст запроса к СУБД. Если же в модуле менеджера переопределён обработчик ОбработкаПолученияПредставления, ситуация хуже: представление может вычисляться на сервере 1С для каждой строки отдельно, что при больших выборках приводит к множеству обращений к базе.
Проверить, как запрос выполняется на самом деле, помогает консоль запросов с показом текста запроса СУБД или технологический журнал с событием DBMSSQL/DBPOSTGRS. Если видно, что представление тянет за собой дополнительные соединения или построчные вызовы, стоит пересмотреть подход.
Как проверить результат
Значение имеет тип «Строка», доступны строковые функции
Вернулся тип «Ссылка» — функция не применена или применена не к тому полю
Время сопоставимо с запросом без представления
Запрос замедлился в разы — вероятно, переопределён обработчик представления
По двойному клику открывается форма объекта
Ячейка содержит строку, объект не открывается — для отчёта лучше выводить ссылку
Альтернативы: выбор конкретных полей вместо представления
Если нужно не полное представление, а конкретный реквизит, правильнее выбрать его напрямую. Вместо ПРЕДСТАВЛЕНИЕ(Контрагент) часто достаточно Контрагент.Наименование — так запрос получает ровно одно поле без логики формирования представления и работает быстрее.
Для документов аналог представления собирается вручную: синоним вида документа (константная строка), номер и дата. Это даёт полный контроль над форматом, например позволяет вывести номер без префиксов через функцию ПОДСТРОКА или отформатировать дату нужным образом.
Сравнение вариантов
Универсально, учитывает переопределённые представления; медленнее и не подходит для условий и соединений
Оптимально для отчётов и форм; представление подставится при отображении, объект остаётся доступен для открытия
Самый быстрый вариант, полный контроль формата; не учитывает переопределённую логику представления
Типичные ошибки и ограничения
Первая ошибка — ожидание, что ПРЕДСТАВЛЕНИЕ вернёт наименование для любого объекта. Для документов представление — это не «тема» или «комментарий», а строка из вида, номера и даты. Если нужен другой текст, его надо собирать из реквизитов.
Вторая ошибка — применение функции к полю составного типа. Если поле может хранить ссылки разных видов (например, поле расчётов в регистре), представление будет сформировано корректно, но сортировка и группировка по такой строке дадут смешанный порядок: сначала документы одного вида, потом другого, внутри — по их представлениям.
Третья ошибка — использование представления для поиска дублей. Наименования контрагентов могут совпадать у разных элементов, поэтому группировка по ПРЕДСТАВЛЕНИЕ(Контрагент) объединит разных контрагентов в одну строку. Для поиска дублей группируйте по ссылке, а представление выводите как дополнительное поле.
Ещё одно ограничение: функция недоступна в некоторых контекстах компоновки данных на уровне выражений ресурсов и вычисляемых полей — там строковое представление формируется иначе, через форматирование или код на встроенном языке.
- 1Определите потребителя результата: отчёт, обработка или внешняя система
- 2Если отчёт или форма — оставьте ссылочное поле без обёртки
- 3Если нужна строка в выборке — добавьте ПРЕДСТАВЛЕНИЕ(Поле) с понятным псевдонимом
- 4Проверьте тип поля в результате через консоль запросов
- 5Замерьте время выполнения на реальном объёме данных
- 6При замедлении замените функцию на выбор конкретных реквизитов
Частые вопросы
Чем ПРЕДСТАВЛЕНИЕ отличается от ВЫРАЗИТЬ?
ВЫРАЗИТЬ приводит значение к указанному типу данных (например, сужает составной тип до одного вида ссылки) и не превращает ссылку в строку. ПРЕДСТАВЛЕНИЕ именно формирует строковое отображение значения. Это разные задачи, и функции не взаимозаменяемы.
Можно ли применить ПРЕДСТАВЛЕНИЕ к числу или дате?
Да, функция вернёт строковое отображение значения. Однако форматирование будет стандартным; если нужен конкретный формат даты или числа, надёжнее выполнить форматирование в коде функцией Формат() после получения результата запроса.
Почему в отчёте СКД поле с ПРЕДСТАВЛЕНИЕ не открывается по двойному клику?
Потому что в ячейке находится строка, а не ссылка. Расшифровка и открытие объекта работают только для ссылочных значений. Решение — выводить в отчёт само ссылочное поле, а представление платформа подставит автоматически.
Работает ли ПРЕДСТАВЛЕНИЕ с перечислениями?
Да, функция вернёт представление значения перечисления, заданное в конфигураторе. При обычном выводе в отчёт перечисление и так отображается представлением, поэтому обёртка нужна в основном для строковой обработки результата.
Как получить представление вне запроса, в коде?
Достаточно преобразовать ссылку к строке: Строка(Ссылка) или Строка(Выборка.Поле). Платформа вызовет ту же логику формирования представления, включая переопределённые обработчики модуля менеджера.
Почему запрос с ПРЕДСТАВЛЕНИЕ стал выполняться медленнее?
Наиболее вероятная причина — переопределённый обработчик ОбработкаПолученияПредставления в модуле менеджера объекта: представление вычисляется для каждой строки на сервере 1С. Проверьте модуль менеджера и, если возможно, замените функцию на выбор конкретных реквизитов.
Что важно запомнить
ПРЕДСТАВЛЕНИЕ(Ссылка) возвращает строку в результате запроса и нужна для обработки, группировки по тексту и выгрузок. Для отчётов и форм ссылочные поля лучше не обёртывать — платформа подставит представление сама, а объект останется доступным для открытия. В условиях и соединениях функцию не применяйте: фильтруйте и связывайте по ссылкам.