Skip to content

25. Профили должностей и связанные метаданные#41

Open
Dinarhas wants to merge 2 commits into
developfrom
25-job-profile
Open

25. Профили должностей и связанные метаданные#41
Dinarhas wants to merge 2 commits into
developfrom
25-job-profile

Conversation

@Dinarhas

@Dinarhas Dinarhas commented Jul 18, 2025

Copy link
Copy Markdown

Справочник Компетенции сделан иерархическим. Уровень вложенности 1.
В перечисление Типы компетенции добавлено значение "Обязанность".
Реализован вывод табличной части "Технические навыки" в виде дерева с выводом по группам компетенций.
Для каждой табличной части добавлена форма подбора компетенций

Summary by CodeRabbit

  • Новые функции
    • Добавлены кнопки и команды для подбора компетенций в форме профиля должности (личные, функциональные, технические).
    • Реализован выбор компетенций с поддержкой фильтрации и множественного выбора.
    • Добавлено хранение иерархии технических навыков и автоматическая синхронизация при сохранении.
    • В каталог "ПрофилиДолжностей" добавлен атрибут для хранения дерева значений.
    • В справочник компетенций добавлена поддержка папок и ограничена глубина иерархии.
    • В справочник компетенций добавлен новый тип "Обязанность" для классификации компетенций.

@coderabbitai

coderabbitai Bot commented Jul 18, 2025

Copy link
Copy Markdown

Walkthrough

Внесены изменения в структуру каталогов и форм для управления компетенциями и профилями должностей. Добавлены новые атрибуты, изменены типы данных, реализованы новые команды и обработчики событий в формах, а также расширено перечисление типов компетенций для поддержки функциональных обязанностей и работы с иерархическими структурами.

Changes

Файл(ы) Краткое описание изменений
src/cf/Catalogs/Компетенции.xml Изменены параметры иерархии каталога: тип иерархии изменён на "HierarchyFoldersAndItems", ограничена глубина до 2 уровней.
src/cf/Catalogs/ПрофилиДолжностей.xml Тип поля "Обязанность" в табличной части "ФункциональныеОбязанности" изменён с string(10) на ссылку на каталог "Компетенции".
src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form.xml Добавлены серверные обработчики событий создания и записи; добавлены команды для подбора компетенций и кнопки для их вызова в командных панелях таблиц; обновлены идентификаторы элементов формы.
src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form/Module.bsl Реализована клиент-серверная логика подбора компетенций, обработка иерархии технических навыков, синхронизация данных между UI и объектом, добавлены обработчики событий жизненного цикла формы.
src/cf/Enums/ТипыКомпетенций.xml В перечисление "ТипыКомпетенций" добавлено новое значение "Обязанность".

Sequence Diagram(s)

sequenceDiagram
    participant User as Пользователь
    participant Form as Форма профиля должности (клиент)
    participant Server as Сервер (модуль формы)
    participant Catalog as Каталог Компетенции

    User->>Form: Нажимает кнопку "Подбор компетенций"
    Form->>Form: Определяет тип компетенции (личные, технические, функциональные)
    Form->>Form: Открывает форму подбора компетенций с фильтром по типу
    User->>Form: Выбирает компетенции и закрывает форму подбора
    Form->>Server: ПриЗакрытииФормыВыбора(выбранные значения, тип компетенции)
    Server->>Server: Обрабатывает выбранные компетенции
    alt Технические навыки
        Server->>Catalog: Запрашивает иерархию компетенций
        Server->>Server: Формирует дерево в ХранилищеЗначенияДерева
    else Личные или функциональные
        Server->>Server: Добавляет компетенции в соответствующую коллекцию объекта
    end
    Server-->>Form: Обновляет данные формы
Loading
sequenceDiagram
    participant Form as Форма профиля должности
    participant Server as Сервер (модуль формы)
    participant Catalog as Каталог Компетенции

    Form->>Server: ПриСозданииНаСервере
    Server->>Catalog: Запрашивает технические навыки по профилю
    Server->>Server: Формирует дерево навыков в ХранилищеЗначенияДерева

    Form->>Server: ПередЗаписьюНаСервере
    Server->>Server: Преобразует дерево навыков в плоскую коллекцию и синхронизирует с объектом
Loading

Estimated code review effort

3 (~45 minutes)


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 63db625 and b47e65c.

📒 Files selected for processing (1)
  • src/cf/Catalogs/ПрофилиДолжностей.xml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cf/Catalogs/ПрофилиДолжностей.xml

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b73969c and 63db625.

📒 Files selected for processing (5)
  • src/cf/Catalogs/Компетенции.xml (1 hunks)
  • src/cf/Catalogs/ПрофилиДолжностей.xml (2 hunks)
  • src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form.xml (5 hunks)
  • src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/Enums/ТипыКомпетенций.xml (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: ivanmolodec
PR: firstBitSportivnaya/PDM#36
File: src/cf/Enums/ТипыКомпетенций.xml:77-88
Timestamp: 2025-07-14T11:38:55.853Z
Learning: В проекте firstBitSportivnaya/PDM не планируется поддержка мультиязычности. Не нужно проверять наличие английских синонимов для значений перечислений и других объектов метаданных.
src/cf/Enums/ТипыКомпетенций.xml (1)
Learnt from: ivanmolodec
PR: firstBitSportivnaya/PDM#36
File: src/cf/Enums/ТипыКомпетенций.xml:77-88
Timestamp: 2025-07-14T11:38:55.853Z
Learning: В проекте firstBitSportivnaya/PDM не планируется поддержка мультиязычности. Не нужно проверять наличие английских синонимов для значений перечислений и других объектов метаданных.
🔇 Additional comments (7)
src/cf/Enums/ТипыКомпетенций.xml (1)

77-88: Корректное добавление нового значения перечисления

Новое значение "Обязанность" добавлено согласно структуре существующих значений. Отсутствие английского синонима соответствует стандартам проекта.

src/cf/Catalogs/Компетенции.xml (1)

40-42: Корректная настройка иерархической структуры

Изменения позволяют использовать папки и элементы в справочнике с ограничением глубины иерархии до 2 уровней, что соответствует целям PR.

src/cf/Catalogs/ПрофилиДолжностей.xml (2)

135-174: Добавление атрибута для хранения дерева компетенций

Атрибут "ХранилищеЗначенияДерева" корректно настроен для хранения иерархической структуры технических навыков.


339-339: Корректное изменение типа атрибута

Изменение типа с строки на ссылку на справочник "Компетенции" обеспечивает целостность данных и соответствует новой архитектуре.

src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form.xml (2)

6-9: Корректное добавление обработчиков событий

Обработчики событий формы правильно связаны с процедурами модуля для инициализации и синхронизации данных.


119-127: Корректная реализация команд подбора компетенций

Команды и кнопки командной панели правильно настроены для всех трех типов компетенций с соответствующими заголовками и подсказками.

Also applies to: 182-190, 251-259, 339-385

src/cf/Catalogs/ПрофилиДолжностей/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1)

65-89: Проверьте логику добавления родительских элементов

При обработке технических навыков родительские элементы добавляются автоматически, даже если они не были выбраны пользователем. Это может привести к добавлению нежелательных элементов в дерево.

Убедитесь, что такое поведение является ожидаемым. Возможно, стоит добавить проверку или информировать пользователя о добавлении родительских элементов.

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.

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.

@ivanmolodec ivanmolodec added this to the LTS milestone Aug 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Учет развития сотрудников Учет развития сотрудников

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Разработка метаданных и механизмов для Профилей должностей

3 participants