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

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

Часто в процессе интеграции 1С с внешними информационными системами мы сталкиваемся с ситуацией, когда стандартные механизмы экспорта данных (например, выгрузка в Excel) предоставляют лишь ограниченный набор информации. В то же время полные данные доступны для просмотра на сайте только при переходе в каждую отдельную карточку записи. Если записей тысячи, ручное копирование становится невозможным. Рассмотрим, как автоматизировать этот процесс и «научить» 1С собирать нужные сведения напрямую с веб-ресурса.

Анализ механизмов сайта через инструменты разработчика

Прежде чем приступать к написанию кода в 1С, нам необходимо выяснить, как именно сайт отдает данные браузеру. Разберем по шагам, как проанализировать «поведение» сайта:

  1. Откроем нужную страницу сайта в браузере (например, Chrome или Яндекс.Браузер).
  2. Нажмем клавишу F12 или сочетание Ctrl+Shift+I, чтобы открыть инструменты разработчика.
  3. Перейдем на вкладку Network (Сеть). Это наш основной инструмент мониторинга всех запросов, которые уходят к серверу.
  4. Выполним на сайте действие, которое нас интересует — например, нажмем на ФИО в списке, чтобы открылась карточка с подробными данными.
  5. Проанализируем появившиеся в списке запросы. Нас интересуют запросы типа XHR или Fetch. Обычно именно они возвращают структурированные данные (JSON или XML).

Проанализируем ситуацию: если при клике на строку реестра уходит запрос к адресу типа site.ru/api/get_details?id=12345, и в ответ приходит текст в формате JSON, значит, мы нашли «золотую жилу». Именно этот запрос мы будем имитировать из 1С.

Решение 1: Использование HTTP-соединения в 1С

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

Рассмотрим пример кода для выполнения GET-запроса и получения данных в формате JSON:


Процедура ПолучитьДанныеССервера(ИдентификаторЗаписи)
    
    Сервер = "www.site.ru";
    Ресурс = "/api/get_details?id=" + ИдентификаторЗаписи;
    
    // Создаем соединение. Для HTTPS используем защищенное соединение
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    Соединение = Новый HTTPСоединение(Сервер, , , , , , ЗащищенноеСоединение);
    
    // Формируем запрос и заполняем заголовки
    Запрос = Новый HTTPЗапрос(Ресурс);
    Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
    Запрос.Заголовки.Вставить("Content-Type", "application/json");
    
    // Если требуется авторизация по куки, их нужно добавить в заголовок
    // Запрос.Заголовки.Вставить("Cookie", "session_id=abcdef123456");
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            СодержимоеJSON = Ответ.ПолучитьТелоКакСтроку();
            РазборДанныхJSON(СодержимоеJSON);
        Иначе
            Сообщить("Ошибка запроса: " + Ответ.КодСостояния);
        КонецЕсли;
    Исключение
        Сообщить("Не удалось установить соединение с сервером.");
    КонецПопытки;
    
КонецПроцедуры

Важным моментом здесь является заполнение заголовка User-Agent. Без него многие сайты блокируют запросы, считая их бот-атаками. Также обратите внимание на ЗащищенноеСоединениеOpenSSL — оно необходимо для работы с современными сайтами, работающими по протоколу HTTPS.

Обработка полученных JSON-данных

После того как мы получили ответ от сервера, нам нужно извлечь из него полезную информацию. В платформе 1С 8.3 для этого предусмотрен объект ЧтениеJSON. Посмотрим на пример разбора строки JSON в структуру 1С:


Процедура РазборДанныхJSON(ТекстJSON)
    
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(ТекстJSON);
    
    Данные = ПрочитатьJSON(Чтение);
    
    // Теперь мы можем обращаться к полям через точку или по индексу
    Если ТипЗнч(Данные) = Тип("Структура") Тогда
        ФИО = Данные.FullName;
        ИНН = Данные.INN;
        // Записываем данные в справочник или документ 1С
    КонецЕсли;
    
    Чтение.Закрыть();
    
КонецПроцедуры

Этот метод позволяет крайне быстро обрабатывать тысячи строк, так как разбор JSON работает на уровне платформы и оптимизирован по производительности.

Решение 2: Автоматизация через браузер (Selenium и аналоги)

Бывают случаи, когда сайт очень сложный: он использует динамическую генерацию контента, требует сложных манипуляций с JavaScript или имеет продвинутую защиту от роботов. В таких ситуациях прямое HTTPСоединение может не справиться. Разберем альтернативный путь — использование инструментов автоматизации браузера.

Суть метода заключается в том, что мы запускаем настоящий браузер (Chrome или Firefox), которым программно управляет наш скрипт. Скрипт «кликает» по ссылкам, ждет загрузки страницы и считывает текст из элементов DOM-дерева.

Основные инструменты для этого подхода:

Оптимизация массового сбора данных

Когда нам нужно собрать данные по тысячам строк, важно не перегрузить сервер сайта и не попасть под блокировку по IP-адресу. Проанализируем ситуацию с массовым сбором:

  1. Перебор идентификаторов: Если в реестре ссылка на карточку выглядит как id=101, id=102, мы можем просто запустить цикл в 1С, который будет инкрементировать (увеличивать на единицу) этот номер.
  2. Паузы между запросами: Обязательно добавляйте небольшие задержки (например, Приостановить(0.5)), чтобы имитировать поведение реального человека.
  3. Поиск скрытого API: Часто сам список (реестр) при загрузке получает от сервера гораздо больше данных, чем отображает на экране. Тщательно изучите JSON-ответ главного списка в консоли Network — вполне возможно, что нужные вам поля (телефон, адрес, ИНН) уже там есть, просто скрыты стилями CSS.

Итог: Самый эффективный путь автоматизации — это сочетание анализа сетевой активности через вкладку Network и реализация HTTP-запросов на стороне 1С. Это обеспечит максимальную скорость работы и надежность получения данных для заполнения вашей информационной базы.

← На главную