-
Notifications
You must be signed in to change notification settings - Fork 2
25. Профили должностей и связанные метаданные #41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,140 @@ | ||
| | ||
| &НаКлиенте | ||
| Процедура ПодборКомпетенций(Команда) | ||
|
|
||
| ПодборОбщее(ПредопределенноеЗначение("Перечисление.ТипыКомпетенций.Универсальные"), "ПодборКомпетенцийЛичные"); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| &НаКлиенте | ||
| Процедура ПодборКомпетенцийТехнические(Команда) | ||
|
|
||
| ПодборОбщее(ПредопределенноеЗначение("Перечисление.ТипыКомпетенций.Профессиональные"), "ПодборКомпетенцийТехнические"); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| &НаКлиенте | ||
| Процедура ПодборКомпетенцийФункциональные(Команда) | ||
|
|
||
| ПодборОбщее(ПредопределенноеЗначение("Перечисление.ТипыКомпетенций.Обязанность"), "ПодборКомпетенцийФункциональные"); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| &НаКлиенте | ||
| Процедура ПодборОбщее(ТипКомпетенции, ПараметрПодбора) | ||
|
|
||
| ПараметрыОтбора = Новый Структура; | ||
| ПараметрыОтбора.Вставить("ТипКомпетенции", ТипКомпетенции); | ||
|
|
||
| ПараметрыФормы = Новый Структура; | ||
| ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); | ||
| ПараметрыФормы.Вставить("РежимВыбора", Истина); | ||
| ПараметрыФормы.Вставить("МножественныйВыбор", Истина); | ||
| ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма, ПараметрПодбора); | ||
|
|
||
| ОткрытьФорму("Справочник.Компетенции.ФормаВыбора", ПараметрыФормы, ЭтаФорма, , , , ОбработкаВыбора); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| &НаКлиенте | ||
| Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт | ||
|
|
||
| ЗакрытиеФормыВыбораНаСервере(Значение, ДопПараметры); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| &НаСервере | ||
| Процедура ЗакрытиеФормыВыбораНаСервере(Значение, ДопПараметры) | ||
|
|
||
| Если Значение = Неопределено Тогда | ||
| Возврат; | ||
| КонецЕсли; | ||
|
|
||
| Если ДопПараметры = "ПодборКомпетенцийЛичные" Тогда | ||
| Для Каждого ЭлементМассива Из Значение Цикл | ||
| НоваяСтрока = Объект.ЛичныеНавыки.Добавить(); | ||
| НоваяСтрока.Навык = ЭлементМассива; | ||
| КонецЦикла; | ||
|
|
||
| ИначеЕсли ДопПараметры = "ПодборКомпетенцийФункциональные" Тогда | ||
| Для Каждого ЭлементМассива Из Значение Цикл | ||
| НоваяСтрока = Объект.ФункциональныеОбязанности.Добавить(); | ||
| НоваяСтрока.Обязанность = ЭлементМассива; | ||
| КонецЦикла; | ||
|
|
||
| ИначеЕсли ДопПараметры = "ПодборКомпетенцийТехнические" Тогда | ||
| Запрос = Новый Запрос; | ||
| Запрос.Текст = | ||
| "ВЫБРАТЬ | ||
| | Компетенция.Ссылка КАК Навык, | ||
| | Компетенция.Родитель КАК Родитель | ||
| |ИЗ | ||
| | Справочник.Компетенции КАК Компетенция | ||
| |ГДЕ | ||
| | Компетенция.Ссылка В(&Ссылка)"; | ||
| Запрос.УстановитьПараметр("Ссылка", Значение); | ||
| Выборка = Запрос.Выполнить().Выбрать(); | ||
|
|
||
| ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево"); | ||
| Пока Выборка.Следующий() Цикл | ||
| НовыйРодитель = ДанныеДерева.Строки.Найти(Выборка.Родитель); | ||
| Если НовыйРодитель = Неопределено Тогда | ||
| НовыйРодитель = ДанныеДерева.Строки.Добавить(); | ||
| НовыйРодитель.Навык = Выборка.Родитель; | ||
| КонецЕсли; | ||
| Навыки = НовыйРодитель.Строки.Добавить(); | ||
| Навыки.Навык = Выборка.Навык; | ||
| КонецЦикла; | ||
| ЗначениеВРеквизитФормы(ДанныеДерева, "ТехническиеНавыкиДерево"); | ||
| КонецЕсли; | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| &НаСервере | ||
| Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) | ||
|
|
||
| ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево"); | ||
|
|
||
| Запрос = Новый Запрос; | ||
| Запрос.Текст = | ||
| "ВЫБРАТЬ | ||
| | Компетенции.Родитель КАК Родитель, | ||
| | ПрофилиДолжностейТехническиеНавыки.Навык КАК Навык | ||
| |ИЗ | ||
| | Справочник.ПрофилиДолжностей.ТехническиеНавыки КАК ПрофилиДолжностейТехническиеНавыки | ||
| | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Компетенции КАК Компетенции | ||
| | ПО ПрофилиДолжностейТехническиеНавыки.Навык = Компетенции.Ссылка | ||
| |ГДЕ | ||
| | ПрофилиДолжностейТехническиеНавыки.Ссылка = &Ссылка"; | ||
|
|
||
| Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); | ||
| Выборка = Запрос.Выполнить().Выбрать(); | ||
|
|
||
| Пока Выборка.Следующий() Цикл | ||
| НовыйРодитель = ДанныеДерева.Строки.Найти(Выборка.Родитель); | ||
| Если НовыйРодитель = Неопределено Тогда | ||
| НовыйРодитель = ДанныеДерева.Строки.Добавить(); | ||
| НовыйРодитель.Навык = Выборка.Родитель; | ||
| КонецЕсли; | ||
| Навыки = НовыйРодитель.Строки.Добавить(); | ||
| Навыки.Навык = Выборка.Навык; | ||
| КонецЦикла; | ||
|
|
||
| ЗначениеВРеквизитФормы(ДанныеДерева, "ТехническиеНавыкиДерево"); | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| &НаСервере | ||
| Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) | ||
|
|
||
| ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево"); | ||
| ТекущийОбъект.ТехническиеНавыки.Очистить(); | ||
|
|
||
| Для Каждого СтрокаВерхИерархии Из ДанныеДерева.Строки Цикл | ||
| Для Каждого СтрокаНижИерархии Из СтрокаВерхИерархии.Строки Цикл | ||
| НовыйЭлемент = ТекущийОбъект.ТехническиеНавыки.Добавить(); | ||
| НовыйЭлемент.Навык = СтрокаНижИерархии.Навык; | ||
| КонецЦикла; | ||
| КонецЦикла; | ||
|
|
||
| КонецПроцедуры | ||
|
Comment on lines
+128
to
+140
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Отсутствует сохранение дерева в атрибут ХранилищеЗначенияДерева Процедура преобразует дерево в табличную часть, но не сохраняет структуру дерева в добавленный атрибут "ХранилищеЗначенияДерева". Это может привести к потере иерархической структуры при повторном открытии формы. Добавьте сохранение дерева: Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ДанныеДерева = РеквизитФормыВЗначение("ТехническиеНавыкиДерево");
+ ТекущийОбъект.ХранилищеЗначенияДерева = Новый ХранилищеЗначения(ДанныеДерева);
ТекущийОбъект.ТехническиеНавыки.Очистить();🤖 Prompt for AI Agents |
||
There was a problem hiding this comment.
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