При разработке на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью получения данных с внешних веб-ресурсов. В «толстом» клиенте или на сервере эта задача решается тривиально через использование объекта HTTPСоединение. Однако в веб-клиенте долгое время существовали строгие ограничения. Давайте разберем, как реализовать получение данных сегодня и какие нюансы при этом стоит учитывать.
Исторически веб-клиент 1С работает внутри браузера, который накладывает жесткие ограничения безопасности. Главное из них — политика CORS (Cross-Origin Resource Sharing). Если вы пытались сделать запрос к стороннему сайту, браузер блокировал его, так как 1С работала в рамках одного домена, а запрашиваемый ресурс находился в другом. Именно поэтому раньше единственным надежным способом было перенесение логики запроса на сторону сервера.
В актуальных версиях платформы 1С разработчики реализовали поддержку объектов HTTPЗапрос и HTTPСоединение непосредственно в веб-клиенте. Теперь вы можете выполнять запросы, не прибегая к серверным вызовам, при условии, что целевой сервер разрешает кросс-доменные запросы.
Важно помнить, что в веб-клиенте все операции с сетью выполняются асинхронно. Блокировка интерфейса браузера недопустима, поэтому использование синхронных методов приведет к ошибке исполнения.
Рассмотрим, как правильно организовать асинхронный вызов:
// Пример асинхронного выполнения запроса
Асинх Процедура ПолучитьДанныеСайта()
Соединение = Новый HTTPСоединение("example.com");
Запрос = Новый HTTPЗапрос("/index.html");
// Используем ключевое слово Ждать для асинхронного получения ответа
Ответ = Ждать Соединение.ПолучитьАсинх(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ТекстHTML = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ТекстHTML);
Иначе
Сообщить("Ошибка соединения: " + Ответ.КодСостояния);
КонецЕсли;
КонецПроцедуры
При работе с этим подходом обратите внимание на следующие моменты:
Access-Control-Allow-Origin, ваш запрос будет отклонен браузером. Никакие настройки 1С здесь не помогут — это правила безопасности самого браузера.Если вы сталкиваетесь с ограничениями CORS или специфическими сетевыми политиками, лучшим решением остается делегирование задачи серверу 1С. Серверная часть платформы не ограничена политиками браузеров и может свободно обращаться к любым ресурсам.
Разберем алгоритм работы:
HTTPСоединение.Этот метод является универсальным и наиболее стабильным. Он позволяет скрыть детали запроса от браузера и избежать проблем с безопасностью.
// Клиентский вызов
&НаКлиенте
Процедура ПолучитьКонтент(Команда)
ТекстHTML = ПолучитьДанныеНаСервере();
// Обработка полученного текста...
КонецПроцедуры
// Серверная функция
&НаСервереБезКонтекста
Функция ПолучитьДанныеНаСервере()
Соединение = Новый HTTPСоединение("example.com");
Запрос = Новый HTTPЗапрос("/index.html");
Ответ = Соединение.Получить(Запрос);
Возврат Ответ.ПолучитьТелоКакСтроку();
КонецФункции
Мы проанализировали основные способы взаимодействия с веб-ресурсами из веб-клиента 1С:
CORS, смело используйте асинхронные вызовы HTTPСоединение прямо из кода формы.Await и Async являются необходимыми инструментами для сохранения отзывчивости интерфейса.Использование Поле HTML документа на форме также остается доступным инструментом для визуализации полученного контента. Вы можете программно загрузить полученную строку HTML в это поле, используя свойство Документ или метод УстановитьТекст (в зависимости от версии платформы), что позволит пользователю сразу увидеть результат в удобном виде.