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