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

refact predefined subsystem functions #163

Merged
merged 1 commit into from
Dec 13, 2024

Conversation

denisushakov
Copy link
Contributor

@denisushakov denisushakov commented Dec 12, 2024

Summary by CodeRabbit

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

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

    • Обновлены версии в конфигурационных файлах и модулях для отражения изменений.
  • Документация

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

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

coderabbitai bot commented Dec 12, 2024

Walkthrough

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

Changes

Файл Изменения
src/cf/CommonForms/.../Module.bsl Обновлены процедуры ОбработатьПредопределенныеЭлементы, изменены источники переменной ДопПараметры.
src/cf/CommonModules/.../Module.bsl Обновлена версия в процедуре ПриДобавленииПодсистемы с "1.0.4.14" на "1.0.4.15".
src/cf/CommonModules/.../Module.bsl Удалены функции ОбработатьПредопределенныеЗначения и ДопПараметрыОбработкиПредопределенныхЭлементов.
src/cf/CommonModules/.../Module.bsl Добавлены новые функции и процедуры для обработки предопределенных значений, включая ОбработатьПредопределенныеЗначения.
src/cf/Configuration.xml Обновлена версия конфигурации с "1.0.4.14" на "1.0.4.15".
src/cf/Subsystems/.../пбп_ПредопределенныеЗначения.xml Добавлен новый элемент <xr:Item> для CommonModule.пбп_ПредопределенныеЗначенияСлужебный в секции <Content>.

Possibly related issues

Possibly related PRs

  • Feature/predefined id unique check 92 #118: Этот PR касается обработки предопределенных значений и включает изменения в функциях, которые управляют идентификаторами, что напрямую связано с изменениями в основном PR.
  • refactoring the creation of hierarchical elements #129: Этот PR вводит улучшения в управление предопределенными значениями, включая новые функции и модификации, что соответствует изменениям в основном PR.
  • fixed bugs #136: Этот PR улучшает обработку ошибок и контрольный поток в файле Module.bsl, что актуально для изменений в основном PR, касающихся разрешения конфликтов.
  • Added objects to subsystems #140: Этот PR добавляет новые модули и обновляет версионность, что может косвенно относиться к общей структуре и управлению предопределенными значениями.
  • fixed bugs and smells #162: Этот PR включает обновления версий библиотеки и незначительные модификации, которые могут относиться к общему управлению модулями и их функциональностью.

Suggested labels

bug

Suggested reviewers

  • ivanmolodec
  • thvvmas

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. (Experiment)
  • @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.

Copy link

Passed

Analysis Details

3 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 3 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 (6)
src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (5)

Line range hint 34-47: Отсутствует проверка входных параметров на заполненность

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

Рекомендуется добавить проверки входных параметров:

Функция ОбработатьПредопределенныеЗначения(ТаблицаПредопределенных, МенеджерОбъекта) Экспорт

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

    // Дальнейший код...

КонецФункции

Line range hint 75-76: Лишний возврат из функции

В строке 75-76 производится возврат переменной Параметры, которая уже инициализирована в начале функции ДопПараметрыОбработкиПредопределенныхЭлементов. Этот возврат избыточен, так как функция все равно продолжит выполнение кода ниже.

Можно убрать данный блок кода, чтобы исключить избыточность:

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

Line range hint 134-140: Риск SQL-инъекции при формировании текста запроса

При использовании функции СтрЗаменить для формирования текста запроса (строки 135-139) существует риск внедрения вредоносного кода при подстановке данных. Это может привести к SQL-инъекциям.

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

Запрос.Текст = 
    "ВЫБРАТЬ
    |   ...
    |ИЗ
    |   &ИмяОбъекта КАК пбп_ПредопределенныеЗначения
    |ГДЕ
    |   ...";

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

Line range hint 259-266: Не обработан случай отсутствия элемента в выборке

В процедуре УдалитьИзТаблицыСуществующиеЭлементы отсутствует обработка ситуации, когда элемент не найден в выборке ВыборкаДетальныеЗаписи (строки 259-266). Это может привести к непредвиденному поведению программы.

Рекомендуется добавить обработку случая, когда элемент не найден:

Если ВыборкаДетальныеЗаписи.НайтиСледующий(Строка.ИдентификаторНастройки, "ИдентификаторНастройки") Тогда
    // Существующий код...
