Разработка и Конфигурация · 9 мин
Как в запросе 1С выразить ссылку как строку
Как в запросе 1С преобразовать ссылку в строку: ВЫРАЗИТЬ, ПРЕДСТАВЛЕНИЕ, ПРЕДСТАВЛЕНИЕССЫЛКИ. Примеры запросов, ограничения и типичные ошибки.
Задача преобразовать ссылку в строку возникает у разработчиков 1С регулярно: при выгрузке данных, построении отчётов, поиске по представлению или сравнении значений с внешними системами. В языке запросов 1С нет прямой функции приведения ссылки к строке, которая вернула бы уникальный идентификатор, поэтому приходится выбирать один из нескольких обходных путей — каждый со своими ограничениями.
Чаще всего путают две разные задачи: получить представление ссылки (наименование, номер документа) и получить строковое значение идентификатора (GUID). Первая решается штатными средствами языка запросов, вторая — только через код встроенного языка или специальные приёмы. Ниже разобраны оба сценария с готовыми фрагментами запросов и пояснениями, где каждый метод работает, а где даст ошибку или неожиданный результат.
Почему ВЫРАЗИТЬ(Ссылка КАК Строка) не работает
Конструкция ВЫРАЗИТЬ в языке запросов 1С предназначена для уточнения типа составного поля и приведения примитивных типов — числа, строки, даты. Ссылочные типы в примитивные через ВЫРАЗИТЬ не преобразуются: попытка написать ВЫРАЗИТЬ(Товары.Номенклатура КАК Строка(100)) завершится ошибкой исполнения запроса.
Это принципиальное ограничение платформы: ссылка — это не текст, а служебный указатель на запись таблицы. Платформа не знает, какое именно строковое значение вы ожидаете — наименование, код, номер или GUID. Поэтому задачу нужно решать через функции представления или через код встроенного языка.
Получение представления ссылки в запросе
Если цель — показать пользователю читаемое значение (наименование элемента справочника, номер и дату документа), используйте функцию ПРЕДСТАВЛЕНИЕ(). Она возвращает строку — то самое представление, которое платформа формирует автоматически для ссылки.
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕ(Продажи.Номенклатура) КАК Товар,
Продажи.Количество КАК Количество
ИЗ
РегистрНакопления.Продажи КАК Продажи
У функции есть важная особенность: для получения представления платформа обращается к таблице объекта, поэтому запрос с ПРЕДСТАВЛЕНИЕ по большой выборке выполняется медленнее, чем выборка реквизитов напрямую. Если вам нужно только наименование — дешевле выбрать реквизит через точку: Продажи.Номенклатура.Наименование.
Функция ПРЕДСТАВЛЕНИЕССЫЛКИ
В полях схемы компоновки данных доступна также функция ПРЕДСТАВЛЕНИЕССЫЛКИ(). Она возвращает представление ссылки, а для значений примитивных типов — их текстовое отображение. Это удобно в отчётах на СКД, когда тип поля заранее неизвестен или составной.
Поиск ссылки по строке в запросе
Обратная задача — найти записи, где представление ссылки содержит подстроку, — решается через ПОДОБНО в сочетании с ПРЕДСТАВЛЕНИЕ. Такой запрос корректен, но работает медленно, потому что индексы по представлению не существует и платформа сканирует таблицу целиком.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
ПРЕДСТАВЛЕНИЕ(Номенклатура.Ссылка) ПОДОБНО &Фрагмент
Практическая рекомендация: если ищете по наименованию — применяйте ПОДОБНО к реквизиту Наименование, а не к представлению. Результат будет тем же для большинства справочников, но запрос сможет использовать индекс.
Получение GUID ссылки строкой
Строковое представление уникального идентификатора нужно при интеграциях: обмен с внешними системами, сопоставление данных между базами, веб-сервисы. В самом запросе GUID получить нельзя — это делается в коде встроенного языка:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаGUID = Строка(Выборка.Ссылка.УникальныйИдентификатор());
КонецЦикла;
Обратный перевод строки в ссылку выполняется методом ПолучитьСсылку() менеджера объекта с предварительным созданием объекта Новый УникальныйИдентификатор(СтрокаGUID). Перед вызовом проверяйте корректность строки — невалидный GUID вызовет исключение.
- 1Определите цель: представление для отчёта или GUID для обмена
- 2Для отчёта добавьте ПРЕДСТАВЛЕНИЕ(Поле) в список выборки запроса
- 3Для GUID выполните запрос, затем в цикле вызовите Строка(Ссылка.УникальныйИдентификатор())
- 4Проверьте результат на небольшой выборке с отбором
- 5Оцените время выполнения на полном объёме данных
Сравнение способов преобразования
| Способ | Где применяется | Что возвращает | Ограничение |
|---|---|---|---|
| ПРЕДСТАВЛЕНИЕ() | Текст запроса | Строка представления | Дополнительное обращение к таблице объекта |
| Поле через точку (Наименование) | Текст запроса | Значение реквизита | Только конкретный реквизит, не универсальное представление |
| ПРЕДСТАВЛЕНИЕССЫЛКИ() | Поля СКД | Представление любого значения | Доступна только в компоновке данных |
| Строка(Ссылка.УникальныйИдентификатор()) | Встроенный язык | GUID строкой | Недоступно в тексте запроса |
Сравнение вариантов
Подходит для отчётов и печатных форм; не подходит для обмена — представление не уникально и может меняться
Подходит для интеграций и сопоставления баз; требует обхода выборки в коде
Самый быстрый вариант, если нужен конкретный текстовый реквизит; не работает для составных типов без уточнения
Типичные ошибки и как их избежать
Самая частая ошибка — ожидание, что ПРЕДСТАВЛЕНИЕ вернёт GUID. Представление — это пользовательский текст, и у разных ссылок он может совпадать (два контрагента с одинаковым наименованием). Использовать представление как ключ сопоставления между системами недопустимо.
Вторая ошибка — применение ПРЕДСТАВЛЕНИЕ в условии соединения таблиц. Такое соединение не использует индексы и на больших таблицах приводит к тяжёлым запросам. Соединяйте таблицы всегда по ссылкам, а представление добавляйте только в итоговую выборку.
Третья типичная проблема — вызов ПРЕДСТАВЛЕНИЕ для параметра или выражения, а не поля таблицы. Функция принимает только поля; для параметров преобразование делается в коде до передачи в запрос.
Проверка результата
Перед использованием запроса в рабочем коде проверьте его в консоли запросов на ограниченной выборке. Убедитесь, что колонка с представлением имеет строковый тип и содержит ожидаемые значения, а не пустые строки — пустое представление у ссылки обычно означает битую ссылку или объект с незаполненными ключевыми реквизитами.
Для GUID проверьте формат строки: корректный идентификатор имеет вид «xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx». Если строка короче или содержит посторонние символы, значит, преобразование выполнено неверно.
Как проверить результат
Строка с читаемым представлением
Ошибка исполнения или ссылочный тип
Наименование или номер документа
Пустая строка — возможна битая ссылка
36 символов с дефисами в стандартном формате
Иная длина или текст представления вместо GUID
FAQ
Можно ли получить GUID ссылки прямо в тексте запроса?
Нет, штатной функции языка запросов для этого не существует. GUID получают в коде через Ссылка.УникальныйИдентификатор() после выполнения запроса либо используют внешние обработки и функции общих модулей, если они предусмотрены конфигурацией.
Чем ПРЕДСТАВЛЕНИЕ отличается от ПРЕДСТАВЛЕНИЕССЫЛКИ?
ПРЕДСТАВЛЕНИЕ используется в тексте запроса и работает с полями таблиц. ПРЕДСТАВЛЕНИЕССЫЛКИ доступна в выражениях схемы компоновки данных и корректно обрабатывает значения любых типов, включая примитивные.
Почему запрос с ПРЕДСТАВЛЕНИЕ выполняется медленно?
Для построения представления платформа обращается к таблице объекта по каждой строке выборки. На больших объёмах выбирайте нужные реквизиты через точку — это позволяет использовать индексы и не требует формирования представления.
Как преобразовать строку GUID обратно в ссылку?
Создайте объект Новый УникальныйИдентификатор(СтрокаGUID) и передайте его в метод ПолучитьСсылку() соответствующего менеджера, например Справочники.Номенклатура.ПолучитьСсылку(Ид). Перед этим убедитесь, что строка имеет корректный формат GUID.
Можно ли сортировать результат по представлению ссылки?
Да, конструкция УПОРЯДОЧИТЬ ПО ПРЕДСТАВЛЕНИЕ(Поле) корректна. Но сортировка по представлению не использует индексы; если представление совпадает с наименованием, сортируйте по реквизиту Наименование.
Что делать, если представление возвращается пустым?
Проверьте, не является ли ссылка битой (объект удалён) и заполнены ли реквизиты, из которых строится представление. Для справочников это обычно Наименование, для документов — Номер и Дата.
Что важно запомнить
Прямого приведения ссылки к строке в запросе 1С нет: для читаемого текста используйте ПРЕДСТАВЛЕНИЕ() или выборку реквизита через точку, для GUID — Строка(Ссылка.УникальныйИдентификатор()) в коде. Не используйте представление как ключ сопоставления и не соединяйте по нему таблицы.