Три способа показать или загрузить сайт из 1С:Предприятия 8.3
Содержание
Открыть веб-страницу в 1С: Предприятие можно тремя путями. Нужен текст страницы или ответ API — создайте HTTPСоединение и выполните Получить(). Нужно показать сайт пользователю в его браузере — вызовите ПерейтиПоНавигационнойСсылке("https://...") или ЗапуститьПриложение. Нужно показать страницу прямо в форме — добавьте на форму поле HTML-документа и запишите в его реквизит адрес.
Всё ниже относится к платформе 8.3 и управляемым формам, то есть общее для любой конфигурации: БП, ЗУП, УТ или своей разработки. Код пишется во внешней обработке, расширении или модуле формы.
Что выбрать: сравнение способов
Сначала определите задачу. От неё зависит и способ, и место выполнения кода (клиент или сервер).
| Способ | Что получаете | Где работает код | Когда подходит |
|---|---|---|---|
HTTPСоединение | Текст, JSON, файл, код ответа | Сервер, толстый и тонкий клиент | Загрузка курсов, обмен с API, скачивание файлов |
ПерейтиПоНавигационнойСсылке | Страница открывается в браузере по умолчанию | Клиент | Ссылка на сайт, личный кабинет, инструкцию |
ЗапуститьПриложение | Запуск любого приложения или браузера с параметрами | Клиент (не веб-клиент) | Нужен конкретный браузер или ключи запуска |
| Поле HTML-документа | Страница внутри формы 1С | Клиент, форма | Карта, справка, мини-интерфейс внутри формы |
Короткое правило:
- 📥 программе нужны данные →
HTTPСоединение; - 👀 человеку нужно посмотреть сайт → браузер;
- 🧩 сайт должен стать частью формы → поле HTML-документа.
Если код должен работать и в веб-клиенте, выбирайте ПерейтиПоНавигационнойСсылке. ЗапуститьПриложение в веб-клиенте недоступен, а страница и так открыта в браузере.
Получение страницы и данных через HTTPСоединение
Объект HTTPСоединение отправляет запрос на сервер и возвращает ответ целиком: код состояния, заголовки и тело. Браузер при этом не открывается, пользователь ничего не видит.
Шаг 1. Создайте соединение
Конструктор принимает адрес сервера без схемы и пути. Порт, логин, пароль, прокси, таймаут и параметры защищённого соединения задаются следующими параметрами.
&НаСервере
Функция ПолучитьСтраницу(Сервер, Адрес)
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL( , Новый СертификатыУдостоверяющихЦентровОС);
Соединение = Новый HTTPСоединение(Сервер, 443, , , , 30, ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос(Адрес);
Запрос.Заголовки.Вставить("User-Agent", "1C-Enterprise");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
ВызватьИсключение СтрШаблон("Сервер вернул код %1", Ответ.КодСостояния);
КонецЕсли;
Возврат Ответ.ПолучитьТелоКакСтроку("UTF-8");
КонецФункции
Вызов: ПолучитьСтраницу("example.com", "/catalog/index.html").
Разбор параметров:
Сервер— только домен:example.com, безhttps://и без слэша.443— порт HTTPS. Для обычного HTTP укажите80и не передавайтеЗащищенноеСоединение.30— таймаут в секундах. Без него зависший сервер подвесит сеанс пользователя.АдресвHTTPЗапрос— путь с параметрами:/api/v1/rates?date=2026-10-01.
Шаг 2. Выберите метод под задачу
| Метод соединения | HTTP-метод | Пример задачи |
|---|---|---|
Получить() | GET | Прочитать страницу, курс, справочник |
ОтправитьДляОбработки() | POST | Отправить заказ или документ в API |
Записать() | PUT | Обновить запись на сервере |
Удалить() | DELETE | Удалить запись |
ВызватьHTTPМетод() | любой | PATCH и прочие нестандартные методы |
Шаг 3. Скачайте файл, если нужен файл
У Получить() есть второй параметр — имя выходного файла. Тело ответа сразу пишется на диск, строка в памяти не создаётся:
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
Ответ = Соединение.Получить(Запрос, ИмяФайла);
Так удобно качать PDF, архивы и выгрузки на десятки мегабайт.
Шаг 4. Вызовите функцию из команды формы
Кнопка на форме работает на клиенте, а запрос — на сервере. Связка выглядит так:
&НаКлиенте
Процедура ЗагрузитьСтраницу(Команда)
Текст = ПолучитьСтраницу("example.com", "/catalog/index.html");
Сообщить(СтрШаблон("Получено символов: %1", Формат(СтрДлина(Текст), "ЧГ=0")));
КонецПроцедуры
Функция ПолучитьСтраницу должна лежать в модуле той же формы. В общем модуле её объявляют экспортной, а модуль отмечают флагом «Сервер» и «Вызов сервера». Если запрос долгий, больше 10–15 секунд, запускайте его фоновым заданием, чтобы интерфейс не замирал.
Код с HTTPСоединение выполняйте &НаСервере. На клиенте запрос пойдёт с компьютера пользователя, через его прокси и антивирус. Ошибки будут «плавать» от рабочего места к рабочему месту.
Открытие сайта в браузере пользователя
Когда страницу надо просто показать, данные в 1С не нужны. Пусть работает обычный браузер.
Через навигационную ссылку
Самый короткий вариант. Платформа сама передаёт адрес системе, а та открывает браузер по умолчанию:
&НаКлиенте
Процедура ОткрытьСайт(Команда)
ПерейтиПоНавигационнойСсылке("https://example.com/help");
КонецПроцедуры
Работает в тонком, толстом и веб-клиенте. В веб-клиенте страница откроется в новой вкладке.
В типовых конфигурациях на БСП есть обёртка ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(). Она проверяет адрес и корректно ведёт себя в разных клиентах. Если разрабатываете расширение к типовой, используйте её.
Через ЗапуститьПриложение
Нужен, когда важен конкретный браузер или ключи командной строки:
&НаКлиенте
Процедура ОткрытьВChrome(Команда)
ЗапуститьПриложение("chrome.exe --new-window https://example.com");
КонецПроцедуры
Если передать в ЗапуститьПриложение только адрес, Windows откроет его браузером по умолчанию. Но для этого случая навигационная ссылка проще.
Для неблокирующего запуска в новых релизах есть асинхронный вариант НачатьЗапускПриложения с описанием оповещения.
Не склеивайте адрес из пользовательского ввода в строку команды. Строка уходит в операционную систему. Символы &, | и кавычки превратят ссылку в запуск постороннего кода. Для простого открытия сайта берите ПерейтиПоНавигационнойСсылке.
Встроенный веб-браузер в форме 1С
Чтобы страница открылась внутри окна программы, на управляемую форму добавляют поле HTML-документа.
Пошагово в конфигураторе
- Откройте форму в редакторе (внешняя обработка, расширение или своя конфигурация).
- На вкладке
Реквизитысоздайте реквизитАдресСтраницыс типомСтрока, неограниченной длины. - Перетащите реквизит в дерево элементов.
- В свойствах элемента выберите
Вид=Поле HTML-документа. - Растяните поле: задайте ширину и высоту либо включите растягивание по форме.
- В обработчике
ПриОткрытииилиПриСозданииНаСерверезаполните реквизит.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
АдресСтраницы = "https://example.com/map";
КонецПроцедуры
В реквизит можно положить не только адрес, но и готовый HTML-текст. Тогда поле отрисует собственную разметку: отчёт, подсказку, таблицу с картинками.
АдресСтраницы = "<html><body><h3>Остатки</h3><p>Склад: 120 шт.</p></body></html>";
События и связь с формой
- 🖱
ПриНажатии— пользователь щёлкнул по элементу страницы. Отсюда можно перехватить ссылку и открыть форму 1С вместо перехода. - ✅
ДокументСформирован— страница загрузилась. После него доступен объект документа черезЭлементы.АдресСтраницы.Документ, можно читать и менять элементы страницы.
Сайты с жёсткими заголовками безопасности (банки, госпорталы, кабинеты маркетплейсов) могут не отображаться во встроенном поле или требовать повторного входа. Для них открывайте внешний браузер.
Разбор ответа сервера и JSON
Получить строку — полдела. Её нужно проверить и разобрать.
Проверка ответа
Перед разбором проверьте три вещи:
- Код состояния.
200— успех.301/302— переадресация, новый адрес лежит в заголовкеLocation.401/403— нужна авторизация.404— неверный путь.500и выше — ошибка на стороне сервера. - Тип содержимого.
Ответ.Заголовки.Получить("Content-Type")покажет, пришёл JSON, HTML или файл. - Кодировку. Если в
Content-Typeуказанcharset=windows-1251, передайте эту кодировку вПолучитьТелоКакСтроку(). Иначе кириллица превратится в «кракозябры».
Чтение JSON
Платформа разбирает JSON штатно, без внешних компонент:
&НаСервере
Функция РазобратьJSON(ТекстОтвета)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстОтвета);
Данные = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();
Возврат Данные;
КонецФункции
Второй параметр Истина превращает объекты JSON в Соответствие. Без него получится Структура, и ключ вида "order-id" вызовет ошибку: в именах полей структуры дефис недопустим.
Пример. Сервер вернул:
{"currency": "USD", "rate": 92.45, "items": [{"code": "A1", "qty": 3}, {"code": "B2", "qty": 7}]}
Разбор:
Данные = РазобратьJSON(ТекстОтвета);
Курс = Данные.Получить("rate"); // 92.45
Всего = 0;
Для Каждого Строка Из Данные.Получить("items") Цикл
Всего = Всего + Строка.Получить("qty");
КонецЦикла; // Всего = 10
Отправка JSON на сервер
Обратная задача — сформировать JSON и отправить POST-запросом:
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Новый Структура("code, qty", "A1", 3));
Тело = Запись.Закрыть();
Запрос = Новый HTTPЗапрос("/api/orders");
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки(Тело, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Многие API отвергают тело с BOM в начале. Параметр ИспользованиеByteOrderMark.НеИспользовать убирает эти три служебных байта.
HTTPS, сертификаты и прокси
Сегодня почти все сайты работают по HTTPS. Для 1С это означает: без объекта ЗащищенноеСоединениеOpenSSL запрос к порту 443 не пройдёт.
Откуда брать корневые сертификаты
| Вариант | Как задать | Когда |
|---|---|---|
| Хранилище ОС | Новый СертификатыУдостоверяющихЦентровОС | Обычные публичные сайты и API |
| Файл с сертификатами | Новый СертификатыУдостоверяющихЦентровФайл(ПутьКФайлу) | Корпоративный или самоподписанный сертификат |
| Без проверки | Первый параметр пустой, второй Неопределено | Только для отладки в тестовой базе |
Сертификаты из хранилища ОС берутся с того компьютера, где выполняется код. Если код серверный — с сервера 1С. Поэтому «у меня в браузере открывается, а из 1С нет» часто значит, что на сервере устарели корневые сертификаты.
Отключение проверки сертификата в рабочей базе открывает дорогу подмене ответа. Злоумышленник в сети подсунет свой «курс валют» или реквизиты. Вместо отключения добавьте корпоративный корневой сертификат в хранилище сервера.
Клиентский сертификат
Некоторые банки и госсервисы требуют, чтобы 1С предъявила свой сертификат. Его передают первым параметром ЗащищенноеСоединениеOpenSSL, обычно через Новый СертификатКлиентаФайл(Путь, Пароль).
Прокси
Если в организации выход в интернет только через прокси:
Прокси = Новый ИнтернетПрокси(Истина); // взять системные настройки
// или вручную:
Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", "proxy.local", 3128);
Соединение = Новый HTTPСоединение(Сервер, 443, , , Прокси, 30, ЗащищенноеСоединение);
Учтите: служба сервера 1С часто работает под отдельной учётной записью. Системный прокси пользователя для неё не действует, адрес лучше задать явно.
Ошибки при обращении к сайтам и их устранение
Ошибки HTTP-соединения платформа выводит с префиксом Ошибка работы с Интернет: и текстом от сетевой библиотеки. По этому тексту причину находят быстрее всего.
https:// и слэша. Затем проверьте DNS на сервере 1С командой nslookup example.com.Ещё две ловушки, которые не выдают явной ошибки:
- 🐢 Запрос на клиенте в цикле. Сто вызовов по 0,5 секунды — почти минута заморозки интерфейса. Перенесите цикл на сервер или в фоновое задание.
- 🔑 Логин и пароль API в коде. Обработку копируют, и ключ уходит вместе с ней. Храните учётные данные в защищённом хранилище или хотя бы в константе с ограниченными правами.
Частые вопросы
Можно ли получить страницу, которая строится скриптами на JavaScript?
HTTPСоединение получает исходный HTML без выполнения скриптов. Ищите у сайта API, которое отдаёт те же данные в JSON.Как передать токен авторизации в запросе?
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен). Для базовой авторизации передайте логин и пароль в конструктор HTTPСоединение.