Как скачать файл по HTTP и распаковать ZIP-архив в 1С

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

При интеграции 1С со сторонними веб-ресурсами регулярно возникает задача автоматической загрузки внешних данных: прайс-листов, справочников, обновлений классификаторов или сжатых баз данных DBF/XML. Разберем основные способы скачивания файлов средствами платформы 1С:Предприятие, работу с ZIP-архивами и методы предотвращения типичных ошибок.

Способ 1. Простое скачивание через функцию КопироватьФайл

Если требуется быстро скачать общедоступный файл по прямой ссылке без передачи специальных HTTP-заголовков и cookie, воспользуемся штатной процедурой КопироватьФайл. Платформа 1С умеет принимать веб-ссылку в качестве пути источника.

Посмотрим на пример использования:


ИмяФайлаИсточника = "http://example.com/files/data_archive.zip";
ИмяФайлаПриемника = "C:\Tmp\data_archive.zip";

КопироватьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника);

Особенности метода: вызов КопироватьФайл является синхронным и блокирует интерфейс пользователя на время скачивания. При этом штатный индикатор выполнения (прогресс-бар) отобразить невозможно.

Способ 2. Загрузка через объект HTTPСоединение

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

Разберем по шагам реализацию через HTTPСоединение:


СерверИсточник = "example.com";
ПутьКФайлуНаСервере = "/files/data_archive.zip";
ПутьДляСохранения = "C:\Tmp\data_archive.zip";

Соединение = Новый HTTPСоединение(СерверИсточник);
Соединение.Получить(ПутьКФайлуНаСервере, ПутьДляСохранения);

Если веб-сервер требует авторизацию, логин и пароль можно передать непосредственно в конструктор объекта HTTPСоединение.

Распаковка полученного ZIP-архива средствами 1С

После успешной загрузки архива на локальный диск перейдем к его распаковке. Платформа 1С предоставляет встроенный объект ЧтениеZipФайла, который позволяет извлекать файлы без привлечения сторонних утилит и архиваторов.

Рассмотрим пример чтения и распаковки архива:


ПутьАрхива = "C:\Tmp\data_archive.zip";
КаталогРаспаковки = "C:\Tmp\Unpacked\";
ПарольНаАрхив = "";

ZIP = Новый ЧтениеZipФайла;
ZIP.Открыть(ПутьАрхива, ПарольНаАрхив);
ZIP.ИзвлечьВсе(КаталогРаспаковки, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
ZIP.Закрыть();

Параметр РежимВосстановленияПутейФайловZIP.НеВосстанавливать извлекает все файлы непосредственно в указанную папку без воссоздания внутренней структуры подкаталогов архива.

Типичные ошибки и способы их решения

Проанализируем распространенные проблемы, с которыми можно столкнуться при реализации загрузки файлов:

  1. Ошибка «Ошибка доступа к файлу»: возникает, когда у пользователя операционной системы нет прав на запись в целевой каталог. Если код выполняется на стороне сервера 1С (в клиент-серверном режиме или в фоновом задании), права на запись должны быть предоставлены служебной учетной записи сервера 1С (например, USR1CV8). Для безопасной работы рекомендуется использовать пути, возвращаемые функциями КаталогВременныхФайлов() и ПолучитьИмяВременногоФайла().
  2. Зависание интерфейса при скачивании больших файлов: чтобы интерфейс программы не блокировался, операцию скачивания выносят в фоновое задание. В управляемых формах запуск выполняется через процедуру ФоновыеЗадания.Выполнить().
  3. Получение пустого или поврежденного файла: часто происходит при наличии перенаправлений (HTTP-редиректов 301/302), например, при автоматическом перенаправлении с HTTP на HTTPS, либо если веб-сервер блокирует запросы без указания заголовков сессии (User-Agent, Cookie). В таких ситуациях необходимо проверять корректность конечного адреса и передавать необходимые заголовки запроса.
← На главную