From 1cc3e8255aef58d94dc8205662453ca4e1ec674c Mon Sep 17 00:00:00 2001
From: Denis Ushakov <59319861+denisushakov@users.noreply.github.com>
Date: Tue, 22 Oct 2024 17:17:32 +0300
Subject: [PATCH] refactoring the creation of hierarchical elements (#129)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* рефакторинг создания иерархических предопределенных элементов
---
.../Ext/Module.bsl" | 2 +-
.../Ext/Module.bsl" | 348 +++++++++---------
.../Ext/Module.bsl" | 2 +
src/cf/Configuration.xml | 2 +-
4 files changed, 182 insertions(+), 172 deletions(-)
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
index 1793aafd..fb73b276 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\320\275\320\276\320\262\320\273\320\265\320\275\320\270\320\265\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213\320\237\320\221\320\237/Ext/Module.bsl"
@@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
- Описание.Версия = "1.0.3.9";
+ Описание.Версия = "1.0.3.10";
// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl"
index 7928b42e..2f98e5a1 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217/Ext/Module.bsl"
@@ -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 @@
КонецЕсли;
КонецПроцедуры
+Функция ЗаполняемыеИсключаемыеСвойства(ИерархияГруппИЭлементов, ЭтоГруппа = Ложь)
+
+ Свойства = Новый Структура("СписокСвойств,ИсключаяСвойства");
+
+ Если ИерархияГруппИЭлементов И ЭтоГруппа Тогда
+ Свойства.СписокСвойств = "Наименование,ИдентификаторНастройки";
+ Иначе
+ Свойства.ИсключаяСвойства = "Родитель";
+ КонецЕсли;
+
+ Возврат Свойства;
+
+КонецФункции
+
#КонецОбласти
\ No newline at end of file
diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
index a1a48005..d812f852 100644
--- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
@@ -379,6 +379,8 @@
Колонки.Вставить("Служеб_УстановитьФлагРучноеИзменение", ОписаниеБулево);
Колонки.Вставить("Служеб_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
Колонки.Вставить("Служеб_СоздатьЗаписьРегистра", ОписаниеБулево);
+ Колонки.Вставить("Служеб_Иерархический", ОписаниеБулево);
+ Колонки.Вставить("Служеб_ИерархияГруппИЭлементов", ОписаниеБулево);
Возврат Колонки;
diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml
index a2787696..c2d306ac 100644
--- a/src/cf/Configuration.xml
+++ b/src/cf/Configuration.xml
@@ -57,7 +57,7 @@
Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок
Первый БИТ
- 1.0.3.9
+ 1.0.3.10
false
false