Skip to content
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

refactoring the creation of hierarchical elements #129

Merged
merged 3 commits into from
Oct 22, 2024

Conversation

denisushakov
Copy link
Contributor

@denisushakov denisushakov commented Oct 21, 2024

Summary by CodeRabbit

  • Новые функции

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

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

    • Введены новые колонки для поддержки логики работы с предопределенными элементами.
  • Обновление версии

    • Версия библиотеки обновлена с "1.0.3.9" до "1.0.3.10".

Эти изменения улучшают функциональность модуля и обеспечивают более эффективное управление предопределенными значениями.

@denisushakov denisushakov added the bug Something isn't working label Oct 21, 2024
@denisushakov denisushakov self-assigned this Oct 21, 2024
Copy link

coderabbitai bot commented Oct 21, 2024

## Walkthrough
В данном запросе на извлечение внесены значительные изменения в функциональность модуля, включая добавление новых функций и модификацию существующих для улучшения обработки предопределенных значений в архитектуре 1C:Enterprise 8. Были добавлены новые процедуры для работы с иерархиями и контрольными суммами, а также изменены параметры существующих процедур для соответствия новым требованиям. Также удален избыточный код, что улучшает читаемость. Изменения касаются обновления версии библиотеки и конфигурации.

## Changes

| Файл                                                                                     | Изменения                                                                                                                                                                                                 |
|------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl`                     | Добавлены функции: `ДопПараметрыОбработкиПредопределенныхЭлементов`, `КлючиХешаПредопределенногоЭлемента`, `ЗаполняемыеИсключаемыеСвойства`. Изменены процедуры: `СоздатьЭлемент`, `ОбновитьЭлемент`, `ЗаполнитьЗначениеПоУмолчанию`. Удален избыточный код. |
| `src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl`     | Обновлена функция `ОбщиеКолонки` с добавлением новых колонок: `Служеб_Иерархический`, `Служеб_ИерархияГруппИЭлементов`. Обновлены функции, такие как `КолонкиНастройкиИнтеграции`, для поддержки новых колонок. |
| `src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl`              | Обновлена версия библиотеки в процедуре `ПриДобавленииПодсистемы` с `1.0.3.9` на `1.0.3.10`.                                                                                                          |
| `src/cf/Configuration.xml`                                                               | Обновлена версия в `<Properties>` с `1.0.3.9` на `1.0.3.10`.                                                                                                                                          |

## Possibly related PRs
- **#118**: Изменения в этом PR касаются модификации обработки предопределенных элементов, что может быть связано с улучшениями, внесенными в основном PR, касающимся управления предопределенными значениями и их отношениями.
- **#120**: Этот PR включает улучшения в подсистеме интеграции, которые могут быть связаны с общим управлением предопределенными значениями и их взаимодействиями в контексте интеграции.

## Suggested reviewers
- ivanmolodec

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ 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.
    • Generate unit testing code for this file.
    • 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 generate unit testing code for this file.
    • @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 generate unit testing code.
    • @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.

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

@denisushakov denisushakov added enhancement Улучшение существующей функциональности and removed bug Something isn't working labels Oct 21, 2024
Copy link

Passed

Analysis Details

4 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 4 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Outside diff range and nitpick comments (2)
src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl (2)

382-383: Одобрено: Добавление новых служебных полей для иерархии.

Новые поля Служеб_Иерархический и Служеб_ИерархияГруппИЭлементов корректно добавлены в структуру и соответствуют существующему стилю кода. Префикс "Служеб_" используется последовательно для служебных полей.

Рекомендация: Добавьте комментарии, объясняющие назначение этих новых полей, чтобы улучшить понимание кода.

Предлагаемые комментарии:

// Служеб_Иерархический - признак иерархического справочника
Колонки.Вставить("Служеб_Иерархический", ОписаниеБулево);
// Служеб_ИерархияГруппИЭлементов - признак раздельной иерархии групп и элементов
Колонки.Вставить("Служеб_ИерархияГруппИЭлементов", ОписаниеБулево);
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 382-382: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L382
Возможная опечатка в "Служеб"


[notice] 383-383: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L383
Возможная опечатка в "Служеб"


Line range hint 1-383: Общее заключение: Улучшение поддержки иерархических структур.

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

Изменения соответствуют существующему стилю кода и naming conventions. Рекомендуется добавить комментарии к новым полям для улучшения читаемости и понимания кода.

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

🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 382-382: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L382
Возможная опечатка в "Служеб"


[notice] 383-383: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L383
Возможная опечатка в "Служеб"

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between a7cc94c and b3be306.

📒 Files selected for processing (2)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (10 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl (1 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl

[notice] 326-326: src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl#L326
Возможная опечатка в "Служеб"


[notice] 327-327: src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl#L327
Возможная опечатка в "Служеб"

src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl

[notice] 382-382: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L382
Возможная опечатка в "Служеб"


[notice] 383-383: src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl#L383
Возможная опечатка в "Служеб"

🔇 Additional comments (7)
src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (7)

72-110: Добавлена функция "ДопПараметрыОбработкиПредопределенныхЭлементов"

Реализация новой функции выглядит корректной. Она подготавливает необходимые параметры для обработки предопределенных элементов и возвращает структуру с менеджером и полным именем объекта метаданных.


111-141: Функция "КлючиХешаПредопределенногоЭлемента" реализована правильно

Функция корректно формирует ключи хеша на основе переданных полей, учитывая, является ли элемент группой или нет, и исключая необходимые поля.


186-221: Процедура "ЗаполнитьРодителейЭлементов" работает корректно

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


223-242: Процедура "ЗаполнитьКонтрольныеСуммыТаблицы" корректна

Процедура эффективно заполняет контрольные суммы (хеш-суммы) для предопределенных элементов, используя соответствующие ключи хеша для групп и элементов.


594-606: Функция "ЗаполняемыеИсключаемыеСвойства" реализована корректно

Функция возвращает структуру с перечнем свойств для заполнения или исключения, в зависимости от того, является элемент группой или нет. Логика соответствует требованиям.


374-382: Проверьте использование обновленной процедуры "СоздатьЭлемент" по всей кодовой базе

Сигнатура процедуры СоздатьЭлемент была изменена: параметр ЗаполнитьРодителя удален. Убедитесь, что все вызовы этой процедуры обновлены и соответствуют новой сигнатуре.

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

#!/bin/bash
# Описание: Поиск вызовов процедуры "СоздатьЭлемент" с пятью аргументами

# Ожидаемый результат: Отсутствие вызовов с пятью аргументами
ast-grep --pattern $'СоздатьЭлемент($_, $_, $_, $_, $_)'

Line range hint 432-471: Проверьте использование обновленной процедуры "ОбновитьЭлемент" по всей кодовой базе

Сигнатура процедуры ОбновитьЭлемент была изменена: параметр ЗаполнитьРодителя удален. Необходимо убедиться, что все вызовы этой процедуры в кодовой базе обновлены и соответствуют новой сигнатуре.

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


НовыйЭлемент = МенеджерОбъекта.СоздатьЭлемент();

ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы);
ЗаполнитьЗначениеПоУмолчанию(МенеджерОбъекта, НовыйЭлемент);
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, , "Родитель");
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Проверьте корректность вызова функции "ЗаполнитьЗначенияСвойств"

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

Предлагаю изменить вызов функции следующим образом:

-ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, , "Родитель");
+ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, СписокСвойств = Неопределено, ИсключаяСвойства = "Родитель");
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, , "Родитель");
ЗаполнитьЗначенияСвойств(НовыйЭлемент, СтрокаТаблицы, СписокСвойств = Неопределено, ИсключаяСвойства = "Родитель");

Comment on lines +326 to +327
СтрокаТаблицы.Служеб_Иерархический = ДополнительныеПараметры.Иерархический;
СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Возможная опечатка в префиксе "Служеб"

В названиях свойств Служеб_Иерархический и Служеб_ИерархияГруппИЭлементов возможно опечатка в префиксе "Служеб". Вероятно, следует использовать префикс "Служебный" для согласованности с другими свойствами.

Предлагаю исправить названия свойств следующим образом:

-СтрокаТаблицы.Служеб_Иерархический = ДополнительныеПараметры.Иерархический;
+СтрокаТаблицы.Служебный_Иерархический = ДополнительныеПараметры.Иерархический;

-СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
+СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
СтрокаТаблицы.Служеб_Иерархический = ДополнительныеПараметры.Иерархический;
СтрокаТаблицы.Служеб_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
СтрокаТаблицы.Служебный_Иерархический = ДополнительныеПараметры.Иерархический;
СтрокаТаблицы.Служебный_ИерархияГруппИЭлементов = ДополнительныеПараметры.ИерархияГруппИЭлементов;
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 326-326: src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl#L326
Возможная опечатка в "Служеб"


[notice] 327-327: src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl#L327
Возможная опечатка в "Служеб"

Copy link

Passed

Analysis Details

0 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 0 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1)

77-77: Обновление версии библиотеки.

Версия библиотеки успешно обновлена с "1.0.3.9" до "1.0.3.10". Это изменение соответствует обновлению в файле Configuration.xml.

Убедитесь, что вы также обновили файл CHANGELOG.md, если это еще не сделано, чтобы отразить изменения в новой версии.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between b3be306 and 8c3d18c.

📒 Files selected for processing (2)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1 hunks)
  • src/cf/Configuration.xml (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/cf/Configuration.xml
🧰 Additional context used

Copy link

Passed

Analysis Details

0 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 0 Code Smells

Coverage and Duplications

  • Coverage No coverage information (0.00% Estimated after merge)
  • Duplications 0.00% Duplicated Code (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

Copy link

@coderabbitai coderabbitai bot left a comment

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

📥 Commits

Files that changed from the base of the PR and between 8c3d18c and 5411363.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (10 hunks)
🧰 Additional context used
🔇 Additional comments (3)
src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (3)

121-140: Функция реализована корректно

Функция КлючиХешаПредопределенногоЭлемента правильно формирует ключи хеша на основе массива полей и признака группы, исключая ненужные поля.


214-219: Логика заполнения родителей элементов корректна

Процедура ЗаполнитьРодителейЭлементов успешно связывает предопределенные элементы с их родителями, основываясь на идентификаторах.


594-606: Функция реализована корректно

Функция ЗаполняемыеИсключаемыеСвойства корректно возвращает структуру со списком свойств для заполнения или исключения, в зависимости от параметров.

Comment on lines +85 to +90
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта));

Параметры = Новый Структура;
Параметры.Вставить("Менеджер", МенеджерОбъекта);
Параметры.Вставить("ПолноеИмя", ОбъектМетаданных.ПолноеИмя());
Параметры.Вставить("Иерархический", ОбъектМетаданных.Иерархический);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Проверьте, что ОбъектМетаданных определён перед использованием

В функции ДопПараметрыОбработкиПредопределенныхЭлементов переменная ОбъектМетаданных может быть неопределена, если Метаданные.НайтиПоТипу не найдёт соответствующий тип. Рекомендуется добавить проверку на Неопределено перед использованием ОбъектМетаданных, чтобы избежать ошибок при доступе к его свойствам.

Предлагаю добавить проверку следующим образом:

ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(МенеджерОбъекта));
Если ОбъектМетаданных = Неопределено Тогда
    Возврат;
КонецЕсли;

Comment on lines +450 to +452
Элемент.Родитель = НовыйРодитель;

РодительОтличается = Элемент.Родитель <> НовыйРодитель;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Логическая ошибка при проверке изменения родителя

После присвоения Элемент.Родитель = НовыйРодитель проверка РодительОтличается = Элемент.Родитель <> НовыйРодитель всегда будет возвращать Ложь. Рекомендуется сохранить старое значение родителя перед присвоением и сравнить с новым.

Предлагаю исправить код:

СтарыйРодитель = Элемент.Родитель;
Элемент.Родитель = НовыйРодитель;
РодительОтличается = СтарыйРодитель <> НовыйРодитель;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Улучшение существующей функциональности
Projects
None yet
2 participants