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