Три способа показать или загрузить сайт из 1С:Предприятия 8.3

· 9 мин

Содержание

Открыть веб-страницу в 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").

Разбор параметров:

  1. Сервер — только домен: example.com, без https:// и без слэша.
  2. 443 — порт HTTPS. Для обычного HTTP укажите 80 и не передавайте ЗащищенноеСоединение.
  3. 30 — таймаут в секундах. Без него зависший сервер подвесит сеанс пользователя.
  4. Адрес в 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-документа.

Пошагово в конфигураторе

  1. Откройте форму в редакторе (внешняя обработка, расширение или своя конфигурация).
  2. На вкладке Реквизиты создайте реквизит АдресСтраницы с типом Строка, неограниченной длины.
  3. Перетащите реквизит в дерево элементов.
  4. В свойствах элемента выберите Вид = Поле HTML-документа.
  5. Растяните поле: задайте ширину и высоту либо включите растягивание по форме.
  6. В обработчике ПриОткрытии или ПриСозданииНаСервере заполните реквизит.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    АдресСтраницы = "https://example.com/map";
КонецПроцедуры

В реквизит можно положить не только адрес, но и готовый HTML-текст. Тогда поле отрисует собственную разметку: отчёт, подсказку, таблицу с картинками.

АдресСтраницы = "<html><body><h3>Остатки</h3><p>Склад: 120 шт.</p></body></html>";

События и связь с формой

  • 🖱 ПриНажатии — пользователь щёлкнул по элементу страницы. Отсюда можно перехватить ссылку и открыть форму 1С вместо перехода.
  • ✅ ДокументСформирован — страница загрузилась. После него доступен объект документа через Элементы.АдресСтраницы.Документ, можно читать и менять элементы страницы.

Сайты с жёсткими заголовками безопасности (банки, госпорталы, кабинеты маркетплейсов) могут не отображаться во встроенном поле или требовать повторного входа. Для них открывайте внешний браузер.

Разбор ответа сервера и JSON

Получить строку — полдела. Её нужно проверить и разобрать.

Проверка ответа

Перед разбором проверьте три вещи:

  1. Код состояния. 200 — успех. 301/302 — переадресация, новый адрес лежит в заголовке Location. 401/403 — нужна авторизация. 404 — неверный путь. 500 и выше — ошибка на стороне сервера.
  2. Тип содержимого. Ответ.Заголовки.Получить("Content-Type") покажет, пришёл JSON, HTML или файл.
  3. Кодировку. Если в 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-соединения платформа выводит с префиксом Ошибка работы с Интернет: и текстом от сетевой библиотеки. По этому тексту причину находят быстрее всего.

Диагностика: выберите симптом

Ещё две ловушки, которые не выдают явной ошибки:

  • 🐢 Запрос на клиенте в цикле. Сто вызовов по 0,5 секунды — почти минута заморозки интерфейса. Перенесите цикл на сервер или в фоновое задание.
  • 🔑 Логин и пароль API в коде. Обработку копируют, и ключ уходит вместе с ней. Храните учётные данные в защищённом хранилище или хотя бы в константе с ограниченными правами.

Частые вопросы

Можно ли получить страницу, которая строится скриптами на JavaScript?
Нет. HTTPСоединение получает исходный HTML без выполнения скриптов. Ищите у сайта API, которое отдаёт те же данные в JSON.
Как передать токен авторизации в запросе?
Добавьте заголовок: Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен). Для базовой авторизации передайте логин и пароль в конструктор HTTPСоединение.
Работает ли HTTPСоединение в файловой базе?
Да. В файловом варианте серверный код выполняется на компьютере пользователя, поэтому сертификаты и прокси берутся с него.
Как загружать данные с сайта по расписанию?
Оформите загрузку как регламентное задание. В клиент-серверной базе оно выполняется на сервере 1С без участия пользователя.
Почему в браузере сайт открывается, а из 1С нет?
Браузер работает с компьютера пользователя, а серверный код — с сервера 1С. У них разные сеть, прокси и набор корневых сертификатов. Проверяйте доступ именно с сервера.