-
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
Добавить отбор в запрос через объектную модель #165
Labels
enhancement
Улучшение существующей функциональности
Comments
аналог этой функции, только для секции ГДЕ Функция ДобавитьУсловиеВЗапрос(Знач Запрос, ВыражениеУсловия, Знач ИндексЗапросаВПакете = Неопределено) Экспорт
Если ТипЗнч(Запрос) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
ТекстЗапроса = Запрос.Текст;
Иначе
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 1';
|en = 'Incorrect type of parameter 1'") ;
КонецЕсли;
Если Не ТипЗнч(ВыражениеУсловия) = Тип("Строка") Тогда
ТекстЗапроса = Запрос;
ВызватьИсключение НСтр("ru = 'Некорректный тип параметра 2';
|en = 'Incorrect type of parameter 2'") ;
КонецЕсли;
СхемаЗапроса = Новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);
ИзменяемыйЗапрос = ЗапросПакетаЗапросов(СхемаЗапроса, ИндексЗапросаВПакете);
Если ТипЗнч(ИзменяемыйЗапрос) = Тип("ЗапросУничтоженияТаблицыСхемыЗапроса") Тогда
ВызватьИсключение НСтр("ru = 'Невозможно добавить параметр в запрос уничтожения таблицы.';
|en = 'Cannot add parameter to the table removal query.'");
КонецЕсли;
// Подстановка выражения во все источники с параметрами
ЧастиВыражения = Новый Массив;
Для Каждого ОператорЗапроса Из ИзменяемыйЗапрос.Операторы Цикл
Для Каждого ИсточникОператора Из ОператорЗапроса.Источники Цикл
ЧастиВыражения.Очистить();
Подзапрос = ИсточникОператора.Источник;
Если ТипЗнч(Подзапрос) = Тип("ВложенныйЗапросСхемыЗапроса") Тогда
ТекстЗапросаИсточника = Подзапрос.Запрос.ПолучитьТекстЗапроса();
ТекстЗапросаИсточника = ДобавитьУсловиеВЗапрос(ТекстЗапросаИсточника, ВыражениеУсловия);
Подзапрос.Запрос.УстановитьТекстЗапроса(ТекстЗапросаИсточника);
ИначеЕсли ТипЗнч(Подзапрос) = Тип("ТаблицаСхемыЗапроса") Тогда
ПараметрыИсточника = Подзапрос.Параметры;
КоличествоПараметров = ПараметрыИсточника.Количество();
Если КоличествоПараметров = 0 Тогда
Продолжить;
КонецЕсли;
// В виртуальных таблицах РБ 3 параметр с конца используется для условий по измерениям.
Если СтрНачинаетсяС(ИсточникОператора.Источник.ИмяТаблицы, "РегистрБухгалтерии") Тогда
ПоследнийПараметрИсточника = ПараметрыИсточника[КоличествоПараметров - 3];
Иначе
ПоследнийПараметрИсточника = ПараметрыИсточника[КоличествоПараметров - 1];
КонецЕсли;
ИсходноеВыражение = Строка(ПоследнийПараметрИсточника.Выражение);
Если ЗначениеЗаполнено(ИсходноеВыражение) Тогда
ЧастиВыражения.Добавить(ИсходноеВыражение);
КонецЕсли;
ЧастиВыражения.Добавить(ВыражениеУсловия);
ПоследнийПараметрИсточника.Выражение = Новый ВыражениеСхемыЗапроса(СтрСоединить(ЧастиВыражения, " И "));
КонецЕсли;
КонецЦикла;
КонецЦикла;
ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
// Удалим "мусор" схемы запроса
Для НомерПоля = 1 По 9 Цикл
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, " КАК Поле" + НомерПоля, "");
КонецЦикла;
Если ТипЗнч(Запрос) = Тип("Строка") Тогда
Запрос = ТекстЗапроса;
ИначеЕсли ТипЗнч(Запрос) = Тип("Запрос") Тогда
Запрос.Текст = ТекстЗапроса;
КонецЕсли;
Возврат Запрос;
КонецФункции |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Добавить отбор в запрос через схемы запросов
PSSL/src/cf/CommonModules/пбп_СхемыЗапросов/Ext/Module.bsl
Line 21 in 1f7bb7c
The text was updated successfully, but these errors were encountered: