В работе часто приходится сжимать выгруженные данные в zip архив, отправлять по почте, и потом автоматически разархивировать полученный zip файл:
// Распаковывает файл архива ZIP в указанный каталог; Извлекает все файлы архива // // Параметры: // ПолноеИмяФайлаАрхива - Строка - имя файла архива, который необходимо распаковать // ПутьРаспаковкиФайлов - Строка - путь по которому необходимо распаковать файлы // ПарольАрхива - Строка - пароль для распаковки архива. По умолчанию пустая строка // // Возвращаемое значение: // Результат - Булево - Истина, если успешно, Ложь, если нет. // Функция РаспаковатьZipФайл(Знач ПолноеИмяФайлаАрхива, Знач ПутьРаспаковкиФайлов, Знач ПарольАрхива = "") Экспорт // возвращаемое значение функции Результат = Истина; Попытка Архиватор = Новый ЧтениеZipФайла(ПолноеИмяФайлаАрхива, ПарольАрхива); Исключение Архиватор = Неопределено; СообщитьОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Ложь; КонецПопытки; Попытка Архиватор.ИзвлечьВсе(ПутьРаспаковкиФайлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать); Исключение СтрокаСообщения = НСтр("ru = 'Ошибка при распаковке файлов архива: %1 в каталог: %2'"); СтрокаСообщения = ПодставитьПараметрыВСтроку(СтрокаСообщения, ПолноеИмяФайлаАрхива, ПутьРаспаковкиФайлов); Сообщить(СтрокаСообщения); Результат = Ложь; КонецПопытки; Архиватор.Закрыть(); Архиватор = Неопределено; Возврат Результат; КонецФункции // Запаковывает указанный каталог в файл архива ZIP // // Параметры: // ПолноеИмяФайлаАрхива - Строка - имя файла архива, в который необходимо запаковать // МаскаУпаковкиФайлов - Строка - имя файла, помещаемого в архив, или маска. // Недопустимо использование в именах файлов и папок букв национальных алфавитов, которые при // преобразовании из символов UNICODE в узкие символы могут быть преобразованы с потерей информации. // Рекомендуется использовать в именах файлов и папок символы латинского алфавита. // ПарольАрхива - Строка - пароль для архива. По умолчанию пустая строка // // Возвращаемое значение: // Результат - Булево - Истина, если успешно, Ложь, если нет. // Функция ЗапаковатьВZipФайл(Знач ПолноеИмяФайлаАрхива, Знач МаскаУпаковкиФайлов, Знач ПарольАрхива = "") Экспорт // возвращаемое значение функции Результат = Истина; Попытка Архиватор = Новый ЗаписьZipФайла(ПолноеИмяФайлаАрхива, ПарольАрхива); Исключение Архиватор = Неопределено; СообщитьОбОшибке(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Ложь; КонецПопытки; Попытка Архиватор.Добавить(МаскаУпаковкиФайлов, РежимСохраненияПутейZIP.НеСохранятьПути); Архиватор.Записать(); Исключение СтрокаСообщения = НСтр("ru = 'Ошибка при запаковке файлов архива: %1 из каталог: %2'"); СтрокаСообщения = ПодставитьПараметрыВСтроку(СтрокаСообщения, ПолноеИмяФайлаАрхива, МаскаУпаковкиФайлов); Сообщить(СтрокаСообщения); Результат = Ложь; КонецПопытки; Архиватор = Неопределено; Возврат Результат; КонецФункции
В примере используется строковая функция ПодставитьПараметрыВСтроку():
// Подставляет параметры в строку. Максимально возможное число параметров - 9. // Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. // // Параметры: // СтрокаПодстановки – Строка – шаблон строки с параметрами (вхождениями вида "%ИмяПараметра"); // Параметр<n> - Строка - подставляемый параметр. // // Возвращаемое значение: // Строка – текстовая строка с подставленными параметрами. // // Пример: // ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". // Функция ПодставитьПараметрыВСтроку(Знач СтрокаПодстановки, Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено, Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено, Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт Если СтрокаПодстановки = Неопределено ИЛИ СтрДлина(СтрокаПодстановки) = 0 Тогда Возврат ""; КонецЕсли; Результат = ""; НачПозиция = 1; Позиция = 1; Пока Позиция <= СтрДлина(СтрокаПодстановки) Цикл СимволСтроки = Сред(СтрокаПодстановки, Позиция, 1); Если СимволСтроки <> "%" Тогда Позиция = Позиция + 1; Продолжить; КонецЕсли; Результат = Результат + Сред(СтрокаПодстановки, НачПозиция, Позиция - НачПозиция); Позиция = Позиция + 1; СимволСтроки = Сред(СтрокаПодстановки, Позиция, 1); Если СимволСтроки = "%" Тогда Позиция = Позиция + 1; НачПозиция = Позиция; Результат = Результат + "%"; Продолжить; КонецЕсли; Попытка НомерПараметра = Число(СимволСтроки); Исключение ВызватьИсключение НСтр("ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + СимволСтроки); КонецПопытки; Если СимволСтроки = "1" Тогда ЗначениеПараметра = Параметр1; ИначеЕсли СимволСтроки = "2" Тогда ЗначениеПараметра = Параметр2; ИначеЕсли СимволСтроки = "3" Тогда ЗначениеПараметра = Параметр3; ИначеЕсли СимволСтроки = "4" Тогда ЗначениеПараметра = Параметр4; ИначеЕсли СимволСтроки = "5" Тогда ЗначениеПараметра = Параметр5; ИначеЕсли СимволСтроки = "6" Тогда ЗначениеПараметра = Параметр6; ИначеЕсли СимволСтроки = "7" Тогда ЗначениеПараметра = Параметр7; ИначеЕсли СимволСтроки = "8" Тогда ЗначениеПараметра = Параметр8; ИначеЕсли СимволСтроки = "9" Тогда ЗначениеПараметра = Параметр9; Иначе ВызватьИсключение НСтр("ru='Входная строка СтрокаПодстановки имеет неверный формат: %'" + ЗначениеПараметра); КонецЕсли; Если ЗначениеПараметра = Неопределено Тогда ЗначениеПараметра = ""; Иначе ЗначениеПараметра = Строка(ЗначениеПараметра); КонецЕсли; Результат = Результат + ЗначениеПараметра; Позиция = Позиция + 1; НачПозиция = Позиция; КонецЦикла; Если (НачПозиция <= СтрДлина(СтрокаПодстановки)) Тогда Результат = Результат + Сред(СтрокаПодстановки, НачПозиция, СтрДлина(СтрокаПодстановки) - НачПозиция + 1); КонецЕсли; Возврат Результат; КонецФункции
// Пропорционально сжимает ширины колонок табличного поля. // // Параметры: // ТабличноеПоле – ТабличноеПоле; // Сжатие – Число, *2 – коэффициент сжатия; // УважатьЗапретИзмененияРазмера – Булево, *Истина – не сжимать колонки с запретом изменения размера; // Процедура СжатьКолонкиТабличногоПоля(ТабличноеПоле, Сжатие = 2, УважатьЗапретИзмененияРазмера = Истина) Экспорт МассивКолонокДляОбработки = Новый Массив; Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл Ширина = Колонка.Ширина; Если Ширина = 0 Тогда // Антибаг платформы. Ширина = 10; КонецЕсли; Если Ложь Или Не УважатьЗапретИзмененияРазмера Или Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять Тогда НоваяШирина = Ширина / Сжатие; НоваяШирина = Макс(НоваяШирина, 1); Колонка.Ширина = НоваяШирина; КонецЕсли; КонецЦикла; КонецПроцедуры