Разработка и Конфигурация · 9 мин
Как открыть форму документа по ссылке в 1С 8.3
Способы открыть форму документа по ссылке в 1С 8.3: ОткрытьФорму, навигационная ссылка, e1cib-ссылка, программное открытие. Примеры кода и типичные ошибки.
Открыть форму документа по ссылке в 1С 8.3 можно несколькими способами: программно через метод ОткрытьФорму или ОткрытьЗначение, через навигационную ссылку вида e1cib/... в браузере или тонком клиенте, а также передачей ссылки между формами. Выбор зависит от того, где находится ссылка — в переменной кода, в письме, в другой информационной базе или в списке документов.
Под «ссылкой» в контексте 1С понимают две разные вещи, и их важно не путать. Первая — объектная ссылка типа ДокументСсылка.РеализацияТоваровУслуг, которая существует внутри кода и хранит уникальный идентификатор объекта. Вторая — навигационная ссылка в формате e1cib/data/Документ.РеализацияТоваровУслуг?ref=..., которая представляет объект как строку и может передаваться между базами, по почте или через буфер обмена.
Ниже разобраны оба варианта: программное открытие формы по объектной ссылке и открытие документа по навигационной ссылке. Приведены готовые примеры кода, условия выбора метода и типичные ошибки, из-за которых форма не открывается или открывается пустой.
Что такое ссылка на документ в 1С и какие виды ссылок бывают
Объектная ссылка — это значение встроенного типа (например, ДокументСсылка.ПоступлениеТоваровУслуг), которое однозначно идентифицирует документ в базе. Получить её можно из результата запроса, из реквизита другого объекта или методом Документы.ИмяДокумента.ПолучитьСсылку(УникальныйИдентификатор). Именно с такой ссылкой работает большинство программных сценариев.
Навигационная ссылка — строковое представление объекта, которое платформа генерирует автоматически. Её можно скопировать из формы документа через меню «Ещё → Получить ссылку» (в тонком клиенте) или программно функцией ПолучитьНавигационнуюСсылку(Ссылка). Такая ссылка открывается в том же клиенте, в браузере при работе через веб-сервер и даже из внешних приложений через обработчик протокола e1c.
Открытие формы по объектной ссылке программно
Самый простой способ — метод ОткрытьЗначение. Он универсален: платформа сама определяет тип переданного значения и открывает соответствующую форму объекта. Подходит, когда тип ссылки заранее неизвестен или может меняться.
// Ссылка получена ранее, например из запроса
ОткрытьЗначение(СсылкаНаДокумент);
Более управляемый вариант — ОткрытьФорму с указанием имени формы и параметра Ключ. Именно параметр Ключ сообщает форме, какой объект нужно открыть. Этот способ позволяет выбрать конкретную форму (основную, упрощённую, форму выбора), задать режим открытия и обработчик закрытия.
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы);
- 1Получите объектную ссылку: из запроса, реквизита или через ПолучитьСсылку по GUID
- 2Проверьте, что ссылка не пустая: НЕ Ссылка.Пустая()
- 3Вызовите ОткрытьЗначение(Ссылка) или ОткрытьФорму с параметром Ключ
- 4Убедитесь, что открылась форма именно нужного документа, а не форма нового объекта
Открытие в модальном и обычном режиме
В управляемом приложении модальные вызовы по умолчанию запрещены, поэтому для блокирующего открытия используют ОткрытьФорму с описанием оповещения о закрытии. Метод ОткрытьЗначение открывает форму неблокирующе — код продолжает выполняться сразу после вызова. Если дальнейшая логика зависит от результата работы пользователя с формой, оформляйте продолжение через ОписаниеОповещения.
Открытие документа по навигационной ссылке e1cib
Если у вас есть строка вида e1cib/data/Документ.ПриходныйКассовыйОрдер?ref=..., открыть документ можно без программирования. В тонком клиенте нажмите Ctrl+F11 (или меню «Файл → Перейти по ссылке»), вставьте ссылку и подтвердите — платформа откроет форму объекта. В веб-клиенте достаточно вставить ссылку в адресную строку браузера вместо текущего адреса.
Программно переход выполняется методом ПерейтиПоНавигационнойСсылке:
ПерейтиПоНавигационнойСсылке("e1cib/data/Документ.РеализацияТоваровУслуг?ref=a1b200155d612ee911e8a1b2c3d4e5f6");
Получить навигационную ссылку в коде можно функцией ПолучитьНавигационнуюСсылку(Ссылка). Это удобно для формирования писем уведомлений: получатель кликает по ссылке, и у него открывается нужный документ, если у него запущен сеанс с той же базой.
НавСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокумент);
// Отправка в письме или вывод в сообщение
Сообщить(НавСсылка);Открытие формы из другой формы и из списка
Частая задача — открыть документ из формы списка, из отчёта или из обработки по данным текущей строки. В обработчике выбора строки динамического списка ссылка доступна через Элемент.ТекущиеДанные.Ссылка или Элементы.Список.ТекущаяСтрока. Передайте её в ОткрытьЗначение — и форма документа откроется.
&НаКлиенте
Процедура ОткрытьДокумент(Команда)
ТекущаяСсылка = Элементы.Список.ТекущаяСтрока;
Если ТекущаяСсылка <> Неопределено Тогда
ОткрытьЗначение(ТекущаяСсылка);
КонецЕсли;
КонецПроцедуры
Из внешней обработки или отчёта (СКД) механизм тот же: ссылка приходит как параметр расшифровки или реквизит, и её достаточно передать в ОткрытьЗначение на клиенте. Важно, чтобы вызов выполнялся в клиентском контексте — на сервере формы открывать нельзя.
Сравнение способов
Универсально, без указания типа. Ограничение: нельзя выбрать конкретную форму и задать параметры открытия
Полный контроль: конкретная форма, режим окна, оповещение о закрытии. Требует знать имя формы
Работает из браузера, писем и внешних приложений. Требует активного сеанса с той же базой и прав у пользователя
Ограничения и проверка прав доступа
Открытие формы по ссылке не обходит систему прав. Если у пользователя нет права «Просмотр» на документ, форма не откроется либо откроется с ошибкой доступа. Навигационная ссылка, скопированная администратором и переданная рядовому пользователю, для него не сработает — права проверяются в его сеансе.
Навигационная ссылка привязана к конкретной базе. Ссылка из рабочей базы не откроет документ в тестовой копии, даже если документ там существует, — идентификатор в строке включает привязку к информационной базе. Для кросс-базовых сценариев используют обмен по GUID и программное получение ссылки через ПолучитьСсылку(Новый УникальныйИдентификатор(GUID)).
Типичные ошибки при открытии формы по ссылке
Самая частая проблема — передача в ОткрытьФорму параметра без Ключ или с пустой ссылкой. В этом случае открывается форма нового документа, что выглядит как «ссылка не сработала». Всегда проверяйте ссылку на пустоту перед вызовом.
Вторая группа ошибок — попытка открыть значение битой ссылки (объект удалён из базы). ОткрытьЗначение для такой ссылки выдаст ошибку. Проверить существование объекта можно запросом или попыткой обращения к реквизиту: битая ссылка вернёт ошибку «Объект не найден».
Как проверить результат
Форма существующего документа с заполненными реквизитами
Пустая форма нового документа — параметр Ключ не передан или ссылка пустая
Совпадают с ожидаемым документом
Другой документ — ссылка получена из неверного источника
Ошибок нет
«Объект не найден» или ошибка доступа — ссылка битая или нет прав
FAQ
Как открыть документ, если известен только его GUID из другой базы?
Получите ссылку методом Документы.ИмяДокумента.ПолучитьСсылку(Новый УникальныйИдентификатор(GUID)), затем проверьте, что объект существует, и вызовите ОткрытьЗначение. Если документ не найден, ссылка будет битой — это надо обработать.
Почему навигационная ссылка из письма не открывается?
Чаще всего не запущен клиент 1С с нужной базой, либо ссылка относится к другой информационной базе. Также проверьте, что ссылка скопирована полностью — обрезанный параметр ref делает её недействительной.
Можно ли открыть форму документа в режиме только просмотр?
Да. Передайте в ОткрытьФорму параметры Ключ и ТолькоПросмотр = Истина: Новый Структура("Ключ, ТолькоПросмотр", Ссылка, Истина). Форма откроется без возможности редактирования.
Как открыть форму и получить результат после её закрытия?
Используйте ОткрытьФорму с параметром ОписаниеОповещенияОЗакрытии. После закрытия формы платформа вызовет указанную процедуру и передаст в неё результат закрытия.
Чем ОткрытьФорму отличается от ОткрытьФормуМодально?
ОткрытьФормуМодально блокирует интерфейс и возвращает результат в точку вызова, но в типовых конфигурациях модальный режим обычно запрещён настройками. Рекомендуемый подход — ОткрытьФорму с описанием оповещения о закрытии.
Что важно запомнить
По объектной ссылке форму открывают через ОткрытьЗначение или ОткрытьФорму с параметром Ключ, по навигационной ссылке e1cib — через Ctrl+F11 или ПерейтиПоНавигационнойСсылке. Перед открытием проверяйте ссылку на пустоту и существование объекта, а вызов выполняйте только на клиенте.