Разработка и Конфигурация · 11 мин
Как получить ссылку как строку в запросе 1С
Как представить ссылку на объект 1С строкой в запросе: функция ПРЕДСТАВЛЕНИЕ, GUID через XMLСтрока, сравнение подходов, типичные ошибки и готовые примеры кода.
Задача представить ссылку на объект в виде строки возникает в 1С постоянно: при выгрузке данных во внешние системы, формировании отчётов, поиске дублей и сопоставлении записей между базами. При этом язык запросов 1С не имеет прямой функции преобразования ссылки в строку, и разработчику приходится выбирать между несколькими обходными путями — каждый со своими ограничениями.
Важно сразу разделить две разные задачи. Первая — получить человекочитаемое представление объекта (например, «Реализация товаров и услуг 0001 от 12.01.2026») прямо в тексте запроса. Вторая — получить уникальный идентификатор ссылки (GUID) в строковом виде для интеграции и сопоставления. Для них применяются разные механизмы, и путать их нельзя: представление не гарантирует уникальности, а GUID нечитаем для пользователя.
Ниже разобраны рабочие способы для обеих задач: функция ПРЕДСТАВЛЕНИЕ в запросе, функция ПредставлениеСсылки() в СКД, получение GUID через XMLСтрока и обратное преобразование строки в ссылку. Также рассмотрены типичные ошибки, которые приводят к пустым значениям, дублям и падению производительности.
Что именно вы хотите получить: представление или GUID
Под «ссылкой как строкой» разные разработчики понимают разное, и от этого зависит выбор инструмента. Представление — это то, что видит пользователь: наименование элемента справочника, номер и дата документа. Оно удобно для отчётов, печатных форм и файлов выгрузки, которые читают люди.
GUID (уникальный идентификатор) — это внутренний 36-символьный идентификатор ссылки вида «a1b2c3d4-e5f6-4789-abcd-ef0123456789». Он неизменен в течение жизни объекта, не зависит от данных объекта и используется для сопоставления записей между базами, в обменах и при поиске объекта по строке из внешней системы.
Сравнение вариантов
Подходит для отчётов и выгрузок для людей. Ограничение: результат неуникален и зависит от данных объекта, нельзя использовать для сопоставления.
Даёт GUID для интеграций и сопоставления между базами. Ограничение: работает только в коде, а не в тексте запроса.
Вычисляет представление на этапе формирования отчёта. Ограничение: применимо только в схеме компоновки данных, а не в обычном запросе.
Функция ПРЕДСТАВЛЕНИЕ в тексте запроса
Единственный штатный способ преобразовать ссылку в строку непосредственно в запросе — функция ПРЕДСТАВЛЕНИЕ. Она принимает поле ссылочного типа и возвращает строку: для справочников — наименование, для документов — представление вида «Поступление товаров и услуг 0000-000123 от 15.03.2026», для перечислений — представление значения.
ВЫБРАТЬ
Реализация.Номер КАК Номер,
ПРЕДСТАВЛЕНИЕ(Реализация.Контрагент) КАК КонтрагентСтрокой,
ПРЕДСТАВЛЕНИЕ(Реализация.Ссылка) КАК ДокументСтрокой
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Результат можно использовать в условиях соединений и группировках, но с осторожностью: соединение по представлению заметно медленнее соединения по ссылке и может дать ложные совпадения. Два разных контрагента с одинаковым наименованием «ИП Иванов» при соединении по представлению склеятся в одну строку.
Функция ПРЕДСТАВЛЕНИЕ работает и с полями составного типа, и с полями через точку (ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура) в табличной части). Для пустых ссылок возвращается пустая строка — это полезно, но при сравнениях нужно учитывать, что пустая строка не равна NULL.
Представление ссылки в СКД через ПредставлениеСсылки()
В схеме компоновки данных доступна функция языка выражений ПредставлениеСсылки(), которая вычисляется уже после выполнения запроса, на этапе формирования отчёта. Это позволяет не тащить представления через весь запрос, а получать их только для итоговых строк, что иногда быстрее на больших выборках.
// В вычисляемом поле СКД или в ресурсах:
ПредставлениеСсылки(Контрагент)
Практическая разница с ПРЕДСТАВЛЕНИЕ в запросе: функция СКД не участвует в группировках и соединениях на уровне СУБД, поэтому фильтровать и группировать по ней нельзя — только выводить. Если представление нужно как измерение отчёта, используйте ПРЕДСТАВЛЕНИЕ в самом запросе.
Как получить GUID ссылки строкой
В языке запросов нет функции, возвращающей GUID, — это осознанное ограничение платформы. Поэтому идентификатор извлекают в коде после выполнения запроса или без запроса вовсе. Стандартный способ — функция XMLСтрока:
// Получение GUID строкой
СтрокаGUID = XMLСтрока(ТекущаяСсылка);
// Результат: "a1b2c3d4-e5f6-4789-abcd-ef0123456789"
// Обратное преобразование строки в ссылку
НоваяСсылка = XMLЗначение(Тип("СправочникСсылка.Номенклатура"), СтрокаGUID);
Если нужно получить GUID для множества объектов пакетно, выполняют запрос с выборкой ссылок, а затем в цикле по выборке вызывают XMLСтрока для каждой ссылки. Это дешёвая операция: GUID хранится в самой ссылке, обращения к данным объекта не происходит, поэтому цикл по тысячам строк выполняется быстро.
- 1Выполните запрос с выборкой полей Ссылка нужного типа
- 2Пройдите по выборке циклом и для каждой ссылки вызовите XMLСтрока(Выборка.Ссылка)
- 3Запишите полученные строки в таблицу значений, файл или передавайте во внешнюю систему
- 4Для загрузки обратно используйте XMLЗначение с указанием конкретного типа ссылки
- 5Проверьте на контрольном примере: объект, полученный из строки, должен совпасть с исходным по сравнению ссылок
Альтернативный вариант — ЗначениеВСтрокуВнутр(Ссылка), который возвращает внутреннее строковое представление, включающее тип объекта и GUID. Такая строка самодостаточна: ЗначениеИзСтрокиВнутр восстановит ссылку без указания типа. Минус — формат внутренний, не предназначен для обмена с внешними системами и может меняться между версиями платформы.
Поиск объекта по строке GUID
Обратная задача — найти объект по строке идентификатора, полученной из внешней системы. Классический приём — конструктор УникальныйИдентификатор и метод ПолучитьСсылку менеджера объекта:
GUID = Новый УникальныйИдентификатор(СтрокаИзФайла);
Ссылка = Справочники.Номенклатура.ПолучитьСсылку(GUID);
// Проверка, что объект реально существует в базе
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА
|ИЗ Справочник.Номенклатура КАК Н
|ГДЕ Н.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Запрос.Выполнить().Пустой() Тогда
// Объект с таким GUID в базе отсутствует
КонецЕсли;
Обязательно проверяйте существование объекта: ПолучитьСсылку создаёт ссылку даже для несуществующего GUID, и обращение к реквизитам такой «битой» ссылки вернёт NULL или вызовет ошибку. Проверка через простой запрос — надёжный способ отличить живой объект от битой ссылки.
Типичные ошибки и ограничения
Самая частая ошибка — попытка соединять таблицы в запросе по представлению вместо ссылки. Помимо проблемы дублей по одинаковым наименованиям, такой запрос не использует индексы и на больших таблицах выполняется на порядки медленнее. Соединяйте всегда по ссылке, а представление получайте уже в итоговой выборке.
Вторая ошибка — ожидание, что ПРЕДСТАВЛЕНИЕ вернёт GUID. Функция возвращает только пользовательское представление, и никакой комбинацией функций языка запросов GUID не получить. Если в отчёте нужен идентификатор, выведите ссылку в результат и обработайте выборку кодом.
Третья группа ошибок связана с регистром букв в GUID. Разные системы могут возвращать идентификатор в верхнем или нижнем регистре, с фигурными скобками или без. Перед созданием УникальныйИдентификатор из строки очищайте её от скобок и пробелов — конструктор принимает канонический вид без скобок.
Как проверить результат
Строка совпадает с тем, что видит пользователь в форме объекта
Пустая строка у заполненной ссылки или наименование не совпадает с карточкой
36 символов в каноническом формате через дефисы
Строка другой длины или с посторонними символами
XMLЗначение возвращает ссылку, равную исходной, объект открывается
Ссылка создана, но запрос по ней пуст — объект отсутствует в базе
Выбор подхода под конкретную задачу
Для отчётов и печатных форм достаточно ПРЕДСТАВЛЕНИЕ в запросе — это самый простой и быстрый в реализации путь. Для выгрузки во внешние системы, где требуется однозначная идентификация, выгружайте GUID через XMLСтрока, а представление добавляйте отдельным полем для удобства чтения файла.
Для сопоставления объектов между базами в обменах используйте только GUID: наименования и номера документов в разных базах расходятся, а идентификатор при правильно настроенном обмене совпадает. При ручном сопоставлении по строке-GUID всегда проверяйте результат контрольным запросом на существование объекта.
Что важно запомнить
В запросе ссылку в строку преобразует только ПРЕДСТАВЛЕНИЕ — для пользовательского представления. GUID получают в коде через XMLСтрока и восстанавливают через XMLЗначение или ПолучитьСсылку с обязательной проверкой существования объекта. Соединения и группировки делайте по ссылке, а не по строке.
Частые вопросы
Можно ли получить GUID ссылки прямо в тексте запроса?
Нет, в языке запросов такой функции не существует. GUID извлекают в коде через XMLСтрока(Ссылка) после выполнения запроса либо через метод УникальныйИдентификатор() у конкретной ссылки. Выберите ссылки запросом, а преобразование выполните в цикле по выборке.
Почему ПРЕДСТАВЛЕНИЕ возвращает пустую строку?
Чаще всего потому, что сама ссылка пустая — для пустых ссылок функция возвращает пустую строку. Реже причина в том, что поле имеет значение NULL после левого соединения: тогда результат тоже NULL, а не пустая строка, и это нужно учитывать в условиях.
Чем отличается ПредставлениеСсылки в СКД от ПРЕДСТАВЛЕНИЕ в запросе?
ПРЕДСТАВЛЕНИЕ вычисляется на уровне СУБД и может участвовать в группировках и соединениях. ПредставлениеСсылки вычисляется компоновщиком уже после запроса и годится только для вывода в итоговый отчёт — фильтровать или группировать по нему нельзя.
Как найти объект в базе по строке GUID из другой системы?
Создайте Новый УникальныйИдентификатор(Строка), затем вызовите МенеджерОбъекта.ПолучитьСсылку(GUID). После этого обязательно проверьте запросом, что объект с такой ссылкой существует, иначе рискуете работать с битой ссылкой. Предварительно очистите строку от фигурных скобок и пробелов.
Можно ли сравнивать ссылки как строки для поиска дублей?
Сравнивать строки GUID можно, но в запросе это недоступно — придётся выгружать ссылки и сравнивать в коде. На практике дубли ищут проще: группировкой по ссылке или по ключевым реквизитам прямо в запросе, без преобразования в строку.
Работает ли ПРЕДСТАВЛЕНИЕ с полями составного типа?
Да, функция корректно обрабатывает поля составного ссылочного типа и возвращает представление фактического значения. Для нессылочных значений (число, строка, дата) применять ПРЕДСТАВЛЕНИЕ не нужно — они выводятся в результат запроса как есть.