Разработка и Конфигурация · 8 мин
Как получить ссылку на документ в 1С
Как получить ссылку на документ в 1С: навигационная ссылка, метод ПолучитьСсылку, работа с COM и внешними подключениями, типичные ошибки и проверка результата.
В 1С словом «ссылка» называют сразу несколько разных вещей: навигационную ссылку вида e1cib/data/Документ.РеализацияТоваровУслуг?ref=..., объект типа ДокументСсылка в коде и GUID документа в базе данных. Прежде чем действовать, важно понять, какая именно ссылка нужна: чтобы поделиться документом с коллегой, открыть его из внешней системы или найти объект в запросе и коде.
Навигационная ссылка удобна для пользователей: её можно вставить в письмо или чат, и получатель откроет тот же документ в своём клиенте 1С. Программная ссылка (ДокументСсылка) нужна разработчику для обращения к объекту в запросах и коде. GUID требуется при интеграции с внешними системами, когда нужно однозначно идентифицировать документ вне 1С.
Ниже разобраны все рабочие способы: от кнопки «Получить ссылку» в интерфейсе до методов встроенного языка, а также ограничения каждого варианта и типичные ошибки.
Что такое ссылка на документ в 1С
Ссылка — это уникальный идентификатор объекта в информационной базе. У каждого документа она одна и не меняется при перепроведении, изменении номера или даты. Именно по ссылке 1С связывает документ с движениями по регистрам, подчинёнными объектами и записями в других таблицах.
Различают три формы представления одной и той же ссылки. Навигационная ссылка — строка формата e1cib/data/..., которую понимает толстый и тонкий клиент. GUID — шестнадцатеричный идентификатор, который хранится в базе и используется в обменах. Программный объект ДокументСсылка — тип данных встроенного языка, через который выполняются запросы и сравнения.
Как получить навигационную ссылку в интерфейсе
В управляемых формах (1С:Предприятие 8.3) откройте нужный документ, нажмите кнопку «Ещё» в командной панели и выберите команду «Получить ссылку». В появившемся окне будет показана навигационная ссылка — её можно скопировать кнопкой или вручную и отправить коллеге.
Получатель вставляет ссылку через меню «Сервис» (или кнопку со стрелкой вниз рядом с адресной строкой, в зависимости от версии платформы) → «Перейти по ссылке», либо просто вставляет её в адресную строку клиента. Документ откроется, если у пользователя есть права на его просмотр.
Важное ограничение: навигационная ссылка работает только внутри той же базы. Если коллега подключён к другой информационной базе (например, к копии для тестов), ссылка либо не откроется, либо приведёт к другому документу с совпадающим идентификатором.
- 1Откройте документ в режиме просмотра или редактирования
- 2Нажмите «Ещё» в командной панели формы
- 3Выберите «Получить ссылку» и скопируйте строку
- 4Передайте ссылку коллеге; он откроет её через «Перейти по ссылке»
- 5Убедитесь, что у получателя есть права на этот вид документов
Как получить ссылку в коде 1С
Ссылка на существующий документ
Если документ уже записан, его ссылка доступна через свойство Ссылка объекта. Например, при обходе выборки из запроса или при работе с объектом, открытым через ПолучитьОбъект(), достаточно обратиться к этому свойству.
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 Т.Ссылка ИЗ Документ.РеализацияТоваровУслуг КАК Т");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ДокСсылка = Выборка.Ссылка;
КонецЕсли;
Если известны номер и дата, документ ищут методом НайтиПоНомеру() менеджера документа. Метод возвращает либо ссылку, либо пустую ссылку, если документ не найден, — это нужно проверять перед использованием.
Ссылка на ещё не записанный документ
Для нового документа можно заранее получить ссылку методом Документы.ИмяДокумента.ПолучитьСсылку() и назначить её объекту через УстановитьСсылкуНового(). Это применяется в обменах данными, когда нужно создать документ с заранее известным идентификатором, чтобы ссылки из других систем сходились.
НоваяСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(Новый УникальныйИдентификатор);
ДокОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
ДокОбъект.УстановитьСсылкуНового(НоваяСсылка);
ДокОбъект.Дата = ТекущаяДатаСеанса();
ДокОбъект.Записать();
Как получить GUID документа и найти документ по GUID
GUID (уникальный идентификатор) получают из ссылки: XMLСтрока(Ссылка) или Ссылка.УникальныйИдентификатор(). Первая форма удобна для обменов через XML и веб-сервисы, вторая — для работы внутри кода.
Обратная задача — найти документ по известному GUID — решается методом ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)). После этого обязательно проверяют, существует ли объект: для этого сравнивают результат запроса по ссылке или проверяют на пустую ссылку и «битую» ссылку.
«Битая» ссылка возникает, когда документ удалён, а идентификатор остался в других объектах или во внешней системе. Признак: Ссылка.ПолучитьОбъект() возвращает Неопределено, а запрос по этой ссылке даёт пустой результат. Такие ситуации нужно обрабатывать, иначе обмены будут падать с ошибками.
Как проверить результат
Запрос по ссылке возвращает документ с ожидаемым номером и датой
Запрос пустой — ссылка битая или из другой базы
Открывается нужный документ в клиенте 1С
Ошибка «объект не найден» — база другая или документ удалён
Строка из 36 символов с дефисами, документ находится по ней
Строка обрезана или изменён порядок байтов при передаче
Как получить ссылку через внешнее подключение и COM
При подключении к базе 1С извне через COM-коннектор (V83.COMConnector) ссылки доступны через те же объекты: вы выполняете запрос или находите документ по номеру и читаете свойство Ссылка. Сам объект ссылки между процессами не передаётся — наружу выгружают GUID или навигационную ссылку.
Для веб-интеграций в типовых конфигурациях часто публикуют HTTP-сервисы или используют стандартный OData-интерфейс: там каждый документ доступен по URL, содержащему его GUID. Это удобнее COM, так как не требует установки платформы на стороне клиента.
Типичные ошибки при работе со ссылками
Самая частая ошибка — смешение понятий: пользователь копирует навигационную ссылку и пытается использовать её как GUID в обмене, или разработчик передаёт строковое представление ссылки туда, где нужен объект ДокументСсылка. Типы не совместимы, и преобразование нужно делать явно.
Вторая группа ошибок — работа без проверок: использование результата НайтиПоНомеру без проверки на пустую ссылку, обращение к ПолучитьОбъект() без проверки на Неопределено, использование навигационной ссылки из копии базы в рабочей базе. Все эти случаи приводят либо к падению кода, либо к незаметной порче данных.
Часто задаваемые вопросы
Можно ли получить ссылку на документ, не открывая его?
Да. В списке документов навигационную ссылку можно получить через «Ещё → Получить ссылку», если команда доступна в форме списка. В коде ссылку даёт запрос или метод НайтиПоНомеру — открывать форму документа не требуется.
Чем навигационная ссылка отличается от GUID?
Это два представления одного идентификатора. Навигационная ссылка предназначена для клиента 1С и содержит тип объекта и закодированный идентификатор. GUID — «сырой» идентификатор для обменов и внешних систем. Одно преобразуется в другое программно.
Почему по ссылке открывается ошибка «Объект не найден»?
Чаще всего ссылка получена в другой информационной базе (например, в тестовой копии), либо документ был удалён. Проверьте, что получатель работает в той же базе, а документ существует и не помечен на удаление с последующей физической чисткой.
Как найти документ, если известен только GUID из внешней системы?
Используйте Документы.ИмяДокумента.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаGUID)), затем проверьте существование объекта запросом по ссылке. Если запрос пустой — документ удалён или GUID относится к другому виду документов.
Меняется ли ссылка при изменении номера или даты документа?
Нет. Ссылка присваивается документу при создании и не зависит от номера, даты, проведения и любых изменений реквизитов. Поэтому ссылка — надёжный способ идентификации, а номер может повторяться и меняться.
Что важно запомнить
Пользователю ссылку даёт команда «Ещё → Получить ссылку», разработчику — свойство Ссылка, запрос и метод ПолучитьСсылку. Навигационные ссылки работают только внутри своей базы, а при поиске по номеру или GUID всегда проверяйте результат на пустую и «битую» ссылку.