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