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

Актуализация подсистемы загрузки таб дока #146

Merged
merged 19 commits into from
Nov 21, 2024

Conversation

thvvmas
Copy link
Contributor

@thvvmas thvvmas commented Nov 12, 2024

#145

Summary by CodeRabbit

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

    • Улучшена обработка загрузки файлов Excel с добавлением параметров для управления ошибками и значениями.
    • Добавлена функция для инициализации таблицы со свойствами колонок при загрузке файлов.
    • Введены новые параметры для управления получением сообщений через FTP/SFTP.
    • Обновлена структура параметров запроса для более гибкой обработки SQL-запросов.
    • Добавлена функция для динамического вызова экспортированных функций с учетом параметров безопасности.
    • Введена функция для преобразования строкового представления чисел в числовой формат.
    • Добавлена функция для чтения CSV-файлов и инициализации таблиц с новыми колонками.
    • Обновлены заголовки элементов интерфейса для улучшения ясности в настройках интеграции.
    • Добавлена новая функция для инициализации таблицы параметров запроса внешнего источника.
    • Обновлена логика обработки значений по умолчанию для работы с JSON-строками.
    • Обновлена версия библиотеки до 1.0.4.14.
    • Добавлены новые модули для обработки серверных уведомлений и управления расписанием задач.
    • Введена новая функция для инициализации таблицы конфликтных элементов.
  • Исправления ошибок

    • Улучшено управление ресурсами при чтении файлов с SFTP-сервера.
  • Документация

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

@thvvmas thvvmas added the enhancement Улучшение существующей функциональности label Nov 12, 2024
@thvvmas thvvmas requested a review from ivanmolodec November 12, 2024 10:12
@thvvmas thvvmas self-assigned this Nov 12, 2024
Copy link

coderabbitai bot commented Nov 12, 2024

Walkthrough

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

Changes

Файл Изменения
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl Обновлены процедуры ФормированиеТаблицы и ИнициализироватьТаблицуСоСвойствамиКолонок, добавлены новые параметры для обработки чтения Excel-файлов.
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl Изменена функция ЗагрузитьИзXLS, добавлены новые параметры для обработки чтения, обновлена логика инициализации параметров.
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl Добавлены функции ИнициализироватьТаблицуСоСвойствамиКолонок и ИнициализироватьТаблицуСоСвойствамиCSV, обновлены функции для обработки параметров чтения и конвертации данных.
src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl Обновлены функции для работы с параметрами FTP/SFTP, добавлен новый ключ для указания расширения файла на сервере.
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl Изменена функция ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям, параметр ПараметрыЗапроса изменен на тип ТаблицаЗначений.
src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl Обновлена функция ПолучитьСтруктуруЗаписиИстории, добавлено новое поле для управления дополнительной обработкой сообщений.
src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl Добавлена функция ВызватьФункциюКонфигурации, позволяющая динамически вызывать экспортируемые функции с заданными параметрами.
src/cf/CommonModules/пбп_СтроковыеФункцииКлиентСервер/Ext/Module.bsl Добавлена функция СтрокаВЧисло, предназначенная для преобразования строкового представления числа в действительное число.
src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl Обновлены процедуры для настройки видимости элементов формы, изменены заголовки для интеграционных параметров.
src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Ext/ManagerModule.bsl Обновлена функция ПривестиЗначениеПоУмолчаниюREST, добавлена новая логика для обработки строковых значений.

Possibly related PRs

Suggested reviewers

  • ivanmolodec

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between ec9a37f and c7c67c1.

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

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.

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

🧹 Outside diff range and nitpick comments (10)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (3)

34-36: Улучшите документацию метода

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

  • Примеры использования новых параметров
  • Подробное описание возвращаемого значения в случае ошибки
  • Примеры значений для параметра БулевоЗначениеИстина

49-55: Добавьте проверку параметров

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

  • Проверка типа значения НомерПервойСтроки
  • Проверка корректности значения БулевоЗначениеИстина

84-85: Улучшите читаемость инициализации структуры

Длинная строка с перечислением параметров может быть трудна для поддержки.

Предлагаю следующий формат:

-	СтруктураПараметров = Новый Структура(
-		"АдресМакета, АдресПомещения, НазваниеЛиста, НомерПервойСтроки,"
-		+ " ПоНаименованию, ВыдаватьОшибку, БулевоЗначениеИстина");
+	СтруктураПараметров = Новый Структура;
+	СтруктураПараметров.Вставить("АдресМакета");
+	СтруктураПараметров.Вставить("АдресПомещения");
+	СтруктураПараметров.Вставить("НазваниеЛиста");
+	СтруктураПараметров.Вставить("НомерПервойСтроки");
+	СтруктураПараметров.Вставить("ПоНаименованию");
+	СтруктураПараметров.Вставить("ВыдаватьОшибку");
+	СтруктураПараметров.Вставить("БулевоЗначениеИстина");
src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl (1)

63-65: Оптимизация производительности через условную обработку сообщений.

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

Рекомендуется добавить документацию о том, в каких случаях следует устанавливать флаг "ОбрабатыватьСообщение" в значение Ложь, чтобы другие разработчики могли эффективно использовать эту оптимизацию.

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (1)

233-239: Одобрено с рекомендацией по безопасности

Реализация корректно обрабатывает новую структуру параметров запроса. Рекомендуется добавить проверку и экранирование операторов сравнения для предотвращения SQL-инъекций.

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

 Для Каждого КлючЗначениеОператор Из ПараметрыЗапроса Цикл
     НуженПеренос = ?(ПустаяСтрока(УсловияЗапроса), "", "
     |   И ");
+    ДопустимыеОператоры = Новый Массив;
+    ДопустимыеОператоры.Добавить("=");
+    ДопустимыеОператоры.Добавить("<>");
+    ДопустимыеОператоры.Добавить(">");
+    ДопустимыеОператоры.Добавить("<");
+    Если ДопустимыеОператоры.Найти(КлючЗначениеОператор.Оператор) = Неопределено Тогда
+        ВызватьИсключение НСтр("ru='Недопустимый оператор сравнения'");
+    КонецЕсли;
     УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 %3 &%2",
         НуженПеренос, КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Оператор);
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (5)

145-153: Добавьте описания для новых параметров функции ПреобразоватьСтроковыеЗначенияПоТипамСвойств.

В комментариях к функции отсутствуют описания для параметров ЗначениеИстина, ОставитьСтроковые и ИскатьПомеченныеНаУдаление. Пожалуйста, дополните документацию для улучшения понимания функционала.

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

[failure] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 119 до 15


[warning] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 256, что больше установленного лимита в 200 строк


[warning] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите количество необязательных параметров c 4 до допустимого 3


[failure] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 51 до 20


[warning] 153-153: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L153
Необходимо добавить описание параметра "ЗначениеИстина"


[warning] 153-153: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L153
Необходимо добавить описание параметра "ОставитьСтроковые"


[warning] 153-153: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L153
Необходимо добавить описание параметра "ИскатьПомеченныеНаУдаление"


Line range hint 152-353: Снизьте сложность функции ПреобразоватьСтроковыеЗначенияПоТипамСвойств.

Функция имеет высокую когнитивную сложность (119) и цикломатическую сложность (51), а также превышает рекомендуемую длину в 200 строк (256 строк). Рекомендуется разбить функцию на несколько более мелких, чтобы улучшить читаемость и упрощить поддержку кода.

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

[failure] 274-274: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L274
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 277-277: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L277
Необходимо избавиться от многократного использования строкового литерала " КАК "


152-152: Уменьшите количество необязательных параметров в функции ПреобразоватьСтроковыеЗначенияПоТипамСвойств.

Функция содержит 4 необязательных параметра, что превышает рекомендованный лимит в 3. Рассмотрите возможность объединения связанных параметров в структуру или объект для сокращения количества параметров.

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

[failure] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 119 до 15


[warning] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 256, что больше установленного лимита в 200 строк


[warning] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите количество необязательных параметров c 4 до допустимого 3


[failure] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 51 до 20


301-313: Добавьте ветвь Иначе в конструкцию Если...Тогда...ИначеЕсли....

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

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

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


[warning] 301-301: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L301
Необходимо избавиться от многократного использования строкового литерала "Строкой"


895-895: Удалите закомментированный код.

Закомментированный код в строке 895 не рекомендуется оставлять в рабочем коде, так как это может вызвать путаницу. Если код больше не нужен, его следует удалить.

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

[warning] 895-895: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L895
Программные модули не должны иметь закомментированных фрагментов кода

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 9b2965a and b41e123.

