Внешний архиватор 7 zip
При работе с архивами Виртуальный склад предусматривает несколько вариантов разархивирования. По умолчанию способ разархивирования - средствами платформы 1С:Предприятие, но платформа 1С:Предприятия умеет работать не со всеми архивами.
Для работы с теми архивами, которые не читаются средствами платформы 1С:Предприятие предусмотрена работа с внешним архиватором 7-zip. Для работы с ним необходимо:
установить внешний архиватор (https://www.7-zip.org/) на сервере, где запущена служба сервера 1С:Предприятие
добавить путь к папке, где находится архиватор, в переменную среды PATH
предоставить права для пользователя, под которым работает служба сервера 1С:Предприятие
выбрать соответствующий вариант разархивирования файла в настройке загрузки
Проверить доступность можно с помощью обработки в 1С (ссылка на обработку ниже), которая выполняет следующий код
Процедура Проверить(Команда)
ПроверитьАрхиватор();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьАрхиватор()
Попытка
ЗапуститьПриложение("7z.exe");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Архиватор доступен");
Исключение
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
КонецПопытки;
КонецПроцедуры
Виртуальный склад при работе с внешним архиватором выполняет следующий код
Функция РаспаковатьФайлВнешнимАрхиватором(Знач Файл, Знач ИмяКаталога) Экспорт
ИмяКаталогаАрхива = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяКаталога + "zip");
СтруктураВозврата = ВиртуальныйСкладОбщий.ИнициализироватьСтруктуруВозвратаФункции(ИмяКаталогаАрхива);
Попытка
// арихватор должен быть установлен и прописан в path
// https://www.7-zip.org/
ИмяИсполняемогоФайла = "7z.exe";
//сформируем команду
ПараметрыЗапуска = " e"; //e - extract (Распаковка)
//путь к архиву
ПараметрыЗапуска = ПараметрыЗапуска + " """ + Файл.ПолноеИмя + """";
//путь к папке распаковки
ПараметрыЗапуска = ПараметрыЗапуска + " -o""" + ИмяКаталогаАрхива + """";
//рекурсивный обход архива
ПараметрыЗапуска = ПараметрыЗапуска + " -r";
//отвечать на все вопросы yes
ПараметрыЗапуска = ПараметрыЗапуска + " -y";
// ждем завершения, иначе файлы потом не удалятся
Ошибки = 0;
ЗапуститьПриложение(ИмяИсполняемогоФайла + ПараметрыЗапуска, , Истина, Ошибки);
Если Ошибки <> 0 Тогда
ОписаниеОшибки = "Не удалось распаковать файл: " + Файл.ПолноеИмя;
СтруктураВозврата.ЕстьОшибка = Истина;
СтруктураВозврата.ОписаниеОшибки = ОписаниеОшибки;
КонецЕсли;
Исключение
ОписаниеОшибки = "Не удалось распаковать файл: " + Файл.ПолноеИмя + " по причине: " + Символы.ПС + ОписаниеОшибки();
СтруктураВозврата.ЕстьОшибка = Истина;
СтруктураВозврата.ОписаниеОшибки = ОписаниеОшибки;
ВиртуальныйСкладОбщий.ЗаписатьДанныеВЛог(ОписаниеОшибки, , , Истина);
КонецПопытки;
Возврат СтруктураВозврата;
КонецФункции
Last updated