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

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

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

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

Задача представить ссылку на объект в виде строки возникает в 1С постоянно: при выгрузке данных во внешние системы, формировании отчётов, поиске дублей и сопоставлении записей между базами. При этом язык запросов 1С не имеет прямой функции преобразования ссылки в строку, и разработчику приходится выбирать между несколькими обходными путями — каждый со своими ограничениями.

Важно сразу разделить две разные задачи. Первая — получить человекочитаемое представление объекта (например, «Реализация товаров и услуг 0001 от 12.01.2026») прямо в тексте запроса. Вторая — получить уникальный идентификатор ссылки (GUID) в строковом виде для интеграции и сопоставления. Для них применяются разные механизмы, и путать их нельзя: представление не гарантирует уникальности, а GUID нечитаем для пользователя.

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

Что именно вы хотите получить: представление или GUID

Под «ссылкой как строкой» разные разработчики понимают разное, и от этого зависит выбор инструмента. Представление — это то, что видит пользователь: наименование элемента справочника, номер и дата документа. Оно удобно для отчётов, печатных форм и файлов выгрузки, которые читают люди.

GUID (уникальный идентификатор) — это внутренний 36-символьный идентификатор ссылки вида «a1b2c3d4-e5f6-4789-abcd-ef0123456789». Он неизменен в течение жизни объекта, не зависит от данных объекта и используется для сопоставления записей между базами, в обменах и при поиске объекта по строке из внешней системы.

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

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

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

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

Даёт GUID для интеграций и сопоставления между базами. Ограничение: работает только в коде, а не в тексте запроса.

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

Вычисляет представление на этапе формирования отчёта. Ограничение: применимо только в схеме компоновки данных, а не в обычном запросе.

Функция ПРЕДСТАВЛЕНИЕ в тексте запроса

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

ВЫБРАТЬ

Реализация.Номер КАК Номер,

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

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

ИЗ

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

ГДЕ

Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода

Результат можно использовать в условиях соединений и группировках, но с осторожностью: соединение по представлению заметно медленнее соединения по ссылке и может дать ложные совпадения. Два разных контрагента с одинаковым наименованием «ИП Иванов» при соединении по представлению склеятся в одну строку.

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

Представление ссылки в СКД через ПредставлениеСсылки()

В схеме компоновки данных доступна функция языка выражений ПредставлениеСсылки(), которая вычисляется уже после выполнения запроса, на этапе формирования отчёта. Это позволяет не тащить представления через весь запрос, а получать их только для итоговых строк, что иногда быстрее на больших выборках.

// В вычисляемом поле СКД или в ресурсах:

ПредставлениеСсылки(Контрагент)

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

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

В языке запросов нет функции, возвращающей GUID, — это осознанное ограничение платформы. Поэтому идентификатор извлекают в коде после выполнения запроса или без запроса вовсе. Стандартный способ — функция XMLСтрока:

// Получение GUID строкой

СтрокаGUID = XMLСтрока(ТекущаяСсылка);

// Результат: "a1b2c3d4-e5f6-4789-abcd-ef0123456789"

// Обратное преобразование строки в ссылку

НоваяСсылка = XMLЗначение(Тип("СправочникСсылка.Номенклатура"), СтрокаGUID);

Если нужно получить GUID для множества объектов пакетно, выполняют запрос с выборкой ссылок, а затем в цикле по выборке вызывают XMLСтрока для каждой ссылки. Это дешёвая операция: GUID хранится в самой ссылке, обращения к данным объекта не происходит, поэтому цикл по тысячам строк выполняется быстро.

Порядок действий: выгрузить ссылки как строки GUID
  1. 1
    Выполните запрос с выборкой полей Ссылка нужного типа
  2. 2
    Пройдите по выборке циклом и для каждой ссылки вызовите XMLСтрока(Выборка.Ссылка)
  3. 3
    Запишите полученные строки в таблицу значений, файл или передавайте во внешнюю систему
  4. 4
    Для загрузки обратно используйте XMLЗначение с указанием конкретного типа ссылки
  5. 5
    Проверьте на контрольном примере: объект, полученный из строки, должен совпасть с исходным по сравнению ссылок

Альтернативный вариант — ЗначениеВСтрокуВнутр(Ссылка), который возвращает внутреннее строковое представление, включающее тип объекта и GUID. Такая строка самодостаточна: ЗначениеИзСтрокиВнутр восстановит ссылку без указания типа. Минус — формат внутренний, не предназначен для обмена с внешними системами и может меняться между версиями платформы.

Поиск объекта по строке GUID

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

GUID = Новый УникальныйИдентификатор(СтрокаИзФайла);

Ссылка = Справочники.Номенклатура.ПолучитьСсылку(GUID);

// Проверка, что объект реально существует в базе

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

"ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА

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

|ГДЕ Н.Ссылка = &Ссылка");

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Если Запрос.Выполнить().Пустой() Тогда

// Объект с таким GUID в базе отсутствует

КонецЕсли;

Обязательно проверяйте существование объекта: ПолучитьСсылку создаёт ссылку даже для несуществующего GUID, и обращение к реквизитам такой «битой» ссылки вернёт NULL или вызовет ошибку. Проверка через простой запрос — надёжный способ отличить живой объект от битой ссылки.

Типичные ошибки и ограничения

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

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

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

Типичные ошибки
01
Соединение таблиц по ПРЕДСТАВЛЕНИЮ вместо ссылки — дубли при одинаковых наименованиях и падение производительности
02
Ожидание GUID от функции ПРЕДСТАВЛЕНИЕ — она возвращает только пользовательское представление
03
Отсутствие проверки существования объекта после ПолучитьСсылку — обращение к реквизитам битой ссылки даёт NULL и ошибки
04
Передача в УникальныйИдентификатор строки с фигурными скобками из внешней системы — исключение о неверном формате
05
Использование ЗначениеВСтрокуВнутр для обмена с внешними системами — внутренний формат не гарантирован между версиями платформы
Контрольные точки

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

Представление в отчёте
Норма

Строка совпадает с тем, что видит пользователь в форме объекта

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

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

GUID после XMLСтрока
Норма

36 символов в каноническом формате через дефисы

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

Строка другой длины или с посторонними символами

Обратное преобразование
Норма

XMLЗначение возвращает ссылку, равную исходной, объект открывается

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

Ссылка создана, но запрос по ней пуст — объект отсутствует в базе

Выбор подхода под конкретную задачу

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

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

Итог

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

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

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

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

Нет, в языке запросов такой функции не существует. GUID извлекают в коде через XMLСтрока(Ссылка) после выполнения запроса либо через метод УникальныйИдентификатор() у конкретной ссылки. Выберите ссылки запросом, а преобразование выполните в цикле по выборке.

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

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

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

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

Как найти объект в базе по строке GUID из другой системы?

Создайте Новый УникальныйИдентификатор(Строка), затем вызовите МенеджерОбъекта.ПолучитьСсылку(GUID). После этого обязательно проверьте запросом, что объект с такой ссылкой существует, иначе рискуете работать с битой ссылкой. Предварительно очистите строку от фигурных скобок и пробелов.

Можно ли сравнивать ссылки как строки для поиска дублей?

Сравнивать строки GUID можно, но в запросе это недоступно — придётся выгружать ссылки и сравнивать в коде. На практике дубли ищут проще: группировкой по ссылке или по ключевым реквизитам прямо в запросе, без преобразования в строку.

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

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