📒 Files selected for processing (6)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (18 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl (4 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl (2 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl

[notice] 41-41: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L41
Добавьте описание метода программного интерфейса


[warning] 42-42: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L42
Уменьшите количество необязательных параметров c 5 до допустимого 3

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl

[failure] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 119 до 15


[warning] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 256, что больше установленного лимита в 200 строк


[warning] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите количество необязательных параметров c 4 до допустимого 3


[failure] 152-152: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L152
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 51 до 20


[warning] 153-153: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L153
Необходимо добавить описание параметра "ЗначениеИстина"


[warning] 153-153: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L153
Необходимо добавить описание параметра "ОставитьСтроковые"


[warning] 153-153: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L153
Необходимо добавить описание параметра "ИскатьПомеченныеНаУдаление"


[failure] 274-274: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L274
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 277-277: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L277
Необходимо избавиться от многократного использования строкового литерала " КАК "


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


[warning] 301-301: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L301
Необходимо избавиться от многократного использования строкового литерала "Строкой"


[failure] 349-349: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L349
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью


[warning] 497-497: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L497
Пропущена точка с запятой в конце выражения


[warning] 489-489: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L489
Необходимо избавиться от многократного использования строкового литерала "Число"


[warning] 557-557: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L557
Уберите инициализацию параметров метода "УдалитьОбласть" вложенными методами


[warning] 557-557: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L557
Уберите инициализацию параметров метода "Область" вложенными методами


[warning] 572-572: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L572
Уменьшите количество параметров c 8 до допустимого 7


[notice] 577-577: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L577
Слева от '+' не хватает пробела


[notice] 583-583: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L583
Слева от '+' не хватает пробела


[notice] 610-610: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L610
Слева от '+' не хватает пробела


[notice] 642-642: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L642
Слева от '+' не хватает пробела


[warning] 895-895: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L895
Программные модули не должны иметь закомментированных фрагментов кода


[warning] 918-918: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L918
Удалите неиспользуемую переменную СтроковоеЗначение

🔇 Additional comments (9)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl (2)

41-42: Корректное добавление параметров обработки ошибок!

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


83-83: Правильное делегирование инициализации таблицы!

Перенос логики в серверный модуль улучшает модульность кода и устраняет дублирование.

✅ Verification successful

Подтверждено: корректная реализация делегирования!

Серверный модуль пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер содержит полную реализацию функции ИнициализироватьТаблицуСоСвойствамиКолонок с корректной инициализацией таблицы значений и всеми необходимыми колонками. Делегирование выполнено правильно, что улучшает модульность кода и соответствует принципу DRY.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the server module implementation
# Check if the server module exists and contains the required function

rg -A 5 "ИнициализироватьТаблицуСоСвойствамиКолонок" --type bsl

Length of output: 388


Script:

#!/bin/bash
# Search for files containing the function name using fd and grep
fd . -e bsl -x grep -l "ИнициализироватьТаблицуСоСвойствамиКолонок" {}

# Then get the content of these files to analyze the implementation
fd . -e bsl -x grep -A 10 "ИнициализироватьТаблицуСоСвойствамиКолонок" {}

Length of output: 2918

src/cf/CommonModules/пбп_ИнтеграцииСлужебный/Ext/Module.bsl (1)

44-44: Добавлено новое поле для управления обработкой сообщений.

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

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2)

Line range hint 249-258: Корректная обработка ошибок и логирование

Реализация правильно обрабатывает ошибки и ведет историю выполнения запросов. Логирование длительности выполнения запроса поможет в оптимизации производительности.


162-163: Проверьте использование измененного параметра в вызывающем коде

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

✅ Verification successful

Изменение типа параметра является новой функциональностью

Анализ кода показывает, что:

  1. Функция ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям определена как экспортная
  2. Параметр ПараметрыЗапроса имеет значение по умолчанию Неопределено
  3. В формах каталогов пбп_НастройкиИнтеграции и пбп_ИсторияИнтеграции не найдены прямые вызовы этой функции
  4. Изменение типа параметра с Структура на ТаблицаЗначений является расширением функциональности, а не изменением существующей

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

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Поиск всех вызовов функции ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям

ast-grep --pattern 'ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям($$$)'

Length of output: 78


Script:

#!/bin/bash
# Search for function calls using ripgrep for better coverage
rg -i "ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям" -A 3 -B 1

# Also search for potential test files or usage examples
fd -e bsl -e os --exec grep -l "ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям" {}

Length of output: 1482


Script:

#!/bin/bash
# Поиск использования функции в других модулях
rg -l "пбп_ИнтеграцииСервер" -g "*.bsl" -g "*.os"

# Поиск определения функции с контекстом
rg -U "Функция ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям.*?КонецФункции" -A 10 -B 5 --multiline

Length of output: 508


Script:

#!/bin/bash
# Поиск использования модуля в формах с контекстом
rg -U "пбп_ИнтеграцииСервер\.ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям|пбп_ИнтеграцииСервер\..*?ПараметрыЗапроса" -A 5 -B 5 src/cf/Catalogs/пбп_НастройкиИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl src/cf/Catalogs/пбп_ИсторияИнтеграции/Forms/ФормаЭлемента/Ext/Form/Module.bsl

# Поиск определения параметра ПараметрыЗапроса в модуле
rg -U "ПараметрыЗапроса\s*=\s*" -A 3 -B 3 src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

Length of output: 1364

src/cf/CommonModules/пбп_ИнтеграцииFTPSFTP/Ext/Module.bsl (3)

30-31: Корректное добавление нового параметра!

Параметр РасширениеНаСервере хорошо документирован и правильно добавлен в структуру результата.

Also applies to: 37-37


653-662: Корректная реализация логики расширений файлов!

Реализация правильно обрабатывает:

  • Различные расширения файлов на сервере и локально
  • Пустые расширения
  • Условное добавление точки

992-993: Улучшено управление ресурсами файлов!

Добавлено корректное закрытие файлов после чтения, что предотвращает утечку ресурсов.

Also applies to: 1185-1186

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (1)

28-47: Функция инициализации таблицы свойств реализована корректно.

Логика функции правильная, и реализация соответствует требованиям.

Попытка
ШаблонКоманды = СтрШаблон("СтрокаТаблицы.%1 = %2(СтрокаТаблицы.%1)",
КлючИЗначение.Ключ, КлючИЗначение.Значение);
Выполнить(ШаблонКоманды);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Устраните потенциальную уязвимость, связанную с использованием оператора Выполнить().

Использование Выполнить(ШаблонКоманды) может привести к выполнению произвольного кода на сервере, что представляет серьезную угрозу безопасности. Рекомендуется заменить динамическое выполнение кода на безопасные альтернативы, такие как вызов заранее определенных функций.

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

[failure] 349-349: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L349
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью

Comment on lines 918 to 921
СтроковоеЗначение = СокрЛП(ВхЗначение);
СтроковоеЗначение = СтрЗаменить(ВхЗначение, ",", ".");
СтроковоеЗначение = СтрЗаменить(ВхЗначение, Символы.НПП, "");
Возврат СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ВхЗначение);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Исправьте использование переменной СтроковоеЗначение или удалите ее.

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

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

[warning] 918-918: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L918
Удалите неиспользуемую переменную СтроковоеЗначение

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

🧹 Outside diff range and nitpick comments (3)
src/cf/CommonModules/пбп_СтроковыеФункцииКлиентСервер/Ext/Module.bsl (1)

277-295: Добавьте модульные тесты

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

Хотите, чтобы я помог составить набор модульных тестов для этой функции?

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (2)

31-31: Вынесите магические числа в именованные константы

Значение 150 для длины строки следует вынести в именованную константу на уровне модуля для улучшения поддержки кода.

+ // Длина строки для колонок таблицы свойств
+ Перем ДлинаСтрокиСвойствКолонок Экспорт;
+ ДлинаСтрокиСвойствКолонок = 150;
- ДлинаСтроки = 150;
+ ДлинаСтроки = ДлинаСтрокиСвойствКолонок;

Also applies to: 32-32


177-177: Вынесите магическое число 300 в константу

Значение 300 для длины строки следует вынести в именованную константу.

+ // Максимальная длина строки для CSV колонок
+ Перем МаксДлинаСтрокиCSV Экспорт;
+ МаксДлинаСтрокиCSV = 300;
- СыраяТаблица.Колонки.Добавить(КолонкаТаблицы.ИмяКолонки, пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(300));
+ СыраяТаблица.Колонки.Добавить(КолонкаТаблицы.ИмяКолонки, пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(МаксДлинаСтрокиCSV));
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 177-177: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L177
Создайте константу с понятным названием, присвойте ей значение "300" и используйте эту константу вместо магического числа.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between b41e123 and 154e576.

📒 Files selected for processing (4)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (19 hunks)
  • src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl (1 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

[warning] 42-42: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L42
Уменьшите количество необязательных параметров c 5 до допустимого 3


[notice] 41-41: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L41
Добавьте описание метода программного интерфейса

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl

[warning] 177-177: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L177
Создайте константу с понятным названием, присвойте ей значение "300" и используйте эту константу вместо магического числа.


[warning] 185-185: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L185
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 173-173: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L173
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Уменьшите количество необязательных параметров c 4 до допустимого 3


[failure] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 51 до 20


[warning] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 264, что больше установленного лимита в 200 строк


[failure] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 119 до 15


[warning] 363-363: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L363
Необходимо избавиться от многократного использования строкового литерала " КАК "


[failure] 360-360: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L360
Превышен допустимый уровень вложенности управляющих конструкций


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


[warning] 387-387: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L387
Необходимо избавиться от многократного использования строкового литерала "Строкой"


[warning] 651-651: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L651
Уберите инициализацию параметров метода "Область" вложенными методами


[warning] 668-668: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L668
Уменьшите количество параметров c 8 до допустимого 7

src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl

[warning] 962-962: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L962
Проверьте отключение безопасного режима


[warning] 964-964: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L964
Проверьте отключение безопасного режима


[failure] 980-980: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L980
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью

🔇 Additional comments (4)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (2)

28-36: Документация обновлена корректно

Описание параметров функции оформлено правильно и содержит всю необходимую информацию.


84-85: Корректное обновление структуры параметров

Структура параметров правильно дополнена новыми полями в соответствии с изменениями в сигнатуре функции.

src/cf/CommonModules/пбп_СтроковыеФункцииКлиентСервер/Ext/Module.bsl (1)

264-276: Документация функции соответствует стандартам

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

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (1)

85-92: Корректное расширение параметров

Новые параметры хорошо документированы и имеют логичные значения по умолчанию.

Comment on lines 41 to 44
Асинх Функция ЗагрузитьИзXLS(
АдресСоответствияКолонок, НазваниеЛиста = "",
НомерПервойСтроки = 1, СопоставлениеПоНаименованию = Ложь,
ВыдаватьОшибку = Ложь, БулевоЗначениеИстина = "") Экспорт
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Необходимо оптимизировать работу с параметрами

Текущая реализация имеет 5 необязательных параметров, что усложняет поддержку кода. Предлагаю альтернативный вариант рефакторинга с использованием объекта настроек:

-Асинх Функция ЗагрузитьИзXLS(
-	АдресСоответствияКолонок, НазваниеЛиста = "",
-	НомерПервойСтроки = 1, СопоставлениеПоНаименованию = Ложь,
-	ВыдаватьОшибку = Ложь, БулевоЗначениеИстина = "") Экспорт
+Асинх Функция ЗагрузитьИзXLS(АдресСоответствияКолонок, Настройки = Неопределено) Экспорт

С добавлением новой функции для работы с настройками:

Функция НовыеНастройкиЗагрузкиXLS()
    Настройки = Новый Структура;
    Настройки.Вставить("НазваниеЛиста", "");
    Настройки.Вставить("НомерПервойСтроки", 1);
    Настройки.Вставить("СопоставлениеПоНаименованию", Ложь);
    Настройки.Вставить("ВыдаватьОшибку", Ложь);
    Настройки.Вставить("БулевоЗначениеИстина", "");
    Возврат Настройки;
КонецФункции

Это позволит:

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

Also applies to: 49-55

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

[warning] 42-42: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L42
Уменьшите количество необязательных параметров c 5 до допустимого 3


[notice] 41-41: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L41
Добавьте описание метода программного интерфейса

Comment on lines +277 to +295
Функция СтрокаВЧисло(Знач Значение) Экспорт

Значение = СтрЗаменить(Значение, " ", "");
Если СтрНачинаетсяС(Значение, "(") Тогда
Значение = СтрЗаменить(Значение, "(", "-");
Значение = СтрЗаменить(Значение, ")", "");
КонецЕсли;

СтрокаБезНулей = СтрЗаменить(Значение, "0", "");
Если ПустаяСтрока(СтрокаБезНулей) Или СтрокаБезНулей = "-" Тогда
Возврат 0;
КонецЕсли;

ТипЧисло = Новый ОписаниеТипов("Число");
Результат = ТипЧисло.ПривестиЗначение(Значение);

Возврат ?(Результат <> 0 И Не ПустаяСтрока(СтрокаБезНулей), Результат, Неопределено);

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

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

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

Текущая реализация может вернуть Неопределено для строк, которые должны быть преобразованы в ноль.

Предлагаю следующие изменения:

 Функция СтрокаВЧисло(Знач Значение) Экспорт
 	
 	Значение  = СтрЗаменить(Значение, " ", "");
 	Если СтрНачинаетсяС(Значение, "(") Тогда
 		Значение = СтрЗаменить(Значение, "(", "-");
 		Значение = СтрЗаменить(Значение, ")", "");
 	КонецЕсли;
 	
-	СтрокаБезНулей = СтрЗаменить(Значение, "0", "");
-	Если ПустаяСтрока(СтрокаБезНулей) Или СтрокаБезНулей = "-" Тогда
+	Если ПустаяСтрока(Значение) Тогда
 		Возврат 0;
 	КонецЕсли;
 	
 	ТипЧисло  = Новый ОписаниеТипов("Число");
 	Результат = ТипЧисло.ПривестиЗначение(Значение);
 	
-	Возврат ?(Результат <> 0 И Не ПустаяСтрока(СтрокаБезНулей), Результат, Неопределено);
+	Возврат ?(Результат <> Неопределено, Результат, Неопределено);
 	
 КонецФункции
📝 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
Функция СтрокаВЧисло(Знач Значение) Экспорт
Значение = СтрЗаменить(Значение, " ", "");
Если СтрНачинаетсяС(Значение, "(") Тогда
Значение = СтрЗаменить(Значение, "(", "-");
Значение = СтрЗаменить(Значение, ")", "");
КонецЕсли;
СтрокаБезНулей = СтрЗаменить(Значение, "0", "");
Если ПустаяСтрока(СтрокаБезНулей) Или СтрокаБезНулей = "-" Тогда
Возврат 0;
КонецЕсли;
ТипЧисло = Новый ОписаниеТипов("Число");
Результат = ТипЧисло.ПривестиЗначение(Значение);
Возврат ?(Результат <> 0 И Не ПустаяСтрока(СтрокаБезНулей), Результат, Неопределено);
КонецФункции
Функция СтрокаВЧисло(Знач Значение) Экспорт
Значение = СтрЗаменить(Значение, " ", "");
Если СтрНачинаетсяС(Значение, "(") Тогда
Значение = СтрЗаменить(Значение, "(", "-");
Значение = СтрЗаменить(Значение, ")", "");
КонецЕсли;
Если ПустаяСтрока(Значение) Тогда
Возврат 0;
КонецЕсли;
ТипЧисло = Новый ОписаниеТипов("Число");
Результат = ТипЧисло.ПривестиЗначение(Значение);
Возврат ?(Результат <> Неопределено, Результат, Неопределено);
КонецФункции

Comment on lines +237 to +239
Функция ПреобразоватьСтроковыеЗначенияПоТипамСвойств(ТЗ, Макет, КонвертироватьДаты = Ложь,
ЗначениеИстина = "", ОставитьСтроковые = Ложь, ИскатьПомеченныеНаУдаление = Истина) Экспорт

Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Требуется рефакторинг для снижения сложности

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

  • Высокая цикломатическая сложность (51 > 20)
  • Высокая когнитивная сложность (119 > 15)
  • Превышение длины метода (264 > 200 строк)
  • Слишком много необязательных параметров (4 > 3)

Рекомендуется разбить функцию на более мелкие методы. Хотите, чтобы я предложил вариант рефакторинга?

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

[warning] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Уменьшите количество необязательных параметров c 4 до допустимого 3


[failure] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 51 до 20


[warning] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 264, что больше установленного лимита в 200 строк


[failure] 237-237: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L237
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 119 до 15

Comment on lines +141 to +144
Если ВыдаватьОшибку И Лист = Неопределено Тогда
СообщениеОбОшибке = НСтр("ru = 'Лист с указанным именем " + НазваниеЛиста + " не найден';");
Возврат СообщениеОбОшибке;
КонецЕсли;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Используйте форматирование строк вместо конкатенации в НСтр

Конкатенация строк внутри НСтр может привести к проблемам локализации.

- СообщениеОбОшибке = НСтр("ru = 'Лист с указанным именем " + НазваниеЛиста + " не найден';");
+ СообщениеОбОшибке = СтрШаблон(НСтр("ru = 'Лист с указанным именем %1 не найден'"), НазваниеЛиста);
📝 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 = 'Лист с указанным именем " + НазваниеЛиста + " не найден';");
Возврат СообщениеОбОшибке;
КонецЕсли;
Если ВыдаватьОшибку И Лист = Неопределено Тогда
СообщениеОбОшибке = СтрШаблон(НСтр("ru = 'Лист с указанным именем %1 не найден'"), НазваниеЛиста);
Возврат СообщениеОбОшибке;
КонецЕсли;

Comment on lines +668 to +670
Процедура ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ТабДок, Макет, ШиринаТаблицы,
НомерСтроки, НомерКолонки, КолонкиКУдалению, УдалитьСтрокиШапки, ШиринаГруппы = 0)

Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Уменьшите количество параметров

Функция ОбойтиКолонкиДокументаПоНаименованиямРекурсивно имеет 8 параметров, что превышает рекомендуемый лимит в 7 параметров.

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

+ // Параметры обхода колонок документа
+ Структура = Новый Структура;
+ Структура.Вставить("ТабДок", ТабДок);
+ Структура.Вставить("Макет", Макет);
+ // ... остальные параметры
- Процедура ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ТабДок, Макет, ШиринаТаблицы,
-   НомерСтроки, НомерКолонки, КолонкиКУдалению, УдалитьСтрокиШапки, ШиринаГруппы = 0)
+ Процедура ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ПараметрыОбхода)

