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

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

Как формируется ссылка в 1С

Разбираем, как формируется ссылка в 1С: уникальный идентификатор GUID, навигационная ссылка, внешняя ссылка на базу, получение ссылки в коде и типичные ошибки.

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

Любой объект ссылочного типа в 1С хранится в базе с уникальным идентификатором — GUID. Именно он лежит в основе всех видов ссылок: внутренней ссылки языка 1С, навигационной ссылки для тонкого и веб-клиента, внешней ссылки на опубликованную базу. Меняется только «обёртка» вокруг идентификатора, сам GUID остаётся неизменным на протяжении жизни объекта.

Ниже разобрано, из чего состоит ссылка, как получить её программно и вручную, чем отличаются виды ссылок и какие ошибки чаще всего приводят к «битым» ссылкам при обмене.

Из чего состоит ссылка на объект 1С

Внутренняя ссылка объекта в 1С состоит из двух логических частей: типа объекта (например, «Документ.РеализацияТоваровУслуг» или «Справочник.Номенклатура») и уникального идентификатора GUID внутри этого типа. Пара «тип + GUID» однозначно определяет объект во всей базе и в распределённых системах.

GUID присваивается платформой в момент создания объекта и не изменяется при перезаписи, проведении, переименовании или изменении любых реквизитов. Именно поэтому GUID используется как ключ при синхронизации баз: код и наименование могут совпадать или меняться, а идентификатор гарантированно уникален.

Важно различать ссылку и объект. Ссылка — это только указатель, «адрес» записи в базе; она занимает минимум памяти и не содержит данных. Объект — это полная копия данных, загруженная для чтения или изменения. Получение объекта через ссылку (метод ПолучитьОбъект()) — затратная операция, поэтому в циклах и запросах работают именно со ссылками.

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

Если объект уже создан в коде, ссылка доступна через свойство Объект.Ссылка — но только после записи. У нового, ещё не записанного объекта ссылка пустая, и попытка использовать её даст пустое значение. Чтобы заранее знать идентификатор, применяют метод УстановитьСсылкуНового(): он назначает ссылку до записи, что удобно при загрузке связанных данных.

Для поиска существующего объекта по известному GUID используют конструкцию вида Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). Если объекта с таким идентификатором нет, метод всё равно вернёт ссылку — но она будет «битой». Проверка выполняется через запрос или через попытку обращения к реквизиту с обработкой исключения.

bsl
// Получение ссылки по строке GUID
Ид = Новый УникальныйИдентификатор("8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c");
СсылкаНаТовар = Справочники.Номенклатура.ПолучитьСсылку(Ид);

// Навигационная ссылка для пользователя
НавСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаТовар);

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

Навигационная ссылка: как дать пользователю путь к объекту

Навигационная ссылка — это текстовое представление местоположения объекта внутри клиентского приложения, например e1cib/data/Справочник.Номенклатура?ref=.... Она позволяет открыть объект в тонком или веб-клиенте, вставить её в письмо, сообщение или избранное.

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

Как получить ссылку на объект вручную
  1. 1
    Откройте нужный документ или элемент справочника в режиме предприятия
  2. 2
    В меню «Ещё» формы выберите команду «Получить ссылку» (в ряде конфигураций — «Вывести ссылку»)
  3. 3
    Скопируйте строку вида e1cib/data/... из появившегося окна
  4. 4
    Проверьте: вставьте ссылку в поле перехода (Ctrl+F11 в ряде конфигураций) — должен открыться тот же объект

Сама по себе навигационная ссылка вида e1cib/data/... работает только внутри клиента, подключённого к этой конкретной базе. Чтобы передать её внешнему пользователю, нужна внешняя часть — адрес опубликованной базы.

Внешняя ссылка на базу, опубликованную на веб-сервере

Если база опубликована на веб-сервере (Apache или IIS), внешняя ссылка складывается из двух частей: адреса публикации и навигационной ссылки. Итоговый вид: https://сервер/База/ru/#e1cib/data/Справочник.Номенклатура?ref=.... По такому адресу пользователь с браузера попадает сразу на форму объекта после авторизации.

