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

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

1С: как выразить ссылку как строку

Как в 1С преобразовать ссылку в строку: Строка(), уникальный идентификатор GUID, XMLСтрока, представление. Примеры кода, различия способов, типичные ошибки.

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

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

Прежде чем выбирать метод, ответьте себе на вопрос: строка нужна для человека (например, вывести «Реализация товаров 00001 от 12.05») или для машины (например, передать GUID в другую базу для поиска того же объекта). От этого зависит половина решения.

Способ 1. Строка(Ссылка) — представление для пользователя

Самый простой вариант — встроенная функция Строка(). Она возвращает представление объекта так, как его видит пользователь в интерфейсе: для документа это «Название номер от дата», для справочника — наименование, для перечисления — значение.

ДокументСсылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("000000001", ТекущаяДата());

СтрокаРезультат = Строка(ДокументСсылка);

// Результат: "Реализация товаров и услуг 000000001 от 15.03.2026 10:30:00"

Сообщить("Обрабатывается объект: " + Строка(ДокументСсылка));

Важно понимать: результат зависит от заполненности полей объекта и от настроек представления в конфигурации. Если у элемента справочника пустое наименование, строка может оказаться пустой или содержать только тип объекта. Кроме того, такая строка не подходит для однозначной идентификации — два разных элемента могут иметь одинаковое представление.

Тот же результат даёт неявное преобразование при конкатенации: "Объект: " + Ссылка автоматически вызовет преобразование к строке. Однако явный вызов Строка() читается понятнее и не вызывает вопросов при ревизии кода.

Способ 2. Уникальный идентификатор (GUID) — для обмена и поиска

Когда строка нужна для технических целей — сопоставления объектов между базами, передачи в веб-сервис, хранения в регистре сведений — используется уникальный идентификатор. У каждой ссылки в 1С есть GUID из 36 символов вида «b2c3d4e5-…».

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

СтрокаГУИД = Строка(ГУИД);

// Результат: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

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

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

ВосстановленнаяСсылка = Справочники.Номенклатура.ПолучитьСсылку(ГУИД);

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

Если ВосстановленнаяСсылка.ПолучитьОбъект() = Неопределено Тогда

Сообщить("Объект с таким GUID в базе не найден");

КонецЕсли;

Помните про ограничение: GUID уникален внутри одного типа объектов, но сам по себе не содержит информации о типе. Если вы передаёте GUID во внешнюю систему, тип объекта (справочник «Номенклатура» или документ «Заказ») нужно передавать отдельно, иначе при обратном преобразовании вы не узнаете, к какому менеджеру обращаться.

Способ 3. ЗначениеВСтрокуВнутр и XMLСтрока — сериализация ссылки

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

// Внутреннее представление (работает только внутри платформы 1С)

СтрокаВнутр = ЗначениеВСтрокуВнутр(Ссылка);

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

ВосстановленнаяСсылка = ЗначениеИзСтрокиВнутр(СтрокаВнутр);

Альтернатива — функции XML-сериализации, которые дают более читаемый и переносимый результат:

СтрокаXML = XMLСтрока(Ссылка);

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

Сравнение способов

Строка(Ссылка)

Для вывода пользователю и в журнал. Не подходит для идентификации — представление не уникально и может меняться при редактировании объекта.

Строка(Ссылка.УникальныйИдентификатор())

Для обмена между базами и поиска объекта. Требует отдельной передачи типа объекта.

ЗначениеВСтрокуВнутр()

Сохраняет тип и ссылку вместе. Формат недокументирован, пригоден только внутри платформы 1С, не для внешних систем.

XMLСтрока()

Читаемый формат для интеграций, но обратное преобразование требует указания конкретного типа.

Выражение ссылки как строки в запросе

В языке запросов 1С прямой функции преобразования ссылки в строку нет — оператор ВЫРАЗИТЬ работает только с примитивными типами и не умеет приводить ссылку к строке. Это частая причина ошибок у начинающих разработчиков.

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

ВЫБРАТЬ

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

