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

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

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

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

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

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

Ниже разобраны обе функции представления, ограничения оператора ВЫРАЗИТЬ, способы получить УникальныйИдентификатор ссылки в виде строки, влияние на производительность и типичные ошибки разработчиков.

Почему ВЫРАЗИТЬ не преобразует ссылку в строку

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

Преобразование ссылочного значения в строку в этот список не входит. Конструкция вида ВЫРАЗИТЬ(Документ.Контрагент КАК СТРОКА(100)) вызовет ошибку компиляции запроса: «Неверные параметры оператора ВЫРАЗИТЬ» или аналогичное сообщение в зависимости от версии платформы.

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

Функция ПРЕДСТАВЛЕНИЕ: базовый способ получить строку

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

ВЫБРАТЬ

ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслуг.Контрагент) КАК КонтрагентСтрокой,

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

ИЗ

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

ГДЕ

РеализацияТоваровУслуг.Проведен

Результат имеет строковый тип неограниченной длины. С ним можно работать как с обычной строкой: применять ПОДСТРОКА, ПОДОБНО, сортировать и группировать. Однако помните, что сортировка по представлению документа будет лексикографической, а не по дате или номеру.

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

ПРЕДСТАВЛЕНИЕССЫЛКИ: когда нужен тип объекта в тексте

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

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

ВЫБРАТЬ

ПРЕДСТАВЛЕНИЕССЫЛКИ(Задача.БизнесПроцесс) КАК ОснованиеСтрокой

ИЗ

Задача.ЗадачаИсполнителя КАК Задача

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

Сравнение вариантов

ПРЕДСТАВЛЕНИЕ(Ссылка)

Стандартный выбор для ссылочных полей: наименование справочника, номер и дата документа. Не подходит для полей смешанного типа.

ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка)

Для составных типов и универсальных механизмов: корректно обрабатывает любые значения, включая примитивные.

Соединение с таблицей объекта

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

Строка(Ссылка) в коде

Когда запрос уже вернул ссылки и обработка идёт в цикле: просто, но при больших выборках медленнее запросного решения.

Как получить GUID ссылки строкой

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

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

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

|ИЗ

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

|ГДЕ

| НЕ Номенклатура.ПометкаУдаления";

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

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

ГУИДСтрокой = Строка(Выборка.Ссылка.УникальныйИдентификатор());

// дальнейшая обработка

КонецЦикла;

Метод УникальныйИдентификатор() вызывается у ссылки без обращения к базе, поэтому такой цикл не порождает лишних запросов. Обратное преобразование выполняется через XMLЗначение или конструктор Новый УникальныйИдентификатор(СтрокаГУИД) с последующим ПолучитьСсылку().

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

Функции представления вычисляются на стороне СУБД, но не бесплатны: для документа платформа читает номер, дату и метаданные типа, а для иерархического справочника представление может включать дополнительную логику. В выборках на сотни тысяч строк это заметно увеличивает время выполнения и объём передаваемых данных.

Если цель — вывести только наименование контрагента, эффективнее соединиться с таблицей справочника и выбрать конкретное поле:

ВЫБРАТЬ

Контрагенты.Наименование КАК КонтрагентНаименование

ИЗ

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

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

ПО Реализация.Контрагент = Контрагенты.Ссылка

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

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

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

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

В консоли запросов колонка имеет тип Строка

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

Колонка осталась ссылочного типа — функция не применена

Содержимое строки
Норма

Для документа видны тип, номер и дата; для справочника — наименование

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

Пустые строки при заполненных ссылках — возможно, поле NULL после соединения

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

Запрос с представлением работает сопоставимо с исходным

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

Резкое замедление — замените представление соединением с таблицей справочника

Типичные ошибки и их последствия

Самая распространённая ошибка — попытка применить ВЫРАЗИТЬ для ссылки в строку. Запрос просто не выполнится, и разработчик теряет время на поиск обхода. Вторая — использование представления как ключа группировки: два разных объекта с одинаковым наименованием слипнутся в одну группу, и итоги исказятся.

Третья типичная проблема — сравнение представления с литералом в условии ГДЕ. Представление документа включает локализованный тип и формат даты, который зависит от настроек, поэтому такое условие хрупко и может перестать работать после изменения региональных настроек сервера.

Типичные ошибки
01
ВЫРАЗИТЬ(Ссылка КАК СТРОКА) — синтаксическая ошибка, запрос не скомпилируется; используйте ПРЕДСТАВЛЕНИЕ
02
Группировка по представлению вместо ссылки — объекты с одинаковыми наименованиями объединяются, итоги неверны
03
Фильтр ГДЕ ПРЕДСТАВЛЕНИЕ(Ссылка) = 'текст' — условие зависит от формата даты и языка, ломается при смене настроек
04
Поиск GUID через ПРЕДСТАВЛЕНИЕ — функция не возвращает идентификатор, нужен УникальныйИдентификатор() в коде
05
Представление в условии соединения таблиц — соединение по строке без индекса, катастрофическое замедление

Практический порядок действий

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

Порядок действий
  1. 1
    Определите цель: пользовательский текст, поле объекта или GUID
  2. 2
    Для пользовательского текста напишите ПРЕДСТАВЛЕНИЕ(Поле) в списке выборки
  3. 3
    Для составного типа используйте ПРЕДСТАВЛЕНИЕССЫЛКИ(Поле)
  4. 4
    Если нужен конкретный реквизит — добавьте соединение с таблицей объекта и выберите поле
  5. 5
    Для GUID получите ссылки запросом и вызовите УникальныйИдентификатор() в цикле обхода
  6. 6
    Проверьте тип и содержимое колонки в консоли запросов, замерьте время выполнения на реальном объёме данных

FAQ

Можно ли ограничить длину строки, которую возвращает ПРЕДСТАВЛЕНИЕ?

Да, оберните результат в ВЫРАЗИТЬ уже после получения строки: ВЫРАЗИТЬ(ПРЕДСТАВЛЕНИЕ(Ссылка) КАК СТРОКА(100)). Это допустимо, потому что приведение применяется к строке, а не к ссылке. Альтернатива — функция ПОДСТРОКА(ПРЕДСТАВЛЕНИЕ(Ссылка), 1, 100).

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

Для ссылки на удалённый объект (когда запись физически отсутствует) представление обычно содержит служебный текст с указанием, что объект не найден, либо пустую строку — поведение зависит от контекста и версии платформы. Надёжнее проверять битые ссылки отдельно, соединяясь с таблицей объекта и отбирая записи, где ссылка IS NULL.

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

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

Как вывести представление в СКД без изменения основного запроса?

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

Можно ли получить строку ссылки через точку, как в коде?

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

Что быстрее: ПРЕДСТАВЛЕНИЕ или соединение с таблицей справочника?

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

Итог

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

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