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

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

Как открыть форму документа по ссылке в 1С 8.3

Способы открыть форму документа по ссылке в 1С 8.3: ОткрытьФорму, навигационная ссылка, e1cib-ссылка, программное открытие. Примеры кода и типичные ошибки.

Открыть форму документа по ссылке в 1С 8.3 можно несколькими способами: программно через метод ОткрытьФорму или ОткрытьЗначение, через навигационную ссылку вида e1cib/... в браузере или тонком клиенте, а также передачей ссылки между формами. Выбор зависит от того, где находится ссылка — в переменной кода, в письме, в другой информационной базе или в списке документов.

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

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

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

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

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

Открытие формы по объектной ссылке программно

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

// Ссылка получена ранее, например из запроса

ОткрытьЗначение(СсылкаНаДокумент);

Более управляемый вариант — ОткрытьФорму с указанием имени формы и параметра Ключ. Именно параметр Ключ сообщает форме, какой объект нужно открыть. Этот способ позволяет выбрать конкретную форму (основную, упрощённую, форму выбора), задать режим открытия и обработчик закрытия.

ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);

ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы);

Порядок действий
  1. 1
    Получите объектную ссылку: из запроса, реквизита или через ПолучитьСсылку по GUID
  2. 2
    Проверьте, что ссылка не пустая: НЕ Ссылка.Пустая()
  3. 3
    Вызовите ОткрытьЗначение(Ссылка) или ОткрытьФорму с параметром Ключ
  4. 4
    Убедитесь, что открылась форма именно нужного документа, а не форма нового объекта

Открытие в модальном и обычном режиме

В управляемом приложении модальные вызовы по умолчанию запрещены, поэтому для блокирующего открытия используют ОткрытьФорму с описанием оповещения о закрытии. Метод ОткрытьЗначение открывает форму неблокирующе — код продолжает выполняться сразу после вызова. Если дальнейшая логика зависит от результата работы пользователя с формой, оформляйте продолжение через ОписаниеОповещения.

Открытие документа по навигационной ссылке e1cib

Если у вас есть строка вида e1cib/data/Документ.ПриходныйКассовыйОрдер?ref=..., открыть документ можно без программирования. В тонком клиенте нажмите Ctrl+F11 (или меню «Файл → Перейти по ссылке»), вставьте ссылку и подтвердите — платформа откроет форму объекта. В веб-клиенте достаточно вставить ссылку в адресную строку браузера вместо текущего адреса.

Программно переход выполняется методом ПерейтиПоНавигационнойСсылке:

ПерейтиПоНавигационнойСсылке("e1cib/data/Документ.РеализацияТоваровУслуг?ref=a1b200155d612ee911e8a1b2c3d4e5f6");

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

bsl
НавСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокумент);
// Отправка в письме или вывод в сообщение
Сообщить(НавСсылка);

Открытие формы из другой формы и из списка

Частая задача — открыть документ из формы списка, из отчёта или из обработки по данным текущей строки. В обработчике выбора строки динамического списка ссылка доступна через Элемент.ТекущиеДанные.Ссылка или Элементы.Список.ТекущаяСтрока. Передайте её в ОткрытьЗначение — и форма документа откроется.

&НаКлиенте

Процедура ОткрытьДокумент(Команда)

ТекущаяСсылка = Элементы.Список.ТекущаяСтрока;

Если ТекущаяСсылка <> Неопределено Тогда

ОткрытьЗначение(ТекущаяСсылка);

КонецЕсли;

КонецПроцедуры

Из внешней обработки или отчёта (СКД) механизм тот же: ссылка приходит как параметр расшифровки или реквизит, и её достаточно передать в ОткрытьЗначение на клиенте. Важно, чтобы вызов выполнялся в клиентском контексте — на сервере формы открывать нельзя.

Сравнение способов

ОткрытьЗначение

Универсально, без указания типа. Ограничение: нельзя выбрать конкретную форму и задать параметры открытия

ОткрытьФорму с параметром Ключ

Полный контроль: конкретная форма, режим окна, оповещение о закрытии. Требует знать имя формы

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

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

Ограничения и проверка прав доступа

Открытие формы по ссылке не обходит систему прав. Если у пользователя нет права «Просмотр» на документ, форма не откроется либо откроется с ошибкой доступа. Навигационная ссылка, скопированная администратором и переданная рядовому пользователю, для него не сработает — права проверяются в его сеансе.

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

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

Самая частая проблема — передача в ОткрытьФорму параметра без Ключ или с пустой ссылкой. В этом случае открывается форма нового документа, что выглядит как «ссылка не сработала». Всегда проверяйте ссылку на пустоту перед вызовом.

Вторая группа ошибок — попытка открыть значение битой ссылки (объект удалён из базы). ОткрытьЗначение для такой ссылки выдаст ошибку. Проверить существование объекта можно запросом или попыткой обращения к реквизиту: битая ссылка вернёт ошибку «Объект не найден».

Типичные ошибки
01
Передача пустой ссылки — открывается форма нового документа вместо существующего
02
Вызов ОткрытьЗначение на сервере — ошибка, формы открываются только на клиенте
03
Использование навигационной ссылки из другой базы — объект не находится
04
Отсутствие проверки битой ссылки — ошибка «Объект не найден» при открытии
05
Неверное имя формы в ОткрытьФорму — ошибка «Форма не найдена»
Контрольные точки

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

Какая форма открылась
Норма

Форма существующего документа с заполненными реквизитами

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

Пустая форма нового документа — параметр Ключ не передан или ссылка пустая

Номер и дата в открытой форме
Норма

Совпадают с ожидаемым документом

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

Другой документ — ссылка получена из неверного источника

Наличие ошибок в журнале
Норма

Ошибок нет

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

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

FAQ

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

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

Почему навигационная ссылка из письма не открывается?

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

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

Да. Передайте в ОткрытьФорму параметры Ключ и ТолькоПросмотр = Истина: Новый Структура("Ключ, ТолькоПросмотр", Ссылка, Истина). Форма откроется без возможности редактирования.

Как открыть форму и получить результат после её закрытия?

Используйте ОткрытьФорму с параметром ОписаниеОповещенияОЗакрытии. После закрытия формы платформа вызовет указанную процедуру и передаст в неё результат закрытия.

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

ОткрытьФормуМодально блокирует интерфейс и возвращает результат в точку вызова, но в типовых конфигурациях модальный режим обычно запрещён настройками. Рекомендуемый подход — ОткрытьФорму с описанием оповещения о закрытии.

Итог

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

По объектной ссылке форму открывают через ОткрытьЗначение или ОткрытьФорму с параметром Ключ, по навигационной ссылке e1cib — через Ctrl+F11 или ПерейтиПоНавигационнойСсылке. Перед открытием проверяйте ссылку на пустоту и существование объекта, а вызов выполняйте только на клиенте.