-
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
Настройки отбора компоновки данных #50
Conversation
… отбора компоновки данных для произвольных объектов конфигурации. Добавлены функции для работы с XML в модуль ОбщегоНазначения
This comment has been minimized.
This comment has been minimized.
@coderabbitai review in Russian |
@ivanmolodec, спасибо за запрос на рецензию. Я проанализировал изменения в пулл-реквесте, которые касаются добавления новых функций для работы с XML и настройки отбора компоновки данных. Вот мои замечания:
Пожалуйста, учтите эти замечания при дальнейшей работе над проектом. Если у вас есть дополнительные вопросы или нужна дополнительная помощь, не стесняйтесь обращаться. Analysis chainScripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Find files related to the new directory for data layout selection settings and XML functions in the general-purpose module.
fd 'ОбщегоНазначения' --exec cat {}
fd 'настройки отбора компоновки данных' --exec cat {}
Length of output: 20308 Actions performedReview triggered.
|
WalkthroughThis update brings a new catalog for managing object selection settings, complete with associated forms and modules for data manipulation and display. Roles for editing and reading these settings are defined, enhancing security and access management. Additionally, XML serialization functions are added to a common module, and subsystems are updated to include new functionalities. Changes
Recent Review DetailsConfiguration used: CodeRabbit UI Files ignored due to path filters (1)
Files selected for processing (1)
Additional Context UsedLanguageTool (1)
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 as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
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: 7
Функция ЗначениеВСтрокуXML(Значение) Экспорт | ||
|
||
ЗаписьXML = Новый ЗаписьXML; | ||
ЗаписьXML.УстановитьСтроку(); | ||
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное); | ||
|
||
Возврат ЗаписьXML.Закрыть(); | ||
КонецФункции |
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.
Consider adding error handling in ЗначениеВСтрокуXML
to manage potential serialization issues.
Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт | ||
|
||
ЧтениеXML = Новый ЧтениеXML; | ||
ЧтениеXML.УстановитьСтроку(СтрокаXML); | ||
|
||
Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML); | ||
КонецФункции |
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.
Consider adding error handling in ЗначениеИзСтрокиXML
to manage potential deserialization issues.
ЭтаФорма.ЗакрыватьПриВыборе = Истина; | ||
ЭтаФорма.ЗакрыватьПриЗакрытииВладельца = Истина; |
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.
Replace deprecated property usage for better future compatibility.
- ЭтаФорма.ЗакрыватьПриВыборе = Истина;
- ЭтаФорма.ЗакрыватьПриЗакрытииВладельца = Истина;
+ ЭтотОбъект.ЗакрыватьПриВыборе = Истина;
+ ЭтотОбъект.ЗакрыватьПриЗакрытииВладельца = Истина;
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.
ЭтаФорма.ЗакрыватьПриВыборе = Истина; | |
ЭтаФорма.ЗакрыватьПриЗакрытииВладельца = Истина; | |
ЭтотОбъект.ЗакрыватьПриВыборе = Истина; | |
ЭтотОбъект.ЗакрыватьПриЗакрытииВладельца = Истина; |
ПодчиненныеСтроки = СтрокаРС.ПолучитьЭлементы(); | ||
|
||
Для Каждого РС Из МетаданныеРС Цикл | ||
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | ||
НоваяСтрока.Поле = РС.Синоним; | ||
НоваяСтрока.ИдентификаторПоля = РС.Имя; | ||
НоваяСтрока.ТипЗначения = "РегистрСведений"; | ||
КонецЦикла; | ||
КонецЕсли; | ||
|
||
Если СписокТипов.НайтиПоЗначению("РегистрыНакопления") <> Неопределено Тогда | ||
//Выводим Регистры накопления | ||
МетаданныеРН = Метаданные.РегистрыНакопления; | ||
СтрокаРН = СтрокиДерева.Добавить(); | ||
СтрокаРН.Поле = "Регистры накопления"; | ||
СтрокаРН.ТипЗначения = "РегистрНакопления"; | ||
СтрокаРН.Служебное = Истина; | ||
|
||
ПодчиненныеСтроки = СтрокаРН.ПолучитьЭлементы(); | ||
|
||
Для Каждого РН Из МетаданныеРН Цикл | ||
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | ||
НоваяСтрока.Поле = РН.Синоним; | ||
НоваяСтрока.ИдентификаторПоля = РН.Имя; | ||
НоваяСтрока.ТипЗначения = "РегистрНакопления"; | ||
КонецЦикла; | ||
КонецЕсли; | ||
|
||
Если СписокТипов.НайтиПоЗначению("РегистрыБухгалтерии") <> Неопределено Тогда | ||
//Выводим Регистры бухгалтерии | ||
МетаданныеРБ = Метаданные.РегистрыБухгалтерии; | ||
СтрокаРБ = СтрокиДерева.Добавить(); | ||
СтрокаРБ.Поле = "Регистры бухгалтерии"; | ||
СтрокаРБ.ТипЗначения = "РегистрБухгалтерии"; | ||
СтрокаРБ.Служебное = Истина; | ||
|
||
ПодчиненныеСтроки = СтрокаРБ.ПолучитьЭлементы(); | ||
|
||
Для Каждого РБ Из МетаданныеРБ Цикл | ||
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | ||
НоваяСтрока.Поле = РБ.Синоним; | ||
НоваяСтрока.ИдентификаторПоля = РБ.Имя; | ||
НоваяСтрока.ТипЗначения = "РегистрБухгалтерии"; | ||
КонецЦикла; | ||
КонецЕсли; | ||
|
||
Если СписокТипов.НайтиПоЗначению("РегистрыРасчета") <> Неопределено Тогда | ||
//Выводим Регистры расчета | ||
МетаданныеРР = Метаданные.РегистрыРасчета; | ||
СтрокаРР = СтрокиДерева.Добавить(); | ||
СтрокаРР.Поле = "Регистры расчета"; | ||
СтрокаРР.ТипЗначения = "РегистрРасчета"; | ||
СтрокаРР.Служебное = Истина; | ||
|
||
ПодчиненныеСтроки = СтрокаРР.ПолучитьЭлементы(); | ||
|
||
Для Каждого РР Из МетаданныеРР Цикл | ||
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | ||
НоваяСтрока.Поле = РР.Синоним; | ||
НоваяСтрока.ИдентификаторПоля = РР.Имя; | ||
НоваяСтрока.ТипЗначения = "РегистрРасчета"; | ||
КонецЦикла; | ||
КонецЕсли; | ||
|
||
Если СписокТипов.НайтиПоЗначению("БизнесПроцессы") <> Неопределено Тогда | ||
//Выводим Бизнес-процессы | ||
МетаданныеБП = Метаданные.БизнесПроцессы; | ||
СтрокаБП = СтрокиДерева.Добавить(); | ||
СтрокаБП.Поле = "Бизнес-процессы"; | ||
СтрокаБП.ТипЗначения = "БизнесПроцесс"; | ||
СтрокаБП.Служебное = Истина; | ||
|
||
ПодчиненныеСтроки = СтрокаБП.ПолучитьЭлементы(); | ||
|
||
Для Каждого БП Из МетаданныеБП Цикл | ||
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | ||
НоваяСтрока.Поле = БП.Синоним; | ||
НоваяСтрока.ИдентификаторПоля = БП.Имя; | ||
НоваяСтрока.ТипЗначения = "БизнесПроцесс"; | ||
КонецЦикла; | ||
КонецЕсли; | ||
|
||
Если СписокТипов.НайтиПоЗначению("Задачи") <> Неопределено Тогда | ||
//Выводим Задачи | ||
МетаданныеЗадачи = Метаданные.Задачи; | ||
СтрокаЗадачи = СтрокиДерева.Добавить(); | ||
СтрокаЗадачи.Поле = "Задачи"; | ||
СтрокаЗадачи.ТипЗначения = "Задача"; | ||
СтрокаЗадачи.Служебное = Истина; | ||
|
||
ПодчиненныеСтроки = СтрокаЗадачи.ПолучитьЭлементы(); | ||
|
||
Для Каждого Задача Из МетаданныеЗадачи Цикл | ||
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | ||
НоваяСтрока.Поле = Задача.Синоним; | ||
НоваяСтрока.ИдентификаторПоля = Задача.Имя; | ||
НоваяСтрока.ТипЗначения = "Задача"; | ||
КонецЦикла; | ||
КонецЕсли; | ||
КонецПроцедуры |
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.
Reduce the cognitive complexity and length of the ВывестиОбъекты
procedure.
The procedure ВывестиОбъекты
is quite lengthy and complex. Consider breaking it down into smaller, more manageable functions. Each block handling a specific type (e.g., "Справочники", "Документы") could be refactored into its own function to improve readability and maintainability.
//РеквизитУниверсальныйОтчет = Отчет.Реквизиты.Найти("УниверсальныйОтчет"); | ||
//Если РеквизитУниверсальныйОтчет <> Неопределено Тогда | ||
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | ||
НоваяСтрока.Поле = Отчет.Синоним; | ||
НоваяСтрока.ИдентификаторПоля = Отчет.Имя; | ||
НоваяСтрока.ТипЗначения = "Отчет"; | ||
//КонецЕсли; |
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.
Remove commented-out code blocks to clean up the codebase.
- //РеквизитУниверсальныйОтчет = Отчет.Реквизиты.Найти("УниверсальныйОтчет");
- //Если РеквизитУниверсальныйОтчет <> Неопределено Тогда
- //КонецЕсли;
Commented code should be removed unless it is intended to be used in the near future. It can cause confusion and clutter in the codebase.
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.
//РеквизитУниверсальныйОтчет = Отчет.Реквизиты.Найти("УниверсальныйОтчет"); | |
//Если РеквизитУниверсальныйОтчет <> Неопределено Тогда | |
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | |
НоваяСтрока.Поле = Отчет.Синоним; | |
НоваяСтрока.ИдентификаторПоля = Отчет.Имя; | |
НоваяСтрока.ТипЗначения = "Отчет"; | |
//КонецЕсли; | |
НоваяСтрока = ПодчиненныеСтроки.Добавить(); | |
НоваяСтрока.Поле = Отчет.Синоним; | |
НоваяСтрока.ИдентификаторПоля = Отчет.Имя; | |
НоваяСтрока.ТипЗначения = "Отчет"; |
//Если СписокТипов.НайтиПоЗначению("ВнешниеОбработки") <> Неопределено Тогда | ||
// //Выводим Внешние обработки | ||
// НоваяСтрока = СтрокиДерева.Добавить(); | ||
// НоваяСтрока.Поле = "Внешняя обработка"; | ||
// НоваяСтрока.ТипЗначения = "ВнешняяОбработка"; | ||
//КонецЕсли; |
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.
Remove commented-out code blocks to clean up the codebase.
- //Если СписокТипов.НайтиПоЗначению("ВнешниеОбработки") <> Неопределено Тогда
- // //Выводим Внешние обработки
- // НоваяСтрока = СтрокиДерева.Добавить();
- // НоваяСтрока.Поле = "Внешняя обработка";
- // НоваяСтрока.ТипЗначения = "ВнешняяОбработка";
- //КонецЕсли;
Commented code should be removed unless it is intended to be used in the near future. It can cause confusion and clutter in the codebase.
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.
//Если СписокТипов.НайтиПоЗначению("ВнешниеОбработки") <> Неопределено Тогда | |
// //Выводим Внешние обработки | |
// НоваяСтрока = СтрокиДерева.Добавить(); | |
// НоваяСтрока.Поле = "Внешняя обработка"; | |
// НоваяСтрока.ТипЗначения = "ВнешняяОбработка"; | |
//КонецЕсли; |
//ДеревоСортировки.Строки.Сортировать("Поле Возр"); | ||
// | ||
//Для Каждого СтрокаДерева Из ДеревоСортировки.Строки Цикл | ||
// СортироватьДерево(СтрокаДерева); | ||
//КонецЦикла; |
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.
Remove commented-out code blocks to clean up the codebase.
- //ДеревоСортировки.Строки.Сортировать("Поле Возр");
- //
- //Для Каждого СтрокаДерева Из ДеревоСортировки.Строки Цикл
- // СортироватьДерево(СтрокаДерева);
- //КонецЦикла;
Commented code should be removed unless it is intended to be used in the near future. It can cause confusion and clutter in the codebase.
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.
//ДеревоСортировки.Строки.Сортировать("Поле Возр"); | |
// | |
//Для Каждого СтрокаДерева Из ДеревоСортировки.Строки Цикл | |
// СортироватьДерево(СтрокаДерева); | |
//КонецЦикла; |
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.
Исправить ошибки синтаксис чека и дымового теста
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
<v8:lang>en</v8:lang> | ||
<v8:content>Editing user-defined functions</v8:content> |
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.
The English translation seems incorrect as it mentions "Editing user-defined functions" which does not align with the Russian version. Please correct it to match the intended functionality.
<v8:lang>en</v8:lang> | ||
<v8:content>Editing user-defined functions</v8:content> |
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.
The English translation seems incorrect as it mentions "Editing user-defined functions" which does not align with the Russian version. Please correct it to match the intended functionality.
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
//Процедура заполняет компоновщик настроек для выбранного объекта метаданных | ||
Процедура ИнициализироватьКомпоновщик(КомпоновщикНастроек, ОбъектМетаданных, ДополнительнаяСтрока = "") Экспорт | ||
|
||
ТекстЗапроса = | ||
"ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ " + ОбъектМетаданных + " " + ДополнительнаяСтрока; | ||
|
||
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; | ||
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); | ||
ИсточникДанных.Имя = "ИсточникДанных1"; | ||
ИсточникДанных.ТипИсточникаДанных = "Local"; | ||
|
||
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")); | ||
НаборДанных.Имя = "НаборДанных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.
Sanitize input parameters to prevent SQL injection.
Consider sanitizing the input parameters ОбъектМетаданных
and ДополнительнаяСтрока
to ensure that the dynamically constructed data query string is safe from SQL injection vulnerabilities.
&НаСервере | ||
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) | ||
ТекущийОбъект = Параметры.ТекущийОбъект; | ||
ТипТекущегоОбъекта = Параметры.ТипТекущегоОбъекта; | ||
|
||
ВидОперации = Параметры.ВидОперации; | ||
СписокКоллекций = Параметры.СписокКоллекций; | ||
ВыводитьТЧОбъектов = Параметры.ВыводитьТЧОбъектов; | ||
|
||
ЗакрыватьПриВыборе = Истина; | ||
ЗакрыватьПриЗакрытииВладельца = Истина; | ||
|
||
Если ВидОперации = "ВыборОбъекта" Тогда | ||
ВывестиОбъекты(); | ||
ИначеЕсли ВидОперации = "ВыборКартинки" Тогда | ||
ВывестиКартинки(); | ||
КонецЕсли; | ||
|
||
КонецПроцедуры |
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.
Add an 'else' branch to handle unexpected operation types.
The conditional logic in the function ПриСозданииНаСервере
lacks an 'else' branch. Consider adding one to handle unexpected operation types and ensure that all cases are covered.
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: 4
МодульОбщегоНазначения = __ОбщегоНазначенияСервер.ОбщийМодуль("ОбщегоНазначения", "__ОбщегоНазначенияСервер"); | ||
ОтборКомпоновки = МодульОбщегоНазначения.ЗначениеИзСтрокиXML(Объект.Отбор); | ||
Компоновщик.Настройки.Отбор.Элементы.Очистить(); | ||
Справочники.__НастройкиОтбораОбъектов.СкопироватьЭлементыОтбора(Компоновщик.Настройки.Отбор, ОтборКомпоновки); | ||
|
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.
Ensure the XML string handling in ЗначениеИзСтрокиXML
is secure against XML injection attacks.
- ОтборКомпоновки = МодульОбщегоНазначения.ЗначениеИзСтрокиXML(Объект.Отбор);
+ ОтборКомпоновки = МодульОбщегоНазначения.ЗащищенноеЗначениеИзСтрокиXML(Объект.Отбор);
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.
МодульОбщегоНазначения = __ОбщегоНазначенияСервер.ОбщийМодуль("ОбщегоНазначения", "__ОбщегоНазначенияСервер"); | |
ОтборКомпоновки = МодульОбщегоНазначения.ЗначениеИзСтрокиXML(Объект.Отбор); | |
Компоновщик.Настройки.Отбор.Элементы.Очистить(); | |
Справочники.__НастройкиОтбораОбъектов.СкопироватьЭлементыОтбора(Компоновщик.Настройки.Отбор, ОтборКомпоновки); | |
МодульОбщегоНазначения = __ОбщегоНазначенияСервер.ОбщийМодуль("ОбщегоНазначения", "__ОбщегоНазначенияСервер"); | |
ОтборКомпоновки = МодульОбщегоНазначения.ЗащищенноеЗначениеИзСтрокиXML(Объект.Отбор); | |
Компоновщик.Настройки.Отбор.Элементы.Очистить(); | |
Справочники.__НастройкиОтбораОбъектов.СкопироватьЭлементыОтбора(Компоновщик.Настройки.Отбор, ОтборКомпоновки); | |
|
||
ПараметрыФормы.Вставить("СписокКоллекций", СписокКоллекций); | ||
|
||
ОткрытьФорму("Справочник.__НастройкиОтбораОбъектов.Форма.ФормаВыбораОбъектаМетаданных", ПараметрыФормы, Элементы.ОбъектМетаданных); |
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.
The line length exceeds the maximum allowed limit of 120 characters. Consider breaking the line for better readability.
- ОткрытьФорму("Справочник.__НастройкиОтбораОбъектов.Форма.ФормаВыбораОбъектаМетаданных", ПараметрыФормы, Элементы.ОбъектМетаданных);
+ ОткрытьФорму(
+ "Справочник.__НастройкиОтбораОбъектов.Форма.ФормаВыбораОбъектаМетаданных",
+ ПараметрыФормы,
+ Элементы.ОбъектМетаданных
+ );
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.
ОткрытьФорму("Справочник.__НастройкиОтбораОбъектов.Форма.ФормаВыбораОбъектаМетаданных", ПараметрыФормы, Элементы.ОбъектМетаданных); | |
ОткрытьФорму( | |
"Справочник.__НастройкиОтбораОбъектов.Форма.ФормаВыбораОбъектаМетаданных", | |
ПараметрыФормы, | |
Элементы.ОбъектМетаданных | |
); |
ВывестиОбъекты(); | ||
ИначеЕсли ВидОперации = "ВыборКартинки" Тогда | ||
ВывестиКартинки(); | ||
КонецЕсли; |
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.
The Если...Тогда...ИначеЕсли...
construct should include an Иначе
branch to handle unexpected ВидОперации
values.
- КонецЕсли;
+ Иначе
+ СообщитьПользователю("Неизвестный тип операции: " + ВидОперации);
+ КонецЕсли;
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.
КонецЕсли; | |
Иначе | |
СообщитьПользователю("Неизвестный тип операции: " + ВидОперации); | |
КонецЕсли; |
ТекстЗапроса = | ||
"ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ " + ОбъектМетаданных; | ||
|
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.
The query text should be constructed safely to prevent SQL injection. Use parameterized queries or query builders.
- ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ " + ОбъектМетаданных;
+ ТекстЗапроса = СтроковыйКонструкторЗапроса("ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ ", ОбъектМетаданных);
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.
ТекстЗапроса = | |
"ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ " + ОбъектМетаданных; | |
ТекстЗапроса = СтроковыйКонструкторЗапроса("ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ ", ОбъектМетаданных); |
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.
Sorry, i'm not familiar with this function СтроковыйКонструкторЗапроса, are you sure it exists?
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.
I apologize for the confusion, СтроковыйКонструкторЗапроса
is not a standard function in BSL. It seems I made an error in suggesting it. In BSL, to safely construct SQL queries and prevent SQL injection, you should use parameterized queries or the query builder provided by the platform.
Here's an example of how you can modify the query construction to use parameterized queries:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ &ОбъектМетаданных";
Запрос.УстановитьПараметр("ОбъектМетаданных", ОбъектМетаданных);
ТекстЗапроса = Запрос.Текст;
This method uses the Запрос
object to set up a query with parameters, which helps in preventing SQL injection by separating the data (parameter values) from the code (SQL query). Please let me know if you need further assistance with this!
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.
So sorry, but it doesn't work like that, the name of the table can't be a parameter.
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.
@perlusha, you are absolutely right; the table name cannot be parameterized in SQL queries, which is a common limitation. To ensure the safety of dynamically constructed SQL queries where the table name is variable, you can implement a validation step against a predefined list of allowed table names. Here's how you could modify the procedure to include this safety check:
// Предполагаем, что у нас есть функция, которая возвращает разрешенные имена таблиц
Функция ПолучитьРазрешенныеИменаТаблиц() Экспорт
Возврат Новый Массив Из {"Документ.ПоступлениеТоваровУслуг", "Документ.ВыпискаБанка"}; // Пример
КонецФункции
Процедура ИнициализироватьКомпоновщик(КомпоновщикНастроек, Знач ОбъектМетаданных) Экспорт
Если Не ПолучитьРазрешенныеИменаТаблиц().Содержит(ОбъектМетаданных) Тогда
ВызватьИсключение "Недопустимое имя объекта метаданных";
КонецЕсли;
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ " + ОбъектМетаданных;
КонецПроцедуры
This approach checks if the metadata object name is in the list of allowed names before constructing the query. It helps prevent SQL injection by ensuring that only valid, expected table names are used in the query. Please let me know if this solution works for you or if you need further modifications!
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: 0
Out of diff range and nitpick comments (1)
docs/ПолучениеДанныхПоНастройкеОтбора.md (1)
15-21
: Ensure proper error handling in the functionПолучитьДанные
.While the function is simple, adding error handling could prevent runtime exceptions from unhandled errors, especially when interacting with external systems or databases.
@@ -0,0 +1,23 @@ | |||
# Подсистема ПользовательскиеФункции |
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.
Вроде подсистема не так называется) И ещё ты забыл ссылку в readme добавить. И добавь, пожалуйста, скриншот как выглядит сам элемент справочника
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.
Подсистема та, забыл название справочника приписать. Для картинок, наверное, лучше отдельную папку в docs сделать?
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.
Подсистема та, забыл название справочника приписать. Для картинок, наверное, лучше отдельную папку в docs сделать?
А, я понял, ты же отнес этот объект к подсистеме пользовательских функций. Тогда надо как-то отдельно указать что это не именно пользовательские функции, а составляющая часть
Для картинок да, можно создать папку docs/img
…оздал подпапку в docs для хранения картинок, добавил туда скриншот с примером элемента справочника.
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
Out of diff range and nitpick comments (3)
docs/ПолучениеДанныхПоНастройкеОтбора.md (3)
5-5
: Add a space between sentences for better readability.
27-27
: Ensure fenced code blocks are surrounded by blank lines for proper Markdown formatting.
1-1
: Clarify that the "ПользовательскиеФункции" subsystem includes the "Настройки отбора объектов" as a component, not as standalone user functions, to avoid confusion.
Добавлен справочник настройки отбора объектов для создания и хранения отбора компоновки данных для произвольных объектов конфигурации. Добавлены функции для работы с XML в модуль ОбщегоНазначения
Summary by CodeRabbit
New Features
Documentation