Разработка и Конфигурация · 10 мин
Как формируется ссылка в 1С
Разбираем, как формируется ссылка в 1С: уникальный идентификатор GUID, навигационная ссылка, внешняя ссылка на базу, получение ссылки в коде и типичные ошибки.
Ссылка в 1С — это не привычная веб-строка с адресом страницы, а указатель на конкретный объект информационной базы: документ, элемент справочника, запись регистра. Понимание того, как она устроена, нужно в трёх практических ситуациях: при обмене данными между базами, при публикации ссылок для пользователей через веб-клиент и при разработке, когда объект требуется однозначно идентифицировать в коде.
Любой объект ссылочного типа в 1С хранится в базе с уникальным идентификатором — GUID. Именно он лежит в основе всех видов ссылок: внутренней ссылки языка 1С, навигационной ссылки для тонкого и веб-клиента, внешней ссылки на опубликованную базу. Меняется только «обёртка» вокруг идентификатора, сам GUID остаётся неизменным на протяжении жизни объекта.
Ниже разобрано, из чего состоит ссылка, как получить её программно и вручную, чем отличаются виды ссылок и какие ошибки чаще всего приводят к «битым» ссылкам при обмене.
Из чего состоит ссылка на объект 1С
Внутренняя ссылка объекта в 1С состоит из двух логических частей: типа объекта (например, «Документ.РеализацияТоваровУслуг» или «Справочник.Номенклатура») и уникального идентификатора GUID внутри этого типа. Пара «тип + GUID» однозначно определяет объект во всей базе и в распределённых системах.
GUID присваивается платформой в момент создания объекта и не изменяется при перезаписи, проведении, переименовании или изменении любых реквизитов. Именно поэтому GUID используется как ключ при синхронизации баз: код и наименование могут совпадать или меняться, а идентификатор гарантированно уникален.
Важно различать ссылку и объект. Ссылка — это только указатель, «адрес» записи в базе; она занимает минимум памяти и не содержит данных. Объект — это полная копия данных, загруженная для чтения или изменения. Получение объекта через ссылку (метод ПолучитьОбъект()) — затратная операция, поэтому в циклах и запросах работают именно со ссылками.
Как получить ссылку в коде 1С
Если объект уже создан в коде, ссылка доступна через свойство Объект.Ссылка — но только после записи. У нового, ещё не записанного объекта ссылка пустая, и попытка использовать её даст пустое значение. Чтобы заранее знать идентификатор, применяют метод УстановитьСсылкуНового(): он назначает ссылку до записи, что удобно при загрузке связанных данных.
Для поиска существующего объекта по известному GUID используют конструкцию вида Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). Если объекта с таким идентификатором нет, метод всё равно вернёт ссылку — но она будет «битой». Проверка выполняется через запрос или через попытку обращения к реквизиту с обработкой исключения.
// Получение ссылки по строке GUID
Ид = Новый УникальныйИдентификатор("8f3a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c");
СсылкаНаТовар = Справочники.Номенклатура.ПолучитьСсылку(Ид);
// Навигационная ссылка для пользователя
НавСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаТовар);Обратная задача — получить GUID из ссылки — решается свойством Ссылка.УникальныйИдентификатор(). Полученную строку передают в другую базу при обмене, чтобы там найти или создать соответствующий объект.
Навигационная ссылка: как дать пользователю путь к объекту
Навигационная ссылка — это текстовое представление местоположения объекта внутри клиентского приложения, например e1cib/data/Справочник.Номенклатура?ref=.... Она позволяет открыть объект в тонком или веб-клиенте, вставить её в письмо, сообщение или избранное.
Программно её формирует функция ПолучитьНавигационнуюСсылку(), которой передают ссылку на объект и, при необходимости, имя реквизита. Вручную пользователь получает ту же ссылку через команду «Получить ссылку» в меню «Ещё» формы объекта или комбинацией клавиш в типовых конфигурациях.
- 1Откройте нужный документ или элемент справочника в режиме предприятия
- 2В меню «Ещё» формы выберите команду «Получить ссылку» (в ряде конфигураций — «Вывести ссылку»)
- 3Скопируйте строку вида e1cib/data/... из появившегося окна
- 4Проверьте: вставьте ссылку в поле перехода (Ctrl+F11 в ряде конфигураций) — должен открыться тот же объект
Сама по себе навигационная ссылка вида e1cib/data/... работает только внутри клиента, подключённого к этой конкретной базе. Чтобы передать её внешнему пользователю, нужна внешняя часть — адрес опубликованной базы.
Внешняя ссылка на базу, опубликованную на веб-сервере
Если база опубликована на веб-сервере (Apache или IIS), внешняя ссылка складывается из двух частей: адреса публикации и навигационной ссылки. Итоговый вид: https://сервер/База/ru/#e1cib/data/Справочник.Номенклатура?ref=.... По такому адресу пользователь с браузера попадает сразу на форму объекта после авторизации.
Программно адрес публикации получают функцией ПолучитьАдресПубликацииИнформационнойБазы() или задают константой в настройках — второй вариант надёжнее, если база доступна по нескольким адресам (внутренний и внешний). Конкатенация адреса и навигационной ссылки — стандартный приём при рассылке уведомлений о задачах, согласованиях и новых документах.
Сравнение видов ссылок и когда какой применять
| Вид ссылки | Как формируется | Где используется |
|---|---|---|
| Внутренняя ссылка (тип + GUID) | Автоматически при создании объекта | Код, запросы, обмены между базами |
| Навигационная | ПолучитьНавигационнуюСсылку() или команда «Получить ссылку» | Переходы внутри клиента, избранное, сообщения пользователям этой же базы |
| Внешняя (URL) | Адрес публикации + навигационная ссылка | Письма, мессенджеры, доступ через браузер извне |
Выбор простой: внутри кода и обменов работают только с GUID, для интерфейсных переходов достаточно навигационной ссылки, а для коммуникации с людьми вне базы нужен полный URL. Смешивать их нельзя: GUID в браузере ничего не откроет, а навигационная ссылка не годится как ключ синхронизации.
Как выбрать вид ссылки
Битые ссылки: причины и как их избежать
«Битая» ссылка возникает, когда объект с данным GUID удалён физически, а ссылки на него остались — в реквизитах других объектов, в регистрах или во внешних хранилищах. В интерфейсе такое значение отображается как строка вида «<Объект не найден> (123:abc...)».
Типичные причины: прямое удаление объектов без контроля ссылочной целостности, обмен, в котором объект выгрузился раньше своего владельца, восстановление базы из старой копии при уже ушедших данных. Защита проста: удалять объекты только штатными средствами с проверкой ссылок, а в обменах обрабатывать ситуацию отсутствия объекта-корреспондента.
Проверка результата и ограничения
Проверить корректность сформированной ссылки можно тремя способами: вставить навигационную ссылку в механизм перехода клиента и убедиться, что открылся нужный объект; выполнить запрос по GUID и убедиться, что вернулась ровно одна запись; для внешней ссылки — открыть её в браузере в режиме инкогнито и пройти авторизацию.
Учитывайте ограничения: GUID нельзя изменить штатными средствами после записи объекта, навигационная ссылка привязана к конкретной базе, а внешняя ссылка требует корректно настроенной публикации и TLS-сертификата при работе по HTTPS. При обновлении конфигурации и реструктуризации данных GUID объектов сохраняются — ссылки не ломаются.
Что важно запомнить
Основа любой ссылки в 1С — неизменный GUID объекта. В коде работают со ссылкой и ПолучитьСсылку(), пользователям дают навигационную ссылку, внешним адресатам — полный URL опубликованной базы. Проверяйте существование объекта по GUID и не используйте навигационные ссылки как постоянные ключи обмена.
Частые вопросы
Можно ли задать GUID объекту самостоятельно?
Да, до первой записи объекта — методом УстановитьСсылкуНового() с заранее сформированным УникальныйИдентификатор. После записи изменить идентификатор штатными средствами нельзя. Этот приём используют при синхронизации, чтобы объект в приёмнике получил тот же GUID, что и в источнике.
Почему ПолучитьСсылку() вернула значение, а объекта в базе нет?
Метод ПолучитьСсылку() не обращается к базе — он просто конструирует ссылку из типа и GUID. Существование объекта нужно проверять отдельно: запросом по ссылке или попыткой чтения реквизита. Без проверки в данные легко записать «битую» ссылку.
Откроется ли навигационная ссылка у коллеги из другой базы?
Нет. Строка вида e1cib/data/... указывает на объект внутри конкретной информационной базы. В другой базе тот же GUID либо отсутствует, либо принадлежит другому объекту. Для внешнего доступа формируйте полный URL с адресом опубликованной базы.
Чем ссылка отличается от кода или номера документа?
Код и номер — это пользовательские реквизиты: они могут повторяться между базами, меняться вручную и не гарантируют уникальность. Ссылка основана на GUID, уникальна всегда и не зависит от заполнения реквизитов, поэтому именно она используется для однозначной идентификации.
Сохранятся ли ссылки при обновлении конфигурации?
Да. Обновление конфигурации и реструктуризация таблиц не меняют GUID существующих объектов, поэтому внутренние и навигационные ссылки продолжают работать. Меняться может только внешний URL, если при обновлении изменился адрес публикации базы на веб-сервере.