Внешний архиватор 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