Committable suggestion skipped: line range outside the PR's diff.

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

[warning] 668-668: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L668
Уменьшите количество параметров c 8 до допустимого 7

ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1);
КонецЕсли;

Возврат Вычислить(ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:488 Исполняемый код безопасен.
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Добавьте проверку результата выполнения

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

-Возврат Вычислить(ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:488 Исполняемый код безопасен.
+Попытка
+	Результат = Вычислить(ИмяМетода + "(" + ПараметрыСтрока + ")");
+	// Валидация результата
+	Если Результат <> Неопределено Тогда
+		ПроверитьРезультатВыполнения(Результат);
+	КонецЕсли;
+	Возврат Результат;
+Исключение
+	ЗаписьЖурналаРегистрации("ВызватьФункциюКонфигурации", 
+		УровеньЖурналаРегистрации.Ошибка,,, 
+		ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+	ВызватьИсключение;
+КонецПопытки;

Committable suggestion skipped: line range outside the PR's diff.

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

[failure] 980-980: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L980
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью

Comment on lines 935 to 982
// Аналог метода БСП. Вызвать экспортную функцию по имени с уровнем привилегий конфигурации.
// При включении профилей безопасности для вызова оператора Выполнить() используется
// переход в безопасный режим с профилем безопасности, используемом для информационной базы
// (если выше по стеку не был установлен другой безопасный режим).
//
// Параметры:
// ИмяМетода - Строка - имя экспортной функции в формате
// <имя объекта>.<имя процедуры>, где <имя объекта> - это
// общий модуль или модуль менеджера объекта.
// Параметры - Массив - параметры передаются в функцию <ИмяМетода>
// в порядке расположения элементов массива.
//
// Возвращаемое значение:
// Произвольный - результат вызываемой функции.
//
Функция ВызватьФункциюКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт

ПроверитьИмяПроцедурыКонфигурации(ИмяМетода);

Если ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
МодульРаботаВБезопасномРежиме = ОбщийМодуль("РаботаВБезопасномРежиме");
Если МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности()
И Не МодульРаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда

ПрофильИнформационнойБазы = МодульРаботаВБезопасномРежиме.ПрофильБезопасностиИнформационнойБазы();
Если ЗначениеЗаполнено(ПрофильИнформационнойБазы) Тогда

УстановитьБезопасныйРежим(ПрофильИнформационнойБазы);
Если БезопасныйРежим() = Истина Тогда
УстановитьБезопасныйРежим(Ложь);
КонецЕсли;

КонецЕсли;

КонецЕсли;
КонецЕсли;

ПараметрыСтрока = "";
Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда
Для Индекс = 0 По Параметры.ВГраница() Цикл
ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + XMLСтрока(Индекс) + "],";
КонецЦикла;
ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1);
КонецЕсли;

Возврат Вычислить(ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:488 Исполняемый код безопасен.

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

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

Функция ВызватьФункциюКонфигурации использует оператор Вычислить() для динамического выполнения кода, что может представлять угрозу безопасности. Рекомендуется:

  1. Добавить дополнительную валидацию входных параметров
  2. Ограничить список разрешенных к вызову функций через механизм белых списков
  3. Пересмотреть логику управления безопасным режимом для минимизации окна уязвимости

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

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

Committable suggestion skipped: line range outside the PR's diff.

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

[warning] 962-962: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L962
Проверьте отключение безопасного режима


[warning] 964-964: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L964
Проверьте отключение безопасного режима


[failure] 980-980: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L980
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью

Comment on lines 962 to 965
УстановитьБезопасныйРежим(ПрофильИнформационнойБазы);
Если БезопасныйРежим() = Истина Тогда
УстановитьБезопасныйРежим(Ложь);
КонецЕсли;
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Проверьте логику управления безопасным режимом

Текущая реализация может создать окно уязвимости при переключении безопасного режима. Рекомендуется:

  1. Убрать лишнее отключение безопасного режима
  2. Добавить обработку исключений
  3. Логировать все изменения безопасного режима
-УстановитьБезопасныйРежим(ПрофильИнформационнойБазы);
-Если БезопасныйРежим() = Истина Тогда
-	УстановитьБезопасныйРежим(Ложь);
-КонецЕсли;
+Попытка
+	УстановитьБезопасныйРежим(ПрофильИнформационнойБазы);
+	ЗаписьЖурналаРегистрации("ИзменениеБезопасногоРежима", 
+		УровеньЖурналаРегистрации.Информация,,, 
+		"Установлен профиль безопасности");
+Исключение
+	ЗаписьЖурналаРегистрации("ИзменениеБезопасногоРежима", 
+		УровеньЖурналаРегистрации.Ошибка,,, 
+		ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+	ВызватьИсключение;
+КонецПопытки;
📝 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

[warning] 962-962: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L962
Проверьте отключение безопасного режима


[warning] 964-964: src/cf/CommonModules/пбп_ОбщегоНазначенияСервер/Ext/Module.bsl#L964
Проверьте отключение безопасного режима

This comment has been minimized.

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

🧹 Outside diff range and nitpick comments (2)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (2)

31-42: Вынесите магические числа в именованные константы

Для улучшения читаемости и поддерживаемости кода рекомендуется вынести магические числа в именованные константы:

  • 150 для длины строки
  • 3 для длины оператора сравнения
  • 300 для длины функции преобразования и формата даты
+ Перем ДлинаСтрокиКолонки Экспорт;
+ Перем ДлинаОператораСравнения Экспорт;
+ Перем ДлинаФункцииПреобразования Экспорт;
+
+ ДлинаСтрокиКолонки = 150;
+ ДлинаОператораСравнения = 3;
+ ДлинаФункцииПреобразования = 300;

492-498: Оптимизируйте преобразование булевых значений

Текущая реализация использует избыточное присваивание. Можно упростить код:

-			Если ПустаяСтрока(ЗначениеИстина) Тогда
-				СтрокаТаблицы[ИмяКолонкиБулево] = СтрокаТаблицы[ИмяКолонкиБулево + "Строкой"] = "Истина";
-			Иначе
-				СтрокаТаблицы[ИмяКолонкиБулево] = СтрокаТаблицы[ИмяКолонкиБулево + "Строкой"] = ЗначениеИстина;
-			КонецЕсли;
+			ЗначениеДляСравнения = ?(ПустаяСтрока(ЗначениеИстина), "Истина", ЗначениеИстина);
+			СтрокаТаблицы[ИмяКолонкиБулево] = СтрокаТаблицы[ИмяКолонкиБулево + "Строкой"] = ЗначениеДляСравнения;
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 98cd3fb and 3778a4a.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (19 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl

[failure] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Уменьшите когнитивную сложность "ПолучитьПромежуточнуюТаблицуИзCSVФайла" с 28 до 15


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Длина строки 121 превышает максимально допустимую 120


[warning] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 264, что больше установленного лимита в 200 строк


[failure] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 119 до 15


[warning] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите количество необязательных параметров c 4 до допустимого 3


[failure] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 51 до 20


[warning] 183-183: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L183
Создайте константу с понятным названием, присвойте ей значение "300" и используйте эту константу вместо магического числа.


[warning] 191-191: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L191
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[failure] 388-388: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L388
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 391-391: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L391
Необходимо избавиться от многократного использования строкового литерала " КАК "


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


[warning] 415-415: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L415
Необходимо избавиться от многократного использования строкового литерала "Строкой"


[warning] 696-696: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L696
Уменьшите количество параметров c 8 до допустимого 7


[warning] 679-679: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L679
Уберите инициализацию параметров метода "Область" вложенными методами


[warning] 808-808: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L808
Длина строки 123 превышает максимально допустимую 120

🔇 Additional comments (1)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (1)

462-474: Корректная обработка ошибок при преобразовании значений

Реализована качественная обработка ошибок с подробным логированием деталей исключения и использованием локализованных сообщений.

Comment on lines +1039 to +1046
Функция ПреобразоватьЧислоИзСтроки(ВхЗначение)

СтроковоеЗначение = СокрЛП(ВхЗначение);
СтроковоеЗначение = СтрЗаменить(ВхЗначение, ",", ".");
СтроковоеЗначение = СтрЗаменить(ВхЗначение, Символы.НПП, "");
Возврат пбп_СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтроковоеЗначение);

КонецФункции
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
Функция ПреобразоватьЧислоИзСтроки(ВхЗначение)
СтроковоеЗначение = СокрЛП(ВхЗначение);
СтроковоеЗначение = СтрЗаменить(ВхЗначение, ",", ".");
СтроковоеЗначение = СтрЗаменить(ВхЗначение, Символы.НПП, "");
Возврат пбп_СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтроковоеЗначение);
КонецФункции
Функция ПреобразоватьЧислоИзСтроки(ВхЗначение)
СтроковоеЗначение = СокрЛП(ВхЗначение);
СтроковоеЗначение = СтрЗаменить(СтроковоеЗначение, ",", ".");
СтроковоеЗначение = СтрЗаменить(СтроковоеЗначение, Символы.НПП, "");
Возврат пбп_СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтроковоеЗначение);
КонецФункции

This comment has been minimized.

This comment has been minimized.

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

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 439a37e and 1fb42b0.

📒 Files selected for processing (2)
  • src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2 hunks)
🔇 Additional comments (2)
src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Forms/ФормаЭлемента/Ext/Form/Module.bsl (1)

227-227: LGTM!

Заголовок поля корректно изменен для отражения его назначения при прямом подключении к БД.

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (1)

157-171: Корректная реализация инициализации таблицы параметров!

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

Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Текст запроса'");
Элементы.ПараметрыВхода.Заголовок = ПараметрыЗапросаСтрока;
Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Имя таблицы внешнего источника данных'");
Элементы.ПараметрыВхода.Заголовок = НСтр("ru = 'Обязательные параметры запроса';");
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Исправьте синтаксическую ошибку

В строке присутствует лишняя точка с запятой после строкового литерала.

Примените следующие изменения:

-			Элементы.ПараметрыВхода.Заголовок = НСтр("ru = 'Обязательные параметры запроса';");
+			Элементы.ПараметрыВхода.Заголовок = НСтр("ru = 'Обязательные параметры запроса'");
📝 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 = 'Обязательные параметры запроса';");
Элементы.ПараметрыВхода.Заголовок = НСтр("ru = 'Обязательные параметры запроса'");

Comment on lines +249 to +255
Для Каждого КлючЗначениеОператор Из ПараметрыЗапроса Цикл
НуженПеренос = ?(ПустаяСтрока(УсловияЗапроса), "", "
| И ");
УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 = &%2",
НуженПеренос, КлючИЗначение.Ключ);
УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 %3 &%2",
НуженПеренос, КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Оператор);

Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
Запрос.УстановитьПараметр(КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Значение);
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Обнаружен риск SQL-инъекции!

В текущей реализации значение оператора сравнения напрямую подставляется в SQL-запрос без валидации, что может привести к SQL-инъекции.

Рекомендуется:

  1. Создать список разрешенных операторов
  2. Добавить валидацию значения оператора
  3. Использовать параметризацию вместо прямой подстановки

Пример исправления:

-			УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 %3 &%2",
-				НуженПеренос, КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Оператор);
+			РазрешенныеОператоры = Новый Массив;
+			РазрешенныеОператоры.Добавить("=");
+			РазрешенныеОператоры.Добавить(">");
+			РазрешенныеОператоры.Добавить("<");
+			РазрешенныеОператоры.Добавить(">=");
+			РазрешенныеОператоры.Добавить("<=");
+			РазрешенныеОператоры.Добавить("<>");
+			
+			Если РазрешенныеОператоры.Найти(КлючЗначениеОператор.Оператор) = Неопределено Тогда
+				ВызватьИсключение "Недопустимый оператор сравнения";
+			КонецЕсли;
+			
+			УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 %3 &%2",
+				НуженПеренос, КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Оператор);

Committable suggestion skipped: line range outside the PR's diff.

#100 я знаю, что плохо пихать много ишью в один ПР, но девелоп безнадежно устарел и тут все связано)

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

🧹 Outside diff range and nitpick comments (2)
src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Ext/ManagerModule.bsl (1)

101-102: Изменения корректны, но есть предложение по улучшению

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

Предлагаю следующее улучшение:

 ИначеЕсли ТипJSON = Перечисления.пбп_ТипыJSON.Строка Тогда
-    ПреобразованноеЗначение = Значение;
+    ПреобразованноеЗначение = ?(ТипЗнч(Значение) = Тип("Строка"), 
+        Значение, 
+        Строка(Значение));
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (1)

633-635: Рекомендуется уменьшить количество необязательных параметров

Функция имеет 4 необязательных параметра, что превышает рекомендуемое максимальное значение (3).

Рекомендуется:

  1. Объединить параметры СимволПараметра и РазделительПараметраЗначения в структуру настроек
  2. Или установить более строгие значения по умолчанию, убрав их из параметров
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 633-633: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L633
Уменьшите количество необязательных параметров c 4 до допустимого 3

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 1fb42b0 and 719623f.

📒 Files selected for processing (2)
  • src/cf/Catalogs/пбп_ИнтеграционныеПотоки/Ext/ManagerModule.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (3 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[warning] 660-660: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L660
Проверьте запуск внешнего приложения


[warning] 633-633: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L633
Уменьшите количество необязательных параметров c 4 до допустимого 3

🔇 Additional comments (3)
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (3)

157-171: Реализация корректна!

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


178-179: Изменение типа параметра обосновано!

Переход от Структура к ТаблицаЗначений улучшает структурированность данных и типобезопасность.


249-255: ⚠️ Potential issue

Необходима валидация оператора сравнения!

В текущей реализации значение оператора сравнения напрямую подставляется в SQL-запрос, что может привести к SQL-инъекции.

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

+	РазрешенныеОператоры = Новый Массив;
+	РазрешенныеОператоры.Добавить("=");
+	РазрешенныеОператоры.Добавить(">");
+	РазрешенныеОператоры.Добавить("<");
+	РазрешенныеОператоры.Добавить(">=");
+	РазрешенныеОператоры.Добавить("<=");
+	РазрешенныеОператоры.Добавить("<>");
+	
+	Если РазрешенныеОператоры.Найти(КлючЗначениеОператор.Оператор) = Неопределено Тогда
+		ВызватьИсключение "Недопустимый оператор сравнения";
+	КонецЕсли;

Comment on lines 633 to 668
Функция ВыполнитьКомандуСистемы(ИнтеграционныйПоток, СтруктураАтрибутов,
СимволПараметра = "/", РазделительПараметраЗначения = " ",
ПараметрыЗапускаКоманды = Неопределено, СтруктураИстории = Неопределено) Экспорт

РеквизитыПотока = пбп_ОбщегоНазначенияСервер.ЗначенияРеквизитовОбъекта(
ИнтеграционныйПоток, "НастройкаИнтеграции.ИнтегрируемаяСистема, НастройкаИнтеграции.СтрокаПодключения, ТочкаВхода");

СтрокаАтрибутов = "";

Для Каждого КлючИЗначение Из СтруктураАтрибутов Цикл
Разделитель = ?(ПустаяСтрока(СтрокаАтрибутов), СимволПараметра, " " + СимволПараметра);
СтрокаАтрибутов = СтрокаАтрибутов + Разделитель + КлючИЗначение.Ключ
+ РазделительПараметраЗначения + """" + КлючИЗначение.Значение + """";
КонецЦикла;

ИтоговаяКоманда = СтрШаблон("%1 %2 %3", РеквизитыПотока.НастройкаИнтеграцииСтрокаПодключения,
РеквизитыПотока.ТочкаВхода, СтрокаАтрибутов);

Если ПараметрыЗапускаКоманды = Неопределено Тогда
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;
КонецЕсли;

Если СтруктураИстории <> Неопределено Тогда
НачалоВызова = ТекущаяДатаСеанса();
КонецЕсли;

Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);

Если СтруктураИстории <> Неопределено Тогда
СтруктураИстории.ДлительностьВызова = ТекущаяДатаСеанса() - НачалоВызова;
КонецЕсли;

Возврат Результат;

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Требуется дополнительная проверка безопасности при выполнении команд!

Выполнение системных команд может представлять угрозу безопасности. Необходимо:

  1. Добавить валидацию входных параметров
  2. Ограничить список разрешенных команд
  3. Логировать все выполняемые команды
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 660-660: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L660
Проверьте запуск внешнего приложения


[warning] 633-633: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L633
Уменьшите количество необязательных параметров c 4 до допустимого 3

This comment has been minimized.

1 similar comment

This comment has been minimized.

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

🧹 Outside diff range and nitpick comments (6)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl (1)

80-89: Добавление нового вспомогательного метода

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

Предлагаю дополнить документацию примером:

 // Получить параметры чтения файла
 // 
 // Возвращаемое значение:
 //  Структура - см. пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер.ПолучитьПараметрыЧтенияФайла
+// 
+// Пример:
+//  ПараметрыЧтения = ПолучитьПараметрыЧтенияФайла();
+//  ПараметрыЧтения.НазваниеЛиста = "Лист1";
+//  ПараметрыЧтения.НомерПервойСтроки = 2;
 //
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (2)

25-38: Улучшить документацию функции

Рекомендуется дополнить документацию функции следующей информацией:

  • Описание назначения параметров АдресМакета и АдресПомещения
  • Примеры использования функции

Предлагаю дополнить документацию:

 // Инициализировать структуру параметров чтения
 // 
 // Возвращаемое значение:
 //  Структура - см. пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер.ПолучитьПараметрыЧтенияФайла
+//    * АдресМакета    - Строка - адрес макета во временном хранилище
+//    * АдресПомещения - Строка - адрес для помещения результата во временное хранилище
 //
+// Пример:
+//  ПараметрыЧтения = ИнициализироватьСтруктуруПараметровЧтения();
+//  ПараметрыЧтения.НазваниеЛиста = "Лист1";

43-46: Дополнить описание метода программного интерфейса

В соответствии с рекомендациями статического анализа, необходимо дополнить документацию метода:

  • Добавить общее описание назначения метода
  • Уточнить формат возвращаемого значения

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

+// Загружает данные из файла Excel или CSV в табличный документ.
+// Открывает диалог выбора файла и обрабатывает его содержимое согласно
+// заданным параметрам чтения.
+//
 // Параметры:
 //  АдресСоответствияКолонок - Строка - описание колонок загружаемого файла в таблице значений,
 //    помещенное во временное хранилище на Сервере.
 //    см. пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.ИнициализироватьТаблицуСоСвойствамиКолонок
 //  ПараметрыЧтения - Структура - см. ИнициализироватьСтруктуруПараметровЧтения
 // 
 // Возвращаемое значение:
-//  Строка - Адрес файла во временном хранилище
+//  Строка - Адрес результирующей таблицы значений во временном хранилище
+//           или Неопределено, если загрузка была отменена
src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (1)

633-635: Рекомендуется уменьшить количество необязательных параметров

Согласно рекомендациям, функция имеет слишком много необязательных параметров (4 вместо рекомендуемых 3).

Предлагается:

  1. Объединить параметры СимволПараметра и РазделительПараметраЗначения в структуру настроек форматирования
  2. Или установить более строгие значения по умолчанию, убрав их из параметров функции
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 633-633: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L633
Уменьшите количество необязательных параметров c 4 до допустимого 3

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (2)

23-47: Вынесите магические числа в именованные константы

Для улучшения читаемости и поддерживаемости кода рекомендуется вынести магические числа в именованные константы:

  • Значение 150 для длины строки
  • Значение 4 для длины оператора условия
  • Значение 300 для длины функции преобразования и формата даты

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

+// Константы для описания типов колонок
+Перем ДлинаСтрокиКолонки;
+Перем ДлинаОператораУсловия;
+Перем ДлинаФункцииПреобразования;
+
+ДлинаСтрокиКолонки = 150;
+ДлинаОператораУсловия = 4;
+ДлинаФункцииПреобразования = 300;

 Функция ИнициализироватьТаблицуСоСвойствамиКолонок() Экспорт
-	ДлинаСтроки = 150;
 	СвойстваКолонок.Колонки.Добавить("ИмяКолонки"		, пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(ДлинаСтрокиКолонки));

49-69: Одобрено с небольшими замечаниями

Функция хорошо документирована и правильно переиспользует базовую функцию. Рекомендуется вынести магическое число 5 в именованную константу для квалификаторов числа.

+// Константы для описания типов
+Перем РазрядностьПозиции;
+
+РазрядностьПозиции = 5;

 Функция ИнициализироватьТаблицуСоСвойствамиCSV() Экспорт
-	ОписаниеЧислаНачала = пбп_ОбщегоНазначенияСервер.ОписаниеТипаЧисло(5, 0, ДопустимыйЗнак.Неотрицательный);
-	ОписаниеЧислаДлина = пбп_ОбщегоНазначенияСервер.ОписаниеТипаЧисло(5, 0, ДопустимыйЗнак.Неотрицательный);
+	ОписаниеЧислаНачала = пбп_ОбщегоНазначенияСервер.ОписаниеТипаЧисло(РазрядностьПозиции, 0, ДопустимыйЗнак.Неотрицательный);
+	ОписаниеЧислаДлина = пбп_ОбщегоНазначенияСервер.ОписаниеТипаЧисло(РазрядностьПозиции, 0, ДопустимыйЗнак.Неотрицательный);
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 719623f and 7b34469.

📒 Files selected for processing (4)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (3 hunks)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (19 hunks)
  • src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (3 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl

[notice] 51-51: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L51
Добавьте описание метода программного интерфейса

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl

[failure] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Уменьшите когнитивную сложность "ПолучитьПромежуточнуюТаблицуИзCSVФайла" с 28 до 15


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Длина строки 121 превышает максимально допустимую 120


[failure] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 121 до 15


[warning] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите количество необязательных параметров c 4 до допустимого 3


[warning] 183-183: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L183
Создайте константу с понятным названием, присвойте ей значение "300" и используйте эту константу вместо магического числа.


[failure] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 53 до 20


[warning] 191-191: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L191
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 265, что больше установленного лимита в 200 строк


[failure] 388-388: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L388
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 391-391: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L391
Необходимо избавиться от многократного использования строкового литерала " КАК "


[failure] 370-370: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L370
Превышен допустимый уровень вложенности управляющих конструкций


[warning] 415-415: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L415
Необходимо избавиться от многократного использования строкового литерала "Строкой"


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


[failure] 697-697: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L697
Уменьшите когнитивную сложность "ОбойтиКолонкиДокументаПоНаименованиямРекурсивно" с 16 до 15


[warning] 697-697: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L697
Уменьшите количество параметров c 8 до допустимого 7


[warning] 680-680: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L680
Уберите инициализацию параметров метода "Область" вложенными методами


[warning] 810-810: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L810
Длина строки 123 превышает максимально допустимую 120

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl

[warning] 633-633: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L633
Уменьшите количество необязательных параметров c 4 до допустимого 3

🔇 Additional comments (9)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl (3)

30-31: Улучшение документации параметра ПараметрыЧтения

Хорошая практика добавления ссылки на метод получения структуры параметров. Это упрощает понимание ожидаемой структуры данных.


76-78: Оптимизация кода через делегирование

Хорошее решение по делегированию логики в серверный модуль. Это улучшает поддерживаемость кода и соответствует принципу DRY.


33-41: Проверьте обратную совместимость изменения сигнатуры

Изменение параметра с Параметры на ПараметрыЧтения может повлиять на существующий код, вызывающий эту процедуру.

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

✅ Verification successful

Let me generate the final response since we found the only usage of this procedure in the codebase.

Изменение сигнатуры процедуры безопасно

Найден только один вызов процедуры ФормированиеТаблицы в модуле пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент, и он уже использует параметр ПараметрыЧтения. Обратная совместимость не нарушена.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find all calls to ФормированиеТаблицы to verify parameter changes

rg -l "ФормированиеТаблицы\s*\(" | while read -r file; do
  if [[ "$file" != "src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl" ]]; then
    echo "=== $file ==="
    rg -A 2 "ФормированиеТаблицы\s*\(" "$file"
  fi
done

Length of output: 1603

src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (1)

Line range hint 51-68: Отличная работа по рефакторингу параметров

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

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

[notice] 51-51: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L51
Добавьте описание метода программного интерфейса

src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl (2)

157-171: Корректная реализация инициализации таблицы параметров!

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


249-255: ⚠️ Potential issue

Необходимо исправить риск SQL-инъекции!

В текущей реализации значение оператора сравнения напрямую подставляется в SQL-запрос без валидации, что может привести к SQL-инъекции.

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

  1. Создать список разрешенных операторов
  2. Добавить валидацию значения оператора
  3. Использовать параметризацию вместо прямой подстановки
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl (3)

Line range hint 145-166: Одобрено с учетом существующих замечаний

Добавленная обработка ошибок для отсутствующих листов реализована корректно. Обратите внимание на существующее замечание о конкатенации строк в НСтр.

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

[failure] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Уменьшите когнитивную сложность "ПолучитьПромежуточнуюТаблицуИзCSVФайла" с 28 до 15


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Длина строки 121 превышает максимально допустимую 120


[failure] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите когнитивную сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 121 до 15


[warning] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите количество необязательных параметров c 4 до допустимого 3


[warning] 183-183: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L183
Создайте константу с понятным названием, присвойте ей значение "300" и используйте эту константу вместо магического числа.


[failure] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Уменьшите цикломатическую сложность "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" с 53 до 20


[warning] 191-191: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L191
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.


[warning] 265-265: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L265
Длина метода "ПреобразоватьСтроковыеЗначенияПоТипамСвойств" равна 265, что больше установленного лимита в 200 строк


1041-1048: Ошибка в логике замены символов все еще присутствует


462-474: Корректная реализация обработки ошибок

Реализация обработки ошибок выполнена правильно:

  • Используется корректное логирование
  • Применяется форматирование сообщений об ошибках
  • Обеспечивается детальное представление ошибки

Comment on lines +620 to +670
// Выполняет указанную команду системы интеграционного потока
//
// Параметры:
// ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - интеграционный поток, хранящий данные команды
// СтруктураАтрибутов - Структура - ключ - наименование атрибута, значение - значение атрибута
// СимволПараметра - Строка - символ инициализации параметра команды (по-умолчанию "/")
// РазделительПараметраЗначения - Строка - символ разделителя между именем и значением параметра (по-умолчанию " ")
// ПараметрыЗапускаКоманды - Структура - см. пбп_ФайловаяСистема.ПараметрыЗапускаПрограммы
// СтруктураИстории - Структура - см. пбп_ИнтеграцииСлужебный.ПолучитьСтруктуруЗаписиИстории
//
// Возвращаемое значение:
// Число, Строка - см. пбп_ФайловаяСистема.ЗапуститьПрограмму
//
Функция ВыполнитьКомандуСистемы(ИнтеграционныйПоток, СтруктураАтрибутов,
СимволПараметра = "/", РазделительПараметраЗначения = " ",
ПараметрыЗапускаКоманды = Неопределено, СтруктураИстории = Неопределено) Экспорт

РеквизитыПотока = пбп_ОбщегоНазначенияСервер.ЗначенияРеквизитовОбъекта(
ИнтеграционныйПоток, "НастройкаИнтеграции.ИнтегрируемаяСистема, НастройкаИнтеграции.СтрокаПодключения, ТочкаВхода");

СтрокаАтрибутов = "";

Для Каждого КлючИЗначение Из СтруктураАтрибутов Цикл
Разделитель = ?(ПустаяСтрока(СтрокаАтрибутов), СимволПараметра, " " + СимволПараметра);
СтрокаАтрибутов = СтрокаАтрибутов + Разделитель + КлючИЗначение.Ключ
+ РазделительПараметраЗначения + """" + КлючИЗначение.Значение + """";
КонецЦикла;

ИтоговаяКоманда = СтрШаблон("%1 %2 %3", РеквизитыПотока.НастройкаИнтеграцииСтрокаПодключения,
РеквизитыПотока.ТочкаВхода, СтрокаАтрибутов);

Если ПараметрыЗапускаКоманды = Неопределено Тогда
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина;
КонецЕсли;

Если СтруктураИстории <> Неопределено Тогда
НачалоВызова = ТекущаяДатаСеанса();
КонецЕсли;

// BSLLS:ExternalAppStarting-off
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды);
// BSLLS:ExternalAppStarting-on

Если СтруктураИстории <> Неопределено Тогда
СтруктураИстории.ДлительностьВызова = ТекущаяДатаСеанса() - НачалоВызова;
КонецЕсли;

Возврат Результат;

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Критический риск безопасности при выполнении команд!

Текущая реализация позволяет внедрение команд через неверифицированные параметры. Необходимо:

  1. Добавить валидацию входных параметров
  2. Создать белый список разрешенных команд
  3. Экранировать специальные символы в параметрах
  4. Логировать все выполняемые команды

Пример безопасной реализации:

-	ИтоговаяКоманда = СтрШаблон("%1 %2 %3", РеквизитыПотока.НастройкаИнтеграцииСтрокаПодключения,
-		РеквизитыПотока.ТочкаВхода, СтрокаАтрибутов);
+	// Валидация команды
+	РазрешенныеКоманды = Новый Массив;
+	РазрешенныеКоманды.Добавить("command1");
+	РазрешенныеКоманды.Добавить("command2");
+	
+	Если РазрешенныеКоманды.Найти(РеквизитыПотока.ТочкаВхода) = Неопределено Тогда
+		ВызватьИсключение "Недопустимая команда";
+	КонецЕсли;
+	
+	// Экранирование параметров
+	ЭкранированныеАтрибуты = ЭкранироватьПараметрыКоманды(СтруктураАтрибутов);
+	
+	ИтоговаяКоманда = СтрШаблон("%1 %2 %3", 
+		РеквизитыПотока.НастройкаИнтеграцииСтрокаПодключения,
+		РеквизитыПотока.ТочкаВхода, 
+		ЭкранированныеАтрибуты);
+	
+	// Логирование
+	ЗаписьВЖурналРегистрации("ВыполнениеКоманды", 
+		УровеньЖурналаРегистрации.Информация,
+		,
+		,
+		ИтоговаяКоманда);

Committable suggestion skipped: line range outside the PR's diff.

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

[warning] 633-633: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L633
Уменьшите количество необязательных параметров c 4 до допустимого 3

Comment on lines +168 to +249
// Читает CSV-файл и выводит их в таблицу значений, заполненной согласно структуре макета
//
// Параметры:
// ПутьКФайлу - Строка - путь к csv-файлу во временном хранилище
// СтруктураМакета - ТаблицаЗначений - в таблице указано имя колонок, их тип и поле поиска ссылочного типа
// Кодировка - Строка - кодировка текста файла
// Разделитель - Строка - разделитель значений
//
// Возвращаемое значение:
// ТаблицаЗначений - таблица с данными, прочитанными из CSV-файла
//
Функция ПолучитьПромежуточнуюТаблицуИзCSVФайла(ПутьКФайлу, СтруктураМакета, Кодировка = "UTF8", Разделитель = "") Экспорт

СыраяТаблица = Новый ТаблицаЗначений;
Для Каждого КолонкаТаблицы Из СтруктураМакета Цикл
СыраяТаблица.Колонки.Добавить(КолонкаТаблицы.ИмяКолонки, пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(300));
КонецЦикла;

ЗагружаемыйФайл = Новый ЧтениеТекста(ПутьКФайлу, Кодировка);

НомерСтроки = 1;
ТекущаяСтрока = ЗагружаемыйФайл.ПрочитатьСтроку();
Пока ТекущаяСтрока <> Неопределено Цикл
Если НомерСтроки < 2 Тогда // в первой заголовок
НомерСтроки = НомерСтроки + 1;
ТекущаяСтрока = ЗагружаемыйФайл.ПрочитатьСтроку();
Продолжить;
КонецЕсли;

НоваяСтрока = СыраяТаблица.Добавить();

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

ЗначениеКолонки = Сред(ТекущаяСтрока, СвойстваКолонок.Начало, СвойстваКолонок.Длина);
ЗначениеБезПробелов = СокрЛП(ЗначениеКолонки);
НоваяСтрока[СвойстваКолонок.ИмяКолонки] = ЗначениеБезПробелов;
КонецЦикла;
Иначе
Если Прав(ТекущаяСтрока, 1) = Разделитель Тогда
ТекущаяСтрокаБезОкончания = Сред(ТекущаяСтрока, 1, СтрДлина(ТекущаяСтрока) - 1);
Иначе
ТекущаяСтрокаБезОкончания = ТекущаяСтрока;
КонецЕсли;

МассивКолонок = пбп_СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(
ТекущаяСтрокаБезОкончания, Разделитель, Ложь, Истина);
// Количество разделителей должно быть равно количеству строк колонок макета, иначе строка не будет загружена
КоличествоКолонок = МассивКолонок.Количество();
Если КоличествоКолонок = 0 Или КоличествоКолонок <> СтруктураМакета.Количество() Тогда
Продолжить;
КонецЕсли;

Для Инкремент = 0 По СтруктураМакета.Количество() - 1 Цикл
СвойстваКолонок = СтруктураМакета[Инкремент];
ЗначениеБезПробелов = СокрЛП(МассивКолонок[Инкремент]);
НоваяСтрока[СвойстваКолонок.ИмяКолонки] = ЗначениеБезПробелов;
КонецЦикла;
КонецЕсли;

НомерСтроки = НомерСтроки + 1;
ТекущаяСтрока = ЗагружаемыйФайл.ПрочитатьСтроку();
КонецЦикла;

ЗагружаемыйФайл.Закрыть();

Для Каждого КолонкаТаблицы Из СтруктураМакета Цикл
Если КолонкаТаблицы.ТипЗначения = "Дата" Тогда
СыраяТаблица.Колонки[КолонкаТаблицы.ИмяКолонки].Имя
= СыраяТаблица.Колонки[КолонкаТаблицы.ИмяКолонки].Имя + "Строкой";
СыраяТаблица.Колонки.Добавить(КолонкаТаблицы.ИмяКолонки, Новый ОписаниеТипов("Дата"));
КонецЕсли;
КонецЦикла;

СыраяТаблица.Колонки.Добавить("ПорядковыйНомер", Новый ОписаниеТипов("Число"));

Возврат СыраяТаблица;

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

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Необходимо уменьшить сложность метода

Метод имеет высокую когнитивную сложность (28 > 15). Рекомендуется разбить его на более мелкие методы:

  1. Выделить логику обработки строк с разделителем в отдельный метод
  2. Выделить логику обработки строк без разделителя в отдельный метод
  3. Выделить логику преобразования типов колонок в отдельный метод

Примерная структура:

Функция ПолучитьПромежуточнуюТаблицуИзCSVФайла(ПутьКФайлу, СтруктураМакета, Кодировка = "UTF8", Разделитель = "") Экспорт
    СыраяТаблица = ИнициализироватьТаблицуДляCSV(СтруктураМакета);
    ОбработатьСтрокиФайла(СыраяТаблица, ПутьКФайлу, Кодировка, Разделитель, СтруктураМакета);
    ПреобразоватьТипыКолонок(СыраяТаблица, СтруктураМакета);
    Возврат СыраяТаблица;
КонецФункции
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Уменьшите когнитивную сложность "ПолучитьПромежуточнуюТаблицуИзCSVФайла" с 28 до 15


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Нельзя использовать латинские и кириллические символы в одном идентификаторе


[warning] 179-179: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L179
Длина строки 121 превышает максимально допустимую 120


[warning] 183-183: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L183
Создайте константу с понятным названием, присвойте ей значение "300" и используйте эту константу вместо магического числа.


[warning] 191-191: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L191
Создайте константу с понятным названием, присвойте ей значение "2" и используйте эту константу вместо магического числа.

Comment on lines +415 to +427
Если ТЗ.Колонки.Найти(СтрокаТаблицы.ИмяКолонки + "Строкой") <> Неопределено Тогда
Если ОставитьСтроковые Тогда
ВставкаВТ = ВставкаВТ + СтрШаблон(ШаблонИмяКолонки, СтрокаТаблицы.ИмяКолонки + "Строкой");
ВставкаБазовые = ВставкаБазовые + СтрШаблон(ШаблонИмяКолонки, СтрокаТаблицы.ИмяКолонки + "Строкой");
КонецЕсли;

Если СтрНайти(СтрокаТаблицы.ТипЗначения, "Дата") <> 0 Тогда
СтруктураИменКолонокДат.Вставить(СтрокаТаблицы.ИмяКолонки, СтрокаТаблицы.ФорматДаты);
ИначеЕсли СтрНайти(СтрокаТаблицы.ТипЗначения, ЧислоСтрока) <> 0 Тогда
МассивИменКолонокЧисел.Добавить(СтрокаТаблицы.ИмяКолонки);
ИначеЕсли СтрНайти(СтрокаТаблицы.ТипЗначения, "Булево") <> 0 Тогда
МассивИменКолонокБулево.Добавить(СтрокаТаблицы.ИмяКолонки);
КонецЕсли;
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Требуется существенный рефакторинг

Метод имеет критические проблемы:

  • Высокая когнитивная сложность (121 > 15)
  • Высокая цикломатическая сложность (53 > 20)
  • Превышение длины метода (265 > 200 строк)
  • Слишком много необязательных параметров (4 > 3)

Рекомендации по рефакторингу:

  1. Создать отдельный тип для параметров метода:
Структура = Новый Структура;
Структура.Вставить("КонвертироватьДаты", Ложь);
Структура.Вставить("ЗначениеИстина", "");
Структура.Вставить("ОставитьСтроковые", Ложь);
Структура.Вставить("ИскатьПомеченныеНаУдаление", Истина);
  1. Разбить метод на подметоды по типам данных:
ОбработатьСтроковыеЗначения();
ОбработатьЧисловыеЗначения();
ОбработатьДатыИВремя();
ОбработатьБулевыЗначения();
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[warning] 415-415: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L415
Необходимо избавиться от многократного использования строкового литерала "Строкой"


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

Comment on lines +697 to +745
Процедура ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ТабДок, Макет, ШиринаТаблицы,
НомерСтроки, НомерКолонки, КолонкиКУдалению, УдалитьСтрокиШапки, ШиринаГруппы = 0)

НомерСтроки = НомерСтроки + 1;

ТекстШапки = СокрЛП(ТабДок.Область("R" + НомерСтроки + "C" + Строка(НомерКолонки)).Текст);
ТекущаяПроверкаШирины = ?(ШиринаГруппы = 0, ШиринаТаблицы, ШиринаГруппы);

Пока НомерКолонки <= ТекущаяПроверкаШирины Цикл
Если ТекстШапки = "" Тогда
НомерКолонки = НомерКолонки + 1;
ТекстШапки = СокрЛП(ТабДок.Область("R" + НомерСтроки + "C" + Строка(НомерКолонки)).Текст);
Продолжить;
КонецЕсли;

ИмяКолонки = "";

// Проверяем на группы колонок
ПоискПодчиненных = Макет.НайтиСтроки(Новый Структура("Группа", ТекстШапки));
КоличествоПодчиненных = ПоискПодчиненных.Количество();
Если КоличествоПодчиненных Тогда
ВременныйМакет = Макет.СкопироватьКолонки();
Для Каждого НайденнаяСтрока Из ПоискПодчиненных Цикл
Если ВРег(НайденнаяСтрока.ОператорУсловия) = "И"
Или ВРег(НайденнаяСтрока.ОператорУсловия) = "ВИРТ" Тогда
КоличествоПодчиненных = КоличествоПодчиненных - 1;
Продолжить;
КонецЕсли;

ЗаполнитьЗначенияСвойств(ВременныйМакет.Добавить(), НайденнаяСтрока);
КонецЦикла;

НомерНовойСтроки = НомерСтроки + 1;
УдалитьСтрокиШапки.Добавить(НомерНовойСтроки);

ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ТабДок, ВременныйМакет, ШиринаТаблицы, НомерСтроки,
НомерКолонки, КолонкиКУдалению, УдалитьСтрокиШапки, НомерКолонки + КоличествоПодчиненных - 1);

// Возвращаем текст шапки на прошлую строку, если мы выходим из рекурсии
ТекстШапки = СокрЛП(ТабДок.Область("R" + НомерСтроки + "C" + Строка(НомерКолонки)).Текст);
Иначе
СверитьИмяКолонокДобавитьИмяВМакет(ТабДок, Макет, ТекстШапки, НомерСтроки, НомерКолонки, КолонкиКУдалению);
КонецЕсли;

КонецЦикла;

НомерСтроки = НомерСтроки - 1;

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

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Необходимо оптимизировать параметры и сложность метода

Метод имеет следующие проблемы:

  • Превышено рекомендуемое количество параметров (8 > 7)
  • Высокая когнитивная сложность (16 > 15)

Рекомендации:

  1. Создать структуру параметров:
Структура = Новый Структура;
Структура.Вставить("ТабДок", ТабДок);
Структура.Вставить("Макет", Макет);
Структура.Вставить("ШиринаТаблицы", ШиринаТаблицы);
// ... остальные параметры
  1. Выделить логику проверки групп в отдельный метод для снижения сложности
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[failure] 697-697: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L697
Уменьшите когнитивную сложность "ОбойтиКолонкиДокументаПоНаименованиямРекурсивно" с 16 до 15


[warning] 697-697: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L697
Уменьшите количество параметров c 8 до допустимого 7

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

🧹 Outside diff range and nitpick comments (1)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (1)

25-38: Улучшить документацию метода

Рекомендуется дополнить документацию метода следующей информацией:

  • Примеры использования
  • Описание полей возвращаемой структуры (АдресМакета, АдресПомещения)
  • Возможные исключения
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 7b34469 and 12db676.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (3 hunks)
🧰 Additional context used
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl

[notice] 51-51: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L51
Добавьте описание метода программного интерфейса

🔇 Additional comments (1)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (1)

Line range hint 51-75: Улучшение структуры кода

Изменения в реализации метода ЗагрузитьИзXLS значительно улучшили код:

  • Упрощена сигнатура метода за счет использования структуры параметров
  • Улучшена обработка ошибок
  • Добавлена поддержка CSV-файлов
  • Код стал более модульным и поддерживаемым
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results

[notice] 51-51: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl#L51
Добавьте описание метода программного интерфейса

Comment on lines +43 to +46
// АдресСоответствияКолонок - Строка - описание колонок загружаемого файла в таблице значений,
// помещенное во временное хранилище на Сервере.
// см. пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.ИнициализироватьТаблицуСоСвойствамиКолонок
// ПараметрыЧтения - Структура - см. ИнициализироватьСтруктуруПараметровЧтения
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Исправить документацию параметра ПараметрыЧтения

В документации параметра ПараметрыЧтения указана ссылка на несуществующий метод ИнициализироватьСтруктуруПараметровЧтения. Необходимо обновить ссылку на актуальный метод ПолучитьПараметрыЧтенияФайла.

@@ -98,6 +98,8 @@
ПреобразованноеЗначение = Формат(Значение, "ДФ=yyyy-MM-dd");
ИначеЕсли ТипJSON = Перечисления.пбп_ТипыJSON.Число Тогда
ПреобразованноеЗначение = Формат(Значение, "ЧГ=0");
ИначеЕсли ТипJSON = Перечисления.пбп_ТипыJSON.Строка Тогда
Copy link
Member

Choose a reason for hiding this comment

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

Это точно относится к данному PR?