ИЗ

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

Второй путь — выбрать ссылку в результат запроса как есть, а преобразование в строку выполнить уже в коде при обходе выборки. Это предпочтительный вариант, когда нужен GUID: в запросе его получить нельзя, только через Выборка.Ссылка.УникальныйИдентификатор() в цикле.

Выразить ссылку как строку в СКД и на форме

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

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

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

Типичные ошибки
01
Использование Строка(Ссылка) для сопоставления объектов между базами — представления совпадают у разных объектов, данные склеиваются неправильно.
02
Забытая проверка существования объекта после ПолучитьСсылку() — в базе появляются битые ссылки с ошибкой «Объект не найден».
03
Попытка применить ВЫРАЗИТЬ(Ссылка КАК Строка) в запросе — синтаксическая ошибка, такого приведения в языке запросов нет.
04
Передача GUID без типа объекта во внешнюю систему — на приёмной стороне невозможно понять, ссылка на что была передана.
05
Хранение представления объекта в регистре как «идентификатора» — после переименования элемента связь теряется.

Отдельно стоит предупредить о ловушке с ЗначениеВСтрокуВнутр(): формат этой строки внутренний и может отличаться между версиями платформы. Использовать её для долгосрочного хранения данных или передачи внешним системам нельзя — только для временного сохранения в рамках одной инфраструктуры 1С.

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

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

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

Преобразование туда-обратно
Норма

Ссылка → строка → ссылка даёт объект, равный исходному (проверка через сравнение ссылок)

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

Восстановленная ссылка не равна исходной или объект не найден

Строка GUID
Норма

36 символов, формат 8-4-4-4-12 с дефисами, нижний регистр

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

Другая длина, лишние символы, пустая строка

Представление для пользователя
Норма

Читаемый текст с номером и датой документа или наименованием

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

Пустая строка или только имя типа без данных

Что выбрать в вашей ситуации

Маршрут решения

Как выбрать действие

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

Итоговое правило простое: представление — для людей, GUID — для машин. Смешение этих двух подходов — источник большинства ошибок при интеграциях и обменах данными. Если сомневаетесь, что выбрать, ориентируйтесь на потребителя строки: читает её человек — берите Строка(), обрабатывает программа — берите уникальный идентификатор.

Итог

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

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

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

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

Нет, язык запросов не имеет функции для получения уникального идентификатора. Стандартное решение — выбрать ссылки запросом, а затем в цикле обхода выборки вызвать Ссылка.УникальныйИдентификатор() и преобразовать результат в строку.

Почему ПолучитьСсылку() вернула ссылку, но при открытии ошибка «Объект не найден»?

Метод ПолучитьСсылку() создаёт значение ссылки по GUID без проверки наличия объекта в базе. Если объекта нет, получается битая ссылка. Проверяйте существование через ПолучитьОбъект() (вернёт Неопределено) или запросом по ссылке.

Чем отличается Строка(Ссылка) от Ссылка.Наименование?

Строка(Ссылка) возвращает представление объекта, которое формируется по правилам конфигурации и для документов включает номер и дату. Обращение к конкретному реквизиту вроде Наименование возвращает только значение этого поля и требует обращения к данным объекта, что медленнее при массовой обработке.

Безопасно ли хранить результат ЗначениеВСтрокуВнутр() в файле или другой базе?

Нет, формат этой строки внутренний и недокументированный, он может измениться при обновлении платформы. Для хранения и передачи используйте GUID или XML-сериализацию, а ЗначениеВСтрокуВнутр() применяйте только для временных операций внутри одной системы.

Как из строки GUID получить ссылку, если неизвестен тип объекта?

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

Почему сравнение GUID из 1С и из внешней системы не срабатывает?

Чаще всего дело в регистре символов: 1С выдаёт GUID в нижнем регистре, а внешние системы могут возвращать верхний. Приведите обе строки к одному регистру функцией НРег() перед сравнением или сравнивайте значения типа УникальныйИдентификатор, а не строки.