Открываем веб-страницу из 1С: ЗапуститьПриложение, БСП и гиперссылки
Содержание
Чтобы открыть браузер из 1С, вызовите на клиенте ПерейтиПоНавигационнойСсылке("https://example.ru") — система откроет страницу в браузере по умолчанию. Если в конфигурации есть БСП, лучше вызвать ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(...), а когда нужен конкретный браузер или ключи запуска — ЗапуститьПриложение или его асинхронный вариант.
Выбор простой. Нужна обычная ссылка на сайт — хватает навигационной ссылки. Нужно запустить именно Chrome, Edge или Firefox с параметрами — используйте запуск приложения. Пользователь сам кликает по ссылке на форме — код почти не нужен, достаточно гиперссылки в надписи.
Какой способ вызова URL выбрать
Сначала сравним способы, потом разберём каждый с кодом.
| Способ | Когда выбирать | Где работает | Риски |
|---|---|---|---|
ПерейтиПоНавигационнойСсылке | Открыть сайт в браузере по умолчанию | Тонкий и веб-клиент, Windows и Linux | Блокировщик всплывающих окон в веб-клиенте |
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку (БСП) | Типовая конфигурация, нужна проверка ссылки и единый стиль | Где есть БСП | Требует БСП 3.x |
ЗапуститьПриложение / НачатьЗапускПриложения / ЗапуститьПриложениеАсинх | Конкретный браузер, ключи запуска, инкогнито | Тонкий клиент; в веб-клиенте — с расширением | Пути к exe различаются по компьютерам |
| Гиперссылка в надписи формы | Пользователь сам решает, перейти или нет | Все клиенты | Нет |
| Поле HTML-документа | Показать страницу прямо внутри формы | Тонкий и веб-клиент | Это встроенный просмотрщик, не системный браузер |
Если сомневаетесь — начните с ПерейтиПоНавигационнойСсылке. Этот метод не зависит от операционной системы и от того, какой браузер у пользователя.
Базовый механизм: запуск внешнего приложения из 1С
Платформа умеет отдавать операционной системе строку команды. Если в строке URL, Windows открывает его программой, которая назначена для http/https. Это и есть браузер по умолчанию.
ЗапуститьПриложение — синхронный вызов
Самый короткий вариант для тонкого клиента :
&НаКлиенте
Процедура ОткрытьСайт(Команда)
ЗапуститьПриложение("https://example.ru");
КонецПроцедуры
Параметры метода:
СтрокаКоманды— URL, путь к файлу или команда.ТекущийКаталог— рабочий каталог запускаемой программы, для браузера обычно не нужен.ДождатьсяЗавершения— для браузера ставьтеЛожь, иначе форма 1С «зависнет» до закрытия браузера.КодВозврата— код завершения, имеет смысл только при ожидании.
Конкретный браузер с параметрами
Иногда ссылку нужно открыть именно в Chrome — например, кабинет банка корректно работает только в нём. Тогда первым словом в строке команды идёт путь к exe:
&НаКлиенте
Процедура ОткрытьВChrome(Команда)
ПутьКБраузеру = "C:\Program Files\Google\Chrome\Application\chrome.exe";
Адрес = "https://example.ru/lk";
СтрокаКоманды = СтрШаблон("""%1"" --new-window ""%2""", ПутьКБраузеру, Адрес);
ЗапуститьПриложение(СтрокаКоманды, , Ложь);
КонецПроцедуры
Путь и URL берите в кавычки: в Program Files есть пробел, а в URL бывают символы &.
Путь к браузеру на разных компьютерах разный. Не зашивайте его в код: храните в константе или в настройках пользователя и проверяйте существование файла перед запуском.
Асинхронные варианты
Синхронный ЗапуститьПриложение блокирует выполнение кода и недоступен в веб-клиенте без разрешённых синхронных вызовов. Для современной конфигурации используйте асинхронный вызов.
На платформе с номером не ниже 8.3.18 — ЗапуститьПриложениеАсинх с Ждать:
&НаКлиенте
Асинх Процедура ОткрытьСайтАсинх(Команда)
Попытка
Ждать ЗапуститьПриложениеАсинх("https://example.ru", , Ложь);
Исключение
Сообщить("Не удалось открыть браузер: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
На более ранних релизах — НачатьЗапускПриложения с описанием оповещения:
&НаКлиенте
Процедура ОткрытьСайтСОповещением(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗапускаБраузера", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение, "https://example.ru", , Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗапускаБраузера(КодВозврата, ДополнительныеПараметры) Экспорт
// Для браузера без ожидания код возврата не анализируем
КонецПроцедуры
Вызов браузера через библиотеку стандартных подсистем (БСП)
В типовых конфигурациях (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, ERP) встроена БСП. В ней есть готовые обёртки, и разработчики фирмы 1С сами открывают ссылки только через них.
Открыть ссылку
&НаКлиенте
Процедура ОткрытьСправку(Команда)
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://example.ru/help");
КонецПроцедуры
Чем это лучше прямого вызова:
- ✅ одинаково работает в тонком и веб-клиенте;
- ✅ проверяет схему ссылки и не даёт под видом URL запустить произвольный файл;
- ✅ вторым параметром принимает описание оповещения, если после перехода нужно что-то сделать.
В старых релизах БСП для этого был ОбщегоНазначенияКлиент.ПерейтиПоСсылке. Сейчас он помечен как устаревший — при доработке меняйте его на метод из ФайловаяСистемаКлиент.
Запустить программу
Если нужен конкретный браузер, в БСП есть ФайловаяСистемаКлиент.ЗапуститьПрограмму. Параметры собираются отдельной функцией:
&НаКлиенте
Процедура ОткрытьВБраузереЧерезБСП(Команда)
ПараметрыЗапуска = ФайловаяСистемаКлиент.ПараметрыЗапускаПрограммы();
ПараметрыЗапуска.ДождатьсяЗавершения = Ложь;
ФайловаяСистемаКлиент.ЗапуститьПрограмму(ПутьКБраузеру() + " ""https://example.ru""", ПараметрыЗапуска);
КонецПроцедуры
Здесь ПутьКБраузеру() — ваша функция, которая читает путь из настроек. Состав полей структуры параметров смотрите в модуле ФайловаяСистемаКлиент своей конфигурации: в разных версиях БСП он немного отличается.
Если дорабатываете типовую конфигурацию, делайте это в расширении. Тогда команда «Открыть сайт» переживёт обновление, а снимать конфигурацию с поддержки не придётся.
Как ведёт себя вызов в разных клиентах
Одна и та же строка кода в разных клиентах даёт разный результат. Чаще всего ошибаются именно здесь.
| Клиент | ПерейтиПоНавигационнойСсылке | ЗапуститьПриложение |
|---|---|---|
| Тонкий клиент, Windows | Браузер по умолчанию | Браузер по умолчанию или указанный exe |
| Тонкий клиент, Linux | Браузер по умолчанию | Нужна команда ОС, например xdg-open |
| Тонкий клиент, macOS | Браузер по умолчанию | Нужна команда open |
| Веб-клиент | Новая вкладка того же браузера | Только с установленным расширением для работы с 1С:Предприятием |
Сервер (&НаСервере) | Метод недоступен | Программа запустится на сервере, а не у пользователя |
Одна команда для Windows, Linux и macOS
Если всё же нужен запуск через ОС (например, чтобы передать ключи), определите платформу клиента через СистемнаяИнформация и подставьте свою команду:
&НаКлиенте
Процедура ОткрытьАдресВОС(Адрес)
Инфо = Новый СистемнаяИнформация;
Платформа = Строка(Инфо.ТипПлатформы); // например, "Windows_x86_64"
Если СтрНайти(Платформа, "Windows") > 0 Тогда
СтрокаКоманды = """" + Адрес + """";
ИначеЕсли СтрНайти(Платформа, "MacOS") > 0 Тогда
СтрокаКоманды = "open """ + Адрес + """";
Иначе
СтрокаКоманды = "xdg-open """ + Адрес + """";
КонецЕсли;
ЗапуститьПриложение(СтрокаКоманды, , Ложь);
КонецПроцедуры
Для обычного перехода по ссылке такой код избыточен: ПерейтиПоНавигационнойСсылке делает то же самое без ветвлений.
Почему нельзя открывать браузер на сервере
Код с директивой &НаСервере выполняется на машине, где работает рабочий процесс 1С. Если там вызвать ЗапуститьПриложение, браузер (если вообще запустится) окажется на сервере, без окна у пользователя. Открытие браузера — всегда клиентская операция.
На сервере собирайте только адрес: читайте данные, формируйте строку и возвращайте её на клиент.
Веб-клиент и блокировщик всплывающих окон
В веб-клиенте 1С уже работает внутри браузера. Переход по ссылке откроет новую вкладку. Браузер пропускает её спокойно, если переход вызван прямым кликом пользователя.
Если перед переходом идёт долгий серверный вызов или асинхронное ожидание, браузер может посчитать вкладку всплывающим окном и заблокировать. Решение — сначала получить адрес, потом показать пользователю гиперссылку или кнопку, по которой он кликнет сам.
Передача параметров и динамическое формирование URL
Чаще всего в браузер передают не статичный адрес, а ссылку с данными: ИНН контрагента для проверки, номер заказа для трекинга, поисковую фразу.
Кодирование значений
Кириллица, пробелы и символы &, ?, = внутри значения ломают URL. Каждое значение кодируйте через КодироватьСтроку:
&НаКлиенте
Процедура НайтиВИнтернете(Команда)
Фраза = "ошибка формата потока";
Адрес = "https://yandex.ru/search/?text="
+ КодироватьСтроку(Фраза, СпособКодированияСтроки.КодировкаURL);
ПерейтиПоНавигационнойСсылке(Адрес);
КонецПроцедуры
Кодируйте только значения параметров, а не адрес целиком. Иначе закодируются и ://, и ? — ссылка перестанет работать.
Сборка адреса из нескольких параметров
Когда параметров несколько, удобно держать их в структуре и собирать строку функцией:
&НаКлиентеНаСервереБезКонтекста
Функция СобратьURL(Основа, Параметры)
Части = Новый Массив;
Для Каждого КлючИЗначение Из Параметры Цикл
Значение = КлючИЗначение.Значение;
Если ТипЗнч(Значение) = Тип("Число") Тогда
Значение = Формат(Значение, "ЧГ=0; ЧН=0");
КонецЕсли;
Части.Добавить(КлючИЗначение.Ключ + "="
+ КодироватьСтроку(Строка(Значение), СпособКодированияСтроки.КодировкаURL));
КонецЦикла;
Если Части.Количество() = 0 Тогда
Возврат Основа;
КонецЕсли;
Возврат Основа + "?" + СтрСоединить(Части, "&");
КонецФункции
Пример вызова:
Параметры = Новый Структура;
Параметры.Вставить("inn", "7707083893");
Параметры.Вставить("order", 10452);
Адрес = СобратьURL("https://example.ru/check", Параметры);
// https://example.ru/check?inn=7707083893&order=10452
Формат(..., "ЧГ=0") убирает разделитель групп: без него число 10452 превратится в строку с неразрывным пробелом, и параметр испортится.
Длинные адреса
Не передавайте в URL тексты на тысячи символов. Командная строка Windows и сами сайты ограничивают длину адреса. Если данных много, отправьте их на сервер HTTP-запросом, получите короткий идентификатор и откройте ссылку уже с ним.
Обработка ошибок и безопасность при открытии сайта из 1С
Что ловить в коде
Оборачивайте запуск в Попытка ... Исключение. Ошибка возникает, если exe не найден, расширение в веб-клиенте не установлено или ОС не знает, чем открыть ссылку.
&НаКлиенте.ПерейтиПоНавигационнойСсылке или асинхронный метод.КодироватьСтроку с КодировкаURL.Не запускайте то, что ввёл пользователь
Главный риск — строка команды, собранная из данных базы. Если в поле «Сайт» контрагента окажется путь к cmd.exe или bat-файлу, ЗапуститьПриложение его исполнит.
Правила, которые закрывают эту дыру:
- 🔒 Перед запуском проверяйте, что адрес начинается с
http://илиhttps://. - 🔒 Для адресов из справочников используйте навигационную ссылку, а не запуск приложения.
- 🔒 Значения параметров кодируйте — так в URL не попадут кавычки и спецсимволы.
- 🔒 Путь к браузеру задаёт администратор, а не любой пользователь.
&НаКлиенте
Функция ЭтоВебАдрес(Адрес)
НижнийРегистр = НРег(СокрЛП(Адрес));
Возврат СтрНачинаетсяС(НижнийРегистр, "http://")
Или СтрНачинаетсяС(НижнийРегистр, "https://");
КонецФункции
Не открывайте ссылки на file:// и сетевые папки из непроверенных полей. Так легко запустить файл, который пользователь не собирался открывать.
Альтернативы: ссылка на форме и встроенная веб-страница
Не всегда нужна кнопка с кодом. Часто удобнее дать пользователю обычную ссылку.
Гиперссылка в надписи
В конфигураторе на форму добавляют декорацию-надпись и включают у неё свойство «Гиперссылка». Клик обрабатывается событием Нажатие. Для текста со ссылкой внутри подойдёт форматированная строка:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.НадписьСайт.Заголовок = Новый ФорматированнаяСтрока(
"Открыть личный кабинет", , , , "https://example.ru/lk");
КонецПроцедуры
У надписи с форматированной строкой включите свойство «Форматированный текст» в палитре свойств элемента. По клику платформа сама откроет адрес. Если нужно вмешаться (записать переход в журнал, подставить параметры), обработайте событие ОбработкаНавигационнойСсылки и установите СтандартнаяОбработка = Ложь.
Поле HTML-документа
Если страница должна открыться прямо в форме 1С, добавьте реквизит типа «Строка» и элемент формы с видом «Поле HTML-документа». В реквизит запишите адрес, и страница загрузится внутри формы.
Это удобно для справки, карт и личных кабинетов без сложной авторизации. Но встроенный просмотрщик — не полноценный браузер: часть современных сайтов в нём работает с ошибками или не пускает внутрь. В таком случае откройте адрес во внешнем браузере одним из способов выше.
Частые вопросы
Как открыть в 1С ссылку на почту или телефон?
ПерейтиПоНавигационнойСсылке со схемой mailto: или tel:. Откроется программа, назначенная в системе для этих схем.Можно ли открыть сайт в режиме инкогнито?
--incognito, у Firefox -private-window. Браузером по умолчанию так не получится.Как открыть ссылку на объект базы 1С из письма или браузера?
e1c:// открываются в 1С, если установлена платформа. Внутри клиента 1С такие ссылки тоже обрабатывает ПерейтиПоНавигационнойСсылке.Почему у одного пользователя открывается Edge, а у другого Chrome?
Можно ли из 1С получить ответ от сайта, который открылся в браузере?
HTTPСоединение и HTTPЗапрос, без открытия браузера.