@@ -224,8 +224,8 @@
пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, ПараметрыВходаПараметрURL, УстанавливаемоеСвойство, Ложь);
ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.ПрямоеПодключениеКБД Тогда
Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Текст запроса'");
Элементы.ПараметрыВхода.Заголовок = ПараметрыЗапросаСтрока;
Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Имя таблицы внешнего источника данных'");
Copy link
Member

Choose a reason for hiding this comment

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

Аналогично)

// - ДвоичныеДанные - данные файла. Если ключ "Путь" не заполнен, то его значение будет заполнено
// путем к временному файлу, сохраненного из этих двоичных данных
//
Функция ПараметрыСообщенияFTPSFTP() Экспорт

Результат = Новый Структура("Путь, ИмяФайла, Расширение, ДвоичныеДанные");
Результат = Новый Структура("Путь, ИмяФайла, Расширение, РасширениеНаСервере, ДвоичныеДанные");
Copy link
Member

Choose a reason for hiding this comment

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

Аналогично

// Возвращаемое значение:
// ТаблицаЗначений - таблица с инициализированными колонками, подготовленная под заполнение параметров запроса
//
Функция ИнициализироватьТаблицуПараметровЗапросаВнешнегоИсточника() Экспорт
Copy link
Member

Choose a reason for hiding this comment

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

Ну в общем ты понял...

// Возвращаемое значение:
// Произвольный - результат вызываемой функции.
//
Функция ВызватьФункциюКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
Copy link
Member

Choose a reason for hiding this comment

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

И это?

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
Member

Choose a reason for hiding this comment

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

Это больше похоже на правду, но лучше удостовериться)

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

@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)

23-36: Дополните документацию параметров структуры

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

  • АдресМакета
  • АдресПомещения

в секцию "Возвращаемое значение" для улучшения понимания кода.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 128daab and 0a5b826.

📒 Files selected for processing (2)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl (3 hunks)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера/Ext/Module.bsl
🔇 Additional comments (2)
src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументКлиент/Ext/Module.bsl (2)

49-54: Улучшена структура параметров функции

Позитивное изменение: переход на использование структуры параметров улучшает поддержку кода и упрощает добавление новых параметров в будущем.


57-57: Проверить обработку CSV файлов

Добавлена поддержка CSV файлов в диалоге выбора. Убедитесь, что:

  1. Корректно обрабатываются различные кодировки CSV файлов
  2. Правильно определяются разделители полей
  3. Добавлены тесты для проверки загрузки CSV файлов

Also applies to: 66-66

Copy link

Passed

Analysis Details

24 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 24 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 (10)
src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный/Ext/Module.bsl (2)

29-34: Добавьте документацию параметров

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

 // См. пбп_СерверныеОповещения.ОтправитьСерверноеОповещение.
+//
+// Параметры:
+//  ИмяОповещения - Строка - Имя серверного оповещения
+//  Результат     - Произвольный - Данные оповещения
+//  Адресаты      - Массив - Список адресатов оповещения
+//  ОтправитьСразу - Булево - Признак немедленной отправки
 Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт

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

Функция может завершиться с ошибкой, если модуль не будет найден. Рекомендуется добавить обработку исключительных ситуаций.

 Функция ПолучитьМодуль()
+	Попытка
 		Возврат пбп_ОбщегоНазначенияПовтИсп.ПереадресацияОбщегоМодуля("СерверныеОповещения", "пбп_СерверныеОповещения");
