Skip to content

Commit

Permalink
Added func to add folders (#70)
Browse files Browse the repository at this point in the history
Добавлена возможность создания иерархии предопределенных элементов
  • Loading branch information
denisushakov authored May 14, 2024
1 parent 2f3422b commit 37fbb59
Show file tree
Hide file tree
Showing 14 changed files with 176 additions and 56 deletions.
33 changes: 33 additions & 0 deletions docs/ПредопределенныеЗначения.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@
- Значение - ПроизвольныйТип
- Массив - ПроизвольныйТип

В модуле **__ПредопределенныеЗначенияПереопределяемый** значения добавляются через метод **Добавить()** коллекции **Результат**, которая представляет собой таблицу предопределённых значений. Каждая новая запись в этой таблице может быть настроена как группа путём установки свойства ЭтоГруппа в значение Истина.
**ИдентификаторНастройки**: Уникальный идентификатор группы, который используется для внутренних ссылок и связей между группами.
**Родитель**: Идентификатор настройки родительской группы, указывается для элементов и групп являющихся подгруппами.
**УровеньИерархии**: Целочисленное значение, определяющее уровень группы в иерархической структуре. Этот параметр используется для обеспечения правильного порядка создания групп, где сначала должны быть созданы группы верхнего уровня, а затем вложенные.

Пример добавления нового элемента в модуле __ПредопределенныеЗначенияПереопределяемый:

```1C (BSL)
Expand All @@ -35,6 +40,34 @@
НоваяНастройка.Пароль = Истина;
НоваяНастройка.СписокЗначений = Ложь;
НоваяНастройка.ТипЗначения = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150));
НоваяНастройка.Родитель = "Доступ_ИТС"; // Указывается идентификатор настройки группы
// КонецДобавления
Возврат Результат;
КонецФункции
```

Пример добавления новой группы в модуле __ПредопределенныеЗначенияПереопределяемый:

```1C (BSL)
Функция ПредопределенныеЗначения() Экспорт
Результат = ТаблицаПредопределенных();
// Добавление
НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "Интеграции";
НоваяНастройка.ИдентификаторНастройки = "Интеграции";
НоваяНастройка.ЭтоГруппа = Истина;
НоваяНастройка.УровеньИерархии = 0;
НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "Интеграции локал";
НоваяНастройка.ИдентификаторНастройки = "Интеграции_локал";
НоваяНастройка.ЭтоГруппа = Истина;
НоваяНастройка.Родитель = "Интеграции";
НоваяНастройка.УровеньИерархии = 1;
// КонецДобавления
Возврат Результат;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
</v8:item>
</Synonym>
<Comment/>
<Hierarchical>false</Hierarchical>
<Hierarchical>true</Hierarchical>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<LevelCount>2</LevelCount>
Expand Down Expand Up @@ -143,7 +143,7 @@
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Use>ForFolderAndItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,10 @@
ТЗПредопределенныхЗначенийКСозданию = __ПредопределенныеЗначения.ПредопределенныеЗначенияКСозданию(
ТЗПредопределенныхЗначений,
"Справочник.__ИнтегрируемыеСистемы");

Для Каждого СтрокаТаблицы Из ТЗПредопределенныхЗначенийКСозданию Цикл

__ПредопределенныеЗначения.СоздатьПредопределенноеЗначение(СтрокаТаблицы, Справочники.__ИнтегрируемыеСистемы);

КонецЦикла;
__ПредопределенныеЗначения.СоздатьПредопределенныеЗначения(
ТЗПредопределенныхЗначенийКСозданию,
Справочники.__ИнтегрируемыеСистемы);

КонецПроцедуры

Expand Down
4 changes: 2 additions & 2 deletions src/cf/Catalogs/__МетодыИнтеграции.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
</v8:item>
</Synonym>
<Comment/>
<Hierarchical>false</Hierarchical>
<Hierarchical>true</Hierarchical>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<LevelCount>2</LevelCount>
Expand Down Expand Up @@ -235,7 +235,7 @@
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Use>ForFolderAndItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,10 @@
ТЗПредопределенныхЗначенийКСозданию = __ПредопределенныеЗначения.ПредопределенныеЗначенияКСозданию(
ТЗПредопределенныхЗначений,
"Справочник.__МетодыИнтеграции");

Для Каждого СтрокаТаблицы Из ТЗПредопределенныхЗначенийКСозданию Цикл

__ПредопределенныеЗначения.СоздатьПредопределенноеЗначение(СтрокаТаблицы, Справочники.__МетодыИнтеграции);

КонецЦикла;
__ПредопределенныеЗначения.СоздатьПредопределенныеЗначения(
ТЗПредопределенныхЗначенийКСозданию,
Справочники.__МетодыИнтеграции);

КонецПроцедуры

Expand Down
4 changes: 2 additions & 2 deletions src/cf/Catalogs/__НастройкиИнтеграции.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
</v8:item>
</Synonym>
<Comment/>
<Hierarchical>false</Hierarchical>
<Hierarchical>true</Hierarchical>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<LevelCount>2</LevelCount>
Expand Down Expand Up @@ -519,7 +519,7 @@
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Use>ForFolderAndItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,10 @@
ТЗПредопределенныхЗначенийКСозданию = __ПредопределенныеЗначения.ПредопределенныеЗначенияКСозданию(
ТЗПредопределенныхЗначений,
"Справочник.__НастройкиИнтеграции");

Для Каждого СтрокаТаблицы Из ТЗПредопределенныхЗначенийКСозданию Цикл

__ПредопределенныеЗначения.СоздатьПредопределенноеЗначение(СтрокаТаблицы, Справочники.__НастройкиИнтеграции);

КонецЦикла;
__ПредопределенныеЗначения.СоздатьПредопределенныеЗначения(
ТЗПредопределенныхЗначенийКСозданию,
Справочники.__НастройкиИнтеграции);

КонецПроцедуры

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
</v8:item>
</Synonym>
<Comment/>
<Hierarchical>false</Hierarchical>
<Hierarchical>true</Hierarchical>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<LevelCount>2</LevelCount>
Expand Down Expand Up @@ -369,7 +369,7 @@
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Use>ForFolderAndItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,10 @@
ТЗПредопределенныхЗначенийКСозданию = __ПредопределенныеЗначения.ПредопределенныеЗначенияКСозданию(
ТЗПредопределенныхЗначений,
"Справочник.__ТипСоответствияОбъектовИБ");

Для Каждого СтрокаТаблицы Из ТЗПредопределенныхЗначенийКСозданию Цикл

__ПредопределенныеЗначения.СоздатьПредопределенноеЗначение(СтрокаТаблицы, Справочники.__ТипСоответствияОбъектовИБ);

КонецЦикла;
__ПредопределенныеЗначения.СоздатьПредопределенныеЗначения(
ТЗПредопределенныхЗначенийКСозданию,
Справочники.__ТипСоответствияОбъектовИБ);

КонецПроцедуры

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -576,7 +576,7 @@
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>DontIndex</Indexing>
<Use>ForItem</Use>
<Use>ForFolderAndItem</Use>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,7 @@

Результат = Новый ТаблицаЗначений;

ОписаниеСтрока = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150));

Результат.Колонки.Добавить("Наименование", ОписаниеСтрока);
Результат.Колонки.Добавить("ИдентификаторНастройки", ОписаниеСтрока);
__ПредопределенныеЗначенияПереопределяемый.ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);

Возврат Результат;

Expand All @@ -85,10 +82,7 @@

Результат = Новый ТаблицаЗначений;

ОписаниеСтрока = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150));

Результат.Колонки.Добавить("Наименование", ОписаниеСтрока);
Результат.Колонки.Добавить("ИдентификаторНастройки", ОписаниеСтрока);
__ПредопределенныеЗначенияПереопределяемый.ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);

Возврат Результат;

Expand All @@ -98,10 +92,7 @@

Результат = Новый ТаблицаЗначений;

ОписаниеСтрока = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150));

Результат.Колонки.Добавить("Наименование", ОписаниеСтрока);
Результат.Колонки.Добавить("ИдентификаторНастройки", ОписаниеСтрока);
__ПредопределенныеЗначенияПереопределяемый.ОбщиеКолонкиТаблицыПредопределенныхЗначений(Результат);

Возврат Результат;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,60 @@

ТЗПредопределенныхЗначенийКСозданию = ПредопределенныеЗначенияКСозданию(ТЗПредопределенныхЗначений);

Для Каждого СтрокаТаблицы Из ТЗПредопределенныхЗначенийКСозданию Цикл
СоздатьПредопределенныеЗначения(
ТЗПредопределенныхЗначенийКСозданию,
ПланыВидовХарактеристик.__ПредопределенныеЗначения);

СоздатьПредопределенноеЗначение(СтрокаТаблицы, ПланыВидовХарактеристик.__ПредопределенныеЗначения);
КонецПроцедуры

// Создание предопределенных значений на основании заполненной таблицы
//
// Параметры:
// Таблица - ТаблицаЗначений - см. __ПредопределенныеЗначенияПереопределяемыйТаблицаПредопределенных,
// __ТипСоответствияОбъектовИБПереопределяемый.ТаблицаПредопределенных
// МенеджерОбъекта - СправочникМенеджер, ДокументМенеджер, ОбработкаМенеджер, РегистрСведенийМенеджер - менеджер объекта.
//
Процедура СоздатьПредопределенныеЗначения(Таблица, МенеджерОбъекта) Экспорт

Если Не ЗначениеЗаполнено(Таблица) Тогда
Возврат;
КонецЕсли;

Группы = Новый Соответствие;
КолонкаСуществует = Таблица.Колонки.Найти("ЭтоГруппа") <> Неопределено;

Если КолонкаСуществует Тогда

// Сначала создаются группы, затем элементы
Таблица.Сортировать("ЭтоГруппа УБЫВ, УровеньИерархии");

ТекстЗапроса =
"ВЫБРАТЬ
| __ПредопределенныеЗначения.Ссылка КАК Ссылка,
| __ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки
|ИЗ
| %1 КАК __ПредопределенныеЗначения
|ГДЕ
| __ПредопределенныеЗначения.ЭтоГруппа";

ПолноеИмяОМ = Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта)).ПолноеИмя();

Запрос = Новый Запрос;
Запрос.Текст = СтрШаблон(ТекстЗапроса, ПолноеИмяОМ);

ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Группы.Вставить(ВыборкаДетальныеЗаписи.ИдентификаторНастройки, ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
КонецЕсли;

Для Каждого СтрокаТаблицы Из Таблица Цикл
Если КолонкаСуществует И СтрокаТаблицы.ЭтоГруппа Тогда
СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, Группы);
Иначе
СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, Группы, КолонкаСуществует);
КонецЕсли;
КонецЦикла;

КонецПроцедуры
Expand Down Expand Up @@ -75,18 +125,43 @@

КонецФункции

Процедура СоздатьПредопределенноеЗначение(СтрокаТаблицы, МенеджерОбъекта) Экспорт
Процедура СоздатьПредопределеннуюГруппу(МенеджерОбъекта, СтрокаТаблицы, Группы)

НоваяГруппа = МенеджерОбъекта.СоздатьГруппу();
ЗаполнитьЗначенияСвойств(НоваяГруппа, СтрокаТаблицы, "Наименование,ИдентификаторНастройки");
Если ЗначениеЗаполнено(СтрокаТаблицы.Родитель) Тогда
Родитель = Группы.Получить(СтрокаТаблицы.Родитель);
НоваяГруппа.Родитель = Родитель;
КонецЕсли;

Попытка
НоваяГруппа.Записать();
Исключение
__ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки());
КонецПопытки;

Группы.Вставить(СтрокаТаблицы.ИдентификаторНастройки, НоваяГруппа.Ссылка);

КонецПроцедуры

Процедура СоздатьПредопределенныйЭлемент(МенеджерОбъекта, СтрокаТаблицы, Родители, ЗаполнитьРодителя = Ложь)

ПроверяемыйТип = ТипЗнч(МенеджерОбъекта);
НовыйПредопределенныйЭлемент = МенеджерОбъекта.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовыйПредопределенныйЭлемент, СтрокаТаблицы);

НовыйЭлемент = МенеджерОбъекта.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы);
Если ЗаполнитьРодителя И ЗначениеЗаполнено(СтрокаТаблицы.Родитель) Тогда
Родитель = Родители.Получить(СтрокаТаблицы.Родитель);
НовыйЭлемент.Родитель = Родитель;
КонецЕсли;

// инициализация значения по умолчанию
Если ПроверяемыйТип = Тип("ПланВидовХарактеристикМенеджер.__ПредопределенныеЗначения") Тогда
НовыйПредопределенныйЭлемент.Значение = СтрокаТаблицы.ТипЗначения.ПривестиЗначение();
НовыйЭлемент.Значение = СтрокаТаблицы.ТипЗначения.ПривестиЗначение();
КонецЕсли;

Попытка
НовыйПредопределенныйЭлемент.Записать();
НовыйЭлемент.Записать();
Исключение
__ОбщегоНазначенияСлужебный.СообщитьПользователю(ОписаниеОшибки());
КонецПопытки;
Expand Down
Loading

0 comments on commit 37fbb59

Please sign in to comment.