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