Разработка и Конфигурация · 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С, не для внешних систем.
Читаемый формат для интеграций, но обратное преобразование требует указания конкретного типа.
Выражение ссылки как строки в запросе
В языке запросов 1С прямой функции преобразования ссылки в строку нет — оператор ВЫРАЗИТЬ работает только с примитивными типами и не умеет приводить ссылку к строке. Это частая причина ошибок у начинающих разработчиков.
Если строковое представление нужно в результате запроса, есть обходные пути. Первый — использовать функцию ПРЕДСТАВЛЕНИЕССЫЛКИ(), которая возвращает то же, что и Строка() в коде:
ВЫБРАТЬ
ПРЕДСТАВЛЕНИЕССЫЛКИ(Реализация.Ссылка) КАК ПредставлениеДокумента
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
Второй путь — выбрать ссылку в результат запроса как есть, а преобразование в строку выполнить уже в коде при обходе выборки. Это предпочтительный вариант, когда нужен GUID: в запросе его получить нельзя, только через Выборка.Ссылка.УникальныйИдентификатор() в цикле.
Выразить ссылку как строку в СКД и на форме
В системе компоновки данных задача решается похожим образом. В наборе данных-запросе доступна функция ПРЕДСТАВЛЕНИЕССЫЛКИ(). Если отчёт построен на наборе «Объект» или требуется GUID, используются вычисляемые поля: в событии ПриКомпоновкеРезультата или в коде формирования добавляется колонка, куда в цикле записывается Строка(Ссылка.УникальныйИдентификатор()).
На управляемой форме ссылочный реквизит при выводе в надпись или текстовое поле преобразуется автоматически — платформа сама подставляет представление. Если нужен именно GUID (например, показать его для технической поддержки), добавьте строковый реквизит формы и заполните его в коде:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ГУИДСтрокой = Строка(Объект.Ссылка.УникальныйИдентификатор());
КонецПроцедуры
Типичные ошибки и как их избежать
Отдельно стоит предупредить о ловушке с ЗначениеВСтрокуВнутр(): формат этой строки внутренний и может отличаться между версиями платформы. Использовать её для долгосрочного хранения данных или передачи внешним системам нельзя — только для временного сохранения в рамках одной инфраструктуры 1С.
Ещё одна частая проблема — сравнение строк GUID, полученных из разных источников, без учёта регистра. Внешние системы могут вернуть GUID в верхнем регистре, а 1С формирует его в нижнем. Перед сравнением приводите обе строки к одному регистру через НРег() или сравнивайте сами идентификаторы, а не их строковые представления.
Как проверить результат
Ссылка → строка → ссылка даёт объект, равный исходному (проверка через сравнение ссылок)
Восстановленная ссылка не равна исходной или объект не найден
36 символов, формат 8-4-4-4-12 с дефисами, нижний регистр
Другая длина, лишние символы, пустая строка
Читаемый текст с номером и датой документа или наименованием
Пустая строка или только имя типа без данных
Что выбрать в вашей ситуации
Как выбрать действие
Итоговое правило простое: представление — для людей, GUID — для машин. Смешение этих двух подходов — источник большинства ошибок при интеграциях и обменах данными. Если сомневаетесь, что выбрать, ориентируйтесь на потребителя строки: читает её человек — берите Строка(), обрабатывает программа — берите уникальный идентификатор.
Что важно запомнить
Строка(Ссылка) возвращает представление для пользователя и не годится для идентификации. Для обмена и поиска используйте GUID: Строка(Ссылка.УникальныйИдентификатор()). Обратное восстановление — через Новый УникальныйИдентификатор() и ПолучитьСсылку() с обязательной проверкой существования объекта. В запросах ссылку в строку преобразует только ПРЕДСТАВЛЕНИЕССЫЛКИ(), GUID там недоступен.
Частые вопросы
Можно ли получить GUID ссылки в запросе 1С?
Нет, язык запросов не имеет функции для получения уникального идентификатора. Стандартное решение — выбрать ссылки запросом, а затем в цикле обхода выборки вызвать Ссылка.УникальныйИдентификатор() и преобразовать результат в строку.
Почему ПолучитьСсылку() вернула ссылку, но при открытии ошибка «Объект не найден»?
Метод ПолучитьСсылку() создаёт значение ссылки по GUID без проверки наличия объекта в базе. Если объекта нет, получается битая ссылка. Проверяйте существование через ПолучитьОбъект() (вернёт Неопределено) или запросом по ссылке.
Чем отличается Строка(Ссылка) от Ссылка.Наименование?
Строка(Ссылка) возвращает представление объекта, которое формируется по правилам конфигурации и для документов включает номер и дату. Обращение к конкретному реквизиту вроде Наименование возвращает только значение этого поля и требует обращения к данным объекта, что медленнее при массовой обработке.
Безопасно ли хранить результат ЗначениеВСтрокуВнутр() в файле или другой базе?
Нет, формат этой строки внутренний и недокументированный, он может измениться при обновлении платформы. Для хранения и передачи используйте GUID или XML-сериализацию, а ЗначениеВСтрокуВнутр() применяйте только для временных операций внутри одной системы.
Как из строки GUID получить ссылку, если неизвестен тип объекта?
Напрямую — никак: GUID не содержит информации о типе. Нужно либо передавать тип вместе с идентификатором, либо перебирать менеджеры объектов с проверкой существования, что ресурсоёмко. Правильное решение — хранить тип рядом с GUID при выгрузке.
Почему сравнение GUID из 1С и из внешней системы не срабатывает?
Чаще всего дело в регистре символов: 1С выдаёт GUID в нижнем регистре, а внешние системы могут возвращать верхний. Приведите обе строки к одному регистру функцией НРег() перед сравнением или сравнивайте значения типа УникальныйИдентификатор, а не строки.