mirror of
https://github.com/firstBitSportivnaya/PSSL.git
synced 2024-11-21 17:56:47 +02:00
refactoring the creation of hierarchical elements (#129)
* рефакторинг создания иерархических предопределенных элементов
This commit is contained in:
parent
a7cc94cf93
commit
1cc3e8255a
@ -74,7 +74,7 @@
|
||||
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
|
||||
|
||||
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
|
||||
Описание.Версия = "1.0.3.9";
|
||||
Описание.Версия = "1.0.3.10";
|
||||
|
||||
// Требуется библиотека стандартных подсистем.
|
||||
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
|
||||
|
@ -69,6 +69,76 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Подготавливает параметры необходимые для обработки предопределенных элементов
|
||||
//
|
||||
// Параметры:
|
||||
// Таблица - ТаблицаЗначений - см. пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных.
|
||||
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные Менеджера объекта
|
||||
// * Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
|
||||
// * ПолноеИмя - Строка - Полное имя объекта метаданных.
|
||||
//
|
||||
Функция ДопПараметрыОбработкиПредопределенныхЭлементов(Таблица, МенеджерОбъекта) Экспорт
|
||||
|
||||
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта));
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("Менеджер", МенеджерОбъекта);
|
||||
Параметры.Вставить("ПолноеИмя", ОбъектМетаданных.ПолноеИмя());
|
||||
Параметры.Вставить("Иерархический", ОбъектМетаданных.Иерархический);
|
||||
|
||||
ИерархияГруппИЭлементов = ОбъектМетаданных.Иерархический;
|
||||
Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда
|
||||
ИерархияГруппИЭлементов =
|
||||
ОбъектМетаданных.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов;
|
||||
КонецЕсли;
|
||||
Параметры.Вставить("ИерархияГруппИЭлементов", ИерархияГруппИЭлементов);
|
||||
|
||||
мКолонки = Новый Массив;
|
||||
Для Каждого Колонка Из Таблица.Колонки Цикл
|
||||
мКолонки.Добавить(Колонка.Имя);
|
||||
КонецЦикла;
|
||||
|
||||
Параметры.Вставить("КлючиХешаЭлемент", КлючиХешаПредопределенногоЭлемента(мКолонки, Ложь));
|
||||
Параметры.Вставить("КлючиХешаГруппа", КлючиХешаПредопределенногоЭлемента(мКолонки, Истина));
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает ключи хеша на основании массива полей элемента
|
||||
//
|
||||
// Параметры:
|
||||
// Поля - Массив - Поля для формирования ключей хеша
|
||||
// ЭтоГруппа - Булево - От этого признака зависят исключаемые поля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Ключи хеша
|
||||
//
|
||||
Функция КлючиХешаПредопределенногоЭлемента(Поля, ЭтоГруппа = Ложь) Экспорт
|
||||
|
||||
мКлючи = Новый Массив;
|
||||
|
||||
Если ЭтоГруппа Тогда
|
||||
ИсключаемыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.ИсключаемыеПоляДляРасчетаХешаГруппа();
|
||||
Иначе
|
||||
ИсключаемыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.ИсключаемыеПоляДляРасчетаХешаЭлемент();
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Поле Из Поля Цикл
|
||||
Если ИсключаемыеПоля.Свойство(Поле)
|
||||
Или СтрНачинаетсяС(Поле, "Служеб_") Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
мКлючи.Добавить(Поле);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура(СтрСоединить(мКлючи, ","));
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получает все предопределенные элементы объекта, помечает на удаление те, которые удалены из кода.
|
||||
// При установке пометки удаления для групп, также устанавливается для всех подчиенных элементов.
|
||||
//
|
||||
@ -113,6 +183,63 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Заполняет существующих родителей предопределенных элементов
|
||||
//
|
||||
// Параметры:
|
||||
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
|
||||
// ДополнительныеПараметры - Структура - см.пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов
|
||||
//
|
||||
Процедура ЗаполнитьРодителейЭлементов(ТаблицаПредопределенных, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Идентификаторы = ТаблицаПредопределенных.ВыгрузитьКолонку("ИдентификаторРодитель");
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
|
||||
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
|
||||
|ИЗ
|
||||
| %1 КАК пбп_ПредопределенныеЗначения
|
||||
|ГДЕ
|
||||
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки В(&ИдентификаторыРодитель)";
|
||||
|
||||
Запрос.Текст = СтрШаблон(Запрос.Текст, ДополнительныеПараметры.ПолноеИмя);
|
||||
|
||||
Запрос.УстановитьПараметр("ИдентификаторыРодитель", Идентификаторы);
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||
|
||||
Для Каждого Строка Из ТаблицаПредопределенных Цикл
|
||||
ВыборкаДетальныеЗаписи.Сбросить();
|
||||
Если ВыборкаДетальныеЗаписи.НайтиСледующий(Строка.ИдентификаторРодитель, "ИдентификаторНастройки") Тогда
|
||||
Строка.Родитель = ВыборкаДетальныеЗаписи.Ссылка;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Заполняет хеш предопределенных элементов
|
||||
//
|
||||
// Параметры:
|
||||
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
|
||||
// ДополнительныеПараметры - Структура - см.пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов
|
||||
//
|
||||
Процедура ЗаполнитьКонтрольныеСуммыТаблицы(ТаблицаПредопределенных, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Строка Из ТаблицаПредопределенных Цикл
|
||||
КлючиХеша = ?(Строка.ЭтоГруппа, ДополнительныеПараметры.КлючиХешаГруппа, ДополнительныеПараметры.КлючиХешаЭлемент);
|
||||
ЗаполнитьЗначенияСвойств(КлючиХеша, Строка);
|
||||
Строка.ХешСумма = пбп_ОбщегоНазначенияСлужебный.КонтрольнаяСуммаСтрокой(КлючиХеша, ХешФункция.MD5);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// После удаления уже существующих элементов, остаются только актуальные значения
|
||||
// для создания предопределенных элементов.
|
||||
//
|
||||
@ -194,130 +321,27 @@
|
||||
|
||||
ПолноеИмяОбъекта = ИмяОбъектаМетаданных(ПолноеИмяОбъекта);
|
||||
|
||||
Группы = Новый Соответствие;
|
||||
КолонкаСуществует = ТаблицаПредопределенных.Колонки.Найти("ЭтоГруппа") <> Неопределено;
|
||||
|
||||
Если КолонкаСуществует Тогда
|
||||
|
||||
// Сначала создаются группы, затем элементы
|
||||
ТаблицаПредопределенных.Сортировать("ЭтоГруппа УБЫВ, УровеньИерархии");
|
||||
|
||||
ТекстЗапроса =
|
||||
"ВЫБРАТЬ
|
||||
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
|
||||
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
|
||||
|ИЗ
|
||||
| %1 КАК пбп_ПредопределенныеЗначения
|
||||
|ГДЕ
|
||||
| пбп_ПредопределенныеЗначения.ЭтоГруппа";
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст = СтрШаблон(ТекстЗапроса, ПолноеИмяОбъекта);
|
||||
|
||||
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
|
||||
|
||||
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
|
||||
Группы.Вставить(ВыборкаДетальныеЗаписи.ИдентификаторНастройки, ВыборкаДетальныеЗаписи.Ссылка);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Родители = Новый Соответствие;
|
||||
Для Каждого СтрокаТаблицы Из ТаблицаПредопределенных Цикл
|
||||
ЭтоГруппа = КолонкаСуществует И СтрокаТаблицы.ЭтоГруппа;
|
||||
СтрокаТаблицы.Служеб_Иерархический = ДополнительныеПараметры.Иерархический;
|
||||
СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
|
||||
|
||||
ЭтоГруппа = СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа;
|
||||
КлючиХеша = ?(ЭтоГруппа, ДополнительныеПараметры.КлючиХешаГруппа, ДополнительныеПараметры.КлючиХешаЭлемент);
|
||||
|
||||
Если СтрокаТаблицы.Служеб_ОбновитьЭлемент Тогда
|
||||
ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Группы, КолонкаСуществует);
|
||||
ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
|
||||
ИначеЕсли СтрокаТаблицы.Служеб_УстановитьФлагРучноеИзменение Тогда
|
||||
УстановитьФлагРучноеИзменение(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент);
|
||||
ИначеЕсли СтрокаТаблицы.Служеб_СоздатьЗаписьРегистра Тогда
|
||||
СоздатьЗаписьСостоянияПредопределенногоЭлемента(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент, ЭтоГруппа, КлючиХеша);
|
||||
Иначе
|
||||
СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Группы, КолонкаСуществует);
|
||||
СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Подготавливает параметры необходимые для обработки предопределенных элементов
|
||||
//
|
||||
// Параметры:
|
||||
// Таблица - ТаблицаЗначений - см. пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных.
|
||||
// МенеджерОбъекта - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Данные Менеджера объекта
|
||||
// * Менеджер - СправочникМенеджер, ПланВидовХарактеристикМенеджер - менеджер объекта.
|
||||
// * ПолноеИмя - Строка - Полное имя объекта метаданных.
|
||||
//
|
||||
Функция ДопПараметрыОбработкиПредопределенныхЭлементов(Таблица, МенеджерОбъекта) Экспорт
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("Менеджер", МенеджерОбъекта);
|
||||
Параметры.Вставить("ПолноеИмя", Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта)).ПолноеИмя());
|
||||
|
||||
мКолонки = Новый Массив;
|
||||
Для Каждого Колонка Из Таблица.Колонки Цикл
|
||||
мКолонки.Добавить(Колонка.Имя);
|
||||
КонецЦикла;
|
||||
|
||||
Параметры.Вставить("КлючиХешаЭлемент", КлючиХешаПредопределенногоЭлемента(мКолонки, Ложь));
|
||||
Параметры.Вставить("КлючиХешаГруппа", КлючиХешаПредопределенногоЭлемента(мКолонки, Истина));
|
||||
|
||||
Возврат Параметры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Заполняет хеш предопределенных элементов
|
||||
//
|
||||
// Параметры:
|
||||
// ТаблицаПредопределенных - ТаблицаЗначений - см.пбп_ПредопределенныеЗначенияПереопределяемый.ТаблицаПредопределенных
|
||||
// ДополнительныеПараметры - Структура - см.пбп_ПредопределенныеЗначения.ДопПараметрыОбработкиПредопределенныхЭлементов
|
||||
//
|
||||
Процедура ЗаполнитьКонтрольныеСуммыТаблицы(ТаблицаПредопределенных, ДополнительныеПараметры) Экспорт
|
||||
|
||||
Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Строка Из ТаблицаПредопределенных Цикл
|
||||
КлючиХеша = ?(Строка.ЭтоГруппа, ДополнительныеПараметры.КлючиХешаГруппа, ДополнительныеПараметры.КлючиХешаЭлемент);
|
||||
ЗаполнитьЗначенияСвойств(КлючиХеша, Строка);
|
||||
Строка.ХешСумма = пбп_ОбщегоНазначенияСлужебный.КонтрольнаяСуммаСтрокой(КлючиХеша, ХешФункция.MD5);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Возвращает ключи хеша на основании массива полей элемента
|
||||
//
|
||||
// Параметры:
|
||||
// Поля - Массив - Поля для формирования ключей хеша
|
||||
// ЭтоГруппа - Булево - От этого признака зависят исключаемые поля
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Ключи хеша
|
||||
//
|
||||
Функция КлючиХешаПредопределенногоЭлемента(Поля, ЭтоГруппа = Ложь) Экспорт
|
||||
|
||||
мКлючи = Новый Массив;
|
||||
|
||||
Если ЭтоГруппа Тогда
|
||||
ИсключаемыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.ИсключаемыеПоляДляРасчетаХешаГруппа();
|
||||
Иначе
|
||||
ИсключаемыеПоля = пбп_ПредопределенныеЗначенияПереопределяемый.ИсключаемыеПоляДляРасчетаХешаЭлемент();
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Поле Из Поля Цикл
|
||||
Если ИсключаемыеПоля.Свойство(Поле)
|
||||
Или СтрНачинаетсяС(Поле, "Служеб_") Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
мКлючи.Добавить(Поле);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый Структура(СтрСоединить(мКлючи, ","));
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Обновляет хеш элемента в регистре, устанавливая при этом ручное изменение.
|
||||
//
|
||||
// Параметры:
|
||||
@ -347,12 +371,12 @@
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя = Ложь)
|
||||
Процедура СоздатьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители)
|
||||
|
||||
Если СтрокаТаблицы.ЭтоГруппа Тогда
|
||||
Если СтрокаТаблицы.Служеб_Иерархический И СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов И СтрокаТаблицы.ЭтоГруппа Тогда
|
||||
СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
|
||||
Иначе
|
||||
СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя);
|
||||
СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -362,7 +386,7 @@
|
||||
НоваяГруппа = МенеджерОбъекта.СоздатьГруппу();
|
||||
|
||||
ЗаполнитьЗначенияСвойств(НоваяГруппа, СтрокаТаблицы, "Наименование,ИдентификаторНастройки");
|
||||
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НоваяГруппа);
|
||||
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НоваяГруппа, Истина);
|
||||
|
||||
Если ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда
|
||||
Родитель = Группы.Получить(СтрокаТаблицы.ИдентификаторРодитель);
|
||||
@ -379,15 +403,17 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя = Ложь)
|
||||
Процедура СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители)
|
||||
|
||||
НовыйЭлемент = МенеджерОбъекта.СоздатьЭлемент();
|
||||
|
||||
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы);
|
||||
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент);
|
||||
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, , "Родитель");
|
||||
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент, СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов);
|
||||
|
||||
Если ЗаполнитьРодителя И ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда
|
||||
Родитель = Родители.Получить(СтрокаТаблицы.ИдентификаторРодитель);
|
||||
Если СтрокаТаблицы.Служеб_Иерархический И ЗначениеЗаполнено(СтрокаТаблицы.ИдентификаторРодитель) Тогда
|
||||
Родитель = ?(ЗначениеЗаполнено(СтрокаТаблицы.Родитель),
|
||||
СтрокаТаблицы.Родитель,
|
||||
Родители[СтрокаТаблицы.ИдентификаторРодитель]);
|
||||
НовыйЭлемент.Родитель = Родитель;
|
||||
КонецЕсли;
|
||||
|
||||
@ -397,9 +423,13 @@
|
||||
пбп_ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки());
|
||||
КонецПопытки;
|
||||
|
||||
Если СтрокаТаблицы.Служеб_Иерархический И Не СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов Тогда
|
||||
Родители.Вставить(СтрокаТаблицы.ИдентификаторНастройки, НовыйЭлемент.Ссылка);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители, ЗаполнитьРодителя = Ложь)
|
||||
Процедура ОбновитьЭлемент(МенеджерОбъекта, СтрокаТаблицы, КлючиХеша, Родители)
|
||||
|
||||
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служеб_ПредопределенныйЭлемент) Тогда
|
||||
Возврат;
|
||||
@ -411,26 +441,21 @@
|
||||
КонецЕсли;
|
||||
|
||||
РодительОтличается = Ложь;
|
||||
Если ЗаполнитьРодителя Тогда
|
||||
Если Не ПустаяСтрока(СтрокаТаблицы.ИдентификаторРодитель) Или ЗначениеЗаполнено(Элемент.Родитель) Тогда
|
||||
НовыйРодитель = Родители[СтрокаТаблицы.ИдентификаторРодитель];
|
||||
РодительОтличается = Элемент.Родитель <> НовыйРодитель;
|
||||
Если РодительОтличается Тогда
|
||||
Элемент.Родитель = НовыйРодитель;
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
Если СтрокаТаблицы.Служеб_Иерархический
|
||||
И (Не ПустаяСтрока(СтрокаТаблицы.ИдентификаторРодитель) Или ЗначениеЗаполнено(Элемент.Родитель)) Тогда
|
||||
НовыйРодитель = ?(ЗначениеЗаполнено(СтрокаТаблицы.Родитель),
|
||||
СтрокаТаблицы.Родитель,
|
||||
Родители[СтрокаТаблицы.ИдентификаторРодитель]);
|
||||
|
||||
Элемент.Родитель = НовыйРодитель;
|
||||
|
||||
РодительОтличается = Элемент.Родитель <> НовыйРодитель;
|
||||
КонецЕсли;
|
||||
|
||||
СписокСвойств = "";
|
||||
ИсключаяСвойства = "";
|
||||
Если Элемент.ЭтоГруппа Тогда
|
||||
СписокСвойств = "Наименование,ИдентификаторНастройки";
|
||||
Иначе
|
||||
ИсключаяСвойства = "Родитель";
|
||||
КонецЕсли;
|
||||
ЗаполнитьЗначенияСвойств(Элемент, СтрокаТаблицы, СписокСвойств, ИсключаяСвойства);
|
||||
Свойства = ЗаполняемыеИсключаемыеСвойства(СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов, Элемент.ЭтоГруппа);
|
||||
ЗаполнитьЗначенияСвойств(Элемент, СтрокаТаблицы, Свойства.СписокСвойств, Свойства.ИсключаяСвойства);
|
||||
|
||||
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент);
|
||||
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент, СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов);
|
||||
|
||||
Попытка
|
||||
ЗаписатьЭлементИСвязанныеДанные(Элемент, КлючиХеша, Истина);
|
||||
@ -444,11 +469,11 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент)
|
||||
Процедура ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, Элемент, ИерархияГруппИЭлементов = Ложь)
|
||||
|
||||
ПроверяемыйТип = ТипЗнч(МенеджерОбъекта);
|
||||
Если ПроверяемыйТип = Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения")
|
||||
И Не Элемент.ЭтоГруппа Тогда
|
||||
И Не (ИерархияГруппИЭлементов И Элемент.ЭтоГруппа) Тогда
|
||||
Элемент.Значение = Элемент.ТипЗначения.ПривестиЗначение();
|
||||
КонецЕсли;
|
||||
|
||||
@ -531,37 +556,6 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Процедура ЗаполнитьРодителейЭлементов(Таблица, Параметры)
|
||||
|
||||
Идентификаторы = Таблица.ВыгрузитьКолонку("ИдентификаторРодитель");
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
Запрос.Текст =
|
||||
"ВЫБРАТЬ
|
||||
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
|
||||
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
|
||||
|ИЗ
|
||||
| %1 КАК пбп_ПредопределенныеЗначения
|
||||
|ГДЕ
|
||||
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки В(&ИдентификаторыРодитель)";
|
||||
|
||||
Запрос.Текст = СтрШаблон(Запрос.Текст, Параметры.ПолноеИмя);
|
||||
|
||||
Запрос.УстановитьПараметр("ИдентификаторыРодитель", Идентификаторы);
|
||||
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
|
||||
|
||||
Для Каждого Строка Из Таблица Цикл
|
||||
ВыборкаДетальныеЗаписи.Сбросить();
|
||||
Если ВыборкаДетальныеЗаписи.НайтиСледующий(Строка.ИдентификаторРодитель, "ИдентификаторНастройки") Тогда
|
||||
Строка.Родитель = ВыборкаДетальныеЗаписи.Ссылка;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьЭлементИСвязанныеДанные(Элемент, КлючиХеша, Обновление = Ложь)
|
||||
|
||||
Элемент.ДополнительныеСвойства.Вставить("РучноеИзменение", Ложь);
|
||||
@ -597,4 +591,18 @@
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЗаполняемыеИсключаемыеСвойства(ИерархияГруппИЭлементов, ЭтоГруппа = Ложь)
|
||||
|
||||
Свойства = Новый Структура("СписокСвойств,ИсключаяСвойства");
|
||||
|
||||
Если ИерархияГруппИЭлементов И ЭтоГруппа Тогда
|
||||
Свойства.СписокСвойств = "Наименование,ИдентификаторНастройки";
|
||||
Иначе
|
||||
Свойства.ИсключаяСвойства = "Родитель";
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Свойства;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
@ -379,6 +379,8 @@
|
||||
Колонки.Вставить("Служеб_УстановитьФлагРучноеИзменение", ОписаниеБулево);
|
||||
Колонки.Вставить("Служеб_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
|
||||
Колонки.Вставить("Служеб_СоздатьЗаписьРегистра", ОписаниеБулево);
|
||||
Колонки.Вставить("Служеб_Иерархический", ОписаниеБулево);
|
||||
Колонки.Вставить("Служеб_ИерархияГруппИЭлементов", ОписаниеБулево);
|
||||
|
||||
Возврат Колонки;
|
||||
|
||||
|
@ -57,7 +57,7 @@
|
||||
<xr:Item xsi:type="xr:MDObjectRef">Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</xr:Item>
|
||||
</DefaultRoles>
|
||||
<Vendor>Первый БИТ</Vendor>
|
||||
<Version>1.0.3.9</Version>
|
||||
<Version>1.0.3.10</Version>
|
||||
<UpdateCatalogAddress/>
|
||||
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
||||
|
Loading…
Reference in New Issue
Block a user