Разработка и Конфигурация · 10 мин
Как открыть ссылку в 1С программно
Как открыть ссылку в 1С программно: методы ПерейтиПоНавигационнойСсылке, ЗапуститьПриложение, ФайловаяСистема, примеры кода, ошибки и проверка результата.
В прикладных решениях на платформе 1С:Предприятие регулярно возникает задача открыть ссылку из кода: перейти на сайт контрагента, открыть документ по навигационной ссылке, запустить внешнюю программу или показать пользователю страницу техподдержки. В зависимости от типа ссылки — веб-адрес, навигационная ссылка внутри базы, путь к файлу — применяются разные методы встроенного языка.
Универсального «одного метода на всё» нет: для http-ссылок правильный инструмент один, для перехода к объекту информационной базы — другой, а для запуска внешнего приложения — третий. Неправильный выбор приводит либо к ошибкам выполнения, либо к блокировке кода системой защиты от опасных действий, особенно в тонком и веб-клиенте.
Ниже разобраны рабочие способы с примерами кода, ограничения каждого подхода, типичные ошибки и способы проверить, что переход действительно состоялся. Примеры ориентированы на управляемые формы и актуальные релизы платформы, где применимы только безопасные асинхронные вызовы.
Какие бывают ссылки в 1С и почему это важно
Перед выбором метода определите, что именно нужно открыть. В практике встречаются четыре типа ссылок: веб-адреса (http/https), навигационные ссылки на объекты информационной базы, пути к файлам на диске или в сети и команды запуска внешних приложений. Каждый тип обрабатывается своим механизмом платформы.
Навигационная ссылка внутри базы имеет вид e1cib/data/Справочник.Контрагенты?ref=... и позволяет открыть конкретный объект — документ, элемент справочника, запись регистра. Такая ссылка не имеет смысла вне 1С, поэтому передавать её браузеру бессмысленно.
Веб-ссылка, наоборот, открывается средствами операционной системы — браузером по умолчанию. Файловые пути (например, \\server\docs\договор.pdf) система открывает ассоциированным приложением. Путаница между типами — самая частая причина неработающего кода.
Открытие веб-ссылки в браузере
Для открытия http/https-адресов в актуальных версиях платформы используется метод глобального контекста ФайловаяСистема.ОткрытьНавигационнуюСсылку(). Он асинхронный, не блокируется системой защиты и корректно работает в тонком, толстом и веб-клиенте.
ФайловаяСистема.ОткрытьНавигационнуюСсылку("https://example.com/page");
В старых релизах применялся синхронный метод ПерейтиПоНавигационнойСсылке("https://..."). Он до сих пор работает, но в режиме совместимости с новыми версиями может требовать отключения модальности и выдавать предупреждения. Для нового кода предпочтителен вариант через ФайловаяСистема.
Если адрес формируется динамически — например, подставляется ИНН контрагента в поисковый запрос — обязательно кодируйте параметры. Пробелы и кириллица в URL без кодирования могут привести к обрыву адреса или открытию неверной страницы. Используйте КодироватьСтроку(Параметр, СпособКодированияСтроки.КодировкаURL).
Адрес = "https://example.com/search?q=" + КодироватьСтроку(НаименованиеКонтрагента, СпособКодированияСтроки.КодировкаURL);
ФайловаяСистема.ОткрытьНавигационнуюСсылку(Адрес);Переход к объекту базы по навигационной ссылке
Чтобы программно открыть форму конкретного документа или элемента справочника, получите его навигационную ссылку и выполните переход. Это удобно в обработках, где пользователь выбирает объект из списка, а также в уведомлениях и письмах, отправляемых из 1С.
НавСсылка = ПолучитьНавигационнуюСсылку(ДокументСсылка);
ПерейтиПоНавигационнойСсылке(НавСсылка);
Альтернатива без навигационных ссылок — метод ОткрытьЗначение(ДокументСсылка). Он открывает объект в текущем окне клиента и часто проще в применении. Разница в том, что ПерейтиПоНавигационнойСсылке работает через механизм глобальной навигации и подходит, когда ссылка хранится как строка, например пришла из внешней системы или из поля ввода.
Учтите: переход по навигационной ссылке возможен только на клиенте. На сервере эти вызовы недоступны, поэтому код размещайте в клиентских процедурах формы или клиентском модуле обработки.
Открытие файлов и запуск внешних приложений
Для открытия файла (PDF, Excel, картинки) достаточно передать его путь тому же методу открытия навигационной ссылки — платформа передаст путь операционной системе, и та запустит ассоциированное приложение. Путь должен быть доступен с того компьютера, где работает клиент, а не сервер 1С.
Если требуется запустить конкретную программу с параметрами, применяется ФайловаяСистема.ЗапуститьПриложение() с описанием оповещения о завершении. В устаревшем синтаксисе — ЗапуститьПриложение() глобального контекста, но он блокируется при включённой защите от опасных действий.
Частая ситуация: файл хранится в базе, а открыть его нужно на клиенте. В этом случае сначала получите файл из хранилища во временный каталог через ПолучитьФайл() или работу с временным хранилищем, и только потом открывайте локальный путь. Пытаться открыть «ссылку на значение» как файл бесполезно — это не файловый путь.
Открытие ссылки из поля формы и из уведомлений
Если ссылка хранится в реквизите объекта (например, «Сайт контрагента»), типовой сценарий — кнопка или гиперссылка на форме, в обработчике которой вызывается открытие адреса. Перед открытием проверьте, что строка не пустая и начинается с допустимой схемы (http://, https://, mailto:), иначе пользователь получит ошибку операционной системы.
Для mailto-ссылок тот же механизм открывает почтовый клиент по умолчанию с заполненным адресом получателя. Это простой способ добавить кнопку «Написать письмо» без настройки учётной записи почты в самой 1С.
В механизме оповещений пользователя (ПоказатьОповещениеПользователя) можно передать навигационную ссылку — тогда щелчок по уведомлению откроет нужный объект. Это удобно для сообщений «документ проведён» или «обнаружена ошибка загрузки» с быстрым переходом к источнику.
- 1Проверьте, что реквизит заполнен и строка начинается с http:// или https://
- 2При необходимости добавьте схему к адресу без неё
- 3Вызовите ФайловаяСистема.ОткрытьНавигационнуюСсылку(Адрес) в клиентской процедуре
- 4Убедитесь, что в браузере открылась ожидаемая страница
Ограничения, защита от опасных действий и типичные ошибки
Система защиты от опасных действий в клиенте блокирует или сопровождает предупреждением запуск приложений, открытие файлов и обращения к файловой системе. Если пользователь работает с включённой защитой, синхронные вызовы могут завершаться ошибкой «Операция не разрешена». Решение — использовать асинхронные методы из ФайловаяСистема и не просить пользователей отключать защиту.
В веб-клиенте действуют дополнительные ограничения браузера: всплывающие окна могут блокироваться, если переход вызывается не из пользовательского действия (нажатия кнопки), а, например, из обработчика ожидания. Открывайте ссылки только в обработчиках, инициированных пользователем.
Как проверить, что переход сработал
Методы открытия ссылок не возвращают осмысленный результат: факт «браузер открылся» платформа не контролирует. Поэтому проверка строится на косвенных признаках и тестировании в целевых клиентах — тонком, толстом и веб, если они используются.
Как проверить результат
Запустился браузер по умолчанию с нужной страницей
Ничего не происходит или ошибка защиты от опасных действий
Открылась форма именно того объекта, ссылка на который получена
Открывается пустая форма или сообщение об отсутствии объекта
Файл открылся в ассоциированной программе
Ошибка «файл не найден» — путь недоступен с клиентского компьютера
Ссылка открывается при нажатии кнопки
Браузер блокирует окно при вызове из обработчика ожидания
При отладке полезно выводить формируемый адрес в сообщение пользователю или журнал регистрации перед открытием — так сразу видно, корректно ли собрана строка, особенно при динамической подстановке параметров и кодировании.
Что важно запомнить
Тип ссылки определяет метод: веб-адреса — ФайловаяСистема.ОткрытьНавигационнуюСсылку, объекты базы — ПерейтиПоНавигационнойСсылке или ОткрытьЗначение, программы — ФайловаяСистема.ЗапуститьПриложение. Весь код выполняется только на клиенте, асинхронно, с проверкой строки адреса и без отключения защиты от опасных действий.
Частые вопросы
Чем отличается ПерейтиПоНавигационнойСсылке от ОткрытьЗначение?
ОткрытьЗначение принимает ссылку на объект (типизированную) и открывает её форму. ПерейтиПоНавигационнойСсылке работает со строкой навигационной ссылки — это удобно, когда ссылка хранится как текст или получена извне. Для обычного открытия объекта из кода проще ОткрытьЗначение.
Почему код открытия ссылки выдаёт ошибку «Переменная не определена: ФайловаяСистема»?
Методы ФайловаяСистема появились в относительно свежих версиях платформы. Если релиз старый или включён жёсткий режим совместимости, используйте глобальные методы ПерейтиПоНавигационнойСсылке и ЗапуститьПриложение. Также проверьте, что код находится в клиентском контексте.
Как открыть ссылку на сервере 1С, без клиента?
Открыть браузер на сервере нельзя и обычно не нужно. Если задача — получить данные по адресу, используйте HTTPСоединение и HTTP-запросы: это программное обращение к ресурсу без участия браузера. Открытие интерактивной страницы возможно только на клиенте.
Можно ли открыть ссылку в конкретном браузере, а не в браузере по умолчанию?
Штатного способа нет: платформа передаёт адрес операционной системе, а та выбирает браузер по умолчанию. Обходной путь — запустить исполняемый файл нужного браузера через ФайловаяСистема.ЗапуститьПриложение, передав адрес параметром, но это привязывает решение к путям установки конкретной программы.
Почему в веб-клиенте ссылка не открывается, а в тонком клиенте работает?
Чаще всего браузер блокирует всплывающее окно, потому что вызов происходит не из действия пользователя — например, из обработчика ожидания или после асинхронного запроса к серверу. Перенесите открытие ссылки в обработчик нажатия кнопки или гиперссылки.
Как безопасно открывать ссылки, полученные из внешних систем?
Проверяйте, что строка начинается с разрешённой схемы (http, https, mailto), отсекайте пробелы и управляющие символы, не передавайте такие строки в ЗапуститьПриложение. При сомнениях покажите пользователю адрес и дайте подтвердить переход.