Как организовать автоматическое получение данных с внешнего сайта в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто перед разработчиком 1С встает задача интеграции с внешними ресурсами, которые не принадлежат вашей компании. Это может быть сайт поставщика, калькулятор сложных изделий или государственная информационная система. В данной статье мы разберем основные методики получения данных, начиная от официальных протоколов обмена и заканчивая методами обхода ограничений интерфейса.

Этап 1. Анализ возможностей интеграции и поиск API

Прежде чем приступать к написанию сложного кода, нам необходимо выяснить, предусмотрел ли владелец сайта штатные механизмы обмена данными. Самый надежный и стабильный способ — это использование API (Application Programming Interface). Разберем, как действовать на этом этапе:

  1. Запрос технической документации. Первым делом проанализируем возможность получения техусловий. Если сайт принадлежит вашему партнеру, стоит отправить официальный запрос. В нем нужно уточнить наличие API (REST, SOAP) и попросить примеры запросов. Это сэкономит недели работы.
  2. Поиск публичного API. Часто в подвале сайта (footer) или в разделе для разработчиков уже выложена документация. Изучим структуру ссылок: если сайт отдает данные в форматах JSON или XML, это идеальный вариант для 1С.

Этап 2. Реверс-инжиниринг: поиск «скрытых» запросов

Если официального API нет, проанализируем поведение сайта в браузере. Большинство современных ресурсов работают на базе AJAX-запросов. Это означает, что при нажатии кнопки «Рассчитать» или «Сформировать схему» браузер отправляет фоновый запрос к серверу и получает структурированный ответ.

Выполним следующие шаги для поиска таких запросов:

  1. Откроем сайт в браузере (Google Chrome или Яндекс.Браузер).
  2. Нажмем F12 для вызова инструментов разработчика и перейдем на вкладку Network (Сеть).
  3. Выполним расчет на сайте.
  4. В списке появившихся событий найдем запросы типа XHR или Fetch.
  5. Проанализируем вкладку Preview или Response для этих запросов. Если мы видим там данные в формате JSON с результатами расчета, значит, мы нашли точку входа.

Теперь мы можем имитировать этот запрос прямо из 1С, используя объект HTTPСоединение. Посмотрим на пример кода для отправки такого запроса:


// Создаем соединение с сервером
Соединение = Новый HTTPСоединение("api.partner-site.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());

// Формируем запрос с параметрами
Запрос = Новый HTTPЗапрос("/v1/calculate?param1=value1");
Запрос.Заголовки.Вставить("Content-Type", "application/json");

// Получаем ответ
Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    ДанныеJSON = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    // Дальнейшая обработка структуры ДанныеJSON
КонецЕсли;

Этап 3. Работа через «Поле HTML документа» (DOM)

Если сайт сложный, защищен от прямых HTTP-запросов или требует выполнения тяжелых JavaScript-сценариев для отображения данных, мы можем воспользоваться встроенным инструментом 1С — ПолеHTMLДокумента. В современных версиях платформы 8.3 этот элемент работает на движке Chromium, что позволяет полноценно взаимодействовать со страницей.

Разберем алгоритм работы с объектной моделью документа (DOM):

  1. Разместим на форме обработки ПолеHTMLДокумента.
  2. Загрузим страницу методом Элементы.ПолеHTML.Документ.location.href = "url_сайта".
  3. После полной загрузки страницы обратимся к ее элементам (полям ввода, кнопкам).

Рассмотрим пример заполнения формы на сайте программным способом:


// Получаем доступ к документу страницы
ДокументHTML = Элементы.ПолеHTML.Документ;

// Находим поле ввода по его ID и устанавливаем значение
ПолеВвода = ДокументHTML.getElementById("input_width");
Если ПолеВвода <> Неопределено Тогда
    ПолеВвода.value = "1500";
КонецЕсли;

// Имитируем нажатие на кнопку расчета
Кнопка = ДокументHTML.getElementById("btn_submit");
Если Кнопка <> Неопределено Тогда
    Кнопка.click();
КонецЕсли;

Этот метод хорош тем, что 1С сама управляет сессиями, куками (cookies) и выполняет скрипты сайта, однако он требует наличия открытой формы у пользователя.

Этап 4. Получение файлов и сложных данных (PDF)

В вопросе упоминалось, что сайт формирует схему в формате PDF. Для 1С это двоичные данные. Рассмотрим, как их правильно получить и сохранить.

Если после расчета сайт выдает прямую ссылку на файл, мы используем HTTPСоединение.Получить(). Полученное тело ответа можно сохранить в справочник ПрисоединенныеФайлы или просто на диск.

Проанализируем ситуацию, когда данные нужно извлечь из самого PDF. Стандартная платформа 1С не умеет «читать» содержимое PDF-файла (текст внутри него). В этом случае нам помогут внешние утилиты, такие как pdftotext или библиотеки на языке Python. Процесс будет выглядеть так:

  1. 1С скачивает PDF во временный файл.
  2. Запускается внешняя компонента или консольное приложение, которое конвертирует PDF в текстовый файл.
  3. 1С считывает полученный текст и парсит его с помощью регулярных выражений.

Этап 5. Автоматизация без участия пользователя (Headless-решения)

Метод с InternetExplorer.Application, упомянутый на форуме, считается устаревшим. На современных серверах (Windows Server 2019/2022) IE работает некорректно, а многие сайты блокируют его из-за отсутствия поддержки современных стандартов.

Если задача должна выполняться регламентным заданием на сервере (без открытия окон), выясним, какие есть альтернативы:

Важные рекомендации при реализации

Проанализируем типичные сложности, с которыми мы можем столкнуться:

  1. Авторизация: Если данные доступны только в личном кабинете, нам нужно сначала отправить запрос на авторизацию, получить Cookies и передавать их в каждом последующем запросе через HTTPСоединение.
  2. Капча: Если сайт защищен капчей, автоматизация может стать невозможной без использования сервисов разгадывания (типа RuCaptcha), что значительно усложняет архитектуру.
  3. Изменение верстки: Метод работы через DOM (поиск элементов по ID) очень хрупок. Если владельцы сайта изменят дизайн или названия полей, ваш код в 1С перестанет работать. Поэтому всегда отдавайте приоритет API.

Таким образом, мы выяснили, что наиболее эффективная стратегия — это поиск внутренних JSON-запросов через консоль разработчика. Если же сайт защищен, используем ПолеHTMLДокумента на управляемых формах для имитации действий пользователя.

← На главную