Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added new func select in object model #170

Merged
merged 4 commits into from
Dec 23, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
Процедура ПриДобавленииПодсистемы(Описание) Экспорт

Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
Описание.Версия = "1.0.4.15";
Описание.Версия = "1.0.4.17";

// Требуется библиотека стандартных подсистем.
Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
Expand Down
201 changes: 98 additions & 103 deletions src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,7 @@
//
Функция ДобавитьПолеВыборкиВЗапрос(Знач Запрос, ВыражениеПоля, ПсевдонимПоля = "", Знач ИндексЗапросаВПакете = Неопределено, РасширениеЯзыкаЗапросовСКД = Ложь, ЗаменятьСуществующееПоле = Ложь) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

СхемаЗапроса = Новый СхемаЗапроса;

Expand Down Expand Up @@ -126,11 +119,7 @@
// Удалим "мусор" схемы запроса
УдалитьНенужныеПоля(НовыйТекстЗапроса);

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

Возврат Запрос;

Expand All @@ -154,14 +143,7 @@
//
Функция ДобавитьПоляВыборкиВЗапрос(Знач Запрос, ВыраженияПолей, Знач ИндексЗапросаВПакете = Неопределено, РасширениеЯзыкаЗапросовСКД = Ложь, ЗаменятьСуществующееПоле = Ложь) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

СхемаЗапроса = Новый СхемаЗапроса;

Expand Down Expand Up @@ -229,11 +211,7 @@
// Удалим "мусор" схемы запроса
УдалитьНенужныеПоля(НовыйТекстЗапроса);

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

Возврат Запрос;

Expand All @@ -252,14 +230,7 @@
//
Функция УстановитьКоличествоПолучаемыхЗаписей(Знач Запрос, Знач КоличествоПолучаемыхЗаписей, Знач ИндексЗапросаВПакете = Неопределено) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

СхемаЗапроса = Новый СхемаЗапроса;

Expand All @@ -278,11 +249,7 @@

ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

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

Возврат Запрос;

Expand All @@ -302,14 +269,7 @@
//
Функция УстановитьВыборкуРазрешенныхЗаписей(Знач Запрос, Знач ВыбиратьРазрешенные, Знач ИндексЗапросаВПакете = Неопределено) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

СхемаЗапроса = Новый СхемаЗапроса;

Expand All @@ -326,26 +286,15 @@

ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

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

Возврат Запрос;

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

Функция УстановитьВыборкуРазрешенныхЗаписейВоВсемЗапросе(Знач Запрос, Знач ВыбиратьРазрешенные) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

СхемаЗапроса = Новый СхемаЗапроса;

Expand All @@ -365,11 +314,7 @@

ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

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

Возврат Запрос;

Expand All @@ -387,14 +332,7 @@
//
Функция ДобавитьУсловиеВЗапрос(Знач Запрос, ВыражениеУсловия, Знач ИндексЗапросаВПакете = Неопределено) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

Если Не ТипЗнч(ВыражениеУсловия) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
Expand Down Expand Up @@ -464,12 +402,66 @@
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, " КАК Поле" + НомерПоля, "");
КонецЦикла;

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

Возврат Запрос;

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

// Добавляет выражение отбора в секцию ГДЕ
//
// Параметры:
// Запрос - Строка, Запрос - текст запроса или запрос.
// ВыражениеУсловия - Строка - выражение условия для секции ГДЕ.
// ИндексЗапросаВПакете - Число - индекс запроса в пакете запросов. Если не задано, то последний запрос в пакете.
// ИндексВОператорах - Число - индекс оператора в пакете запросов. Если не задано, то отбор накладывается на все.
//
// Возвращаемое значение:
// Строка, Запрос - измененный текст запроса или запрос.
//
Функция ДобавитьОтборВЗапрос(Знач Запрос, ВыражениеУсловия, ИндексЗапросаВПакете = Неопределено, ИндексВОператорах = Неопределено) Экспорт

ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

Если Не ТипЗнч(ВыражениеУсловия) = Тип("Строка") Тогда
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 2';
|en = 'Incorrect type of parameter 2'") ;
КонецЕсли;

СхемаЗапроса = Новый СхемаЗапроса;

СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);

ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);

Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
ВызватьИсключение НСтр("ru = 'Невозможно добавить параметр в запрос уничтожения таблицы.';
|en = 'Cannot add parameter to the table removal query.'");
КонецЕсли;

Если ИндексВОператорах <> Неопределено Тогда
Если ИндексВОператорах > ИзменяемыйЗапрос.Операторы.Количество() Тогда
ВызватьИсключение НСтр("ru = 'Некорректный индекс операторов';
|en = 'Incorrect operator index'");
КонецЕсли;

ИзменяемыйЗапрос.Операторы[ИндексВОператорах].Отбор.Добавить(ВыражениеУсловия);
Иначе
// Подстановка выражения во все операторы
Для Каждого ОператорЗапроса Из ИзменяемыйЗапрос.Операторы Цикл
ОператорЗапроса.Отбор.Добавить(ВыражениеУсловия);
КонецЦикла;
КонецЕсли;

ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

// Удалим "мусор" схемы запроса
Для НомерПоля = 1 По 9 Цикл
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, " КАК Поле" + НомерПоля, "");
КонецЦикла;

УстановитьНовыйТекстЗапроса(Запрос, ТекстЗапроса);

Возврат Запрос;

КонецФункции
Expand All @@ -489,14 +481,7 @@
Функция ДобавитьСоединениеВЗапрос(Знач Запрос, ПсевдонимИсточника, ОписаниеСоединения,
Знач ИндексЗапросаВПакете = Неопределено, ЗаменятьСуществующееСоединение = Ложь) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'");
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

СхемаЗапроса = Новый СхемаЗапроса;

Expand Down Expand Up @@ -624,11 +609,7 @@

НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

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

Возврат Запрос;

Expand All @@ -646,14 +627,7 @@
//
Функция УдалитьПоляИзЗапроса(Знач Запрос, ПсевдонимыПолей, Знач ИндексЗапросаВПакете = Неопределено) Экспорт

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
ТекстЗапроса = ПолучитьТекстЗапроса(Запрос, 1);

СхемаЗапроса = Новый СхемаЗапроса;

Expand Down Expand Up @@ -693,11 +667,7 @@

НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

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

Возврат Запрос;

Expand Down Expand Up @@ -790,4 +760,29 @@

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

Функция ПолучитьТекстЗапроса(Знач Запрос, НомерПараметра)

Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение СтрШаблон(НСтр("ru = 'Некорректный тип параметра %1';
|en = 'Incorrect type of parameter %1'"), НомерПараметра) ;
КонецЕсли;

Возврат ТекстЗапроса;

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

Процедура УстановитьНовыйТекстЗапроса(Запрос, НовыйТекстЗапроса)

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

КонецПроцедуры
Comment on lines +778 to +786
Copy link

@coderabbitai coderabbitai bot Dec 19, 2024

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

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

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

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

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

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

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

Copy link

Choose a reason for hiding this comment

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

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


#КонецОбласти
2 changes: 1 addition & 1 deletion src/cf/Configuration.xml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</xr:Item>
</DefaultRoles>
<Vendor>Первый БИТ</Vendor>
<Version>1.0.4.15</Version>
<Version>1.0.4.17</Version>
<UpdateCatalogAddress/>
<IncludeHelpInContents>false</IncludeHelpInContents>
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
Expand Down
Loading