Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/cf/Catalogs/Компетенции.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@
</Synonym>
<Comment/>
<Hierarchical>true</Hierarchical>
<HierarchyType>HierarchyOfItems</HierarchyType>
<LimitLevelCount>false</LimitLevelCount>
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
<LimitLevelCount>true</LimitLevelCount>
<LevelCount>2</LevelCount>
<FoldersOnTop>true</FoldersOnTop>
<UseStandardCommands>true</UseStandardCommands>
Expand Down
6 changes: 1 addition & 5 deletions src/cf/Catalogs/ПрофилиДолжностей.xml
Original file line number Diff line number Diff line change
Expand Up @@ -296,11 +296,7 @@
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>10</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
<v8:Type>cfg:CatalogRef.Компетенции</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
<WindowOpeningMode>LockOwnerWindow</WindowOpeningMode>
<UseForFoldersAndItems>Items</UseForFoldersAndItems>
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1"/>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
<Event name="BeforeWriteAtServer">ПередЗаписьюНаСервере</Event>
</Events>
<ChildItems>
<UsualGroup name="ГруппаКодНаименование" id="87">
<Title>
Expand Down Expand Up @@ -106,47 +110,53 @@
</Title>
<ExtendedTooltip name="ГруппаТехническиеНавыкиРасширеннаяПодсказка" id="13"/>
<ChildItems>
<Table name="ТехническиеНавыки" id="14">
<Table name="ТехническиеНавыки" id="98">
<Representation>Tree</Representation>
<AutoInsertNewRow>true</AutoInsertNewRow>
<InitialTreeView>ExpandAllLevels</InitialTreeView>
<EnableStartDrag>true</EnableStartDrag>
<EnableDrag>true</EnableDrag>
<DataPath>ТехническиеНавыкиДерево</DataPath>
<ContextMenu name="ТехническиеНавыкиКонтекстноеМеню" id="15"/>
<AutoCommandBar name="ТехническиеНавыкиКоманднаяПанель" id="16"/>
<ExtendedTooltip name="ТехническиеНавыкиРасширеннаяПодсказка" id="17"/>
<SearchStringAddition name="ТехническиеНавыкиСтрокаПоиска" id="18">
<ContextMenu name="ТехническиеНавыкиКонтекстноеМеню" id="99"/>
<AutoCommandBar name="ТехническиеНавыкиКоманднаяПанель" id="100">
<ChildItems>
<Button name="ТехническиеНавыкиПодборКомпетенцийТехнические" id="117">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ПодборКомпетенцийТехнические</CommandName>
<ExtendedTooltip name="ТехническиеНавыкиПодборКомпетенцийТехническиеРасширеннаяПодсказка" id="118"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ExtendedTooltip name="ТехническиеНавыкиРасширеннаяПодсказка" id="101"/>
<SearchStringAddition name="ТехническиеНавыкиСтрокаПоиска" id="102">
<AdditionSource>
<Item>ТехническиеНавыки</Item>
<Type>SearchStringRepresentation</Type>
</AdditionSource>
<ContextMenu name="ТехническиеНавыкиСтрокаПоискаКонтекстноеМеню" id="19"/>
<ExtendedTooltip name="ТехническиеНавыкиСтрокаПоискаРасширеннаяПодсказка" id="20"/>
<ContextMenu name="ТехническиеНавыкиСтрокаПоискаКонтекстноеМеню" id="103"/>
<ExtendedTooltip name="ТехническиеНавыкиСтрокаПоискаРасширеннаяПодсказка" id="104"/>
</SearchStringAddition>
<ViewStatusAddition name="ТехническиеНавыкиСостояниеПросмотра" id="21">
<ViewStatusAddition name="ТехническиеНавыкиСостояниеПросмотра" id="105">
<AdditionSource>
<Item>ТехническиеНавыки</Item>
<Type>ViewStatusRepresentation</Type>
</AdditionSource>
<ContextMenu name="ТехническиеНавыкиСостояниеПросмотраКонтекстноеМеню" id="22"/>
<ExtendedTooltip name="ТехническиеНавыкиСостояниеПросмотраРасширеннаяПодсказка" id="23"/>
<ContextMenu name="ТехническиеНавыкиСостояниеПросмотраКонтекстноеМеню" id="106"/>
<ExtendedTooltip name="ТехническиеНавыкиСостояниеПросмотраРасширеннаяПодсказка" id="107"/>
</ViewStatusAddition>
<SearchControlAddition name="ТехническиеНавыкиУправлениеПоиском" id="24">
<SearchControlAddition name="ТехническиеНавыкиУправлениеПоиском" id="108">
<AdditionSource>
<Item>ТехническиеНавыки</Item>
<Type>SearchControl</Type>
</AdditionSource>
<ContextMenu name="ТехническиеНавыкиУправлениеПоискомКонтекстноеМеню" id="25"/>
<ExtendedTooltip name="ТехническиеНавыкиУправлениеПоискомРасширеннаяПодсказка" id="26"/>
<ContextMenu name="ТехническиеНавыкиУправлениеПоискомКонтекстноеМеню" id="109"/>
<ExtendedTooltip name="ТехническиеНавыкиУправлениеПоискомРасширеннаяПодсказка" id="110"/>
</SearchControlAddition>
<ChildItems>
<InputField name="ТехническиеНавыкиНавык" id="91">
<InputField name="ТехническиеНавыкиНавык" id="111">
<DataPath>ТехническиеНавыкиДерево.Навык</DataPath>
<EditMode>EnterOnInput</EditMode>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ТехническиеНавыкиНавыкКонтекстноеМеню" id="92"/>
<ExtendedTooltip name="ТехническиеНавыкиНавыкРасширеннаяПодсказка" id="93"/>
<ContextMenu name="ТехническиеНавыкиНавыкКонтекстноеМеню" id="112"/>
<ExtendedTooltip name="ТехническиеНавыкиНавыкРасширеннаяПодсказка" id="113"/>
</InputField>
</ChildItems>
</Table>
Expand All @@ -169,7 +179,15 @@
<DataPath>Объект.ЛичныеНавыки</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="ЛичныеНавыкиКонтекстноеМеню" id="36"/>
<AutoCommandBar name="ЛичныеНавыкиКоманднаяПанель" id="37"/>
<AutoCommandBar name="ЛичныеНавыкиКоманднаяПанель" id="37">
<ChildItems>
<Button name="ЛичныеНавыкиПодборКомпетенцийЛичные" id="94">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ПодборКомпетенцийЛичные</CommandName>
<ExtendedTooltip name="ЛичныеНавыкиПодборКомпетенцийЛичныеРасширеннаяПодсказка" id="95"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ExtendedTooltip name="ЛичныеНавыкиРасширеннаяПодсказка" id="38"/>
<SearchStringAddition name="ЛичныеНавыкиСтрокаПоиска" id="39">
<AdditionSource>
Expand Down Expand Up @@ -230,7 +248,15 @@
<DataPath>Объект.ФункциональныеОбязанности</DataPath>
<RowFilter xsi:nil="true"/>
<ContextMenu name="ФункциональныеОбязанностиКонтекстноеМеню" id="57"/>
<AutoCommandBar name="ФункциональныеОбязанностиКоманднаяПанель" id="58"/>
<AutoCommandBar name="ФункциональныеОбязанностиКоманднаяПанель" id="58">
<ChildItems>
<Button name="ФункциональныеОбязанностиПодборКомпетенцийФункциональные" id="96">
<Type>CommandBarButton</Type>
<CommandName>Form.Command.ПодборКомпетенцийФункциональные</CommandName>
<ExtendedTooltip name="ФункциональныеОбязанностиПодборКомпетенцийФункциональныеРасширеннаяПодсказка" id="97"/>
</Button>
</ChildItems>
</AutoCommandBar>
<ExtendedTooltip name="ФункциональныеОбязанностиРасширеннаяПодсказка" id="59"/>
<SearchStringAddition name="ФункциональныеОбязанностиСтрокаПоиска" id="60">
<AdditionSource>
Expand Down Expand Up @@ -310,4 +336,51 @@
</Columns>
</Attribute>
</Attributes>
<Commands>
<Command name="ПодборКомпетенцийЛичные" id="1">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подбор компетенций</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подбор компетенций личные</v8:content>
</v8:item>
</ToolTip>
<Action>ПодборКомпетенций</Action>
</Command>
<Command name="ПодборКомпетенцийФункциональные" id="2">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подбор компетенций</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подбор компетенций функциональные</v8:content>
</v8:item>
</ToolTip>
<Action>ПодборКомпетенцийФункциональные</Action>
</Command>
<Command name="ПодборКомпетенцийТехнические" id="3">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подбор компетенций</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Подбор компетенций технические</v8:content>
</v8:item>
</ToolTip>
<Action>ПодборКомпетенцийТехнические</Action>
</Command>
</Commands>
</Form>
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@