Иначе
    // Обработка ситуации отсутствия элемента
КонецЕсли;

Line range hint 488-490: Избыточная проверка на заполненность

В процедуре ОбновитьЭлемент проверяется заполненность СтрокаТаблицы.Служебный_ПредопределенныйЭлемент (строки 488-490). Если до этой процедуры гарантируется, что данный элемент всегда заполнен, эту проверку можно удалить для упрощения кода.

Удалите избыточную проверку:

- Если Не ЗначениеЗаполнено(СтрокаТаблицы.Служебный_ПредопределенныйЭлемент) Тогда
-     Возврат;
- КонецЕсли;
src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form/Module.bsl (1)

208-212: Рекомендуется добавить обработку ошибок

Для повышения надежности кода рекомендуется добавить блок Попытка...Исключение при вызове методов служебного модуля, так как операции с предопределенными элементами могут вызвать исключения во время выполнения.

 	Менеджер = пбп_Переадресация.МенеджерОбъектаПоПолномуИмени(ИмяФормыВладельца);
+	Попытка
 		ДопПараметры = пбп_ПредопределенныеЗначенияСлужебный.ДопПараметрыОбработкиПредопределенныхЭлементов(
 			Таблица, Менеджер);
 		пбп_ПредопределенныеЗначенияСлужебный.СоздатьОбновитьПредопределенныеЗначения(Таблица, ДопПараметры);
