1С: Сжимаем прикрепленные файлы
Задача: есть некий справочник, к которому прикрепляются файлы. Физически они конечно хранятся в томах, но всё равно занимают места очень порядочно. Необходимо собственно каждый файлик положить в архив, заново «перекрепить» его к элементам справочника. Оригинал соответственно удалить.
Решение:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1000
| Файлы.ВладелецФайла КАК ВладелецФайла,
| Файлы.Ссылка КАК Ссылка,
| Файлы.ПолноеНаименование КАК ПолноеНаименование,
| Файлы.ТекущаяВерсияПутьКФайлу КАК ПутьКФайлу,
| Файлы.ТекущаяВерсияТом.ПолныйПутьWindows КАК ПолныйПуть,
| Файлы.ДатаСоздания КАК ДатаСоздания
|ИЗ
| Справочник.Файлы КАК Файлы
|ГДЕ
| Файлы.ВладелецФайла ССЫЛКА Справочник.СК_ГосуслугиЛК_ВходящиеСообщения
| И Файлы.ПометкаУдаления = ЛОЖЬ
| И НЕ Файлы.ТекущаяВерсияПутьКФайлу ПОДОБНО ""%zip%""
| И Файлы.ДатаСоздания МЕЖДУ &ДатаС И &ДатаПо
|
|УПОРЯДОЧИТЬ ПО
| ДатаСоздания";
Запрос.УстановитьПараметр("ДатаС", объект.ДатаС);
Запрос.УстановитьПараметр("ДатаПо", объект.ДатаПо);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
если СтрНайти(ВыборкаДетальныеЗаписи.ПутьКФайлу,".zip")=0 тогда
НовыйАрхив = Новый ЗаписьZipФайла(
ВыборкаДетальныеЗаписи.ПолныйПуть+"tmp.zip",
"","",МетодСжатияZIP.Сжатие,УровеньСжатияZIP.Максимальный,МетодШифрованияZIP.Zip20
);
НовыйАрхив.Добавить(ВыборкаДетальныеЗаписи.ПолныйПуть+ВыборкаДетальныеЗаписи.ПутьКФайлу);
НовыйАрхив.Записать();
//возврат 0;
ДвоичныеДанные = Новый ДвоичныеДанные(ВыборкаДетальныеЗаписи.ПолныйПуть+"tmp.zip");
АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(
ВыборкаДетальныеЗаписи.ВладелецФайла,
ВыборкаДетальныеЗаписи.ПолноеНаименование+".zip",
"zip",
ТекущаяДата(),
ТекущаяДата(),
,
АдресФайлаВХранилище,АдресФайлаВХранилище,
Ложь,
,
,
Истина
);
об=ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
об.ПометкаУдаления=Истина;
об.Записать();
об.Удалить();
УдалитьФайлы(ВыборкаДетальныеЗаписи.ПолныйПуть+ВыборкаДетальныеЗаписи.ПутьКФайлу);
конецесли;
КонецЦикла;
Т.е. что тут делаем: выбираем элемент справочника с прикрепленным файлом, сжимаем его в архив zip, прикрепляем его и удаляем оригинал.


