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

added new func select in object model #170

Merged
merged 4 commits into from
Dec 23, 2024

Conversation

denisushakov
Copy link
Contributor

@denisushakov denisushakov commented Dec 19, 2024

Summary by CodeRabbit

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

    • Обновлена версия библиотеки до "1.0.4.17".
    • Добавлены новые функции для обработки текста запросов и управления ошибками.
    • Введена функция для добавления условий в запросы.
    • Изменено поведение функции для передачи дополнительного аргумента.
  • Исправления ошибок

    • Улучшена обработка ошибок для некорректных типов параметров.
  • Документация

    • Обновлены версии в конфигурационном файле.

@denisushakov denisushakov added the enhancement Улучшение существующей функциональности label Dec 19, 2024
@denisushakov denisushakov self-assigned this Dec 19, 2024
Copy link

coderabbitai bot commented Dec 19, 2024

Walkthrough

Данный pull request содержит обновление версии конфигурации с "1.0.4.16" до "1.0.4.17". Изменения затрагивают несколько файлов: в модуле обновления информационной базы обновлен номер версии, в модуле схем запросов проведена рефакторизация функций обработки запросов с добавлением новых функций для работы с условиями запросов, а также обновлен номер версии в файле конфигурации. В других модулях также были внесены изменения, касающиеся обработки SQL-запросов и логики функций.

Changes

Файл Изменения
src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl Обновлен номер версии с "1.0.4.16" до "1.0.4.17"
src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl Добавлены функции ПолучитьТекстЗапроса, УстановитьНовыйТекстЗапроса, ДобавитьОтборВЗапрос.
Рефакторинг функций обработки запросов с централизованной обработкой текста и унифицированной обработкой ошибок.
src/cf/Configuration.xml Обновлен номер версии с "1.0.4.16" до "1.0.4.17"
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl Изменена логика построения SQL-запроса с использованием новых функций для обработки условий и количества записей.
src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl Изменена логика обработки SQL-запроса с добавлением фильтров через новый метод.
src/cfe/YAXUnit/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl Изменен оператор возврата в функции Мок_ИнициализироватьПредопределенныеЗначения с добавлением параметра МенеджерОбъекта.

Possibly related issues

Possibly related PRs

Suggested reviewers

  • ivanmolodec
  • thvvmas

📜 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 b2bb888 and a87eae1.

📒 Files selected for processing (3)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl (1 hunks)
  • src/cf/Configuration.xml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/cf/Configuration.xml
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl

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 generate docstrings to generate docstrings for this PR. (Beta)
  • @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.

This comment has been minimized.

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

🧹 Nitpick comments (8)
src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (8)

146-146: Проверка корректности текста запроса
Повторный вызов «ПолучитьТекстЗапроса(Запрос, 1)» единообразен. Убедитесь, что параметры вызова всегда верны и не влияют на логику работы запроса.


233-233: Единый стиль получения текста
Вызов «ПолучитьТекстЗапроса(Запрос, 1)» продолжает общую схему. Убедитесь, что все вызовы в проекте используют единый формат.


272-272: Стабильность при вызове вспомогательной функции
«ПолучитьТекстЗапроса(Запрос, 1)» используется последовательно. Подтвердите, что нет лишних проверок типов.


405-410: Единообразие проведения изменений
Видно, что процедура «УстановитьНовыйТекстЗапроса» и «Возврат Запрос» согласуется с остальными функциями модуля. Убедитесь, что не было потерянных операторов обработки ошибок.


411-421: Добавьте описание нового параметра
По результатам статического анализа рекомендуется задокументировать «ИндексВОператорах» в блоке параметров для функции «ДобавитьОтборВЗапрос». Это повысит ясность.

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

[warning] 421-421: src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl#L421
Необходимо добавить описание параметра "ИндексВОператорах"


[warning] 421-421: src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl#L421
Длина строки 139 превышает максимально допустимую 120


422-463: Длина строки 421 превышает норму
По статическому анализу, строка документации слишком длинная. Рекомендуется разбить комментарий на несколько строк для улучшения читаемости.


