Ссылка на документ в 1С: как получить, вставить и восстановить

· 9 мин

Содержание

Чтобы дать коллеге точную отсылку на конкретный документ, в 1С есть навигационная ссылка. Откройте документ, нажмите кнопку Ещё в правом верхнем углу формы и выберите Получить ссылку — программа покажет строку вида e1cib/data/Документ.ПоступлениеТоваров?ref=..., её и копируют в письмо, задачу или заметку. Кто получит такую ссылку, щёлкнет по ней — и 1С откроет ровно тот документ.

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

Что на самом деле представляет собой ссылка на объект

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

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

Когда нужно поделиться ссылкой с человеком, платформа упаковывает GUID в навигационную ссылку — текстовую строку, начинающуюся с e1cib/. Это та самая строка из меню Получить ссылку. Браузер её не поймёт, зато поймёт запущенный клиент 1С: он разберёт строку, достанет GUID и откроет нужный документ.

Коротко: внутри базы документ адресуется ссылочным типом Ссылка (за ним GUID), а для передачи между людьми тот же объект превращается в текстовую навигационную ссылку e1cib/....

Как скопировать навигационную ссылку на документ через меню

Самый короткий путь — из открытой формы документа.

  1. Откройте нужный документ двойным щелчком из списка.
  2. В командной панели формы нажмите кнопку Ещё (значок с горизонтальными полосами, справа вверху).
  3. Выберите пункт Получить ссылку.
  4. В появившемся окне стоит готовая навигационная ссылка — нажмите Копировать в буфер обмена.

Теперь ссылка в буфере, её можно вставить куда угодно: Ctrl+V в тело письма, в поле задачи, в текстовый файл.

Если документ не открыт, а виден только в списке, ссылку тоже можно получить: выделите строку, вызовите то же меню Ещё → Получить ссылку. Платформа сформирует ссылку на выделенный объект.

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

Навигационная ссылка привязана к конкретной информационной базе. В другой базе — даже в точной копии на другом сервере — тот же e1cib/-адрес может указывать на другой объект или не открыться вовсе. О переносе ссылок между базами — в разделе про обмен ниже.

Как перейти по полученной ссылке и вставить её в письмо

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

Чтобы ссылка в письме стала кликабельной, вставляйте её в поле, которое поддерживает гиперссылки (тело электронного письма в встроенной почте, HTML-поле). Если вставить в обычный текст — ссылка останется строкой, её придётся копировать и открывать вручную.

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

Для внешних адресатов, у которых базы нет, навигационная ссылка бесполезна — открыть её нечем. Таким людям отправляйте не ссылку, а печатную форму документа (PDF) или его реквизиты: номер, дату, сумму, контрагента.

Проверка перед отправкой ссылки коллеге
Выполнено: 0 / 4

Как сослаться на документ в коде: навигационная ссылка и GUID

В коде на встроенном языке есть готовая функция. Она возвращает ту же навигационную строку, что и меню Получить ссылку:

НавСсылка = ПолучитьНавигационнуюСсылку(Объект.Ссылка);
Сообщить(НавСсылка);

Результат — строка e1cib/data/..., её можно положить в реквизит, отправить в письме из кода, записать в журнал регистрации.

Чаще в коде нужен не человекочитаемый адрес, а сам идентификатор объекта. GUID ссылки достают так:

Идентификатор = Объект.Ссылка.УникальныйИдентификатор();
Сообщить(XMLСтрока(Идентификатор)); // строка вида a1b2c3d4-....

Обратная задача — собрать ссылку из сохранённого GUID. Для этого у менеджера объекта есть метод ПолучитьСсылку:

Ид = Новый УникальныйИдентификатор("a1b2c3d4-0000-0000-0000-000000000000");
СсылкаНаДокумент = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(Ид);

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

ДокОбъект = СсылкаНаДокумент.ПолучитьОбъект();
Если ДокОбъект = Неопределено Тогда
    Сообщить("Документ не найден — ссылка битая");
Иначе
    Сообщить("Номер: " + ДокОбъект.Номер);
КонецЕсли;

Такой подход — записать GUID строкой, а потом восстановить из него ссылку — основа переноса ссылок между базами и внешними системами.

Ссылки в запросах, табличных документах и на формах

В запросах. Отдельного «адреса» у ссылки в языке запросов нет: сама ссылка и есть значение поля. Чтобы вывести идентификатор, обращаются к ссылочному полю напрямую, а строковое представление получают уже в коде через XMLСтрока(). В условиях запроса ссылку сравнивают как обычное значение — через параметр:

Запрос.Текст =
"ВЫБРАТЬ Ссылка, Номер, Дата
|ИЗ Документ.ПоступлениеТоваровУслуг
|ГДЕ Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", ВыбранныйКонтрагент);

