#Область ОписаниеПеременных
&НаКлиенте
Перем ОбновитьИнтерфейс;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МаксимальныйРазмерФайла = РаботаСФайлами.МаксимальныйРазмерФайлаОбщий() / (1024*1024);
МассивИменМетаданных = Новый Массив();
МассивИменМетаданных.Добавить("РегистрСведений.УдалитьДвоичныеДанныеФайлов");
РазмерТаблицыУдалитьДвоичныеДанныеФайлов =
ПолучитьРазмерДанныхБазыДанных(Неопределено, МассивИменМетаданных) / (1024*1024);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если Не ЗавершениеРаботы Тогда
ОбновитьИнтерфейсПрограммы();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура МаксимальныйРазмерФайлаПриИзменении(Элемент)
Если МаксимальныйРазмерФайла = 0 Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Максимальный размер файла"" не заполнено.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, ,"МаксимальныйРазмерФайла");
Возврат;
КонецЕсли;
Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура СписокЗапрещенныхРасширенийПриИзменении(Элемент)
Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура СписокРасширенийФайловOpenDocumentПриИзменении(Элемент)
Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Асинх Процедура ВыполнитьДедупликацию(Команда)
ЗаголовокВопроса = НСтр("ru = 'Дедупликация файлов'");
ТекстВопроса = НСтр("ru = 'Дедупликация файлов позволяет экономить до 30% места в информационной базе за счет устранения дублей файлов, хранящихся в приложении (вариант хранения ""В информационной базе""). Дедупликация имеющихся файлов занимает от нескольких минут до нескольких часов в зависимости от объема файлов в приложении. В любой момент ее можно будет прервать и возобновить позднее в более подходящий момент времени. При этом все вновь добавляемые файлы уже автоматически сохраняются в приложении только в одном экземпляре.
|
|Во время дедупликации файлов размер информационной базы может существенно вырасти. Поэтому перед запуском рекомендуется:
|• убедиться, что имеется достаточно свободного места на устройстве, где размещается информационная база (требуется не менее %1 Мб);
|• сделать резервную копию информационной базы.
|
|После завершения выполнить сжатие информационной базы, чтобы дедупликация файлов вступила в силу.
|
|Создать задания для дедупликации файлов в каждой области ?'");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, Формат(РазмерТаблицыУдалитьДвоичныеДанныеФайлов, "ЧДЦ=2;"));
Ответ = Ждать ВопросАсинх(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, ЗаголовокВопроса);
Если Ответ = КодВозвратаДиалога.Да Тогда
ВыполнитьДедупликациюНаСервере();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура Подключаемый_ПриИзмененииРеквизита(Элемент, ОбновлятьИнтерфейс = Истина)
КонстантаИмя = ПриИзмененииРеквизитаСервер(Элемент.Имя);
ОбновитьПовторноИспользуемыеЗначения();
ПослеИзмененияРеквизита(КонстантаИмя, ОбновлятьИнтерфейс);
КонецПроцедуры
&НаКлиенте
Процедура ПослеИзмененияРеквизита(КонстантаИмя, ОбновлятьИнтерфейс = Истина)
Если ОбновлятьИнтерфейс Тогда
ОбновитьИнтерфейс = Истина;
ПодключитьОбработчикОжидания("ОбновитьИнтерфейсПрограммы", 2, Истина);
КонецЕсли;
Если КонстантаИмя <> "" Тогда
Оповестить("Запись_НаборКонстант", Новый Структура, КонстантаИмя);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИнтерфейсПрограммы()
Если ОбновитьИнтерфейс = Истина Тогда
ОбновитьИнтерфейс = Ложь;
ОбщегоНазначенияКлиент.ОбновитьИнтерфейсПрограммы();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента)
РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным;
КонстантаИмя = СохранитьЗначениеРеквизита(РеквизитПутьКДанным);
ОбновитьПовторноИспользуемыеЗначения();
Возврат КонстантаИмя;
КонецФункции
&НаСервере
Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным)
ЧастиИмени = СтрРазделить(РеквизитПутьКДанным, ".");
Если ЧастиИмени.Количество() <> 2 Тогда
Если РеквизитПутьКДанным = "МаксимальныйРазмерФайла" Тогда
НаборКонстант.МаксимальныйРазмерФайла = МаксимальныйРазмерФайла * (1024*1024);
КонстантаИмя = "МаксимальныйРазмерФайла";
КонецЕсли;
Иначе
КонстантаИмя = ЧастиИмени[1];
КонецЕсли;
Если ПустаяСтрока(КонстантаИмя) Тогда
Возврат "";
КонецЕсли;
КонстантаМенеджер = Константы[КонстантаИмя];
КонстантаЗначение = НаборКонстант[КонстантаИмя];
Если КонстантаМенеджер.Получить() <> КонстантаЗначение Тогда
КонстантаМенеджер.Установить(КонстантаЗначение);
КонецЕсли;
Возврат КонстантаИмя;
КонецФункции
&НаСервереБезКонтекста
Процедура ВыполнитьДедупликациюНаСервере()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.РаботаСФайламиВМоделиСервиса") Тогда
МодульРаботаСФайламиСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебныйВМоделиСервиса");
МодульРаботаСФайламиСлужебныйВМоделиСервиса.ВыполнитьДедупликацию();
КонецЕсли;
КонецПроцедуры
#КонецОбласти