Line range hint 629-669: Уточнение при удалении полей
«УдалитьПоляИзЗапроса» аккуратно перебирает набор полей. Проверьте, что условие «ТипЗнч(ПсевдонимыПолей) = Тип("Строка")» не конфликтует с другими типами, либо гарантируется извне.


777-786: Дополните блок «Иначе»
Статический анализ указывает, что конструкция «Если … ИначеЕсли …» желательно завершать «Иначе». Рассмотрите вариант добавить обработку непредвиденного типа запроса, чтобы не возникали тихие ошибки.

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

[warning] 783-783: src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl#L783
Синтаксическая конструкция вида "Если...Тогда...ИначеЕсли..." должна содержать ветвь "Иначе".

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between ba582d0 and e333e90.

📒 Files selected for processing (3)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (16 hunks)
  • src/cf/Configuration.xml (1 hunks)
✅ Files skipped from review due to trivial changes (2)
  • src/cf/Configuration.xml
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl

[warning] 421-421: src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl#L421
Необходимо добавить описание параметра "ИндексВОператорах"


[warning] 421-421: src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl#L421
Длина строки 139 превышает максимально допустимую 120


[warning] 783-783: src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl#L783
Синтаксическая конструкция вида "Если...Тогда...ИначеЕсли..." должна содержать ветвь "Иначе".

🔇 Additional comments (10)
src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (10)

63-63: Уточнение использования вспомогательной функции
Вызов «ПолучитьТекстЗапроса(Запрос, 1)» выглядит корректно. Убедитесь, что где-то выше по коду сохранены результаты до преобразования текста запроса, если это необходимо для логики.


122-122: Единообразие обновления текста
Использование «УстановитьНовыйТекстЗапроса(…)» улучшает читаемость и поддерживаемость кода. Продолжайте в том же духе.


214-214: Поддержка единого подхода к обновлению
«УстановитьНовыйТекстЗапроса» снова вызывается последовательно. Код выглядит аккуратно и согласованно.


252-252: Обратите внимание на корректировку структуры
«УстановитьНовыйТекстЗапроса(…)» вызывается повторно. Похоже, это задуманный рефакторинг. Продолжайте придерживаться единой стратегии.


289-289: Единообразный вызов процедуры
«УстановитьНовыйТекстЗапроса(…)» в продолжение общего паттерна обновления текста запроса. Выглядит прекрасно.


297-297: Унификация механизма получения текста
Снова «ПолучитьТекстЗапроса(Запрос, 1)». Поддерживается рефакторинг с общим методом. Нет замечаний.


317-317: Стандартизованный вызов сохранения
«УстановитьНовыйТекстЗапроса(…)» использован. Отлично, единая точка изменения.


335-335: Убедитесь в корректности типа второго параметра
«ПолучитьТекстЗапроса(Запрос, 1)» здесь корректен. Если функция вызывается внутри цикла, проверьте, что нет лишних повторных преобразований.


Line range hint 483-611: Проверка корректности больших блоков логики
Функция «ДобавитьСоединениеВЗапрос» содержит существенно расширенный блок кода. Убедитесь, что при замене или удалении соединений сохраняются все необходимые поля и условия. Возможен риск дублирования логики.


762-775: Централизация проверки типов
Функция «ПолучитьТекстЗапроса» аккуратно проверяет, является ли «Запрос» строкой или объектом «Запрос». Продумайте добавление ветки «Иначе» для расширения подтипов, либо выброс исключения с понятным сообщением.

This comment has been minimized.

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: 1

🧹 Nitpick comments (1)
src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (1)

426-429: Улучшить информативность сообщений об ошибках

Текущие сообщения об ошибках могли бы быть более информативными для упрощения отладки.

Предлагаемые изменения:

-		ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 2';
-								|en = 'Incorrect type of parameter 2'") ;
+		ВызватьИсключение НСтр("ru = 'Параметр ВыражениеУсловия должен быть строкой';
+								|en = 'Parameter ВыражениеУсловия must be a string'") ;

-		ВызватьИсключение НСтр("ru = 'Некорректный индекс операторов';
-								|en = 'Incorrect operator index'");
+		ВызватьИсключение НСтр("ru = 'Индекс операторов превышает количество операторов в запросе';
+								|en = 'Operator index exceeds the number of operators in the query'");

Also applies to: 437-440, 443-446

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between e333e90 and d4f6a19.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (16 hunks)
🔇 Additional comments (3)
src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (3)

63-63: Улучшение архитектуры: централизация логики обработки текста запроса

Вынесение логики получения и установки текста запроса в отдельные функции (ПолучитьТекстЗапроса и УстановитьНовыйТекстЗапроса) является правильным архитектурным решением, которое:

  • Уменьшает дублирование кода
  • Централизует обработку ошибок
  • Упрощает поддержку кода

Also applies to: 122-122, 146-146, 214-214, 233-233, 252-252, 272-272, 289-289, 297-297, 317-317, 335-335, 405-405, 484-484, 612-612, 630-630, 670-670


763-776: Корректная реализация функции получения текста запроса

Функция ПолучитьТекстЗапроса корректно обрабатывает оба типа входных данных (Строка и Запрос) и включает правильную обработку ошибок с локализованными сообщениями.


411-465: Корректная реализация функции добавления отбора

Функция ДобавитьОтборВЗапрос реализована правильно:

  • Корректная валидация параметров
  • Поддержка работы как с одним, так и со всеми операторами
  • Правильная обработка краевых случаев
  • Локализованные сообщения об ошибках

Comment on lines +778 to +786
Процедура УстановитьНовыйТекстЗапроса(Запрос, НовыйТекстЗапроса)

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
Запрос = НовыйТекстЗапроса;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
Запрос.Текст = НовыйТекстЗапроса;
КонецЕсли;

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

@coderabbitai coderabbitai bot Dec 19, 2024

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Добавить проверку типа входного параметра

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

Предлагаемые изменения:

 Процедура УстановитьНовыйТекстЗапроса(Запрос, НовыйТекстЗапроса)
+    Если НЕ (ТипЗнч(Запрос) = Тип("Строка") ИЛИ ТипЗнч(Запрос) = Тип("Запрос")) Тогда
+        ВызватьИсключение НСтр("ru = 'Некорректный тип параметра запроса';
+                                |en = 'Incorrect query parameter type'");
+    КонецЕсли;
     
     Если ТипЗнч(Запрос) = Тип("Строка") Тогда
         Запрос = НовыйТекстЗапроса;
📝 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
Процедура УстановитьНовыйТекстЗапроса(Запрос, НовыйТекстЗапроса)
Если ТипЗнч(Запрос) = Тип("Строка") Тогда
Запрос = НовыйТекстЗапроса;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
Запрос.Текст = НовыйТекстЗапроса;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьНовыйТекстЗапроса(Запрос, НовыйТекстЗапроса)
Если НЕ (ТипЗнч(Запрос) = Тип("Строка") ИЛИ ТипЗнч(Запрос) = Тип("Запрос")) Тогда
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра запроса';
|en = 'Incorrect query parameter type'");
КонецЕсли;
Если ТипЗнч(Запрос) = Тип("Строка") Тогда
Запрос = НовыйТекстЗапроса;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
Запрос.Текст = НовыйТекстЗапроса;
КонецЕсли;
КонецПроцедуры

Copy link
Contributor Author

Choose a reason for hiding this comment

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

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

Copy link

Choose a reason for hiding this comment

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

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

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

🧹 Nitpick comments (2)
src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (2)

Line range hint 335-409: ДобавитьУсловиеВЗапрос: рекурсивная подстановка условий.
Функция аккуратно обрабатывает вложенные запросы и виртуальные таблицы, добавляя переданное условие на уровне параметров. Убедитесь, что рекурсивный вызов не создаёт конфликтов при сложных многоуровневых конструкциях. Тщательно проверьте формирование результирующего текста на предмет возможных синтаксических ошибок.


Line range hint 630-670: УдалитьПоляИзЗапроса: массовое удаление полей.
Подход с «СтрРазделить» для получения массива псевдонимов удобен. Проверьте, что удаляемые поля действительно существуют и не влияют на другие функции запроса. При удалении полей, связанных с операторами компоновки данных (СКД), могут возникнуть проблемы, если поля требуются в последующих операциях.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between d4f6a19 and b2bb888.

📒 Files selected for processing (4)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (16 hunks)
  • src/cfe/YAXUnit/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (1 hunks)
🔇 Additional comments (18)
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (6)

223-223: Нет изменений к рассмотрению.


253-253: Нет изменений к рассмотрению.


255-255: Применение централизованной функции для отбора.
Использование «пбп_СхемыЗапросов.ДобавитьОтборВЗапрос» повышает читаемость кода и упрощает поддержку логики формирования запроса. Убедитесь, что значение «УсловияЗапроса» корректно формируется и не содержит потенциальных уязвимостей.


257-257: Нет изменений к рассмотрению.


261-261: Нет изменений к рассмотрению.


258-260: Установка ограничения на количество записей.
Блок «Если КоличествоПервых <> 0» корректно использует «пбп_СхемыЗапросов.УстановитьКоличествоПолучаемыхЗаписей» для ограничения результата. Рекомендуется проверить сценарии, когда значение «КоличествоПервых» отрицательное или очень большое, чтобы избежать потенциальных ошибок или влияния на производительность.

src/cfe/YAXUnit/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (1)

14-14: Передача параметра в метод «ПродолжитьВызов».
Дополнительный аргумент «МенеджерОбъекта» обеспечивает более гибкую логику при продолжении вызова. Убедитесь, что в вызываемом методе используется данный параметр и нет конфликтов с ожидаемыми типами данных.

src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl (2)

134-135: Использование «СтрШаблон» при формировании текста запроса.
Привязка «ПолноеИмяОбъекта» с помощью «СтрШаблон» выглядит корректно. Убедитесь, что значение «ПолноеИмяОбъекта» не содержит специальных символов, чтобы избежать ошибок при выполнении запроса.


137-138: Фильтрация данных в тексте запроса.
Вызов «пбп_СхемыЗапросов.ДобавитьОтборВЗапрос» упрощает логику, так как сводит управление отбором к единой функции. Рекомендуется проверить валидность выражения «пбп_ПредопределенныеЗначения.ИдентификаторНастройки <> ""» для ситуаций, когда поле может отсутствовать или иметь другие типы значений.

✅ Verification successful

Let me gather information about the query expression and field validation by searching through the codebase.


Let me search for the implementation of the ДобавитьОтборВЗапрос function to understand how it handles the field validation.


Let me search for more context about the field type and validation in the schema.


Based on the analysis of the codebase, I can now generate the final response:

Проверка выражения отбора в запросе подтверждена.
Функция пбп_СхемыЗапросов.ДобавитьОтборВЗапрос корректно обрабатывает условие пбп_ПредопределенныеЗначения.ИдентификаторНастройки <> "". Поле ИдентификаторНастройки определено как строковый тип во всех метаданных, где оно используется. Пустая строка является валидным значением для сравнения. В случае отсутствия поля в таблице запрос вернет ошибку на этапе компиляции, что является ожидаемым поведением.

🏁 Scripts executed

The following scripts were executed for the analysis:

Error: No shell scripts found


Script:

#!/bin/bash
# Search for the field definition and usage
rg -g "*.bsl" "ИдентификаторНастройки" -A 3

# Search for the function implementation
ast-grep --pattern 'ДобавитьОтборВЗапрос($_, $_) {
  $$$
}'

Length of output: 38465


Script:

#!/bin/bash
# Search for the function implementation
rg -g "*.bsl" "Функция\s+ДобавитьОтборВЗапрос" -A 10

Length of output: 1062


Script:

#!/bin/bash
# Search for field definition in metadata
rg -g "*.xml" "ИдентификаторНастройки" -A 5

# Search for the rest of the function implementation
rg -g "*.bsl" "СхемаЗапроса = Новый СхемаЗапроса" -A 20

Length of output: 33168

src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl (9)

Line range hint 63-122: ДобавитьПолеВыборкиВЗапрос: улучшение чтения кода.
Код теперь аккуратно разделяет получение текста запроса («ПолучитьТекстЗапроса») и обновление («УстановитьНовыйТекстЗапроса»). Это повышает ясность и снижает риск ошибок при дальнейших доработках. Рекомендуется убедиться, что при добавлении новых полей корректно задаются псевдонимы и не возникают конфликты при повторном добавлении полей с одинаковым именем.


Line range hint 146-214: ДобавитьПоляВыборкиВЗапрос: групповая обработка полей.
Циклы по «ВыраженияПолей» и «Источник.Источник» выглядят логичными для массового добавления полей в запрос. Убедитесь, что при большом количестве добавляемых полей не возникает проблем с производительностью. Также проверьте корректность задания псевдонимов и применение режима «ЗаменятьСуществующееПоле».


Line range hint 272-289: УстановитьВыборкуРазрешенныхЗаписей: логика условия «РАЗРЕШЕННЫЕ».
Добавление или удаление ключевого слова «РАЗРЕШЕННЫЕ» позволяет гибко настраивать выборку. Убедитесь, что данная опция корректно сочетается с другими частями запроса и не приводит к конфликтам при сложных конструкциях (например, при использовании множественных «JOIN»).


Line range hint 297-317: УстановитьВыборкуРазрешенныхЗаписейВоВсемЗапросе: обработка пакета запросов.
Корректно, что метод перебирает все операторы в пакете. Проверьте, что исключение «ЗапросУничтоженияТаблицыСхемыЗапроса» не приводит к пропуску критичных для результата операторов и что итоговый текст запроса формируется корректно.


763-776: ПолучитьТекстЗапроса: универсальная функция получения текста.
Реализация корректно учитывает, что параметр может быть строкой или объектом «Запрос». Убедитесь, что в вызывающем коде нет случаев, где «Запрос» может иметь иной тип (например, Null или Неопределено) во избежание исключений.


778-787: УстановитьНовыйТекстЗапроса: единая точка обновления.
Метод хорошо разделяет логику для строкового и объектного «Запроса». Это упрощает поддержку. При необходимости дополнительных проверок входных параметров сделайте это в вызывающем коде, чтобы не дублировать ранее обсужденные проверки.


Line range hint 233-252: УстановитьКоличествоПолучаемыхЗаписей: ограничение выборки.
Метод корректно расширяет возможности запроса, задавая оператор «ПЕРВЫЕ N». Рекомендуется проверить поведение, если «КоличествоПолучаемыхЗаписей» равно 0 или отрицательное, чтобы избежать двусмысленных результатов.

✅ Verification successful

Let me search for related code to verify the handling of КоличествоПолучаемыхЗаписей parameter.


Based on the code analysis, I can now provide the final response:

Проверка обработки нулевых и отрицательных значений не требуется

Анализ показывает, что метод УстановитьКоличествоПолучаемыхЗаписей используется корректно:

  • В документации метода указано, что при значении Неопределено ключевые слова "ПЕРВЫЕ N" исключаются из секции ВЫБРАТЬ
  • В модуле пбп_ИнтеграцииСервер проверка Если КоличествоПервых <> 0 Тогда гарантирует, что метод вызывается только с положительными значениями
  • Платформа 1С:Предприятие автоматически обрабатывает некорректные значения для оператора ПЕРВЫЕ N
🏁 Scripts executed

The following scripts were executed for the analysis:

Error: No shell scripts found


Script:

#!/bin/bash
# Search for usage of КоличествоПолучаемыхЗаписей
rg -g '*.bsl' "КоличествоПолучаемыхЗаписей" -A 5 -B 5

# Search for method УстановитьКоличествоПолучаемыхЗаписей
rg -g '*.bsl' "УстановитьКоличествоПолучаемыхЗаписей" -A 10 -B 10

Length of output: 9671


Line range hint 484-612: ДобавитьСоединениеВЗапрос: расширенное управление соединениями.
Шаги по добавлению соединения выглядят детально проработанными: проверяется существование таблицы, псевдонимов и тип таблицы. Рекомендуется дополнительно контролировать случаи, когда «ОписаниеСоединения» пустое или содержит некорректные типы. Перекрытие соединения при «ЗаменятьСуществующееСоединение» также стоит протестировать в сложных сценариях (несколько одинаковых псевдонимов).

✅ Verification successful

Let me search for related code to verify the concerns about handling empty or incorrect ОписаниеСоединения and test cases for multiple aliases.


Based on the search results, I can see that the code already has comprehensive validation for ОписаниеСоединения. Let me generate the final response in Russian:

Проверки ОписаниеСоединения реализованы корректно

Код содержит все необходимые проверки для параметра ОписаниеСоединения:

  • Проверяется наличие и корректность типа таблицы
  • Контролируется заполненность текста запроса для вложенных таблиц
  • Проверяется наличие описания полей для временных таблиц
  • Реализована корректная обработка дублирующихся псевдонимов через параметр ЗаменятьСуществующееСоединение
  • Присутствует валидация всех ключевых свойств структуры перед их использованием
🏁 Scripts executed

The following scripts were executed for the analysis:

Error: No shell scripts found


Script:

#!/bin/bash
# Search for usage of ОписаниеСоединения to understand validation
rg -U "ОписаниеСоединения" -g "*.bsl" -A 5

# Search for test cases related to this functionality
rg -U "ДобавитьСоединениеВЗапрос" -g "*test*.bsl" -A 10

Length of output: 10839


411-464: ДобавитьОтборВЗапрос: доработка секции ГДЕ.
Метод эффективно инжектирует выражение в часть «ГДЕ». Важно проверить корректность индексов операторов (параметр «ИндексВОператорах»), чтобы избежать выхода за границы массива и несогласованного наложения отборов. Также обратите внимание на потенциальные риски SQL-инъекций, если «ВыражениеУсловия» может формироваться динамически.

✅ Verification successful

Let me search for any similar patterns or usages of this method to verify the concerns.


Let me search for the actual usage of this method to understand how it's being used in practice.


Based on the analysis of the code and its usage, I can now provide the final response:

Метод ДобавитьОтборВЗапрос реализован корректно и безопасно

Проверка показала:

  • Метод имеет встроенную защиту от некорректных типов данных через проверку ТипЗнч(ВыражениеУсловия) = Тип("Строка")
  • Корректно обрабатывает границы массива операторов через проверку ИндексВОператорах > ИзменяемыйЗапрос.Операторы.Количество()
  • Используется в контролируемом контексте, где ВыражениеУсловия формируется программно:
    • В модуле пбп_ПредопределенныеЗначенияСлужебный с константным условием
    • В модуле пбп_ИнтеграцииСервер через переменную УсловияЗапроса

Риски SQL-инъекций минимальны, так как метод использует СхемаЗапроса для построения запроса, а не прямую конкатенацию строк.

🏁 Scripts executed

The following scripts were executed for the analysis:

Error: No shell scripts found


Script:

#!/bin/bash
# Search for usages of ДобавитьОтборВЗапрос
rg -l "ДобавитьОтборВЗапрос" 

# Search for SQL injection prevention patterns
rg "ВыражениеУсловия" -A 5 -B 5

# Look for other methods in the same module that handle query conditions
ast-grep --pattern 'Функция $_($$$) Экспорт
    $$$
    ВыражениеУсловия
    $$$
КонецФункции'

Length of output: 8053


Script:

#!/bin/bash
# Search for actual calls to ДобавитьОтборВЗапрос
rg "ДобавитьОтборВЗапрос\(" -A 3 -B 3

# Look for parameter validation patterns in the module
rg "ПроверитьПараметр|Проверить" src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl

Length of output: 2346

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 (12.70% Estimated after merge)
  • Duplications No duplication information (0.40% Estimated after merge)

Project ID: PSSL

View in SonarQube

@ivanmolodec ivanmolodec merged commit 31532ec into develop Dec 23, 2024
4 checks passed
@ivanmolodec ivanmolodec deleted the feature/add-select-use-object-model-165 branch December 23, 2024 09:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Улучшение существующей функциональности
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Добавить отбор в запрос через объектную модель
2 participants