1С 8.3 ZIP - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 ZIP

Платформа 1С 8.3 для работы с архивами использует формат ZIP. Это популярный формат архивации файлов и сжатия данных без потерь, который может содержать один или несколько файлов и/или каталогов. Для этого во встроенном языке 1С 8.3 существуют функции ЗаписьZIPФайла и ЧтениеZIPФайла. Есть также необходимые для разбиения архифа на несколько частей указанного размера и объединения нескольких архивов в один соответственно: РазделитьФайл() и ОбъединитьФайлы().
Создаем Zip архив с файлами в 1С 8.3:
&НаКлиенте
Процедура СоздаемZipАрхивСФайлами()

   
// Создаем zip-архив
   
ИмяАрхФайла="D:\AvtoArhiv\Doc31032020.zip";//Путь к архиву и имя
    // Особенность: Архивировать средствами 1С можно даже запущенную информационную базу 1С
   
ПарольАрхФайла=""; // если нужно - можно задать пароль на архив
   
КоммАрхФайла="Архив документов создан 31/03/2020 из 1С 8.3"; // комментарий к архиву

   
ФайлАрхива = Новый ЗаписьZipФайла(ИмяАрхФайла, ПарольАрхФайла, КоммАрхФайла,
   
МетодСжатияZIP.Сжатие, УровеньСжатияZIP.Оптимальный, МетодШифрованияZIP.Zip20);

   
// Добавляем файл в zip-архив
   
ФайлАрхива.Добавить("D:\MyDocuments\ПланНа2020.docx"); // путь к файлу который добавляем в архив

    // Или добавляем несколько файлов в zip-архив по маске
   
ФайлАрхива.Добавить("D:\MyDocuments\*.xlsx"); // указываем маску к файлам

    // Или если нужно в архив добавить файлы не только из корневой папки ("D:\MyDocuments\"),
    // но и из подпапок ("D:\MyDocuments\Balans2019\","D:\MyDocuments\Balans2020\",...)
    // где есть файлы c расширением *.xlsx. Нужно использовать параметры (режимы):
   
ФайлАрхива.Добавить("D:\MyDocuments\*.xlsx",
   
РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
   
РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);

   
// Записываем созданный архив на диск компьютера
   
ФайлАрхива.Записать();

КонецПроцедуры
Распаковываем Zip архив в 1С 8.3:
&НаКлиенте
Процедура РаспаковываемZipАрхив()

   
// Распаковываем Doc31032020.zip в папку "D:\AvtoArhiv\"
   
ФайлАрхива = Новый ЧтениеZipФайла("D:\AvtoArhiv\Doc31032020.zip",""); // путь, пароль к архиву

    // Сообщим комментарий к архиву
   
Сообщить(ФайлАрхива.Комментарий);

   
РежимВосстПутейФайлов=РежимВосстановленияПутейФайловZIP.Восстанавливать;
   
// Распаковываем все файлы в D:\MyDocuments\Out
   
ФайлАрхива.ИзвлечьВсе("D:\MyDocuments\Out", РежимВосстПутейФайлов); // (путь, восстанавливать каталоги)

    // Или распаковываем файлы по одиночке.
   
Для Каждого Элемент Из ФайлАрхива.Элементы Цикл

       
Сообщить("... разархивирую..."+Элемент.ПолноеИмя);
       
//(Элемент, Путь, ВосстанавливатьКаталоги, Пароль)
       
ФайлАрхива.Извлечь(Элемент,"D:\MyDocuments\Out", РежимВосстПутейФайлов,"");

    КонецЦикла;

КонецПроцедуры
Пример готовой функции по распаковке Zip в 1С 8.3:
// Распаковывает все ZIP-архивы в указанном каталоге
// Каждый файл в архиве получает уникальное имя в формате: ИмяБезРасширения_UID.Расширение
//
// Параметры:
//   КаталогАрхивов - Строка - Путь к каталогу с ZIP-архивами
Процедура РаспаковатьZIPАрхивы(КаталогАрхивов)
   ФайлыАрхивов = НайтиФайлы(КаталогАрхивов, "*.zip");
   Для Каждого ФайлАрхива Из ФайлыАрхивов Цикл
       Попытка
           ЧтениеАрхива = Новый ЧтениеZipФайла(ФайлАрхива.ПолноеИмя);
       Исключение
           Сообщить("Не удалось открыть архив: """ + ФайлАрхива.Имя + """", СтатусСообщения.Важное);
           Продолжить;
       КонецПопытки;

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

           // Формируем уникальное имя для распакованного файла
           ИсходноеИмяФайла = КаталогАрхивов + "\" + УбратьНедопустимыеСимволыВИмени(ЭлементАрхива.Имя);
           УникальноеИмяФайла = КаталогАрхивов + "\" + УбратьНедопустимыеСимволыВИмени(ЭлементАрхива.ИмяБезРасширения)
          + "_" + Строка(Новый УникальныйИдентификатор()) + "." + ЭлементАрхива.Расширение;

           Файл = Новый Файл(ИсходноеИмяФайла);
           Файл.УстановитьТолькоЧтение(Ложь); // Снимаем атрибут "только чтение"

           Попытка
               ПереместитьФайл(ИсходноеИмяФайла, УникальноеИмяФайла);
               Сообщить("Переименование файла: " + ИсходноеИмяФайла + " -> "+ УникальноеИмяФайла);
           Исключение
               Сообщить("Ошибка при переименовании файла: " + ИсходноеИмяФайла, СтатусСообщения.Ошибка);
           КонецПопытки;
       КонецЦикла;

       ЧтениеАрхива.Закрыть();

       Попытка
           УдалитьФайл(ФайлАрхива.ПолноеИмя); // Удаляем архив после распаковки
       Исключение
           Сообщить("Не удалось удалить архив: " + ФайлАрхива.ПолноеИмя, СтатусСообщения.Ошибка);
       КонецПопытки;
   КонецЦикла;
КонецПроцедуры

// Заменяет недопустимые символы в имени файла
//
// Параметры:
//   ИмяФайла - Строка - Исходное имя файла
//
// Возвращаемое значение:
//   Строка - Имя файла с замененными недопустимыми символами
Функция УбратьНедопустимыеСимволыВИмени(Знач ИмяФайла)
   ИмяФайла = СтрЗаменить(ИмяФайла, """", "_");
   Возврат ИмяФайла;
КонецФункции
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #ZIP:
📰 Актуальные новости с тегом #Zip:
  • В версии 8.3.27 реализована поддержка приложениями Autorun и SetupV8 поставки конфигурации в формате zip.
  • В версии 8.3.21 реализована возможность выгрузки конфигурации в zip-архив xml-файлов. При выгрузке на стороне кластера серверов реализована возможность многопоточной выгрузки конфигурации.Команда Конфигуратора Выгрузить конфигурацию в файлы позволяет указать способ выгрузки (на сервере/на клиенте), количество одновременных потоков выгрузки и необходимость архивировать файл выгрузки. Для выполнения данной задачи реализован специальный параметр для следующих инструментов загрузки:
        1. Командная строка запуска конфигуратора. Для команды /DumpConfigToFiles реализован параметр -Server, -Archive, -JobsCount.
        2. Конфигуратор в режиме агента. Для команды config dump-config-to-files реализованы параметры --archive, --server, --threads.
        3. Утилита управления автономным сервером (ibcmd). Для команды infobase config export реализованы параметры --archive, --server, --threads.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 31.03.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому