Часто перед разработчиком 1С встает задача интеграции с внешними ресурсами, которые не принадлежат вашей компании. Это может быть сайт поставщика, калькулятор сложных изделий или государственная информационная система. В данной статье мы разберем основные методики получения данных, начиная от официальных протоколов обмена и заканчивая методами обхода ограничений интерфейса.
Прежде чем приступать к написанию сложного кода, нам необходимо выяснить, предусмотрел ли владелец сайта штатные механизмы обмена данными. Самый надежный и стабильный способ — это использование API (Application Programming Interface). Разберем, как действовать на этом этапе:
JSON или XML, это идеальный вариант для 1С.Если официального API нет, проанализируем поведение сайта в браузере. Большинство современных ресурсов работают на базе AJAX-запросов. Это означает, что при нажатии кнопки «Рассчитать» или «Сформировать схему» браузер отправляет фоновый запрос к серверу и получает структурированный ответ.
Выполним следующие шаги для поиска таких запросов:
JSON с результатами расчета, значит, мы нашли точку входа.Теперь мы можем имитировать этот запрос прямо из 1С, используя объект HTTPСоединение. Посмотрим на пример кода для отправки такого запроса:
// Создаем соединение с сервером
Соединение = Новый HTTPСоединение("api.partner-site.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
// Формируем запрос с параметрами
Запрос = Новый HTTPЗапрос("/v1/calculate?param1=value1");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
// Получаем ответ
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
ДанныеJSON = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Дальнейшая обработка структуры ДанныеJSON
КонецЕсли;
Если сайт сложный, защищен от прямых HTTP-запросов или требует выполнения тяжелых JavaScript-сценариев для отображения данных, мы можем воспользоваться встроенным инструментом 1С — ПолеHTMLДокумента. В современных версиях платформы 8.3 этот элемент работает на движке Chromium, что позволяет полноценно взаимодействовать со страницей.
Разберем алгоритм работы с объектной моделью документа (DOM):
ПолеHTMLДокумента.Элементы.ПолеHTML.Документ.location.href = "url_сайта".Рассмотрим пример заполнения формы на сайте программным способом:
// Получаем доступ к документу страницы
ДокументHTML = Элементы.ПолеHTML.Документ;
// Находим поле ввода по его ID и устанавливаем значение
ПолеВвода = ДокументHTML.getElementById("input_width");
Если ПолеВвода <> Неопределено Тогда
ПолеВвода.value = "1500";
КонецЕсли;
// Имитируем нажатие на кнопку расчета
Кнопка = ДокументHTML.getElementById("btn_submit");
Если Кнопка <> Неопределено Тогда
Кнопка.click();
КонецЕсли;
Этот метод хорош тем, что 1С сама управляет сессиями, куками (cookies) и выполняет скрипты сайта, однако он требует наличия открытой формы у пользователя.
В вопросе упоминалось, что сайт формирует схему в формате PDF. Для 1С это двоичные данные. Рассмотрим, как их правильно получить и сохранить.
Если после расчета сайт выдает прямую ссылку на файл, мы используем HTTPСоединение.Получить(). Полученное тело ответа можно сохранить в справочник ПрисоединенныеФайлы или просто на диск.
Проанализируем ситуацию, когда данные нужно извлечь из самого PDF. Стандартная платформа 1С не умеет «читать» содержимое PDF-файла (текст внутри него). В этом случае нам помогут внешние утилиты, такие как pdftotext или библиотеки на языке Python. Процесс будет выглядеть так:
Метод с InternetExplorer.Application, упомянутый на форуме, считается устаревшим. На современных серверах (Windows Server 2019/2022) IE работает некорректно, а многие сайты блокируют его из-за отсутствия поддержки современных стандартов.
Если задача должна выполняться регламентным заданием на сервере (без открытия окон), выясним, какие есть альтернативы:
Проанализируем типичные сложности, с которыми мы можем столкнуться:
Cookies и передавать их в каждом последующем запросе через HTTPСоединение.Таким образом, мы выяснили, что наиболее эффективная стратегия — это поиск внутренних JSON-запросов через консоль разработчика. Если же сайт защищен, используем ПолеHTMLДокумента на управляемых формах для имитации действий пользователя.