&НаКлиенте
Процедура ПодборКомпетенций(Команда)

ПодборОбщее(ПредопределенноеЗначение("Перечисление.ТипыКомпетенций.Универсальные"), "ПодборКомпетенцийЛичные");

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

&НаКлиенте
Процедура ПодборКомпетенцийТехнические(Команда)

ПодборОбщее(ПредопределенноеЗначение("Перечисление.ТипыКомпетенций.Профессиональные"), "ПодборКомпетенцийТехнические");

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

&НаКлиенте
Процедура ПодборКомпетенцийФункциональные(Команда)

ПодборОбщее(ПредопределенноеЗначение("Перечисление.ТипыКомпетенций.Обязанность"), "ПодборКомпетенцийФункциональные");

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

&НаКлиенте
Процедура ПодборОбщее(ТипКомпетенции, ПараметрПодбора)

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ТипКомпетенции", ТипКомпетенции);

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма, ПараметрПодбора);

ОткрытьФорму("Справочник.Компетенции.ФормаВыбора", ПараметрыФормы, ЭтаФорма, , , , ОбработкаВыбора);

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

&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт

ЗакрытиеФормыВыбораНаСервере(Значение, ДопПараметры);

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

&НаСервере
Процедура ЗакрытиеФормыВыбораНаСервере(Значение, ДопПараметры)

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

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

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

