Часто в процессе интеграции 1С с внешними информационными системами мы сталкиваемся с ситуацией, когда стандартные механизмы экспорта данных (например, выгрузка в Excel) предоставляют лишь ограниченный набор информации. В то же время полные данные доступны для просмотра на сайте только при переходе в каждую отдельную карточку записи. Если записей тысячи, ручное копирование становится невозможным. Рассмотрим, как автоматизировать этот процесс и «научить» 1С собирать нужные сведения напрямую с веб-ресурса.
Прежде чем приступать к написанию кода в 1С, нам необходимо выяснить, как именно сайт отдает данные браузеру. Разберем по шагам, как проанализировать «поведение» сайта:
Проанализируем ситуацию: если при клике на строку реестра уходит запрос к адресу типа site.ru/api/get_details?id=12345, и в ответ приходит текст в формате JSON, значит, мы нашли «золотую жилу». Именно этот запрос мы будем имитировать из 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.
После того как мы получили ответ от сервера, нам нужно извлечь из него полезную информацию. В платформе 1С 8.3 для этого предусмотрен объект ЧтениеJSON. Посмотрим на пример разбора строки JSON в структуру 1С:
Процедура РазборДанныхJSON(ТекстJSON)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТекстJSON);
Данные = ПрочитатьJSON(Чтение);
// Теперь мы можем обращаться к полям через точку или по индексу
Если ТипЗнч(Данные) = Тип("Структура") Тогда
ФИО = Данные.FullName;
ИНН = Данные.INN;
// Записываем данные в справочник или документ 1С
КонецЕсли;
Чтение.Закрыть();
КонецПроцедуры
Этот метод позволяет крайне быстро обрабатывать тысячи строк, так как разбор JSON работает на уровне платформы и оптимизирован по производительности.
Бывают случаи, когда сайт очень сложный: он использует динамическую генерацию контента, требует сложных манипуляций с JavaScript или имеет продвинутую защиту от роботов. В таких ситуациях прямое HTTPСоединение может не справиться. Разберем альтернативный путь — использование инструментов автоматизации браузера.
Суть метода заключается в том, что мы запускаем настоящий браузер (Chrome или Firefox), которым программно управляет наш скрипт. Скрипт «кликает» по ссылкам, ждет загрузки страницы и считывает текст из элементов DOM-дерева.
Основные инструменты для этого подхода:
Когда нам нужно собрать данные по тысячам строк, важно не перегрузить сервер сайта и не попасть под блокировку по IP-адресу. Проанализируем ситуацию с массовым сбором:
id=101, id=102, мы можем просто запустить цикл в 1С, который будет инкрементировать (увеличивать на единицу) этот номер.Приостановить(0.5)), чтобы имитировать поведение реального человека.Итог: Самый эффективный путь автоматизации — это сочетание анализа сетевой активности через вкладку Network и реализация HTTP-запросов на стороне 1С. Это обеспечит максимальную скорость работы и надежность получения данных для заполнения вашей информационной базы.