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

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

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

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

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

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

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

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

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

Типовой пример запроса:

ВЫБРАТЬ

Номенклатура.Ссылка КАК Ссылка,

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

ИЗ

Справочник.Номенклатура КАК Номенклатура

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

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

Функция ПредставлениеСсылки во встроенном языке

Когда запрос уже выполнен и данные обрабатываются в коде, представление получают функцией ПредставлениеСсылки. Она принимает ссылку любого типа и возвращает строку:

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

СтрокаКонтрагента = ПредставлениеСсылки(Выборка.Контрагент);

Сообщить(СтрокаКонтрагента);

КонецЦикла;

У этого подхода есть особенность: для получения представления платформе может потребоваться обращение к данным объекта. На клиенте это приводит к серверным вызовам при каждом обращении, на сервере — к дополнительным запросам к базе. На больших выборках (тысячи строк) это заметно медленнее, чем получение представления сразу в запросе.

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

Сравнение подходов

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

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

ПредставлениеСсылки в коде

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

Выбор конкретных полей (Наименование, Номер)

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

Представление для разных типов данных

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

Для примитивных типов оператор тоже работает: число преобразуется в строку с учётом региональных настроек форматирования на сервере, дата — в строку формата даты. Булево превращается в «Да» или «Нет». Это позволяет собирать произвольные текстовые колонки в отчётах без постобработки.

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

ВЫБРАТЬ

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

ИЗ

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

Производительность и соединения через точку

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

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

Практические рекомендации по скорости:

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

Пошаговый пример: отчёт со строковым представлением

Задача: вывести список заказов с контрагентом и ответственным менеджером в виде текста. Порядок действий:

ВЫБРАТЬ

Заказ.Номер КАК Номер,

Заказ.Дата КАК Дата,

ПРЕДСТАВЛЕНИЕ(Заказ.Контрагент) КАК Контрагент,

ПРЕДСТАВЛЕНИЕ(Заказ.Менеджер) КАК Менеджер,

ПРЕДСТАВЛЕНИЕ(Заказ.Ссылка) КАК ЗаказТекстом

ИЗ

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

ГДЕ

Заказ.Проведен

УПОРЯДОЧИТЬ ПО

Заказ.Дата УБЫВ

Порядок действий
  1. 1
    Откройте консоль запросов или конструктор запроса в конфигураторе и выберите нужную таблицу.
  2. 2
    Добавьте в список полей выражение ПРЕДСТАВЛЕНИЕ(Ссылка) или ПРЕДСТАВЛЕНИЕ(Реквизит) с осмысленным псевдонимом.
  3. 3
    Обработайте возможные NULL через ЕСТЬNULL, если поле обязательно к выводу.
  4. 4
    Выполните запрос и проверьте, что текстовые колонки заполнены ожидаемыми значениями.
  5. 5
    Сравните время выполнения с вариантом без представлений, если выборка большая.

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

Типичные ошибки и как их избежать

Самая частая ошибка — попытка сравнить результат ПРЕДСТАВЛЕНИЕ со строкой в условии: ГДЕ ПРЕДСТАВЛЕНИЕ(Контрагент) = "ООО Ромашка". Помимо проблем с производительностью, это ломается при любом переименовании элемента. Отбор всегда делайте по ссылке, а представление используйте только для вывода.

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

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

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

Проверка результата и альтернативы

Контрольные точки после внедрения представлений в запрос:

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

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

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

Совпадает с отображением объекта в стандартном списке

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

Пусто, NULL или отличается от списка — проверьте обработчики представления и ЕСТЬNULL

Время выполнения запроса
Норма

Сопоставимо с вариантом без представлений

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

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

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

Строка, при необходимости приведена к фиксированной длине

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

Неограниченная строка мешает соединениям и группировкам

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

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

Итог

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

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

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

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

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

Почему ПРЕДСТАВЛЕНИЕ возвращает пустую строку?

Чаще всего поле содержит NULL (например, после левого соединения без совпадения) или пустую ссылку. Оберните выражение в ЕСТЬNULL и проверьте, заполнен ли сам реквизит в данных.

Можно ли получить только наименование справочника без ПРЕДСТАВЛЕНИЕ?

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

Как отсортировать результат по представлению?

Добавьте УПОРЯДОЧИТЬ ПО с выражением ПРЕДСТАВЛЕНИЕ(Поле) или по псевдониму поля. Учтите, что сортировка строк идёт по алфавиту, а не по логике ссылок, и на больших таблицах выполняется без индексов.

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

Да, оператор возвращает синоним значения перечисления, заданный в конфигураторе. Это удобный способ вывести читаемый статус без хранения отдельного текстового поля.

Почему запрос с представлениями стал медленным?

Каждое обращение к представлению ссылочного реквизита порождает соединение с таблицей этого объекта. Уберите представления из условий и соединений, оставьте их только в списке выборки, и замените на прямые реквизиты там, где нужен конкретный текст.