ИначеЕсли ДопПараметры = "ПодборКомпетенцийТехнические" Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Компетенция.Ссылка КАК Навык,
| Компетенция.Родитель КАК Родитель
|ИЗ
| Справочник.Компетенции КАК Компетенция
|ГДЕ
| Компетенция.Ссылка В(&Ссылка)";
Запрос.УстановитьПараметр("Ссылка", Значение);
Выборка = Запрос.Выполнить().Выбрать();

ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево");
Пока Выборка.Следующий() Цикл
НовыйРодитель = ДанныеДерева.Строки.Найти(Выборка.Родитель);
Если НовыйРодитель = Неопределено Тогда
НовыйРодитель = ДанныеДерева.Строки.Добавить();
НовыйРодитель.Навык = Выборка.Родитель;
КонецЕсли;
Навыки = НовыйРодитель.Строки.Добавить();
Навыки.Навык = Выборка.Навык;
КонецЦикла;
ЗначениеВРеквизитФормы(ДанныеДерева, "ТехническиеНавыкиДерево");
КонецЕсли;

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Компетенции.Родитель КАК Родитель,
| ПрофилиДолжностейТехническиеНавыки.Навык КАК Навык
|ИЗ
| Справочник.ПрофилиДолжностей.ТехническиеНавыки КАК ПрофилиДолжностейТехническиеНавыки
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Компетенции КАК Компетенции
| ПО ПрофилиДолжностейТехническиеНавыки.Навык = Компетенции.Ссылка
|ГДЕ
| ПрофилиДолжностейТехническиеНавыки.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
НовыйРодитель = ДанныеДерева.Строки.Найти(Выборка.Родитель);
Если НовыйРодитель = Неопределено Тогда
НовыйРодитель = ДанныеДерева.Строки.Добавить();
НовыйРодитель.Навык = Выборка.Родитель;
КонецЕсли;
Навыки = НовыйРодитель.Строки.Добавить();
Навыки.Навык = Выборка.Навык;
КонецЦикла;

