1
0
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:
Denis Ushakov 2024-10-22 17:17:32 +03:00 committed by GitHub
parent a7cc94cf93
commit 1cc3e8255a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 182 additions and 172 deletions

View File

@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
Описание.Версия = "1.0.3.9";
Описание.Версия = "1.0.3.10";
// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");

View File

@ -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 @@
КонецЕсли;
КонецПроцедуры
Функция ЗаполняемыеИсключаемыеСвойства(ИерархияГруппИЭлементов, ЭтоГруппа = Ложь)
Свойства = Новый Структура("СписокСвойств,ИсключаяСвойства");
Если ИерархияГруппИЭлементов И ЭтоГруппа Тогда
Свойства.СписокСвойств = "Наименование,ИдентификаторНастройки";
Иначе
Свойства.ИсключаяСвойства = "Родитель";
КонецЕсли;
Возврат Свойства;
КонецФункции
#КонецОбласти

View File

@ -379,6 +379,8 @@
Колонки.Вставить("Служеб_УстановитьФлагРучноеИзменение", ОписаниеБулево);
Колонки.Вставить("Служеб_ПредопределенныйЭлемент", ОписаниеТиповЭлемента);
Колонки.Вставить("Служеб_СоздатьЗаписьРегистра", ОписаниеБулево);
Колонки.Вставить("Служеб_Иерархический", ОписаниеБулево);
Колонки.Вставить("Служеб_ИерархияГруппИЭлементов", ОписаниеБулево);
Возврат Колонки;

View File

@ -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>