Внешний архиватор 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 Тогда ОписаниеОшибки = "Не удалось распаковать файл: " + Файл.ПолноеИмя; СтруктураВозврата.ЕстьОшибка = Истина; СтруктураВозврата.ОписаниеОшибки = ОписаниеОшибки; КонецЕсли; Исключение ОписаниеОшибки = "Не удалось распаковать файл: " + Файл.ПолноеИмя + " по причине: " + Символы.ПС + ОписаниеОшибки(); СтруктураВозврата.ЕстьОшибка = Истина; СтруктураВозврата.ОписаниеОшибки = ОписаниеОшибки; ВиртуальныйСкладОбщий.ЗаписатьДанныеВЛог(ОписаниеОшибки, , , Истина); КонецПопытки; Возврат СтруктураВозврата; КонецФункции