+	Исключение
+		ЗаписьЖурналаРегистрации("пбп_СерверныеОповещенияСлужебный.ПолучитьМодуль",
+			УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+		ВызватьИсключение;
+	КонецПопытки
 КонецФункции
src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебныйКлиент/Ext/Module.bsl (1)

49-59: Требуется улучшить валидацию входных данных и документацию

Рекомендации по улучшению функции:

  1. Добавить проверку входного параметра на пустую строку
  2. Дополнить документацию примером ожидаемого формата ИмяОбъекта

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

 // Параметры:
-//  ИмяОбъекта	 - Строка - Полное имя объекта метаданных
+//  ИмяОбъекта	 - Строка - Полное имя объекта метаданных
+//                   Например: "Справочник.Номенклатура"
 // 
 // Возвращаемое значение:
 //  Строка - навигационная ссылка
 //
 Функция НавигационнаяСсылкаОбъекта(ИмяОбъекта)
+	Если ПустаяСтрока(ИмяОбъекта) Тогда
+		ВызватьИсключение НСтр("ru = 'Параметр ИмяОбъекта не может быть пустым'");
+	КонецЕсли;
+	
 	Возврат "e1cib/list/" + ИмяОбъекта;
 КонецФункции
src/cf/CommonModules/пбп_МетодыРегламентныхЗаданийСервер/Ext/Module.bsl (2)

51-53: Рекомендуется дополнить документацию процедуры

Текущая документация содержит только общее описание. Рекомендуется добавить:

  • Описание возможных исключений
  • Примеры использования
  • Зависимости от других подсистем
 // Заполнение предопределенных элементов, с выводом серверного оповещения при возникновении конфликтов.
 //
+// Исключения:
+//   - <Описание возможных исключений>
+//
+// Пример:
+//   ЗаполнениеПредопределенныхЭлементов();
+//
+// Зависимости:
+//   - пбп_ОбщегоНазначенияСлужебный
+//   - пбп_ПредопределенныеЗначения

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

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

 Процедура ЗаполнениеПредопределенныхЭлементов() Экспорт
-	
-	пбп_ОбщегоНазначенияСлужебный.ПриНачалеВыполненияРегламентногоЗадания(
-		Метаданные.РегламентныеЗадания.пбп_ЗаполнениеПредопределенныхЭлементов);
-		
-	пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов(Истина);
-	
+	Попытка
+		пбп_ОбщегоНазначенияСлужебный.ПриНачалеВыполненияРегламентногоЗадания(
+			Метаданные.РегламентныеЗадания.пбп_ЗаполнениеПредопределенныхЭлементов);
+			
+		пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов(Истина);
+	Исключение
+		ЗаписьЖурналаРегистрации(
+			НСтр("ru = 'Ошибка заполнения предопределенных элементов'"),
+			УровеньЖурналаРегистрации.Ошибка,
+			,
+			,
+			ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+		ВызватьИсключение;
+	КонецПопытки
 КонецПроцедуры
src/cf/CommonModules/пбп_СерверныеОповещения/Ext/Module.bsl (1)

32-50: Улучшение документации параметров

В документации параметров рекомендуется:

  1. Добавить описание возможных значений параметра ИмяОповещения
  2. Уточнить формат КлючСеанса в описании параметра Адресаты
  3. Добавить примеры использования
src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form.xml (2)

119-126: Рассмотрите необходимость ExtendedEditMultipleValues для поля только для чтения

Поле ТаблицаКонфликтовКоллизииИдентификатора корректно настроено как поле только для чтения, однако включен режим ExtendedEditMultipleValues, который может быть избыточным для такого поля.

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

 <InputField name="ТаблицаКонфликтовКоллизииИдентификатора" id="36">
   <DataPath>ТаблицаКонфликтов.Ошибка</DataPath>
   <ReadOnly>true</ReadOnly>
   <EditMode>EnterOnInput</EditMode>
-  <ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
   <ContextMenu name="ТаблицаКонфликтовКоллизииИдентификатораКонтекстноеМеню" id="37"/>
   <ExtendedTooltip name="ТаблицаКонфликтовКоллизииИдентификатораРасширеннаяПодсказка" id="38"/>
 </InputField>

187-197: Добавьте подсказку для колонки Ошибка

Колонка Ошибка корректно определена с правильным типом данных, однако отсутствует подсказка, которая могла бы помочь пользователям понять назначение этого поля.

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

 <Column name="Ошибка" id="2">
   <Title>
     <v8:item>
       <v8:lang>ru</v8:lang>
       <v8:content>Ошибка</v8:content>
     </v8:item>
   </Title>
+  <ToolTip>
+    <v8:item>
+      <v8:lang>ru</v8:lang>
+      <v8:content>Тип ошибки, возникшей при обработке предопределенного элемента</v8:content>
+    </v8:item>
+  </ToolTip>
   <Type>
     <v8:Type>cfg:EnumRef.пбп_ВидыОшибокПредопределенныхЭлементов</v8:Type>
   </Type>
 </Column>
src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl (2)

Line range hint 349-386: Проверьте полноту списка исключаемых полей

В новом разделе определены поля, исключаемые из расчета хеша. Рекомендуется:

  1. Добавить комментарии, объясняющие причины исключения каждого поля
  2. Проверить, все ли необходимые поля включены в список

411-416: Документируйте назначение служебных колонок

Добавлены новые служебные колонки, но их назначение не очевидно. Рекомендуется:

  1. Добавить комментарии, описывающие назначение каждой колонки
  2. Указать, в каких сценариях они используются
 Колонки = Новый Структура;
 
+// Служебные колонки для управления элементами
+// Служебный_ОбновитьЭлемент - Признак необходимости обновления элемента
 Колонки.Вставить("Служебный_ОбновитьЭлемент", ОписаниеБулево);
+// Служебный_УстановитьФлагРучноеИзменение - Признак ручного изменения элемента
 Колонки.Вставить("Служебный_УстановитьФлагРучноеИзменение", ОписаниеБулево);
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 0a5b826 and ec9a37f.

📒 Files selected for processing (18)
  • src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form.xml (2 hunks)
  • src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form/Module.bsl (6 hunks)
  • src/cf/CommonModules/пбп_МетодыРегламентныхЗаданийСервер/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl (11 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияПереопределяемый/Ext/Module.bsl (6 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебныйКлиент.xml (1 hunks)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебныйКлиент/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_СерверныеОповещения.xml (1 hunks)
  • src/cf/CommonModules/пбп_СерверныеОповещения/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный.xml (1 hunks)
  • src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный/Ext/Module.bsl (1 hunks)
  • src/cf/Configuration.xml (4 hunks)
  • src/cf/Enums/пбп_ВидыОшибокПредопределенныхЭлементов.xml (1 hunks)
  • src/cf/ScheduledJobs/пбп_ЗаполнениеПредопределенныхЭлементов.xml (1 hunks)
  • src/cf/ScheduledJobs/пбп_ЗаполнениеПредопределенныхЭлементов/Ext/Schedule.xml (1 hunks)
  • src/cf/Subsystems/пбп_ОбщегоНазначения.xml (1 hunks)
  • src/cf/Subsystems/пбп_ПредопределенныеЗначения.xml (1 hunks)
✅ Files skipped from review due to trivial changes (6)
  • src/cf/CommonModules/пбп_ПредопределенныеЗначенияСлужебныйКлиент.xml
  • src/cf/CommonModules/пбп_СерверныеОповещения.xml
  • src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный.xml
  • src/cf/Enums/пбп_ВидыОшибокПредопределенныхЭлементов.xml
  • src/cf/ScheduledJobs/пбп_ЗаполнениеПредопределенныхЭлементов.xml
  • src/cf/ScheduledJobs/пбп_ЗаполнениеПредопределенныхЭлементов/Ext/Schedule.xml
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl
  • src/cf/Configuration.xml
🔇 Additional comments (30)
src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный/Ext/Module.bsl (1)

1-20: Корректное оформление лицензии и документации

Заголовок файла содержит всю необходимую информацию: описание назначения библиотеки, информацию об авторских правах, лицензию Apache 2.0 и ссылку на репозиторий.

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

1-20: Корректное оформление лицензии и документации!

Заголовок файла содержит всю необходимую информацию о лицензии Apache 2.0 и правах собственности.

src/cf/CommonModules/пбп_СерверныеОповещения/Ext/Module.bsl (1)

1-20: LGTM: Корректный заголовок лицензии

Заголовок файла содержит всю необходимую информацию о лицензии Apache 2.0 и правообладателе.

src/cf/Subsystems/пбп_ПредопределенныеЗначения.xml (2)

38-40: Корректная структура и именование новых элементов подсистемы

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


39-39: Проверить интеграцию регламентного задания

Необходимо убедиться, что регламентное задание пбп_ЗаполнениеПредопределенныхЭлементов корректно настроено и не конфликтует с существующими процессами заполнения предопределенных элементов.

✅ Verification successful

Let me gather more information about the scheduled job configuration.


Let me check the implementation of the scheduled job method and related modules.


Регламентное задание корректно интегрировано в подсистему

Анализ показал, что регламентное задание:

  • Корректно зарегистрировано в конфигурации
  • Является частью подсистемы "пбп_ПредопределенныеЗначения"
  • Использует выделенный общий модуль пбп_МетодыРегламентныхЗаданийСервер
  • Имеет настроенную обработку ошибок (3 попытки повтора с интервалом 10 секунд)
  • Не конфликтует с другими регламентными заданиями в системе
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Поиск связанных настроек регламентного задания

# Поиск конфигурации регламентного задания
rg -l "пбп_ЗаполнениеПредопределенныхЭлементов" --type xml

# Поиск использования в модулях
ast-grep --pattern 'пбп_ЗаполнениеПредопределенныхЭлементов'

Length of output: 798


Script:

#!/bin/bash
# Получим содержимое файла конфигурации регламентного задания
cat "src/cf/ScheduledJobs/пбп_ЗаполнениеПредопределенныхЭлементов.xml"

# Поищем другие регламентные задания, связанные с предопределенными элементами
rg -l "ПредопределенныхЭлементов" --type xml

# Поищем модуль регламентного задания, если он существует
fd "пбп_ЗаполнениеПредопределенныхЭлементов\.xml" -t f --exec cat {}

Length of output: 4662


Script:

#!/bin/bash
# Поиск модуля с реализацией метода регламентного задания
rg -g "*.xml" -l "пбп_МетодыРегламентныхЗаданийСервер"

# Поиск других модулей, работающих с предопределенными элементами
rg -g "*.xml" -A 5 "ЗаполнениеПредопределенныхЭлементов"

# Проверка наличия других регламентных заданий в том же модуле
rg -g "*.xml" "CommonModule.пбп_МетодыРегламентныхЗаданийСервер"

Length of output: 4644

src/cf/Subsystems/пбп_ОбщегоНазначения.xml (1)

64-65: Подтверждаю добавление новых модулей в подсистему

Добавление модулей пбп_СерверныеОповещения и пбп_СерверныеОповещенияСлужебный соответствует принятой архитектуре системы, где основная логика отделена от служебной.

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

✅ Verification successful

Модули корректно настроены и интегрированы в конфигурацию

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

  • Оба модуля правильно сконфигурированы как серверные модули
  • Настройки безопасности и области использования соответствуют назначению (Server=true, Global=false)
  • Модули корректно зарегистрированы в Configuration.xml
  • Модули логически размещены среди других серверных компонентов подсистемы
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Проверка зависимостей новых модулей

# Поиск использования новых модулей в других файлах конфигурации
rg -l "пбп_СерверныеОповещения" --type xml

# Поиск определений модулей
fd "пбп_СерверныеОповещения.*\.xml$"

Length of output: 520


Script:

#!/bin/bash
# Проверяем содержимое файлов определений модулей для анализа их настроек
cat src/cf/CommonModules/пбп_СерверныеОповещения.xml
cat src/cf/CommonModules/пбп_СерверныеОповещенияСлужебный.xml

# Проверяем содержимое Configuration.xml для понимания зависимостей
rg -A 5 -B 5 "пбп_СерверныеОповещения" src/cf/Configuration.xml

Length of output: 4648

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

Line range hint 119-197: Изменения улучшают обработку ошибок

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

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

19-22: Улучшение обработки пустого результата

Изменение возвращаемого значения с Неопределено на пустую таблицу делает поведение функции более предсказуемым и упрощает обработку результата в вызывающем коде.


36-56: Проверьте обработку конфликтов

Новая функция ТаблицаКонфликтныхЭлементов добавляет колонку для отслеживания дублирования идентификаторов. Убедитесь, что:

  1. Все места использования этой таблицы корректно обрабатывают новую колонку
  2. Реализована соответствующая логика обработки конфликтов
✅ Verification successful

Let's check how this column is used in the found files to verify the conflict handling implementation.


Let's check the full context of conflict handling by looking at the related functions and error handling.


Обработка конфликтов реализована корректно

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

  1. Колонка Служебный_ДублированиеИдентификаторов корректно используется для маркировки конфликтов
  2. Реализована полная цепочка обработки конфликтов:
    • Выявление дублирования идентификаторов
    • Уведомление пользователя через СообщитьОДублированииИдентификаторов
    • Корректная обработка в форме разрешения конфликтов с соответствующим UI
    • Автоматическое удаление дублирующихся элементов при разрешении конфликтов
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск использования новой колонки в коде
rg -l "Служебный_ДублированиеИдентификаторов"

Length of output: 540


Script:

#!/bin/bash
# Check usage of the column in the found files
echo "=== пбп_ПредопределенныеЗначения Module ==="
rg -A 5 "Служебный_ДублированиеИдентификаторов" "src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl"

echo -e "\n=== Form Module ==="
rg -A 5 "Служебный_ДублированиеИдентификаторов" "src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form/Module.bsl"

Length of output: 1936


Script:

#!/bin/bash
# Check for conflict handling functions and error processing
echo "=== Checking error handling in пбп_ПредопределенныеЗначения ==="
rg -B 5 -A 10 "СообщитьОДублированииИдентификаторов" "src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl"

echo -e "\n=== Checking form initialization and conflict resolution ==="
rg -B 5 -A 10 "пбп_ВидыОшибокПредопределенныхЭлементов" "src/cf/CommonForms/пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов/Ext/Form/Module.bsl"

Length of output: 4949

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

17-18: Добавлен вызов процедуры УстановитьУсловноеОформление после обработки конфликтных элементов


81-81: Пропуск колонок, имена которых начинаются с 'Служебный_'

Добавлено условие для игнорирования колонок таблицы, имена которых начинаются с 'Служебный_'. Это предотвращает обработку служебных полей в таблице конфликтов.


127-127: Получение списка предопределенных элементов из таблицы


156-161: Установка типа ошибки в зависимости от типа конфликта

Добавлена логика, которая устанавливает свойство Ошибка у новой строки в зависимости от наличия дублирования идентификаторов или расхождения элемента с кодом.


163-163: Добавлена проверка наличия предопределенного элемента в выборке


191-196: Удаление строк с дублирующими идентификаторами из таблицы

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


198-198: Установка флагов обновления или ручного изменения элемента

В зависимости от выбора пользователя устанавливается флаг Служебный_ОбновитьЭлемент или Служебный_УстановитьФлагРучноеИзменение для дальнейшей обработки предопределенных элементов.

Also applies to: 200-200


204-207: Добавлена проверка на заполненность таблицы после обработки

Проверяется, заполнена ли таблица после удаления строк с дублирующими идентификаторами. Если таблица пуста, дальнейшая обработка прекращается.


228-242: Добавлена процедура УстановитьУсловноеОформление для настройки условного оформления

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


219-222: ⚠️ Potential issue

Возможная синтаксическая ошибка из-за разрыва строки условия

Условие Если Строка.Ошибка = ПредопределенноеЗначение("...") Тогда разбито на две строки, что может привести к синтаксической ошибке. Рекомендуется объединить условие в одну строку.

Примените следующий дифф для исправления:

-        Если Строка.Ошибка =
-            ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов") Тогда
+        Если Строка.Ошибка = ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов") Тогда

Likely invalid or redundant comment.

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

36-37: Улучшена корректность возвращаемого значения функции

Возврат пустого объекта ТаблицаЗначений вместо Неопределено обеспечивает согласованность типов и упрощает обработку результата функции.


132-132: Стандартизация имен служебных полей

Использование префикса Служебный_ в именах полей улучшает единообразие и повышает читаемость кода.


248-248: Обновление сигнатуры функции и документации

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

Also applies to: 253-253


331-343: Переименование служебных переменных для согласованности

Замена префикса на Служебный_ в именах переменных повышает согласованность и упрощает понимание кода.


376-415: Добавлена процедура ЗаполнениеПредопределенныхЭлементов для улучшения обработки

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


423-424: Исправление условия с использованием обновленных переменных

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


459-459: Актуализация параметров функции

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


474-474: Корректировка логики добавления родителей элементов

Использование переименованных переменных гарантирует правильное сохранение иерархической структуры элементов.


651-656: Оптимизация обработки строк с использованием новых служебных полей

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


678-712: Улучшена обработка дублей и незаполненных идентификаторов

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


65-65: Обновление параметров при вызове функции

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

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

✅ Verification successful

Let me generate additional verification to check the function implementation and its usage context:


Вызов функции соответствует сигнатуре

Проверка показала, что вызов функции УдалитьИзТаблицыСуществующиеЭлементы(ТаблицаПредопределенных, Параметры) корректен, так как:

  • Параметр Параметры содержит все необходимые поля, которые используются в функции через ДополнительныеПараметры
  • В реализации функции параметры используются правильно: ДополнительныеПараметры.Менеджер и ДополнительныеПараметры.ПолноеИмя
  • Это единственный вызов данной функции в кодовой базе
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Поиск всех вызовов функции УдалитьИзТаблицыСуществующиеЭлементы и проверка используемых параметров

# Ожидаемый результат: Все вызовы функции должны использовать два параметра, где второй — ДополнительныеПараметры
rg 'УдалитьИзТаблицыСуществующиеЭлементы\(\s*\w+,\s*\w+\)' -A 2

Length of output: 824


Script:

#!/bin/bash
# Получаем контекст функции УдалитьИзТаблицыСуществующиеЭлементы и её вызова
rg -B 5 -A 15 'УдалитьИзТаблицыСуществующиеЭлементы' src/cf/CommonModules/пбп_ПредопределенныеЗначения/Ext/Module.bsl

Length of output: 2443

Comment on lines +23 to +43
// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения.
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт

Если ТипЗнч(Результат) = Тип("Структура") Тогда
Текст = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Существуют конфликты предопределенных элементов ''%1'''"),
Результат.ПредставлениеОбъекта);
Пояснение = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Разрешить конфликты предопределенных элементов ''%1'''"),
Результат.ПредставлениеОбъекта);

ПоказатьОповещениеПользователя(
Текст,
НавигационнаяСсылкаОбъекта(Результат.ИмяОбъектаМетаданных),
Пояснение,
БиблиотекаКартинок.ДиалогВосклицание,
СтатусОповещенияПользователя.Важное,
"КонфликтыПредопределенныхЭлементов_" + Результат.ИмяОбъектаМетаданных);
КонецЕсли;

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

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Необходимо улучшить обработку ошибок и использование параметров

Обнаружены следующие проблемы:

  1. Неиспользуемый параметр ИмяОповещения
  2. Отсутствует проверка на Неопределено для параметра Результат
  3. Нет обработки ошибок при подстановке параметров в строку

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

-Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
+Процедура ПриПолученииСерверногоОповещения(Знач ИмяОповещения, Знач Результат) Экспорт
 	
-	Если ТипЗнч(Результат) = Тип("Структура") Тогда
+	Если Результат = Неопределено Тогда
+		Возврат;
+	КонецЕсли;
+	
+	Попытка
+		Если ТипЗнч(Результат) = Тип("Структура") Тогда

Committable suggestion skipped: line range outside the PR's diff.

Comment on lines +51 to +53
Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт

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

Choose a reason for hiding this comment

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

⚠️ Potential issue

Отсутствует реализация процедуры

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

Хотите, чтобы я предложил пример реализации данной процедуры?

@ivanmolodec ivanmolodec merged commit 46f766e into develop Nov 21, 2024
6 checks passed
@ivanmolodec ivanmolodec deleted the updating-upload-from-file branch November 21, 2024 13:42
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