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

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

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

Как получить ссылку на документ в 1С: навигационная ссылка, метод ПолучитьСсылку, работа с COM и внешними подключениями, типичные ошибки и проверка результата.

В 1С словом «ссылка» называют сразу несколько разных вещей: навигационную ссылку вида e1cib/data/Документ.РеализацияТоваровУслуг?ref=..., объект типа ДокументСсылка в коде и GUID документа в базе данных. Прежде чем действовать, важно понять, какая именно ссылка нужна: чтобы поделиться документом с коллегой, открыть его из внешней системы или найти объект в запросе и коде.

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

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

Что такое ссылка на документ в 1С

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

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

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

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

Получатель вставляет ссылку через меню «Сервис» (или кнопку со стрелкой вниз рядом с адресной строкой, в зависимости от версии платформы) → «Перейти по ссылке», либо просто вставляет её в адресную строку клиента. Документ откроется, если у пользователя есть права на его просмотр.

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

Порядок действий в интерфейсе
  1. 1
    Откройте документ в режиме просмотра или редактирования
  2. 2
    Нажмите «Ещё» в командной панели формы
  3. 3
    Выберите «Получить ссылку» и скопируйте строку
  4. 4
    Передайте ссылку коллеге; он откроет её через «Перейти по ссылке»
  5. 5
    Убедитесь, что у получателя есть права на этот вид документов

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

Ссылка на существующий документ

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

Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 Т.Ссылка ИЗ Документ.РеализацияТоваровУслуг КАК Т");

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда

ДокСсылка = Выборка.Ссылка;

КонецЕсли;

Если известны номер и дата, документ ищут методом НайтиПоНомеру() менеджера документа. Метод возвращает либо ссылку, либо пустую ссылку, если документ не найден, — это нужно проверять перед использованием.

Ссылка на ещё не записанный документ

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

НоваяСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор);

ДокОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

ДокОбъект.УстановитьСсылкуНового(НоваяСсылка);

ДокОбъект.Дата = ТекущаяДатаСеанса();

ДокОбъект.Записать();

Как получить GUID документа и найти документ по GUID

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

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

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

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

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

Полученная ссылка
Норма

Запрос по ссылке возвращает документ с ожидаемым номером и датой

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

Запрос пустой — ссылка битая или из другой базы

Навигационная ссылка
Норма

Открывается нужный документ в клиенте 1С

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

Ошибка «объект не найден» — база другая или документ удалён

GUID
Норма

Строка из 36 символов с дефисами, документ находится по ней

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

Строка обрезана или изменён порядок байтов при передаче

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

При подключении к базе 1С извне через COM-коннектор (V83.COMConnector) ссылки доступны через те же объекты: вы выполняете запрос или находите документ по номеру и читаете свойство Ссылка. Сам объект ссылки между процессами не передаётся — наружу выгружают GUID или навигационную ссылку.

Для веб-интеграций в типовых конфигурациях часто публикуют HTTP-сервисы или используют стандартный OData-интерфейс: там каждый документ доступен по URL, содержащему его GUID. Это удобнее COM, так как не требует установки платформы на стороне клиента.

Типичные ошибки при работе со ссылками

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

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

Типичные ошибки
01
Использовать навигационную ссылку как GUID в обмене — форматы несовместимы, обмен не найдёт объект
02
Не проверять результат НайтиПоНомеру — при отсутствии документа код упадёт или запишет данные «в никуда»
03
Сравнивать ссылки строковым сравнением — надёжнее сравнивать сами ссылки или их GUID
04
Передавать ссылку из копии базы в рабочую — откроется другой документ или ошибка

Часто задаваемые вопросы

Можно ли получить ссылку на документ, не открывая его?

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

Чем навигационная ссылка отличается от GUID?

Это два представления одного идентификатора. Навигационная ссылка предназначена для клиента 1С и содержит тип объекта и закодированный идентификатор. GUID — «сырой» идентификатор для обменов и внешних систем. Одно преобразуется в другое программно.

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

Чаще всего ссылка получена в другой информационной базе (например, в тестовой копии), либо документ был удалён. Проверьте, что получатель работает в той же базе, а документ существует и не помечен на удаление с последующей физической чисткой.

Как найти документ, если известен только GUID из внешней системы?

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

Меняется ли ссылка при изменении номера или даты документа?

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

Итог

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

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