ЗначениеВРеквизитФормы(ДанныеДерева, "ТехническиеНавыкиДерево");

КонецПроцедуры
Comment on lines +93 to +125

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Отсутствует загрузка дерева из атрибута ХранилищеЗначенияДерева

Процедура строит дерево из табличной части, но игнорирует сохраненную структуру в атрибуте "ХранилищеЗначенияДерева". Это может привести к несоответствию отображаемой и сохраненной структуры.

Рекомендуется сначала попытаться загрузить дерево из хранилища:

 Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 	
 	ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево");
 	
+	// Попытка загрузить сохраненное дерево
+	Если ЗначениеЗаполнено(Объект.ХранилищеЗначенияДерева) Тогда
+		СохраненноеДерево = Объект.ХранилищеЗначенияДерева.Получить();
+		Если СохраненноеДерево <> Неопределено Тогда
+			ЗначениеВРеквизитФормы(СохраненноеДерево, "ТехническиеНавыкиДерево");
+			Возврат;
+		КонецЕсли;
+	КонецЕсли;
+	
 	Запрос = Новый Запрос;
🤖 Prompt for AI Agents
In src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form/Module.bsl
between lines 93 and 125, the procedure ПриСозданииНаСервере rebuilds the tree
from the tabular part but does not load the existing tree structure from the
attribute ХранилищеЗначенияДерева. To fix this, first attempt to load the tree
from the ХранилищеЗначенияДерева attribute into the variable ДанныеДерева before
reconstructing it from the tabular data. This ensures the displayed tree matches
the saved structure and prevents inconsistencies.


&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево");
ТекущийОбъект.ТехническиеНавыки.Очистить();

Для Каждого СтрокаВерхИерархии Из ДанныеДерева.Строки Цикл
Для Каждого СтрокаНижИерархии Из СтрокаВерхИерархии.Строки Цикл
НовыйЭлемент = ТекущийОбъект.ТехническиеНавыки.Добавить();
НовыйЭлемент.Навык = СтрокаНижИерархии.Навык;
КонецЦикла;
КонецЦикла;

КонецПроцедуры
Comment on lines +128 to +140

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Отсутствует сохранение дерева в атрибут ХранилищеЗначенияДерева

Процедура преобразует дерево в табличную часть, но не сохраняет структуру дерева в добавленный атрибут "ХранилищеЗначенияДерева". Это может привести к потере иерархической структуры при повторном открытии формы.

Добавьте сохранение дерева:

 Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
 	
 	ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево");
+	ТекущийОбъект.ХранилищеЗначенияДерева = Новый ХранилищеЗначения(ДанныеДерева);
 	ТекущийОбъект.ТехническиеНавыки.Очистить();
🤖 Prompt for AI Agents
In src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form/Module.bsl
around lines 128 to 140, the procedure ПередЗаписьюНаСервере converts the tree
structure into a tabular part but does not save the original tree structure into
the attribute ХранилищеЗначенияДерева. To fix this, add code to serialize or
assign the current tree data (ДанныеДерева) to the attribute
ТекущийОбъект.ХранилищеЗначенияДерева before the procedure ends, ensuring the
hierarchical structure is preserved for future form openings.

12 changes: 12 additions & 0 deletions src/cf/Enums/ТипыКомпетенций.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,18 @@
<Comment/>
</Properties>
</EnumValue>
<EnumValue uuid="7bb2b3ec-aa2d-4c5c-abf7-7198d6195857">
<Properties>
<Name>Обязанность</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Обязанность</v8:content>
</v8:item>
</Synonym>
<Comment/>
</Properties>
</EnumValue>
</ChildObjects>
</Enum>
</MetaDataObject>