+	Исключение
+		ЗаписьЖурналаРегистрации("ОбработкаПредопределенныхЭлементов",
+			УровеньЖурналаРегистрации.Ошибка,,, 
+			ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+		ВызватьИсключение;
+	КонецПопытки
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 7e9eb46 and 19b8da2.

📒 Files selected for processing (6)
  • src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl (2 hunks)
  • src/cf/Configuration.xml (1 hunks)
  • src/cf/Subsystems/пбп_ПредопределенныеЗначения.xml (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/cf/Configuration.xml
🔇 Additional comments (3)
src/cf/Subsystems/пбп_ПредопределенныеЗначения.xml (1)

41-41: Добавление нового модуля в подсистему

В строке 41 добавлен новый модуль пбп_ПредопределенныеЗначенияСлужебный в содержимое подсистемы. Убедитесь, что добавление данного модуля необходимо и корректно, а также что это не нарушает зависимостей между модулями.

Запустите следующий скрипт для проверки зависимостей:

✅ Verification successful

Let me generate additional scripts to verify the module dependencies and structure:


Based on the analysis of the code and subsystem structure, I can now provide the final response:

Добавление модуля корректно и обосновано

Модуль пбп_ПредопределенныеЗначенияСлужебный является ключевым компонентом подсистемы предопределенных значений и используется другими модулями подсистемы для:

  • Обработки предопределенных элементов
  • Управления состояниями предопределенных элементов
  • Проверки зависимостей между модулями
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Найти все модули, использующие пбп_ПредопределенныеЗначенияСлужебный

rg 'пбп_ПредопределенныеЗначенияСлужебный' src/

Length of output: 1942


Script:

#!/bin/bash
# Проверим содержимое модуля для понимания его назначения
cat src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl

# Проверим структуру подсистемы
cat src/cf/Subsystems/пбп_ПредопределенныеЗначения.xml

Length of output: 27910

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

77-77: Обновление версии без соответствующих изменений

В строке 77 версия обновлена с "1.0.4.14" до "1.0.4.15". Однако в данном модуле отсутствуют другие изменения, кроме обновления версии. Убедитесь, что версия обновляется синхронно с изменениями в функциональности или других связанных модулях.

Проверьте соответствие номера версии с изменениями в проекте и обновите описание изменений в файле CHANGELOG при необходимости.

src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form/Module.bsl (1)

209-211: Проверьте зависимости после переноса функциональности в служебный модуль

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

✅ Verification successful

Let me generate additional verification scripts to check for any other potential references or usages that might need updating.


Based on the analysis of the search results, I can now provide the final response:

Перенос функциональности в служебный модуль выполнен корректно

Проверка показала, что:

  • Все вызовы методов ДопПараметрыОбработкиПредопределенныхЭлементов и СоздатьОбновитьПредопределенныеЗначения корректно перенесены в служебный модуль
  • Старые ссылки на эти методы в модуле пбп_ПредопределенныеЗначения отсутствуют
  • Оставшиеся упоминания старого модуля являются корректными (в комментариях к API и в запросах к метаданным)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify that all references to the old module have been updated

# Search for any remaining references to the old module
rg "пбп_ПредопределенныеЗначения\.(?:ДопПараметрыОбработкиПредопределенныхЭлементов|СоздатьОбновитьПредопределенныеЗначения)"

# Search for references to the new service module to ensure consistent usage
rg "пбп_ПредопределенныеЗначенияСлужебный\.(?:ДопПараметрыОбработкиПредопределенныхЭлементов|СоздатьОбновитьПредопределенныеЗначения)"

Length of output: 1437


Script:

#!/bin/bash
# Search for any other references to пбп_ПредопределенныеЗначения module
rg "пбп_ПредопределенныеЗначения\." -A 2

# Search for files that might contain both old and new module references
rg -l "пбп_ПредопределенныеЗначения" | xargs rg "пбп_ПредопределенныеЗначенияСлужебный"

Length of output: 19403

Comment on lines +217 to +274
Функция УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, ДополнительныеПараметры) Экспорт

ТаблицаКонфликтныхЭлементов = пбп_ПредопределенныеЗначенияПереопределяемый
.ТаблицаКонфликтныхЭлементов(ДополнительныеПараметры.Менеджер, ТаблицаПредопределенных.СкопироватьКолонки());

Если Не ЗначениеЗаполнено(ТаблицаПредопределенных) Тогда
Возврат ТаблицаКонфликтныхЭлементов;
КонецЕсли;

ПолноеИмяОбъекта = ИмяОбъектаМетаданных(ДополнительныеПараметры.ПолноеИмя);

ТаблицаПредопределенных.Сортировать("ЭтоГруппа УБЫВ, УровеньИерархии");

ОбработатьДублиИдентификаторов(ТаблицаПредопределенных, ТаблицаКонфликтныхЭлементов);

ИдентификаторыНастроек = ТаблицаПредопределенных.ВыгрузитьКолонку("ИдентификаторНастройки");

Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка,
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки КАК ИдентификаторНастройки,
| пбп_СостоянияПредопределенныхЭлементов.ХешСумма КАК ХешСумма,
| ЕСТЬNULL(пбп_СостоянияПредопределенныхЭлементов.РучноеИзменение, ЛОЖЬ) КАК РучноеИзменение,
| пбп_ПредопределенныеЗначения.ПометкаУдаления КАК ПометкаУдаления,
| пбп_СостоянияПредопределенныхЭлементов.ХешСумма ЕСТЬ NULL КАК ХешОтсутствует
|ИЗ
| %1 КАК пбп_ПредопределенныеЗначения
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пбп_СостоянияПредопределенныхЭлементов КАК пбп_СостоянияПредопределенныхЭлементов
| ПО пбп_ПредопределенныеЗначения.Ссылка = пбп_СостоянияПредопределенныхЭлементов.Объект
|ГДЕ
| пбп_ПредопределенныеЗначения.ИдентификаторНастройки В(&СписокИдентификаторов)";

Запрос.Текст = СтрШаблон(ТекстЗапроса, ПолноеИмяОбъекта);

Запрос.УстановитьПараметр("СписокИдентификаторов", ИдентификаторыНастроек);

ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();

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

Для Каждого Строка Из СтрокиДляУдаления Цикл
ТаблицаПредопределенных.Удалить(Строка);
КонецЦикла;

Возврат ТаблицаКонфликтныхЭлементов;

КонецФункции
Copy link

@coderabbitai coderabbitai bot Dec 12, 2024

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Отсутствует проверка на пустоту переданной таблицы

В функции УдалитьИзТаблицыСуществующиеЭлементы нет проверки на пустоту параметра ТаблицаПредопределенных. При передаче пустой таблицы возможны ошибки при выполнении дальнейших операций.

Добавьте проверку на пустоту в начале функции:

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

Copy link
Contributor Author

@denisushakov denisushakov Dec 12, 2024

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, спасибо за пояснение. Вы правы, проверка на пустоту таблицы уже присутствует в функции с использованием ЗначениеЗаполнено(ТаблицаПредопределенных). Приношу извинения за невнимательность.

(_/)
( •_•)


✏️ Learnings added
Learnt from: denisushakov
PR: firstBitSportivnaya/PSSL#163
File: src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl:217-274
Timestamp: 2024-12-12T15:00:30.060Z
Learning: В языке BSL функция `ЗначениеЗаполнено(ТаблицаЗначений)` эффективно проверяет наличие записей в таблице значений.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

Copy link
Contributor

Choose a reason for hiding this comment

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

@denisushakov а он че понимает, что ты ему пишешь? Он в исключения себе заносит или просто данное замечание перестает игнорировать, как сонар?

Copy link

Choose a reason for hiding this comment

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

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

Copy link
Member

Choose a reason for hiding this comment

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

@denisushakov а он че понимает, что ты ему пишешь? Он в исключения себе заносит или просто данное замечание перестает игнорировать, как сонар?

Он учится чтобы потом заменить тебя

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@thvvmas @ivanmolodec Начинаем давать не правильные правила написания кода)

