В процессе разработки на платформе 1С 7.7 часто возникает необходимость интеграции с внешними веб-сервисами для получения актуальной информации, например, данных о погоде, курсах валют или других динамически меняющихся объектов. Особенность версии 7.7 заключается в отсутствии встроенных современных инструментов для работы с протоколом HTTP «из коробки», поэтому нам потребуется использовать внешние системные компоненты Windows. Рассмотрим подробно, как реализовать автоматизированный процесс получения файлов с сайта и их отображения в интерфейсе программы.
Проанализируем наиболее надежный способ загрузки данных, который основан на использовании двух мощных COM-объектов: WinHttp.WinHttpRequest.5.1 для выполнения сетевого запроса и ADODB.Stream для обработки и сохранения полученных бинарных данных. Это решение позволяет гибко управлять процессом загрузки и корректно сохранять информацию на диск.
Для начала разберем инициализацию необходимых объектов. В 1С 7.7 это делается через функцию СоздатьОбъект. Важно обернуть этот процесс в блок Попытка...Исключение, так как в системе могут отсутствовать нужные библиотеки или права доступа.
Попытка
// Создаем объект для выполнения HTTP-запросов
httpRequest = СоздатьОбъект("winhttp.winhttprequest.5.1");
// Создаем поток для работы с бинарными данными
stream = СоздатьОбъект("adodb.stream");
stream.type = 1; // Указываем тип данных: adTypeBinary (бинарный)
stream.open();
// Для более тонкой настройки можно использовать ScriptControl
script = СоздатьОбъект("ScriptControl");
script.language = "jscript";
script.addObject("httpRequest", httpRequest);
script.addObject("stream", stream);
Исключение
Сообщить("Ошибка при инициализации системных компонентов: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
После инициализации объектов мы можем переходить непосредственно к процедуре загрузки файла. Рассмотрим пошагово процесс отправки запроса и сохранения результата. Выясним причину использования ADODB.Stream: дело в том, что 1С 7.7 не умеет напрямую записывать тело HTTP-ответа (объект ResponseBody) в файл, поэтому нам нужен посредник, умеющий работать с потоками байтов.
Процедура ЗагрузитьФайлСВебСайта(URL, ПутьКФайлу)
Попытка
// Инициализируем GET-запрос к указанному адресу
httpRequest.open("GET", URL, 0); // 0 - синхронный режим
httpRequest.send();
// Проверяем статус ответа (200 - успешно)
КодОтвета = Число(httpRequest.Status);
Если КодОтвета = 200 Тогда
// Записываем полученное тело ответа в поток
// Используем JScript через ScriptControl для корректной передачи бинарных данных
script.eval("stream.write(httpRequest.responseBody);");
// Сохраняем данные из потока в файл на диске
// Параметр 2 означает adSaveCreateOverWrite (перезаписать, если файл существует)
stream.saveToFile(ПутьКФайлу, 2);
Сообщить("Данные успешно обновлены: " + ПутьКФайлу);
Иначе
Сообщить("Ошибка загрузки. Код ответа сервера: " + КодОтвета);
КонецЕсли;
Исключение
Сообщить("Произошла критическая ошибка при обмене данными: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Если задача состоит не просто в скачивании файла, а в его непосредственном отображении на форме без промежуточного сохранения, рассмотрим альтернативный вариант — использование ActiveX-объекта Microsoft Web Browser. Этот метод позволяет встроить полноценный мини-браузер прямо в форму 1С.
Разберем основные преимущества этого подхода:
PNG), которые могут некорректно восприниматься стандартным объектом 1С 7.7.HTML/CSS.Для реализации этого метода выполните следующие действия:
Активный элемент (меню «Вставить» -> «Активный элемент»).Microsoft Web Browser.Navigate для загрузки нужного адреса.
Процедура ПриОткрытии()
// Укажите идентификатор вашего ActiveX элемента, например, WebBrowser1
Попытка
Форма.WebBrowser1.Navigate(АдресРесурса);
Исключение
// Обработка случая, если элемент не загрузился
КонецПопытки;
КонецПроцедуры
Одной из ключевых задач является регулярное обновление информации (например, каждые 4 часа). Проанализируем способы реализации «робота», который будет выполнять эту работу автономно.
Вариант А: Использование ОбработкаОжидания
Если сессия 1С постоянно открыта на сервере или рабочем месте, можно использовать встроенную функцию ОбработкаОжидания. Она позволяет запускать процедуру через определенные интервалы времени (в секундах).
// В глобальном модуле или модуле формы
Процедура ОбновитьДанныеПоТаймеру()
// Код вызова процедуры загрузки
ЗагрузитьФайлСВебСайта(СсылкаНаСайт, ЛокальныйПуть);
КонецПроцедуры
// Запуск таймера (например, раз в час - 3600 секунд)
ОчиститьОчередь() // на всякий случай
Форма.ОбработкаОжидания("ОбновитьДанныеПоТаймеру", 3600);
Вариант Б: Планировщик задач Windows
Для полной автономности рекомендуется использовать стандартный Планировщик задач Windows. Вы можете настроить запуск 1С в определенное время с параметрами командной строки, которые заставят программу выполнить обновление и закрыться.
Пример командной строки запуска:
1cv7.exe enterprise /D"C:\PathToBase" /N"RobotUser" /P"Password" /C"ЗагрузитьДанные"
Внутри 1С в процедуре ПриНачалеРаботыСистемы необходимо считать параметр КомандаСистемы(), выполнить нужную обработку и вызвать ЗавершитьРаботуСистемы().
Часто программисты сталкиваются с тем, что после обновления файла на сервере 1С продолжает отображать старые данные. Это происходит из-за кэширования запросов на уровне операционной системы. Рассмотрим эффективный способ обхода этой ситуации.
Чтобы заставить систему каждый раз скачивать свежую версию, достаточно добавить в конец URL случайный или уникальный параметр, который не влияет на логику сервера, но делает ссылку уникальной для кэша Internet Explorer. Чаще всего используют текущую метку времени.
// Добавляем параметр для обхода кэша
УникальныйАдрес = СсылкаНаСайт + "?t=" + _GetPerformanceCounter();
ЗагрузитьФайлСВебСайта(УникальныйАдрес, ЛокальныйПуть);
Важные рекомендации:
WinHTTP в современных версиях Windows (10/11) убедитесь, что сервер поддерживает протоколы TLS 1.2/1.3, так как старые компоненты могут иметь проблемы с установкой защищенного соединения.curl, если работа через COM-объекты вызывает сложности с безопасностью в вашей сети.Таким образом, мы разобрали комплексный подход к интеграции 1С 7.7 с внешними интернет-ресурсами. Сочетание методов прямого скачивания через потоки и использование элементов управления браузером позволяет решить практически любую задачу по автоматизации получения веб-контента.