В табличном документе (печатной форме). Чтобы ячейка стала кликабельной ссылкой на документ, в макете у области задают расшифровку: присваивают свойству Расшифровка саму ссылку объекта. При двойном щелчке по такой ячейке платформа откроет документ — это механизм расшифровок отчётов, тот же, что открывает первичку из оборотно-сальдовой ведомости.

На управляемой форме. Реквизит с типом ссылки отображается как поле, которое само ведёт себя как гиперссылка: щелчок открывает связанный объект. Если нужно сделать активной произвольную надпись, у элемента формы типа «Надпись» включают свойство гиперссылки и обрабатывают событие нажатия.

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

Как указать ссылку на один документ в другом документе

Внутри учёта документы тоже ссылаются друг на друга. Счёт выписан на основании договора, реализация — по счёту, корректировка — по накладной. Такая связь — это реквизит ссылочного типа внутри документа, а не навигационная строка.

В типовых конфигурациях для этого есть поле Основание (в некоторых документах — отдельные поля вроде Договор, Сделка, Заказ). Указывают ссылку руками:

  1. Откройте документ, который должен сослаться на другой.
  2. Найдите поле связи (Основание, Договор и т. п.).
  3. Нажмите кнопку выбора и укажите нужный документ из списка.

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

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

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

Ссылки при обмене и интеграции с внешними системами

Когда документ уезжает в другую базу или во внешнюю систему, внутренняя ссылка 1С с собой не едет — GUID в чужой базе ничего не адресует. Поэтому объекты сопоставляют по-другому.

Обмен между базами 1С. В типовых обменах (через планы обмена, Конвертацию данных, EnterpriseData) каждый объект при выгрузке получает свой GUID, и приёмник хранит таблицу соответствия «GUID источника → ссылка у себя». Если объект приходит впервые — создаётся новый и запоминается соответствие; если уже был — обновляется существующий. Вручную в это лезть обычно не нужно, но понимать механизм полезно: именно соответствие GUID не даёт обмену плодить дубли.

REST / OData. Во внешних интеграциях документ адресуется по GUID через стандартный OData-интерфейс. Адрес выглядит так:

/odata/standard.odata/Document_ПоступлениеТоваров(guid'a1b2c3d4-...')

Здесь guid'...' — тот самый идентификатор, что вы достали методом УникальныйИдентификатор(). Чтобы OData-интерфейс отвечал, его сначала публикуют на веб-сервере и включают в настройках.

Сериализация ссылки. Если нужно передать ссылку текстом (в файл, в очередь, в JSON), сериализуйте её через XMLСтрока(Ссылка) при выгрузке и XMLЗначение(Тип("ДокументСсылка.ПоступлениеТоваров"), Строка) при загрузке. Так ссылка переживёт выгрузку в файл и возврат обратно — но только в пределах той же базы или её копии с тем же составом объектов.

ЗадачаЧем адресуют документ
Поделиться с коллегой в той же базенавигационная ссылка e1cib/...
Сослаться в коде внутри базыссылочный тип Ссылка, GUID
Обмен между базами 1СGUID + таблица соответствий
Внешняя система через RESTGUID в адресе OData
Передача ссылки текстомXMLСтрока / XMLЗначение

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

Разберём частые сбои и что с ними делать.

Диагностика: выберите симптом

Отдельно про права. Даже правильная ссылка не откроется, если у пользователя нет прав на просмотр этого вида документов. В этом случае 1С сообщит о нарушении прав доступа, а не о битой ссылке — не путайте эти две причины.

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

Чем навигационная ссылка отличается от номера документа?
Номер — это реквизит, он повторяется по годам и организациям и может быть изменён. Навигационная ссылка несёт неизменный GUID объекта и указывает ровно на одну запись в базе.
Можно ли отправить ссылку клиенту, у которого нет 1С?
Нет смысла: открыть e1cib-ссылку нечем без запущенного клиента и доступа к вашей базе. Клиенту отправляйте печатную форму (PDF) или реквизиты документа.
Ссылка перестала открываться после переноса базы на другой сервер. Почему?
Если перенесена та же база целиком, ссылки обычно продолжают работать — GUID сохраняются. Ссылка не откроется, если вы подключились к другой базе или объект в новой базе был пересоздан обменом с новым GUID.
Как из кода получить тот же адрес, что даёт меню «Получить ссылку»?
Функцией ПолучитьНавигационнуюСсылку(Ссылка) — она возвращает строку e1cib/..., идентичную той, что показывает интерфейс.
Можно ли восстановить документ по ссылке, если его удалили?
Нет. Ссылка не хранит данные документа, только указатель. После удаления объекта восстановление возможно лишь из резервной копии базы.