Copy link
Contributor

Choose a reason for hiding this comment

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

@denisushakov а он че понимает, что ты ему пишешь? Он в исключения себе заносит или просто данное замечание перестает игнорировать, как сонар?

Он учится чтобы потом заменить тебя

Ну во вкусно и точка всегда вакансии есть =)

Comment on lines +375 to +411

Просмотренные = Новый Соответствие;

СтрокиДляУдаления = Новый Массив;
Для Каждого Строка Из ТаблицаПредопределенных Цикл
Если ПустаяСтрока(Строка.ИдентификаторНастройки) Тогда
СтрокиДляУдаления.Добавить(Строка);

СообщитьОНезаполненностиИдентификатора(Строка.Наименование);
Продолжить;
КонецЕсли;

Если Просмотренные[Строка.ИдентификаторНастройки] <> Неопределено Тогда
Просмотренные[Строка.ИдентификаторНастройки] = Просмотренные[Строка.ИдентификаторНастройки] + 1;
Иначе
Просмотренные.Вставить(Строка.ИдентификаторНастройки, 1);
КонецЕсли;
КонецЦикла;

Для Каждого Строка Из ТаблицаПредопределенных Цикл
Количество = Просмотренные[Строка.ИдентификаторНастройки];
Если Количество <> Неопределено И Количество > 1 Тогда
СтрокиДляУдаления.Добавить(Строка);

СтрокаКонфликт = ТаблицаКонфликтныхЭлементов.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаКонфликт, Строка);
СтрокаКонфликт.Служебный_ДублированиеИдентификаторов = Истина;

СообщитьОДублированииИдентификаторов(Строка.ИдентификаторНастройки);
КонецЕсли;
КонецЦикла;

Для Каждого Строка Из СтрокиДляУдаления Цикл
ТаблицаПредопределенных.Удалить(Строка);
КонецЦикла;

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

@coderabbitai coderabbitai bot Dec 12, 2024

Choose a reason for hiding this comment

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

⚠️ Potential issue

Потенциальная ошибка при удалении строк из таблицы в цикле

В процедуре ОбработатьДублиИдентификаторов строки удаляются из таблицы внутри цикла по самой этой таблице (строки 407-410). Это может привести к непредсказуемому поведению цикла.

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

// Собираем строки для удаления
СтрокиДляУдаления = Новый Массив;
// ...
// После цикла удаляем строки
Для Каждого УдаляемаяСтрока Из СтрокиДляУдаления Цикл
    ТаблицаПредопределенных.Удалить(УдаляемаяСтрока);
КонецЦикла;

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, спасибо за пояснение. Если удаление строк происходит по отдельному массиву, проблем не возникнет.

(•‿•)


✏️ Learnings added
Learnt from: denisushakov
PR: firstBitSportivnaya/PSSL#163
File: src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl:375-411
Timestamp: 2024-12-12T15:04:03.281Z
Learning: В процедуре `ОбработатьДублиИдентификаторов` в файле `src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебный/Ext/Module.bsl` допустимо удалять строки из `ТаблицаПредопределенных` внутри цикла, если перебор осуществляется по массиву строк для удаления, а не по самой таблице.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

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.

перенести функции в служебный модуль
3 participants