При интеграции 1С со сторонними веб-ресурсами регулярно возникает задача автоматической загрузки внешних данных: прайс-листов, справочников, обновлений классификаторов или сжатых баз данных DBF/XML. Разберем основные способы скачивания файлов средствами платформы 1С:Предприятие, работу с ZIP-архивами и методы предотвращения типичных ошибок.
Если требуется быстро скачать общедоступный файл по прямой ссылке без передачи специальных HTTP-заголовков и cookie, воспользуемся штатной процедурой КопироватьФайл. Платформа 1С умеет принимать веб-ссылку в качестве пути источника.
Посмотрим на пример использования:
ИмяФайлаИсточника = "http://example.com/files/data_archive.zip";
ИмяФайлаПриемника = "C:\Tmp\data_archive.zip";
КопироватьФайл(ИмяФайлаИсточника, ИмяФайлаПриемника);
Особенности метода: вызов КопироватьФайл является синхронным и блокирует интерфейс пользователя на время скачивания. При этом штатный индикатор выполнения (прогресс-бар) отобразить невозможно.
Для более гибкого управления процессом получения данных используем объект HTTPСоединение. Это позволяет разделять адрес сервера и путь к запрашиваемому ресурсу, а также настраивать таймауты и параметры подключения.
Разберем по шагам реализацию через HTTPСоединение:
СерверИсточник = "example.com";
ПутьКФайлуНаСервере = "/files/data_archive.zip";
ПутьДляСохранения = "C:\Tmp\data_archive.zip";
Соединение = Новый HTTPСоединение(СерверИсточник);
Соединение.Получить(ПутьКФайлуНаСервере, ПутьДляСохранения);
Если веб-сервер требует авторизацию, логин и пароль можно передать непосредственно в конструктор объекта HTTPСоединение.
После успешной загрузки архива на локальный диск перейдем к его распаковке. Платформа 1С предоставляет встроенный объект ЧтениеZipФайла, который позволяет извлекать файлы без привлечения сторонних утилит и архиваторов.
Рассмотрим пример чтения и распаковки архива:
ПутьАрхива = "C:\Tmp\data_archive.zip";
КаталогРаспаковки = "C:\Tmp\Unpacked\";
ПарольНаАрхив = "";
ZIP = Новый ЧтениеZipФайла;
ZIP.Открыть(ПутьАрхива, ПарольНаАрхив);
ZIP.ИзвлечьВсе(КаталогРаспаковки, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
ZIP.Закрыть();
Параметр РежимВосстановленияПутейФайловZIP.НеВосстанавливать извлекает все файлы непосредственно в указанную папку без воссоздания внутренней структуры подкаталогов архива.
Проанализируем распространенные проблемы, с которыми можно столкнуться при реализации загрузки файлов:
USR1CV8). Для безопасной работы рекомендуется использовать пути, возвращаемые функциями КаталогВременныхФайлов() и ПолучитьИмяВременногоФайла().ФоновыеЗадания.Выполнить().