-
Notifications
You must be signed in to change notification settings - Fork 7
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
Conversation
WalkthroughВ данном пулл-реквесте внесены изменения в несколько файлов, касающиеся обработки загрузки файлов и управления параметрами. В частности, обновлены процедуры и функции, связанные с загрузкой Excel-файлов, добавлены новые параметры для улучшения обработки ошибок, а также изменена логика инициализации таблиц значений. Также были добавлены новые функции для обработки строковых значений и управления параметрами запроса, что улучшает гибкость и модульность кода. Changes
Possibly related PRs
Suggested reviewers
📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
Documentation and Community
|
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this 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
📒 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
Изменение типа параметра является новой функциональностью
Анализ кода показывает, что:
- Функция
ПолучитьТаблицуДанныхИзВнешнегоИсточникаПоУсловиям
определена как экспортная - Параметр
ПараметрыЗапроса
имеет значение по умолчаниюНеопределено
- В формах каталогов
пбп_НастройкиИнтеграции
ипбп_ИсторияИнтеграции
не найдены прямые вызовы этой функции - Изменение типа параметра с
Структура
наТаблицаЗначений
является расширением функциональности, а не изменением существующей
Поскольку параметр опциональный и имеет значение по умолчанию, это изменение обратно совместимо и не требует немедленных изменений в вызывающем коде.
🏁 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)", | ||
КлючИЗначение.Ключ, КлючИЗначение.Значение); | ||
Выполнить(ШаблонКоманды); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Устраните потенциальную уязвимость, связанную с использованием оператора Выполнить()
.
Использование Выполнить(ШаблонКоманды)
может привести к выполнению произвольного кода на сервере, что представляет серьезную угрозу безопасности. Рекомендуется заменить динамическое выполнение кода на безопасные альтернативы, такие как вызов заранее определенных функций.
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
[failure] 349-349: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L349
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью
СтроковоеЗначение = СокрЛП(ВхЗначение); | ||
СтроковоеЗначение = СтрЗаменить(ВхЗначение, ",", "."); | ||
СтроковоеЗначение = СтрЗаменить(ВхЗначение, Символы.НПП, ""); | ||
Возврат СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ВхЗначение); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Исправьте использование переменной СтроковоеЗначение
или удалите ее.
Переменная СтроковоеЗначение
присваивается и изменяется, но не используется при возврате значения функции. Вероятно, вместо ВхЗначение
в операторе Возврат
следует использовать СтроковоеЗначение
или удалить ненужную переменную.
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
[warning] 918-918: src/cf/CommonModules/пбп_ЗагрузкаФайлаЧерезТабличныйДокументСервер/Ext/Module.bsl#L918
Удалите неиспользуемую переменную СтроковоеЗначение
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this 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
📒 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
: Корректное расширение параметров
Новые параметры хорошо документированы и имеют логичные значения по умолчанию.
Асинх Функция ЗагрузитьИзXLS( | ||
АдресСоответствияКолонок, НазваниеЛиста = "", | ||
НомерПервойСтроки = 1, СопоставлениеПоНаименованию = Ложь, | ||
ВыдаватьОшибку = Ложь, БулевоЗначениеИстина = "") Экспорт |
There was a problem hiding this comment.
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
Добавьте описание метода программного интерфейса
Функция СтрокаВЧисло(Знач Значение) Экспорт | ||
|
||
Значение = СтрЗаменить(Значение, " ", ""); | ||
Если СтрНачинаетсяС(Значение, "(") Тогда | ||
Значение = СтрЗаменить(Значение, "(", "-"); | ||
Значение = СтрЗаменить(Значение, ")", ""); | ||
КонецЕсли; | ||
|
||
СтрокаБезНулей = СтрЗаменить(Значение, "0", ""); | ||
Если ПустаяСтрока(СтрокаБезНулей) Или СтрокаБезНулей = "-" Тогда | ||
Возврат 0; | ||
КонецЕсли; | ||
|
||
ТипЧисло = Новый ОписаниеТипов("Число"); | ||
Результат = ТипЧисло.ПривестиЗначение(Значение); | ||
|
||
Возврат ?(Результат <> 0 И Не ПустаяСтрока(СтрокаБезНулей), Результат, Неопределено); | ||
|
||
КонецФункции |
There was a problem hiding this comment.
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.
Функция СтрокаВЧисло(Знач Значение) Экспорт | |
Значение = СтрЗаменить(Значение, " ", ""); | |
Если СтрНачинаетсяС(Значение, "(") Тогда | |
Значение = СтрЗаменить(Значение, "(", "-"); | |
Значение = СтрЗаменить(Значение, ")", ""); | |
КонецЕсли; | |
СтрокаБезНулей = СтрЗаменить(Значение, "0", ""); | |
Если ПустаяСтрока(СтрокаБезНулей) Или СтрокаБезНулей = "-" Тогда | |
Возврат 0; | |
КонецЕсли; | |
ТипЧисло = Новый ОписаниеТипов("Число"); | |
Результат = ТипЧисло.ПривестиЗначение(Значение); | |
Возврат ?(Результат <> 0 И Не ПустаяСтрока(СтрокаБезНулей), Результат, Неопределено); | |
КонецФункции | |
Функция СтрокаВЧисло(Знач Значение) Экспорт | |
Значение = СтрЗаменить(Значение, " ", ""); | |
Если СтрНачинаетсяС(Значение, "(") Тогда | |
Значение = СтрЗаменить(Значение, "(", "-"); | |
Значение = СтрЗаменить(Значение, ")", ""); | |
КонецЕсли; | |
Если ПустаяСтрока(Значение) Тогда | |
Возврат 0; | |
КонецЕсли; | |
ТипЧисло = Новый ОписаниеТипов("Число"); | |
Результат = ТипЧисло.ПривестиЗначение(Значение); | |
Возврат ?(Результат <> Неопределено, Результат, Неопределено); | |
КонецФункции |
Функция ПреобразоватьСтроковыеЗначенияПоТипамСвойств(ТЗ, Макет, КонвертироватьДаты = Ложь, | ||
ЗначениеИстина = "", ОставитьСтроковые = Ложь, ИскатьПомеченныеНаУдаление = Истина) Экспорт | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Требуется рефакторинг для снижения сложности
Функция ПреобразоватьСтроковыеЗначенияПоТипамСвойств
имеет следующие проблемы:
- Высокая цикломатическая сложность (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
Если ВыдаватьОшибку И Лист = Неопределено Тогда | ||
СообщениеОбОшибке = НСтр("ru = 'Лист с указанным именем " + НазваниеЛиста + " не найден';"); | ||
Возврат СообщениеОбОшибке; | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Используйте форматирование строк вместо конкатенации в НСтр
Конкатенация строк внутри НСтр
может привести к проблемам локализации.
- СообщениеОбОшибке = НСтр("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.
Если ВыдаватьОшибку И Лист = Неопределено Тогда | |
СообщениеОбОшибке = НСтр("ru = 'Лист с указанным именем " + НазваниеЛиста + " не найден';"); | |
Возврат СообщениеОбОшибке; | |
КонецЕсли; | |
Если ВыдаватьОшибку И Лист = Неопределено Тогда | |
СообщениеОбОшибке = СтрШаблон(НСтр("ru = 'Лист с указанным именем %1 не найден'"), НазваниеЛиста); | |
Возврат СообщениеОбОшибке; | |
КонецЕсли; |
Процедура ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ТабДок, Макет, ШиринаТаблицы, | ||
НомерСтроки, НомерКолонки, КолонкиКУдалению, УдалитьСтрокиШапки, ШиринаГруппы = 0) | ||
|
There was a problem hiding this comment.
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 Исполняемый код безопасен. |
There was a problem hiding this comment.
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
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью
// Аналог метода БСП. Вызвать экспортную функцию по имени с уровнем привилегий конфигурации. | ||
// При включении профилей безопасности для вызова оператора Выполнить() используется | ||
// переход в безопасный режим с профилем безопасности, используемом для информационной базы | ||
// (если выше по стеку не был установлен другой безопасный режим). | ||
// | ||
// Параметры: | ||
// ИмяМетода - Строка - имя экспортной функции в формате | ||
// <имя объекта>.<имя процедуры>, где <имя объекта> - это | ||
// общий модуль или модуль менеджера объекта. | ||
// Параметры - Массив - параметры передаются в функцию <ИмяМетода> | ||
// в порядке расположения элементов массива. | ||
// | ||
// Возвращаемое значение: | ||
// Произвольный - результат вызываемой функции. | ||
// | ||
Функция ВызватьФункциюКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт | ||
|
||
ПроверитьИмяПроцедурыКонфигурации(ИмяМетода); | ||
|
||
Если ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда | ||
МодульРаботаВБезопасномРежиме = ОбщийМодуль("РаботаВБезопасномРежиме"); | ||
Если МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности() | ||
И Не МодульРаботаВБезопасномРежиме.УстановленБезопасныйРежим() Тогда | ||
|
||
ПрофильИнформационнойБазы = МодульРаботаВБезопасномРежиме.ПрофильБезопасностиИнформационнойБазы(); | ||
Если ЗначениеЗаполнено(ПрофильИнформационнойБазы) Тогда | ||
|
||
УстановитьБезопасныйРежим(ПрофильИнформационнойБазы); | ||
Если БезопасныйРежим() = Истина Тогда | ||
УстановитьБезопасныйРежим(Ложь); | ||
КонецЕсли; | ||
|
||
КонецЕсли; | ||
|
||
КонецЕсли; | ||
КонецЕсли; | ||
|
||
ПараметрыСтрока = ""; | ||
Если Параметры <> Неопределено И Параметры.Количество() > 0 Тогда | ||
Для Индекс = 0 По Параметры.ВГраница() Цикл | ||
ПараметрыСтрока = ПараметрыСтрока + "Параметры[" + XMLСтрока(Индекс) + "],"; | ||
КонецЦикла; | ||
ПараметрыСтрока = Сред(ПараметрыСтрока, 1, СтрДлина(ПараметрыСтрока) - 1); | ||
КонецЕсли; | ||
|
||
Возврат Вычислить(ИмяМетода + "(" + ПараметрыСтрока + ")"); // АПК:488 Исполняемый код безопасен. | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Проверьте безопасность выполнения произвольного кода
Функция ВызватьФункциюКонфигурации
использует оператор Вычислить()
для динамического выполнения кода, что может представлять угрозу безопасности. Рекомендуется:
- Добавить дополнительную валидацию входных параметров
- Ограничить список разрешенных к вызову функций через механизм белых списков
- Пересмотреть логику управления безопасным режимом для минимизации окна уязвимости
Предлагаемые изменения:
Функция ВызватьФункциюКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
ПроверитьИмяПроцедурыКонфигурации(ИмяМетода);
+ // Проверка метода по белому списку разрешенных функций
+ Если Не РазрешенныйМетодКонфигурации(ИмяМетода) Тогда
+ ВызватьИсключение НСтр("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
Выполнение произвольного кода в общем модуле на сервере является потенциальной уязвимостью
УстановитьБезопасныйРежим(ПрофильИнформационнойБазы); | ||
Если БезопасныйРежим() = Истина Тогда | ||
УстановитьБезопасныйРежим(Ложь); | ||
КонецЕсли; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Проверьте логику управления безопасным режимом
Текущая реализация может создать окно уязвимости при переключении безопасного режима. Рекомендуется:
- Убрать лишнее отключение безопасного режима
- Добавить обработку исключений
- Логировать все изменения безопасного режима
-УстановитьБезопасныйРежим(ПрофильИнформационнойБазы);
-Если БезопасныйРежим() = Истина Тогда
- УстановитьБезопасныйРежим(Ложь);
-КонецЕсли;
+Попытка
+ УстановитьБезопасныйРежим(ПрофильИнформационнойБазы);
+ ЗаписьЖурналаРегистрации("ИзменениеБезопасногоРежима",
+ УровеньЖурналаРегистрации.Информация,,,
+ "Установлен профиль безопасности");
+Исключение
+ ЗаписьЖурналаРегистрации("ИзменениеБезопасногоРежима",
+ УровеньЖурналаРегистрации.Ошибка,,,
+ ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+ ВызватьИсключение;
+КонецПопытки;
📝 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.
УстановитьБезопасныйРежим(ПрофильИнформационнойБазы); | |
Если БезопасныйРежим() = Истина Тогда | |
УстановитьБезопасныйРежим(Ложь); | |
КонецЕсли; | |
Попытка | |
УстановитьБезопасныйРежим(ПрофильИнформационнойБазы); | |
ЗаписьЖурналаРегистрации("ИзменениеБезопасногоРежима", | |
УровеньЖурналаРегистрации.Информация,,, | |
"Установлен профиль безопасности"); | |
Исключение | |
ЗаписьЖурналаРегистрации("ИзменениеБезопасногоРежима", | |
УровеньЖурналаРегистрации.Ошибка,,, | |
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); | |
ВызватьИсключение; | |
КонецПопытки; |
🧰 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.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this 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
📒 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
: Корректная обработка ошибок при преобразовании значений
Реализована качественная обработка ошибок с подробным логированием деталей исключения и использованием локализованных сообщений.
Функция ПреобразоватьЧислоИзСтроки(ВхЗначение) | ||
|
||
СтроковоеЗначение = СокрЛП(ВхЗначение); | ||
СтроковоеЗначение = СтрЗаменить(ВхЗначение, ",", "."); | ||
СтроковоеЗначение = СтрЗаменить(ВхЗначение, Символы.НПП, ""); | ||
Возврат пбп_СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтроковоеЗначение); | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Исправьте ошибку в логике замены символов
В текущей реализации функции ПреобразоватьЧислоИзСтроки
есть ошибка: при замене символов используется исходное значение ВхЗначение
вместо промежуточного результата СтроковоеЗначение
.
Функция ПреобразоватьЧислоИзСтроки(ВхЗначение)
СтроковоеЗначение = СокрЛП(ВхЗначение);
- СтроковоеЗначение = СтрЗаменить(ВхЗначение, ",", ".");
- СтроковоеЗначение = СтрЗаменить(ВхЗначение, Символы.НПП, "");
+ СтроковоеЗначение = СтрЗаменить(СтроковоеЗначение, ",", ".");
+ СтроковоеЗначение = СтрЗаменить(СтроковоеЗначение, Символы.НПП, "");
Возврат пбп_СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтроковоеЗначение);
КонецФункции
📝 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.
Функция ПреобразоватьЧислоИзСтроки(ВхЗначение) | |
СтроковоеЗначение = СокрЛП(ВхЗначение); | |
СтроковоеЗначение = СтрЗаменить(ВхЗначение, ",", "."); | |
СтроковоеЗначение = СтрЗаменить(ВхЗначение, Символы.НПП, ""); | |
Возврат пбп_СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтроковоеЗначение); | |
КонецФункции | |
Функция ПреобразоватьЧислоИзСтроки(ВхЗначение) | |
СтроковоеЗначение = СокрЛП(ВхЗначение); | |
СтроковоеЗначение = СтрЗаменить(СтроковоеЗначение, ",", "."); | |
СтроковоеЗначение = СтрЗаменить(СтроковоеЗначение, Символы.НПП, ""); | |
Возврат пбп_СтроковыеФункцииКлиентСервер.СтрокаВЧисло(СтроковоеЗначение); | |
КонецФункции |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this 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
📒 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 = 'Обязательные параметры запроса';"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Исправьте синтаксическую ошибку
В строке присутствует лишняя точка с запятой после строкового литерала.
Примените следующие изменения:
- Элементы.ПараметрыВхода.Заголовок = НСтр("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.
Элементы.ПараметрыВхода.Заголовок = НСтр("ru = 'Обязательные параметры запроса';"); | |
Элементы.ПараметрыВхода.Заголовок = НСтр("ru = 'Обязательные параметры запроса'"); |
Для Каждого КлючЗначениеОператор Из ПараметрыЗапроса Цикл | ||
НуженПеренос = ?(ПустаяСтрока(УсловияЗапроса), "", " | ||
| И "); | ||
УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 = &%2", | ||
НуженПеренос, КлючИЗначение.Ключ); | ||
УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 %3 &%2", | ||
НуженПеренос, КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Оператор); | ||
|
||
Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение); | ||
Запрос.УстановитьПараметр(КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Значение); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Обнаружен риск SQL-инъекции!
В текущей реализации значение оператора сравнения напрямую подставляется в SQL-запрос без валидации, что может привести к SQL-инъекции.
Рекомендуется:
- Создать список разрешенных операторов
- Добавить валидацию значения оператора
- Использовать параметризацию вместо прямой подстановки
Пример исправления:
- УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 %3 &%2",
- НуженПеренос, КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Оператор);
+ РазрешенныеОператоры = Новый Массив;
+ РазрешенныеОператоры.Добавить("=");
+ РазрешенныеОператоры.Добавить(">");
+ РазрешенныеОператоры.Добавить("<");
+ РазрешенныеОператоры.Добавить(">=");
+ РазрешенныеОператоры.Добавить("<=");
+ РазрешенныеОператоры.Добавить("<>");
+
+ Если РазрешенныеОператоры.Найти(КлючЗначениеОператор.Оператор) = Неопределено Тогда
+ ВызватьИсключение "Недопустимый оператор сравнения";
+ КонецЕсли;
+
+ УсловияЗапроса = УсловияЗапроса + СтрШаблон("%1Таблица.%2 %3 &%2",
+ НуженПеренос, КлючЗначениеОператор.НаименованиеПоля, КлючЗначениеОператор.Оператор);
Committable suggestion skipped: line range outside the PR's diff.
#100 я знаю, что плохо пихать много ишью в один ПР, но девелоп безнадежно устарел и тут все связано)
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this 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).
Рекомендуется:
- Объединить параметры
СимволПараметра
иРазделительПараметраЗначения
в структуру настроек- Или установить более строгие значения по умолчанию, убрав их из параметров
🧰 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
📒 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
:
Необходима валидация оператора сравнения!
В текущей реализации значение оператора сравнения напрямую подставляется в SQL-запрос, что может привести к SQL-инъекции.
Рекомендуется добавить валидацию значения оператора через список разрешенных операторов:
+ РазрешенныеОператоры = Новый Массив;
+ РазрешенныеОператоры.Добавить("=");
+ РазрешенныеОператоры.Добавить(">");
+ РазрешенныеОператоры.Добавить("<");
+ РазрешенныеОператоры.Добавить(">=");
+ РазрешенныеОператоры.Добавить("<=");
+ РазрешенныеОператоры.Добавить("<>");
+
+ Если РазрешенныеОператоры.Найти(КлючЗначениеОператор.Оператор) = Неопределено Тогда
+ ВызватьИсключение "Недопустимый оператор сравнения";
+ КонецЕсли;
Функция ВыполнитьКомандуСистемы(ИнтеграционныйПоток, СтруктураАтрибутов, | ||
СимволПараметра = "/", РазделительПараметраЗначения = " ", | ||
ПараметрыЗапускаКоманды = Неопределено, СтруктураИстории = Неопределено) Экспорт | ||
|
||
РеквизитыПотока = пбп_ОбщегоНазначенияСервер.ЗначенияРеквизитовОбъекта( | ||
ИнтеграционныйПоток, "НастройкаИнтеграции.ИнтегрируемаяСистема, НастройкаИнтеграции.СтрокаПодключения, ТочкаВхода"); | ||
|
||
СтрокаАтрибутов = ""; | ||
|
||
Для Каждого КлючИЗначение Из СтруктураАтрибутов Цикл | ||
Разделитель = ?(ПустаяСтрока(СтрокаАтрибутов), СимволПараметра, " " + СимволПараметра); | ||
СтрокаАтрибутов = СтрокаАтрибутов + Разделитель + КлючИЗначение.Ключ | ||
+ РазделительПараметраЗначения + """" + КлючИЗначение.Значение + """"; | ||
КонецЦикла; | ||
|
||
ИтоговаяКоманда = СтрШаблон("%1 %2 %3", РеквизитыПотока.НастройкаИнтеграцииСтрокаПодключения, | ||
РеквизитыПотока.ТочкаВхода, СтрокаАтрибутов); | ||
|
||
Если ПараметрыЗапускаКоманды = Неопределено Тогда | ||
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы(); | ||
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина; | ||
КонецЕсли; | ||
|
||
Если СтруктураИстории <> Неопределено Тогда | ||
НачалоВызова = ТекущаяДатаСеанса(); | ||
КонецЕсли; | ||
|
||
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды); | ||
|
||
Если СтруктураИстории <> Неопределено Тогда | ||
СтруктураИстории.ДлительностьВызова = ТекущаяДатаСеанса() - НачалоВызова; | ||
КонецЕсли; | ||
|
||
Возврат Результат; | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Требуется дополнительная проверка безопасности при выполнении команд!
Выполнение системных команд может представлять угрозу безопасности. Необходимо:
- Добавить валидацию входных параметров
- Ограничить список разрешенных команд
- Логировать все выполняемые команды
🧰 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.
This comment has been minimized.
1 similar comment
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this 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).
Предлагается:
- Объединить параметры
СимволПараметра
иРазделительПараметраЗначения
в структуру настроек форматирования- Или установить более строгие значения по умолчанию, убрав их из параметров функции
🧰 Tools
🪛 GitHub Check: 1C: Project SubSystems Library Sonarqube Results
[warning] 633-633: src/cf/CommonModules/пбп_ИнтеграцииСервер/Ext/Module.bsl#L633
Уменьшите количество необязательных параметров c 4 до допустимого 3src/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
📒 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
:
Необходимо исправить риск SQL-инъекции!
В текущей реализации значение оператора сравнения напрямую подставляется в SQL-запрос без валидации, что может привести к SQL-инъекции.
Рекомендуется применить исправление из предыдущего комментария:
- Создать список разрешенных операторов
- Добавить валидацию значения оператора
- Использовать параметризацию вместо прямой подстановки
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
: Корректная реализация обработки ошибок
Реализация обработки ошибок выполнена правильно:
- Используется корректное логирование
- Применяется форматирование сообщений об ошибках
- Обеспечивается детальное представление ошибки
// Выполняет указанную команду системы интеграционного потока | ||
// | ||
// Параметры: | ||
// ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - интеграционный поток, хранящий данные команды | ||
// СтруктураАтрибутов - Структура - ключ - наименование атрибута, значение - значение атрибута | ||
// СимволПараметра - Строка - символ инициализации параметра команды (по-умолчанию "/") | ||
// РазделительПараметраЗначения - Строка - символ разделителя между именем и значением параметра (по-умолчанию " ") | ||
// ПараметрыЗапускаКоманды - Структура - см. пбп_ФайловаяСистема.ПараметрыЗапускаПрограммы | ||
// СтруктураИстории - Структура - см. пбп_ИнтеграцииСлужебный.ПолучитьСтруктуруЗаписиИстории | ||
// | ||
// Возвращаемое значение: | ||
// Число, Строка - см. пбп_ФайловаяСистема.ЗапуститьПрограмму | ||
// | ||
Функция ВыполнитьКомандуСистемы(ИнтеграционныйПоток, СтруктураАтрибутов, | ||
СимволПараметра = "/", РазделительПараметраЗначения = " ", | ||
ПараметрыЗапускаКоманды = Неопределено, СтруктураИстории = Неопределено) Экспорт | ||
|
||
РеквизитыПотока = пбп_ОбщегоНазначенияСервер.ЗначенияРеквизитовОбъекта( | ||
ИнтеграционныйПоток, "НастройкаИнтеграции.ИнтегрируемаяСистема, НастройкаИнтеграции.СтрокаПодключения, ТочкаВхода"); | ||
|
||
СтрокаАтрибутов = ""; | ||
|
||
Для Каждого КлючИЗначение Из СтруктураАтрибутов Цикл | ||
Разделитель = ?(ПустаяСтрока(СтрокаАтрибутов), СимволПараметра, " " + СимволПараметра); | ||
СтрокаАтрибутов = СтрокаАтрибутов + Разделитель + КлючИЗначение.Ключ | ||
+ РазделительПараметраЗначения + """" + КлючИЗначение.Значение + """"; | ||
КонецЦикла; | ||
|
||
ИтоговаяКоманда = СтрШаблон("%1 %2 %3", РеквизитыПотока.НастройкаИнтеграцииСтрокаПодключения, | ||
РеквизитыПотока.ТочкаВхода, СтрокаАтрибутов); | ||
|
||
Если ПараметрыЗапускаКоманды = Неопределено Тогда | ||
ПараметрыЗапускаКоманды = пбп_ФайловаяСистемаПереадресация.ПараметрыЗапускаПрограммы(); | ||
ПараметрыЗапускаКоманды.ДождатьсяЗавершения = Истина; | ||
КонецЕсли; | ||
|
||
Если СтруктураИстории <> Неопределено Тогда | ||
НачалоВызова = ТекущаяДатаСеанса(); | ||
КонецЕсли; | ||
|
||
// BSLLS:ExternalAppStarting-off | ||
Результат = пбп_ФайловаяСистемаПереадресация.ЗапуститьПрограмму(ИтоговаяКоманда, ПараметрыЗапускаКоманды); | ||
// BSLLS:ExternalAppStarting-on | ||
|
||
Если СтруктураИстории <> Неопределено Тогда | ||
СтруктураИстории.ДлительностьВызова = ТекущаяДатаСеанса() - НачалоВызова; | ||
КонецЕсли; | ||
|
||
Возврат Результат; | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Критический риск безопасности при выполнении команд!
Текущая реализация позволяет внедрение команд через неверифицированные параметры. Необходимо:
- Добавить валидацию входных параметров
- Создать белый список разрешенных команд
- Экранировать специальные символы в параметрах
- Логировать все выполняемые команды
Пример безопасной реализации:
- ИтоговаяКоманда = СтрШаблон("%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
// Читает CSV-файл и выводит их в таблицу значений, заполненной согласно структуре макета | ||
// | ||
// Параметры: | ||
// ПутьКФайлу - Строка - путь к csv-файлу во временном хранилище | ||
// СтруктураМакета - ТаблицаЗначений - в таблице указано имя колонок, их тип и поле поиска ссылочного типа | ||
// Кодировка - Строка - кодировка текста файла | ||
// Разделитель - Строка - разделитель значений | ||
// | ||
// Возвращаемое значение: | ||
// ТаблицаЗначений - таблица с данными, прочитанными из CSV-файла | ||
// | ||
Функция ПолучитьПромежуточнуюТаблицуИзCSVФайла(ПутьКФайлу, СтруктураМакета, Кодировка = "UTF8", Разделитель = "") Экспорт | ||
|
||
СыраяТаблица = Новый ТаблицаЗначений; | ||
Для Каждого КолонкаТаблицы Из СтруктураМакета Цикл | ||
СыраяТаблица.Колонки.Добавить(КолонкаТаблицы.ИмяКолонки, пбп_ОбщегоНазначенияСервер.ОписаниеТипаСтрока(300)); | ||
КонецЦикла; | ||
|
||
ЗагружаемыйФайл = Новый ЧтениеТекста(ПутьКФайлу, Кодировка); | ||
|
||
НомерСтроки = 1; | ||
ТекущаяСтрока = ЗагружаемыйФайл.ПрочитатьСтроку(); | ||
Пока ТекущаяСтрока <> Неопределено Цикл | ||
Если НомерСтроки < 2 Тогда // в первой заголовок | ||
НомерСтроки = НомерСтроки + 1; | ||
ТекущаяСтрока = ЗагружаемыйФайл.ПрочитатьСтроку(); | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
НоваяСтрока = СыраяТаблица.Добавить(); | ||
|
||
Если Разделитель = "" Тогда | ||
Для Каждого СвойстваКолонок Из СтруктураМакета Цикл | ||
Если Не ЗначениеЗаполнено(СвойстваКолонок.Начало) Тогда | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
ЗначениеКолонки = Сред(ТекущаяСтрока, СвойстваКолонок.Начало, СвойстваКолонок.Длина); | ||
ЗначениеБезПробелов = СокрЛП(ЗначениеКолонки); | ||
НоваяСтрока[СвойстваКолонок.ИмяКолонки] = ЗначениеБезПробелов; | ||
КонецЦикла; | ||
Иначе | ||
Если Прав(ТекущаяСтрока, 1) = Разделитель Тогда | ||
ТекущаяСтрокаБезОкончания = Сред(ТекущаяСтрока, 1, СтрДлина(ТекущаяСтрока) - 1); | ||
Иначе | ||
ТекущаяСтрокаБезОкончания = ТекущаяСтрока; | ||
КонецЕсли; | ||
|
||
МассивКолонок = пбп_СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( | ||
ТекущаяСтрокаБезОкончания, Разделитель, Ложь, Истина); | ||
// Количество разделителей должно быть равно количеству строк колонок макета, иначе строка не будет загружена | ||
КоличествоКолонок = МассивКолонок.Количество(); | ||
Если КоличествоКолонок = 0 Или КоличествоКолонок <> СтруктураМакета.Количество() Тогда | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
Для Инкремент = 0 По СтруктураМакета.Количество() - 1 Цикл | ||
СвойстваКолонок = СтруктураМакета[Инкремент]; | ||
ЗначениеБезПробелов = СокрЛП(МассивКолонок[Инкремент]); | ||
НоваяСтрока[СвойстваКолонок.ИмяКолонки] = ЗначениеБезПробелов; | ||
КонецЦикла; | ||
КонецЕсли; | ||
|
||
НомерСтроки = НомерСтроки + 1; | ||
ТекущаяСтрока = ЗагружаемыйФайл.ПрочитатьСтроку(); | ||
КонецЦикла; | ||
|
||
ЗагружаемыйФайл.Закрыть(); | ||
|
||
Для Каждого КолонкаТаблицы Из СтруктураМакета Цикл | ||
Если КолонкаТаблицы.ТипЗначения = "Дата" Тогда | ||
СыраяТаблица.Колонки[КолонкаТаблицы.ИмяКолонки].Имя | ||
= СыраяТаблица.Колонки[КолонкаТаблицы.ИмяКолонки].Имя + "Строкой"; | ||
СыраяТаблица.Колонки.Добавить(КолонкаТаблицы.ИмяКолонки, Новый ОписаниеТипов("Дата")); | ||
КонецЕсли; | ||
КонецЦикла; | ||
|
||
СыраяТаблица.Колонки.Добавить("ПорядковыйНомер", Новый ОписаниеТипов("Число")); | ||
|
||
Возврат СыраяТаблица; | ||
|
||
КонецФункции |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Необходимо уменьшить сложность метода
Метод имеет высокую когнитивную сложность (28 > 15). Рекомендуется разбить его на более мелкие методы:
- Выделить логику обработки строк с разделителем в отдельный метод
- Выделить логику обработки строк без разделителя в отдельный метод
- Выделить логику преобразования типов колонок в отдельный метод
Примерная структура:
Функция ПолучитьПромежуточнуюТаблицуИз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" и используйте эту константу вместо магического числа.
Если ТЗ.Колонки.Найти(СтрокаТаблицы.ИмяКолонки + "Строкой") <> Неопределено Тогда | ||
Если ОставитьСтроковые Тогда | ||
ВставкаВТ = ВставкаВТ + СтрШаблон(ШаблонИмяКолонки, СтрокаТаблицы.ИмяКолонки + "Строкой"); | ||
ВставкаБазовые = ВставкаБазовые + СтрШаблон(ШаблонИмяКолонки, СтрокаТаблицы.ИмяКолонки + "Строкой"); | ||
КонецЕсли; | ||
|
||
Если СтрНайти(СтрокаТаблицы.ТипЗначения, "Дата") <> 0 Тогда | ||
СтруктураИменКолонокДат.Вставить(СтрокаТаблицы.ИмяКолонки, СтрокаТаблицы.ФорматДаты); | ||
ИначеЕсли СтрНайти(СтрокаТаблицы.ТипЗначения, ЧислоСтрока) <> 0 Тогда | ||
МассивИменКолонокЧисел.Добавить(СтрокаТаблицы.ИмяКолонки); | ||
ИначеЕсли СтрНайти(СтрокаТаблицы.ТипЗначения, "Булево") <> 0 Тогда | ||
МассивИменКолонокБулево.Добавить(СтрокаТаблицы.ИмяКолонки); | ||
КонецЕсли; |
There was a problem hiding this comment.
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)
Рекомендации по рефакторингу:
- Создать отдельный тип для параметров метода:
Структура = Новый Структура;
Структура.Вставить("КонвертироватьДаты", Ложь);
Структура.Вставить("ЗначениеИстина", "");
Структура.Вставить("ОставитьСтроковые", Ложь);
Структура.Вставить("ИскатьПомеченныеНаУдаление", Истина);
- Разбить метод на подметоды по типам данных:
ОбработатьСтроковыеЗначения();
ОбработатьЧисловыеЗначения();
ОбработатьДатыИВремя();
ОбработатьБулевыЗначения();
🧰 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
Синтаксическая конструкция вида "Если...Тогда...ИначеЕсли..." должна содержать ветвь "Иначе".
Процедура ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ТабДок, Макет, ШиринаТаблицы, | ||
НомерСтроки, НомерКолонки, КолонкиКУдалению, УдалитьСтрокиШапки, ШиринаГруппы = 0) | ||
|
||
НомерСтроки = НомерСтроки + 1; | ||
|
||
ТекстШапки = СокрЛП(ТабДок.Область("R" + НомерСтроки + "C" + Строка(НомерКолонки)).Текст); | ||
ТекущаяПроверкаШирины = ?(ШиринаГруппы = 0, ШиринаТаблицы, ШиринаГруппы); | ||
|
||
Пока НомерКолонки <= ТекущаяПроверкаШирины Цикл | ||
Если ТекстШапки = "" Тогда | ||
НомерКолонки = НомерКолонки + 1; | ||
ТекстШапки = СокрЛП(ТабДок.Область("R" + НомерСтроки + "C" + Строка(НомерКолонки)).Текст); | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
ИмяКолонки = ""; | ||
|
||
// Проверяем на группы колонок | ||
ПоискПодчиненных = Макет.НайтиСтроки(Новый Структура("Группа", ТекстШапки)); | ||
КоличествоПодчиненных = ПоискПодчиненных.Количество(); | ||
Если КоличествоПодчиненных Тогда | ||
ВременныйМакет = Макет.СкопироватьКолонки(); | ||
Для Каждого НайденнаяСтрока Из ПоискПодчиненных Цикл | ||
Если ВРег(НайденнаяСтрока.ОператорУсловия) = "И" | ||
Или ВРег(НайденнаяСтрока.ОператорУсловия) = "ВИРТ" Тогда | ||
КоличествоПодчиненных = КоличествоПодчиненных - 1; | ||
Продолжить; | ||
КонецЕсли; | ||
|
||
ЗаполнитьЗначенияСвойств(ВременныйМакет.Добавить(), НайденнаяСтрока); | ||
КонецЦикла; | ||
|
||
НомерНовойСтроки = НомерСтроки + 1; | ||
УдалитьСтрокиШапки.Добавить(НомерНовойСтроки); | ||
|
||
ОбойтиКолонкиДокументаПоНаименованиямРекурсивно(ТабДок, ВременныйМакет, ШиринаТаблицы, НомерСтроки, | ||
НомерКолонки, КолонкиКУдалению, УдалитьСтрокиШапки, НомерКолонки + КоличествоПодчиненных - 1); | ||
|
||
// Возвращаем текст шапки на прошлую строку, если мы выходим из рекурсии | ||
ТекстШапки = СокрЛП(ТабДок.Область("R" + НомерСтроки + "C" + Строка(НомерКолонки)).Текст); | ||
Иначе | ||
СверитьИмяКолонокДобавитьИмяВМакет(ТабДок, Макет, ТекстШапки, НомерСтроки, НомерКолонки, КолонкиКУдалению); | ||
КонецЕсли; | ||
|
||
КонецЦикла; | ||
|
||
НомерСтроки = НомерСтроки - 1; | ||
|
||
КонецПроцедуры |
There was a problem hiding this comment.
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)
Рекомендации:
- Создать структуру параметров:
Структура = Новый Структура;
Структура.Вставить("ТабДок", ТабДок);
Структура.Вставить("Макет", Макет);
Структура.Вставить("ШиринаТаблицы", ШиринаТаблицы);
// ... остальные параметры
- Выделить логику проверки групп в отдельный метод для снижения сложности
🧰 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.
This comment has been minimized.
There was a problem hiding this 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
📒 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
Добавьте описание метода программного интерфейса
// АдресСоответствияКолонок - Строка - описание колонок загружаемого файла в таблице значений, | ||
// помещенное во временное хранилище на Сервере. | ||
// см. пбп_ЗагрузкаФайлаЧерезТабличныйДокументВызовСервера.ИнициализироватьТаблицуСоСвойствамиКолонок | ||
// ПараметрыЧтения - Структура - см. ИнициализироватьСтруктуруПараметровЧтения |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Исправить документацию параметра ПараметрыЧтения
В документации параметра ПараметрыЧтения
указана ссылка на несуществующий метод ИнициализироватьСтруктуруПараметровЧтения
. Необходимо обновить ссылку на актуальный метод ПолучитьПараметрыЧтенияФайла
.
@@ -98,6 +98,8 @@ | |||
ПреобразованноеЗначение = Формат(Значение, "ДФ=yyyy-MM-dd"); | |||
ИначеЕсли ТипJSON = Перечисления.пбп_ТипыJSON.Число Тогда | |||
ПреобразованноеЗначение = Формат(Значение, "ЧГ=0"); | |||
ИначеЕсли ТипJSON = Перечисления.пбп_ТипыJSON.Строка Тогда |
There was a problem hiding this comment.
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 = 'Имя таблицы внешнего источника данных'"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Аналогично)
// - ДвоичныеДанные - данные файла. Если ключ "Путь" не заполнен, то его значение будет заполнено | ||
// путем к временному файлу, сохраненного из этих двоичных данных | ||
// | ||
Функция ПараметрыСообщенияFTPSFTP() Экспорт | ||
|
||
Результат = Новый Структура("Путь, ИмяФайла, Расширение, ДвоичныеДанные"); | ||
Результат = Новый Структура("Путь, ИмяФайла, Расширение, РасширениеНаСервере, ДвоичныеДанные"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Аналогично
// Возвращаемое значение: | ||
// ТаблицаЗначений - таблица с инициализированными колонками, подготовленная под заполнение параметров запроса | ||
// | ||
Функция ИнициализироватьТаблицуПараметровЗапросаВнешнегоИсточника() Экспорт |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну в общем ты понял...
// Возвращаемое значение: | ||
// Произвольный - результат вызываемой функции. | ||
// | ||
Функция ВызватьФункциюКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
И это?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, это точно относится (в отличие от другого :) ). Это для функции преобразования значений
// Возвращаемое значение: | ||
// Число, Неопределено - полученное число, либо Неопределено, если строка не является числом. | ||
// | ||
Функция СтрокаВЧисло(Знач Значение) Экспорт |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это больше похоже на правду, но лучше удостовериться)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это тоже нужно в этой подсистеме, так как через эту функцию строки преобразовываются в числа (для колонок, у которых в макете тип "число")
There was a problem hiding this 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
📒 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 файлов в диалоге выбора. Убедитесь, что:
- Корректно обрабатываются различные кодировки CSV файлов
- Правильно определяются разделители полей
- Добавлены тесты для проверки загрузки CSV файлов
Also applies to: 66-66
There was a problem hiding this 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
: Требуется улучшить валидацию входных данных и документациюРекомендации по улучшению функции:
- Добавить проверку входного параметра на пустую строку
- Дополнить документацию примером ожидаемого формата
ИмяОбъекта
Предлагаемые изменения:
// Параметры: -// ИмяОбъекта - Строка - Полное имя объекта метаданных +// ИмяОбъекта - Строка - Полное имя объекта метаданных +// Например: "Справочник.Номенклатура" // // Возвращаемое значение: // Строка - навигационная ссылка // Функция НавигационнаяСсылкаОбъекта(ИмяОбъекта) + Если ПустаяСтрока(ИмяОбъекта) Тогда + ВызватьИсключение НСтр("ru = 'Параметр ИмяОбъекта не может быть пустым'"); + КонецЕсли; + Возврат "e1cib/list/" + ИмяОбъекта; КонецФункцииsrc/cf/CommonModules/пбп_МетодыРегламентныхЗаданийСервер/Ext/Module.bsl (2)
51-53
: Рекомендуется дополнить документацию процедурыТекущая документация содержит только общее описание. Рекомендуется добавить:
- Описание возможных исключений
- Примеры использования
- Зависимости от других подсистем
// Заполнение предопределенных элементов, с выводом серверного оповещения при возникновении конфликтов. // +// Исключения: +// - <Описание возможных исключений> +// +// Пример: +// ЗаполнениеПредопределенныхЭлементов(); +// +// Зависимости: +// - пбп_ОбщегоНазначенияСлужебный +// - пбп_ПредопределенныеЗначения
54-60
: Рекомендуется добавить обработку ошибокПроцедура выполняет внешние вызовы, которые могут привести к исключениям. Рекомендуется добавить обработку ошибок для обеспечения устойчивости регламентного задания.
Процедура ЗаполнениеПредопределенныхЭлементов() Экспорт - - пбп_ОбщегоНазначенияСлужебный.ПриНачалеВыполненияРегламентногоЗадания( - Метаданные.РегламентныеЗадания.пбп_ЗаполнениеПредопределенныхЭлементов); - - пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов(Истина); - + Попытка + пбп_ОбщегоНазначенияСлужебный.ПриНачалеВыполненияРегламентногоЗадания( + Метаданные.РегламентныеЗадания.пбп_ЗаполнениеПредопределенныхЭлементов); + + пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов(Истина); + Исключение + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Ошибка заполнения предопределенных элементов'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки КонецПроцедурыsrc/cf/CommonModules/пбп_СерверныеОповещения/Ext/Module.bsl (1)
32-50
: Улучшение документации параметровВ документации параметров рекомендуется:
- Добавить описание возможных значений параметра
ИмяОповещения
- Уточнить формат
КлючСеанса
в описании параметраАдресаты
- Добавить примеры использования
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
: Проверьте полноту списка исключаемых полейВ новом разделе определены поля, исключаемые из расчета хеша. Рекомендуется:
- Добавить комментарии, объясняющие причины исключения каждого поля
- Проверить, все ли необходимые поля включены в список
411-416
: Документируйте назначение служебных колонокДобавлены новые служебные колонки, но их назначение не очевидно. Рекомендуется:
- Добавить комментарии, описывающие назначение каждой колонки
- Указать, в каких сценариях они используются
Колонки = Новый Структура; +// Служебные колонки для управления элементами +// Служебный_ОбновитьЭлемент - Признак необходимости обновления элемента Колонки.Вставить("Служебный_ОбновитьЭлемент", ОписаниеБулево); +// Служебный_УстановитьФлагРучноеИзменение - Признак ручного изменения элемента Колонки.Вставить("Служебный_УстановитьФлагРучноеИзменение", ОписаниеБулево);
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
📒 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
: Проверьте обработку конфликтов
Новая функция ТаблицаКонфликтныхЭлементов
добавляет колонку для отслеживания дублирования идентификаторов. Убедитесь, что:
- Все места использования этой таблицы корректно обрабатывают новую колонку
- Реализована соответствующая логика обработки конфликтов
✅ 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.
Обработка конфликтов реализована корректно
Проверка показала, что:
- Колонка
Служебный_ДублированиеИдентификаторов
корректно используется для маркировки конфликтов - Реализована полная цепочка обработки конфликтов:
- Выявление дублирования идентификаторов
- Уведомление пользователя через
СообщитьОДублированииИдентификаторов
- Корректная обработка в форме разрешения конфликтов с соответствующим 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
:
Возможная синтаксическая ошибка из-за разрыва строки условия
Условие Если Строка.Ошибка = ПредопределенноеЗначение("...") Тогда
разбито на две строки, что может привести к синтаксической ошибке. Рекомендуется объединить условие в одну строку.
Примените следующий дифф для исправления:
- Если Строка.Ошибка =
- ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов") Тогда
+ Если Строка.Ошибка = ПредопределенноеЗначение("Перечисление.пбп_ВидыОшибокПредопределенныхЭлементов.ДублированиеИдентификаторов") Тогда
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
// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения. | ||
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт | ||
|
||
Если ТипЗнч(Результат) = Тип("Структура") Тогда | ||
Текст = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку( | ||
НСтр("ru = 'Существуют конфликты предопределенных элементов ''%1'''"), | ||
Результат.ПредставлениеОбъекта); | ||
Пояснение = пбп_СтроковыеФункцииСлужебныйКлиентСервер.ПодставитьПараметрыВСтроку( | ||
НСтр("ru = 'Разрешить конфликты предопределенных элементов ''%1'''"), | ||
Результат.ПредставлениеОбъекта); | ||
|
||
ПоказатьОповещениеПользователя( | ||
Текст, | ||
НавигационнаяСсылкаОбъекта(Результат.ИмяОбъектаМетаданных), | ||
Пояснение, | ||
БиблиотекаКартинок.ДиалогВосклицание, | ||
СтатусОповещенияПользователя.Важное, | ||
"КонфликтыПредопределенныхЭлементов_" + Результат.ИмяОбъектаМетаданных); | ||
КонецЕсли; | ||
|
||
КонецПроцедуры |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Необходимо улучшить обработку ошибок и использование параметров
Обнаружены следующие проблемы:
- Неиспользуемый параметр
ИмяОповещения
- Отсутствует проверка на
Неопределено
для параметраРезультат
- Нет обработки ошибок при подстановке параметров в строку
Предлагаемые изменения:
-Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
+Процедура ПриПолученииСерверногоОповещения(Знач ИмяОповещения, Знач Результат) Экспорт
- Если ТипЗнч(Результат) = Тип("Структура") Тогда
+ Если Результат = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ Попытка
+ Если ТипЗнч(Результат) = Тип("Структура") Тогда
Committable suggestion skipped: line range outside the PR's diff.
Процедура ОтправитьСерверноеОповещение(ИмяОповещения, Результат, Адресаты, ОтправитьСразу = Ложь) Экспорт | ||
|
||
КонецПроцедуры |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отсутствует реализация процедуры
Процедура ОтправитьСерверноеОповещение
объявлена, но не реализована. Необходимо добавить реализацию в соответствии с описанной в комментариях функциональностью.
Хотите, чтобы я предложил пример реализации данной процедуры?
#145
Summary by CodeRabbit
Новые функции
Исправления ошибок
Документация