Программно адрес публикации получают функцией ПолучитьАдресПубликацииИнформационнойБазы() или задают константой в настройках — второй вариант надёжнее, если база доступна по нескольким адресам (внутренний и внешний). Конкатенация адреса и навигационной ссылки — стандартный приём при рассылке уведомлений о задачах, согласованиях и новых документах.

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

Вид ссылкиКак формируетсяГде используется
Внутренняя ссылка (тип + GUID)Автоматически при создании объектаКод, запросы, обмены между базами
НавигационнаяПолучитьНавигационнуюСсылку() или команда «Получить ссылку»Переходы внутри клиента, избранное, сообщения пользователям этой же базы
Внешняя (URL)Адрес публикации + навигационная ссылкаПисьма, мессенджеры, доступ через браузер извне

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

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

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

Нужно связать объекты двух баз при обменеПередавайте строку GUID и восстанавливайте ссылку через ПолучитьСсылку()
Нужно отправить коллеге ссылку на документ в той же базеИспользуйте команду «Получить ссылку» и передайте строку e1cib/data/...
Нужно дать доступ внешнему пользователю через браузерОпубликуйте базу на веб-сервере и сформируйте полный URL с адресом публикации

Битые ссылки: причины и как их избежать

«Битая» ссылка возникает, когда объект с данным GUID удалён физически, а ссылки на него остались — в реквизитах других объектов, в регистрах или во внешних хранилищах. В интерфейсе такое значение отображается как строка вида «<Объект не найден> (123:abc...)».

Типичные причины: прямое удаление объектов без контроля ссылочной целостности, обмен, в котором объект выгрузился раньше своего владельца, восстановление базы из старой копии при уже ушедших данных. Защита проста: удалять объекты только штатными средствами с проверкой ссылок, а в обменах обрабатывать ситуацию отсутствия объекта-корреспондента.

Типичные ошибки при работе со ссылками
01
Вызов ПолучитьОбъект() внутри цикла по ссылкам — резкое падение производительности; используйте запросы и выборки
02
Использование ссылки нового объекта до записи — получаете пустую ссылку и потерянные связи; сначала УстановитьСсылкуНового() или Записать()
03
Хранение навигационной ссылки как постоянного идентификатора — при переносе базы на другой сервер URL перестанет работать; храните GUID
04
ПолучитьСсылку() без проверки существования объекта — в базу попадают «битые» ссылки; проверяйте наличие запросом

Проверка результата и ограничения

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

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

Итог

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

Основа любой ссылки в 1С — неизменный GUID объекта. В коде работают со ссылкой и ПолучитьСсылку(), пользователям дают навигационную ссылку, внешним адресатам — полный URL опубликованной базы. Проверяйте существование объекта по GUID и не используйте навигационные ссылки как постоянные ключи обмена.

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

Можно ли задать GUID объекту самостоятельно?

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

Почему ПолучитьСсылку() вернула значение, а объекта в базе нет?

Метод ПолучитьСсылку() не обращается к базе — он просто конструирует ссылку из типа и GUID. Существование объекта нужно проверять отдельно: запросом по ссылке или попыткой чтения реквизита. Без проверки в данные легко записать «битую» ссылку.

Откроется ли навигационная ссылка у коллеги из другой базы?

Нет. Строка вида e1cib/data/... указывает на объект внутри конкретной информационной базы. В другой базе тот же GUID либо отсутствует, либо принадлежит другому объекту. Для внешнего доступа формируйте полный URL с адресом опубликованной базы.

Чем ссылка отличается от кода или номера документа?

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

Сохранятся ли ссылки при обновлении конфигурации?

Да. Обновление конфигурации и реструктуризация таблиц не меняют GUID существующих объектов, поэтому внутренние и навигационные ссылки продолжают работать. Меняться может только внешний URL, если при обновлении изменился адрес публикации базы на веб-сервере.