При автоматизации обмена данными или подготовки отчетов часто возникает необходимость упаковать созданный файл в архив. Встроенные средства платформы 1С поддерживают работу с форматом ZIP (объект ЗаписьZipФайла), однако для формата RAR штатные механизмы отсутствуют. В этой статье мы разберем, как правильно заархивировать текстовый документ в формат RAR непосредственно из кода 1С, а также рассмотрим частые ошибки, которые возникают у разработчиков при решении этой задачи.
Попробуем сначала проанализировать типичную ошибку. Иногда разработчики пытаются указать расширение .rar при создании объекта ЗаписьZipФайла:
// Ошибка: этот код НЕ создает настоящий RAR-архив
Zip = Новый ЗаписьZipФайла(Каталог + "\Архив.rar");
Zip.Добавить(Каталог + "\Документ.txt");
Zip.Записать();
Выясним причину, почему такой подход некорректен. Объект ЗаписьZipФайла формирует заголовок и структуру файла по спецификации ZIP. Изменение расширения на .rar меняет только имя файла в операционной системе, но не меняет внутреннюю структуру архива. Программа WinRAR или иной архиватор сможет открыть такой файл, так как умеет автоматически определять формат по заголовкам внутри файла, но внешние сторонние системы или сервисы проверки форматов выдадут ошибку о повреждении или неверном формате архива.
Для создания полноценного RAR-архива необходимо привлекать внешнюю консольную утилиту, такую как rar.exe или winrar.exe.
Рассмотрим основной и наиболее рекомендуемый способ — запуск внешней консольной утилиты с помощью системной функции ЗапуститьПриложение. Этот метод запускает процесс напрямую, не вызывая лишних окон командного интерпретатора.
Для создания архива нам понадобятся основные параметры командной строки WinRAR:
a — добавить файлы в архив.rar.exe или winrar.exe).Разберем пример кода с использованием метода ЗапуститьПриложение:
Процедура ЗаархивироватьВRAR()
КаталогОбода = "D:\Work\";
ИмяФайлаИсточника = КаталогОбода + "Документ.txt";
ИмяФайлаАрхива = КаталогОбода + "Архив.rar";
// Путь к архиватору берем в кавычки на случай наличия пробелов в пути
ПутьКАрхиватору = """C:\Program Files\WinRAR\rar.exe""";
// Формируем командную строку с кавычками вокруг путей
КоманднаяСтрока = ПутьКАрхиватору + " a """ + ИмяФайлаАрхива + """ """ + ИмяФайлаИсточника + """";
// Переменные для получения результатов выполнения
КодВозврата = 0;
ДождатьсяЗавершения = Истина;
ЗапуститьПриложение(КоманднаяСтрока, , ДождатьсяЗавершения, КодВозврата);
Если КодВозврата = 0 Тогда
Сообщить("Архив успешно создан!");
Иначе
Сообщить("Ошибка при архивации. Код возврата: " + Строка(КодВозврата));
КонецЕсли;
КонецПроцедуры
Посмотрим на важные детали в данном примере:
Экранирование кавычек: Пути к файлам и архиватору всегда необходимо оборачивать в двойные кавычки (""" в языке 1С), чтобы исключить ошибки, если в путях содержатся пробелы (например, Program Files).
Ожидание завершения: Параметр ДождатьсяЗавершения = Истина приостанавливает выполнение кода 1С до тех пор, пока архиватор не закончит работу. Это позволяет сразу проверить код возврата и убедиться, что архив сформирован перед его дальнейшей отправкой или обработкой.
Проанализируем альтернативный вариант вызова командной строки с использованием метода КомандаСистемы. Этот способ передает команду операционной системе через стандартный командный интерпретатор cmd.exe.
Процедура ЗаархивироватьЧерезКомандуСистемы()
ИмяАрхива = "D:\1\123.rar";
ИмяФайла = "D:\1\123.txt";
Команда = """C:\Program Files\WinRAR\rar.exe"" a """ + ИмяАрхива + """ """ + ИмяФайла + """";
КомандаСистемы(Команда);
КонецПроцедуры
Обратим внимание, что метод КомандаСистемы кратковременно открывает черное окно консоли. Поэтому для фоновых задач, работы на сервере или работы в тонком клиенте предпочтительнее использовать метод ЗапуститьПриложение.
Для тонкой настройки процесса упаковывания можно добавлять в командную строку специальные ключи утилиты rar.exe или winrar.exe:
-ep — исключить пути из имен файлов (файл будет сохранен в корне архива без вложенных папок).-inul — отключить вывод сообщений об ошибках (полезно при фоновом выполнении).-ibck — запуск процесса WinRAR в фоновом режиме в системном трее.-hp[пароль] — установить шифрование данных и заголовков архива паролем.Рассмотрим пример создания архива с исключением исходных путей к файлу:
Архиватор = """C:\Program Files\WinRAR\WinRAR.exe""";
ФайлАрхива = """D:\Data\Archive.rar""";
ИсходныеФайлы = """D:\Data\Reports\*.txt""";
// Ключ -ep позволит сохранить файлы в корень архива без папки Reports
ЗапускСтрока = Архиватор + " a -ep " + ФайлАрхива + " " + ИсходныеФайлы;
ЗапуститьПриложение(ЗапускСтрока, , Истина);
Для создания полноценных RAR-архивов из 1С нельзя ограничиться встроенными функциями ZIP-сжатия с изменением расширения. Единственным правильным решением является программный запуск консольного архиватора rar.exe с помощью метода ЗапуститьПриложение с контролем кода завершения операции.