1
0
mirror of https://github.com/zerobig/fluent-request-schema-1c.git synced 2025-08-09 21:27:11 +02:00

Виртуальные таблицы

This commit is contained in:
Ilya Bushin
2024-11-15 10:12:54 +03:00
parent 69aa334f81
commit 4c626f8238
8 changed files with 586 additions and 31 deletions

View File

@@ -0,0 +1,63 @@
---
sidebar_position: 7
tags: [Функционал]
---
# Виртуальные таблицы
```bsl
Запрос = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ВТаблицуЗначений();
```
## Параметры виртульных таблиц
```bsl
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
Запрос = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
// highlight-next-line
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.Параметры(МассивПараметров)
.ВТаблицуЗначений();
```
## Условия в параметрах виртульных таблиц
### Предикатом
```bsl
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
// highlight-start
.ПараметрВиртуальнойТаблицы(2, СхЗапрос.Предикат()
.Реквизит("Валюта").Равно(Валюта))
// highlight-end
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
```
### Строкой
```bsl
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта", Валюта));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
// highlight-next-line
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
```

View File

@@ -1,6 +1,6 @@
{
"name": "fluent-request-schema-1c",
"version": "0.0.1",
"version": "0.0.4",
"scripts": {
"build": "npm run build:config && npm run build:extension",
"build:config": "cd scripts ",

View File

@@ -74,6 +74,27 @@
.ДобавитьТест("Порядок")
.ДобавитьТест("ПорядокУбывания")
.ДобавитьТест("Итоги")
.ДобавитьТестовыйНабор("СЗ: Виртуальные таблицы")
.ДобавитьТест("СрезПоследних")
.ДобавитьТест("СрезПоследнихСПараметром")
.ДобавитьТест("СрезПоследнихСФильтром")
.Перед("Перед_СрезПоследнихСФильтром")
.ДобавитьТест("СрезПоследнихСоСложнымФильтром")
.Перед("Перед_СрезПоследнихСоСложнымФильтром")
.ДобавитьТест("СрезПоследнихСПараметромИФильтром")
.Перед("Перед_СрезПоследнихСПараметромИФильтром")
.ДобавитьТест("СрезПоследнихСПараметромИФильтромВОбратномПорядке")
.Перед("Перед_СрезПоследнихСПараметромИФильтромВОбратномПорядке")
.ДобавитьТест("НеВиртуальнаяТаблицаСПараметромВиртуальнойТаблицы")
.ДобавитьТест("ОбъединениеДвухВиртуальныхТаблицСПараметрами")
.Перед("Перед_ОбъединениеДвухВиртуальныхТаблицСПараметрами")
.ДобавитьТест("ВиртуальнаяТаблицаВоВложенномЗапросе")
.ДобавитьТест("ПараметровВиртуальнойТаблицыБольшеЧемНужно")
.Перед("Перед_ПараметровВиртуальнойТаблицыБольшеЧемНужно")
.ДобавитьТест("ПараметрВиртуальнойТаблицыПредикатом")
.Перед("Перед_ПараметрВиртуальнойТаблицыПредикатом")
.ДобавитьТест("ПараметрВиртуальнойТаблицыСоСложнымПредикатом")
.Перед("Перед_ПараметрВиртуальнойТаблицыСоСложнымПредикатом")
.ДобавитьТестовыйНабор("СЗ: Реальные запросы")
.ДобавитьТест("АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений")
.Перед("Перед_АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений")
@@ -112,6 +133,57 @@
КонецПроцедуры
#Область ВиртуальныеТаблицы
Процедура Перед_СрезПоследнихСФильтром() Экспорт
СоздатьВалютуИУстановитьКурс();
КонецПроцедуры
Процедура Перед_СрезПоследнихСоСложнымФильтром() Экспорт
СоздатьВалютуИУстановитьКурс();
КонецПроцедуры
Процедура Перед_СрезПоследнихСПараметромИФильтром() Экспорт
СоздатьВалютуИУстановитьКурс();
КонецПроцедуры
Процедура Перед_СрезПоследнихСПараметромИФильтромВОбратномПорядке() Экспорт
СоздатьВалютуИУстановитьКурс();
КонецПроцедуры
Процедура Перед_ОбъединениеДвухВиртуальныхТаблицСПараметрами() Экспорт
СоздатьВалютуИУстановитьКурс("Валюта1");
СоздатьВалютуИУстановитьКурс("Валюта2");
КонецПроцедуры
Процедура Перед_ПараметровВиртуальнойТаблицыБольшеЧемНужно() Экспорт
СоздатьВалютуИУстановитьКурс();
КонецПроцедуры
Процедура Перед_ПараметрВиртуальнойТаблицыПредикатом() Экспорт
СоздатьВалютуИУстановитьКурс();
КонецПроцедуры
Процедура Перед_ПараметрВиртуальнойТаблицыСоСложнымПредикатом() Экспорт
СоздатьВалютуИУстановитьКурс();
КонецПроцедуры
Процедура Перед_АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений() Экспорт
Для Сч = 1 По 3 Цикл
@@ -133,6 +205,8 @@
#КонецОбласти
#КонецОбласти
#Область Тесты
#Область Базовые
@@ -1342,6 +1416,264 @@
#КонецОбласти
#Область ВиртуальныеТаблицы
Процедура СрезПоследних() Экспорт
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ВТаблицуЗначений()
;
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних");
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(Запрос.Выполнить().Выгрузить().Количество())
;
КонецПроцедуры
Процедура СрезПоследнихСПараметром() Экспорт
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
Запрос = Новый Запрос("ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних");
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(Запрос.Выполнить().Выгрузить().Количество())
;
КонецПроцедуры
Процедура СрезПоследнихСФильтром() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта", Контекст.Валюта));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(1)
.Свойство("[0].Валюта").Равно(Контекст.Валюта)
;
КонецПроцедуры
Процедура СрезПоследнихСоСложнымФильтром() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта", Контекст.Валюта));
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Курс", Контекст.Курс));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта И Курс = &Курс")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(1)
.Свойство("[0].Валюта").Равно(Контекст.Валюта)
.Свойство("[0].Курс").Равно(Контекст.Курс)
;
КонецПроцедуры
Процедура СрезПоследнихСПараметромИФильтром() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта", Контекст.Валюта));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(1)
.Свойство("[0].Валюта").Равно(Контекст.Валюта)
;
КонецПроцедуры
Процедура СрезПоследнихСПараметромИФильтромВОбратномПорядке() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта", Контекст.Валюта));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(1)
.Свойство("[0].Валюта").Равно(Контекст.Валюта)
;
КонецПроцедуры
Процедура НеВиртуальнаяТаблицаСПараметромВиртуальнойТаблицы() Экспорт
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("Справочник.Номенклатура")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.ВТаблицуЗначений()
;
// TODO:
КонецПроцедуры
Процедура ОбъединениеДвухВиртуальныхТаблицСПараметрами() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта1", Контекст.Валюта1));
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта2", Контекст.Валюта2));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта1")
.ОбъединитьВсе("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта2")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(2)
.Свойство("[0].Валюта").Равно(Контекст.Валюта1)
.Свойство("[1].Валюта").Равно(Контекст.Валюта2)
;
КонецПроцедуры
Процедура ВиртуальнаяТаблицаВоВложенномЗапросе() Экспорт
// TODO:
КонецПроцедуры
Процедура ПараметровВиртуальнойТаблицыБольшеЧемНужно() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"Валюта", Контекст.Валюта));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.ПараметрВиртуальнойТаблицы(2, "Валюта = &Валюта")
.ПараметрВиртуальнойТаблицы(3, "КакойТоЛишнийПараметр")
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(1)
.Свойство("[0].Валюта").Равно(Контекст.Валюта)
;
КонецПроцедуры
Процедура ПараметрВиртуальнойТаблицыПредикатом() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.ПараметрВиртуальнойТаблицы(2, СхЗапрос.Предикат()
.Реквизит("Валюта").Равно(Контекст.Валюта))
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(1)
.Свойство("[0].Валюта").Равно(Контекст.Валюта)
;
КонецПроцедуры
Процедура ПараметрВиртуальнойТаблицыСоСложнымПредикатом() Экспорт
Контекст = ЮТест.КонтекстТеста();
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
"НаДату", ТекущаяДатаСеанса()));
ТаблицаЗначений = СхЗапрос.НовыйЗапрос("РегистрСведений.КурсыВалют.СрезПоследних")
.ПараметрВиртуальнойТаблицы(1, "&НаДату")
.ПараметрВиртуальнойТаблицы(2, СхЗапрос.Предикат()
.Реквизит("Валюта").Равно(Контекст.Валюта)
.Реквизит("Курс").Равно(Контекст.Курс)
)
.Параметры(МассивПараметров)
.ВТаблицуЗначений()
;
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
.ИмеетДлину(1)
.Свойство("[0].Валюта").Равно(Контекст.Валюта)
.Свойство("[0].Курс").Равно(Контекст.Курс)
;
КонецПроцедуры
#КонецОбласти
#Область РеальныеЗапросы
Процедура АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений() Экспорт
@@ -1409,4 +1741,27 @@
КонецПроцедуры
Процедура СоздатьВалютуИУстановитьКурс(НаименованиеПараметра = "Валюта")
Валюта = ЮТест.Данные().КонструкторОбъекта("Справочники.Валюты")
.Фикция("Наименование")
.Записать()
;
Курс = ЮТест.Данные().СлучайноеЧисло(2, 100, 2);
ЮТест.Данные().КонструкторОбъекта("РегистрСведений.КурсыВалют")
.Установить("Период", ТекущаяДатаСеанса())
.Установить("Валюта", Валюта)
.Установить("Курс", Курс)
.Установить("Кратность", 1)
.Записать()
;
Контекст = ЮТест.КонтекстТеста();
Контекст.Вставить(НаименованиеПараметра, Валюта);
Контекст.Вставить("Курс", Курс);
КонецПроцедуры
#КонецОбласти

View File

@@ -104,7 +104,7 @@
КонецЕсли;
Если ТипЗнч(СтруктураСхемыЗапроса.ИсточникДанных) = Тип("Строка") Тогда
Оператор.Источники.Добавить(СтруктураСхемыЗапроса.ИсточникДанных);
ИсточникСхемыЗапроса = Оператор.Источники.Добавить(СтруктураСхемыЗапроса.ИсточникДанных);
Иначе
СтруктураСхемыВложенногоЗапроса = СтруктураСхемыЗапроса.ИсточникДанных;
Если Не СтруктураСхемыВложенногоЗапроса.Свойство("ПсевдонимИсточника") Или
@@ -120,6 +120,20 @@
ИсточникСхемыЗапроса.Источник.Запрос.УстановитьТекстЗапроса(ВложенныйЗапрос);
КонецЕсли;
Если СтруктураСхемыЗапроса.Свойство("ПараметрыВиртуальнойТаблицы") И ТипЗнч(СтруктураСхемыЗапроса.ПараметрыВиртуальнойТаблицы) = Тип("Массив") Тогда
Для Сч = 1 По СтруктураСхемыЗапроса.ПараметрыВиртуальнойТаблицы.Количество() Цикл
Если Сч > ИсточникСхемыЗапроса.Источник.Параметры.Количество() Тогда
Прервать;
КонецЕсли;
Если СтруктураСхемыЗапроса.ПараметрыВиртуальнойТаблицы[Сч - 1] = Неопределено Тогда
Продолжить;
КонецЕсли;
ИсточникСхемыЗапроса.Источник.Параметры[Сч - 1].Выражение =
Новый ВыражениеСхемыЗапроса(СтруктураСхемыЗапроса.ПараметрыВиртуальнойТаблицы[Сч - 1]);
КонецЦикла;
КонецЕсли;
Возврат Оператор;
КонецФункции
@@ -311,11 +325,11 @@
Оператор.ТипОбъединения = ТипОбъединенияСхемыЗапроса.Объединить;
КонецЕсли;
Если ТипЗнч(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных) = Тип("Строка") Тогда
Оператор.Источники.Добавить(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных);
ИсточникСхемыЗапроса = Оператор.Источники.Добавить(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных);
ДобавитьДанныеЗапроса(ЗапросПакета, Оператор, Запрос,
ЭлементОбъединения.СтруктураСхемыЗапроса);
ИначеЕсли ТипЗнч(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных.ИсточникДанных) = Тип("Строка") Тогда
Оператор.Источники.Добавить(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных.ИсточникДанных);
ИсточникСхемыЗапроса = Оператор.Источники.Добавить(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных.ИсточникДанных);
ДобавитьДанныеЗапроса(ЗапросПакета, Оператор, Запрос,
ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных);
Иначе
@@ -337,6 +351,20 @@
КонецЕсли;
Если ЭлементОбъединения.Свойство("ПараметрыВиртуальнойТаблицы") И ТипЗнч(ЭлементОбъединения.ПараметрыВиртуальнойТаблицы) = Тип("Массив") Тогда
Для Сч = 1 По ЭлементОбъединения.ПараметрыВиртуальнойТаблицы.Количество() Цикл
Если Сч > ИсточникСхемыЗапроса.Источник.Параметры.Количество() Тогда
Прервать;
КонецЕсли;
Если СтруктураСхемыЗапроса.ПараметрыВиртуальнойТаблицы[Сч - 1] = Неопределено Тогда
Продолжить;
КонецЕсли;
ИсточникСхемыЗапроса.Источник.Параметры[Сч - 1].Выражение =
Новый ВыражениеСхемыЗапроса(ЭлементОбъединения.ПараметрыВиртуальнойТаблицы[Сч - 1]);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;

View File

@@ -77,6 +77,36 @@
КонецПроцедуры
Процедура УстановитьПараметрВиртуальнойТаблицы(СхемаЗапроса, Номер, Выражение) Экспорт
МассивОбъединений = Новый Массив;
Если СхемаЗапроса.Свойство("Объединения") И ТипЗнч(СхемаЗапроса.Объединения) = Тип("Массив") Тогда
МассивОбъединений = СхемаЗапроса.Объединения;
КонецЕсли;
МассивПараметров = Новый Массив;
Если СхемаЗапроса.Свойство("Параметры") И ТипЗнч(СхемаЗапроса.Параметры) = Тип("Массив") Тогда
МассивПараметров = СхемаЗапроса.Параметры;
КонецЕсли;
Если МассивОбъединений.Количество() = 0 Тогда
СхемаЗапроса.Вставить("ПараметрыВиртуальнойТаблицы",
ПолучитьПараметрыВиртуальнойТаблицы(СхемаЗапроса, Номер, Выражение, МассивПараметров));
Иначе
ПоследнееОбъединение = МассивОбъединений[МассивОбъединений.Количество() - 1];
ПоследнееОбъединение.Вставить("ПараметрыВиртуальнойТаблицы",
ПолучитьПараметрыВиртуальнойТаблицы(ПоследнееОбъединение, Номер, Выражение, МассивПараметров));
МассивОбъединений[МассивОбъединений.Количество() - 1] = ПоследнееОбъединение;
СхемаЗапроса.Объединения = МассивОбъединений;
КонецЕсли;
СхемаЗапроса.Вставить("Параметры", МассивПараметров);
КонецПроцедуры
Процедура УстановитьУсловие(СхемаЗапроса, Предикат) Экспорт
СхемаЗапроса.Вставить("Условия", ПолучитьУсловияОтбора(СхемаЗапроса, Предикат));
@@ -241,17 +271,7 @@
КонецЕсли;
Условия = ПолучитьУсловияОтбора(СхемаЗапроса, Предикат);
УсловиеСтрокой = "";
Для каждого Условие Из Условия Цикл
Если Не ПустаяСтрока(УсловиеСтрокой) Тогда
УсловиеСтрокой = УсловиеСтрокой + " И ";
КонецЕсли;
УсловиеСтрокой = УсловиеСтрокой + Условие.УсловиеСтрокой;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
Условие.ИмяПараметра, Условие.Значение));
КонецЦикла;
УсловиеСтрокой = ПолучитьУсловияСтрокой(Условия, МассивПараметров);
ПриведенноеЗначениеИстина = ПривестиЗначение(ЗначениеИстина);
ПриведенноеЗначениеЛожь = ПривестиЗначение(ЗначениеЛожь);
@@ -476,6 +496,46 @@
КонецФункции
// СхемаЗапроса может быть или структурой запроса или структурой объединения,
// так что установка каких-то общих данных запроса, типа парметров запроса, надо
// выполнять вне пределов этой функции. Для этого и передаётся МассивПараметров
Функция ПолучитьПараметрыВиртуальнойТаблицы(СхемаЗапроса, Номер, Выражение, МассивПараметров)
ПараметрыВиртуальнойТаблицы = Новый Массив;
Если СхемаЗапроса.Свойство("ПараметрыВиртуальнойТаблицы") И ТипЗнч(СхемаЗапроса.ПараметрыВиртуальнойТаблицы) = Тип("Массив") Тогда
ПараметрыВиртуальнойТаблицы = СхемаЗапроса.ПараметрыВиртуальнойТаблицы;
КонецЕсли;
Если ПараметрыВиртуальнойТаблицы.Количество() >= Номер Тогда
Если ТипЗнч(Выражение) = Тип("Строка") Тогда
ПараметрыВиртуальнойТаблицы[Номер - 1] = Выражение;
Иначе
Условия = ПолучитьУсловияОтбора(СхемаЗапроса, Выражение);
УсловиеСтрокой = ПолучитьУсловияСтрокой(Условия, МассивПараметров);
ПараметрыВиртуальнойТаблицы.Добавить(УсловиеСтрокой);
КонецЕсли;
Иначе
Для Сч = ПараметрыВиртуальнойТаблицы.Количество() По Номер - 1 Цикл
Если Сч = Номер - 1 Тогда
Если ТипЗнч(Выражение) = Тип("Строка") Тогда
ПараметрыВиртуальнойТаблицы.Добавить(Выражение);
Иначе
Условия = ПолучитьУсловияОтбора(СхемаЗапроса, Выражение);
УсловиеСтрокой = ПолучитьУсловияСтрокой(Условия, МассивПараметров);
ПараметрыВиртуальнойТаблицы.Добавить(УсловиеСтрокой);
КонецЕсли;
Иначе
ПараметрыВиртуальнойТаблицы.Добавить();
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ПараметрыВиртуальнойТаблицы;
КонецФункции
Функция ПолучитьУсловияОтбора(СхемаЗапроса, Предикат)
МассивУсловий = Новый Массив;
@@ -604,4 +664,21 @@
КонецФункции
Функция ПолучитьУсловияСтрокой(Условия, МассивПараметров)
УсловиеСтрокой = "";
Для каждого Условие Из Условия Цикл
Если Не ПустаяСтрока(УсловиеСтрокой) Тогда
УсловиеСтрокой = УсловиеСтрокой + " И ";
КонецЕсли;
УсловиеСтрокой = УсловиеСтрокой + Условие.УсловиеСтрокой;
МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
Условие.ИмяПараметра, Условие.Значение));
КонецЦикла;
Возврат УсловиеСтрокой;
КонецФункции
#КонецОбласти

View File

@@ -2,41 +2,41 @@
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.18">
<ConfigVersions>
<Metadata name="CommonModule.СхЗапрос" id="5f1605a0-4e63-4339-b2cc-44e115be6ed7" configVersion="0f166080406b4803d2bed7934bfc40812f1abe1b"/>
<Metadata name="CommonModule.СхЗапрос.Module" id="5f1605a0-4e63-4339-b2cc-44e115be6ed7.0" configVersion="cadb56f56e948833a14dfc1e5588b4985420427b"/>
<Metadata name="CommonModule.СхЗапрос.Module" id="5f1605a0-4e63-4339-b2cc-44e115be6ed7.0" configVersion="01f7d66cc88798fa8490fec1eee001bda436f894"/>
<Metadata name="CommonModule.СхЗапросТест" id="52ab0c6f-4fa1-4913-b37e-460ab1e44314" configVersion="e4cd1d3ae5b3dfc796a93963e27ac1808ac21bcc"/>
<Metadata name="CommonModule.СхЗапросТест.Module" id="52ab0c6f-4fa1-4913-b37e-460ab1e44314.0" configVersion="ead991640c2583e96d7950d80f10fe68f5f02cdc"/>
<Metadata name="CommonModule.СхЗапросТест.Module" id="52ab0c6f-4fa1-4913-b37e-460ab1e44314.0" configVersion="2ff8449badb02424fd4c5d9ae4d0bd7039517b96"/>
<Metadata name="CommonModule.СхЗапросТестКлиент" id="b37c9dfc-97f9-419e-aef2-d1598bd7f793" configVersion="abddeb6317bbb90599f5d3a6800d916974d522b9"/>
<Metadata name="CommonModule.СхЗапросТестКлиент.Module" id="b37c9dfc-97f9-419e-aef2-d1598bd7f793.0" configVersion="0f4d03e494116e0a169ac79a89449bc6fe8b680c"/>
<Metadata name="CommonModule.СхЗапросТестКлиент.Module" id="b37c9dfc-97f9-419e-aef2-d1598bd7f793.0" configVersion="0cf16f4b019969d51c827533f42c6077afd22d7a"/>
<Metadata name="CommonModule.СхЗапросТестСлужебныйВызовСервера" id="fd18e525-b216-4cbe-9e5b-3f44fcf6fcf2" configVersion="eb43fe5ee123d7869a0578d44bd110f4e29ed798"/>
<Metadata name="CommonModule.СхЗапросТестСлужебныйВызовСервера.Module" id="fd18e525-b216-4cbe-9e5b-3f44fcf6fcf2.0" configVersion="e6a50bf7d3b4661197d11e0031a81a0c411be09b"/>
<Metadata name="CommonModule.СхЗапросТестСлужебныйВызовСервера.Module" id="fd18e525-b216-4cbe-9e5b-3f44fcf6fcf2.0" configVersion="e8af97ee25e58839bdbc25ce8b47734cc9f0dafa"/>
<Metadata name="CommonModule.СхОбщегоНазначенийКлиентСервер" id="54eb4132-1b61-4d01-ba96-ff4bfe65f6f8" configVersion="f0ddd8cc8c3ab867a2416783d887754c13bd55fc"/>
<Metadata name="CommonModule.СхОбщегоНазначенийКлиентСервер.Module" id="54eb4132-1b61-4d01-ba96-ff4bfe65f6f8.0" configVersion="82370929e314ec3d1e0e23f467f2d9dde948a99d"/>
<Metadata name="CommonModule.СхОбщегоНазначенийКлиентСервер.Module" id="54eb4132-1b61-4d01-ba96-ff4bfe65f6f8.0" configVersion="100c0eff1f02587e1592196aa90869423843d302"/>
<Metadata name="CommonModule.СхПроцессорыПредикатовКлиентСервер" id="407489b2-2f4b-467b-9594-621de146e468" configVersion="375a4cad162b05500d054bbc6a6b2eb5c3c17a89"/>
<Metadata name="CommonModule.СхПроцессорыПредикатовКлиентСервер.Module" id="407489b2-2f4b-467b-9594-621de146e468.0" configVersion="08673b19374f9a17b5f923c53925186c20107924"/>
<Metadata name="CommonModule.СхПроцессорыПредикатовКлиентСервер.Module" id="407489b2-2f4b-467b-9594-621de146e468.0" configVersion="b9148099348169f75ac880beef1cf6f94c80150e"/>
<Metadata name="CommonModule.СхПроцессорыПредикатовСлужебныйКлиентСервер" id="19b0625e-9f74-4fba-9350-914066ae1034" configVersion="cea811bfa991650b7bd13624fbc5b68375f054c1"/>
<Metadata name="CommonModule.СхПроцессорыПредикатовСлужебныйКлиентСервер.Module" id="19b0625e-9f74-4fba-9350-914066ae1034.0" configVersion="70057051b2459ccacd30c8b668e219f05c0a7476"/>
<Metadata name="CommonModule.СхПроцессорыПредикатовСлужебныйКлиентСервер.Module" id="19b0625e-9f74-4fba-9350-914066ae1034.0" configVersion="7da4e4a3855959ef4fcd3a66cae12bc887e0f33f"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаКлиентСервер" id="a3e5bf50-2154-477f-9355-29b0930a73c5" configVersion="d5dc79a29726742dd44754fd1200ed961e5eb47b"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаКлиентСервер.Module" id="a3e5bf50-2154-477f-9355-29b0930a73c5.0" configVersion="0dd0df1608449960758e6e58dd0c3ac8a20a1610"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаКлиентСервер.Module" id="a3e5bf50-2154-477f-9355-29b0930a73c5.0" configVersion="76de541c6025c8a4a6d6ec7907e2c4f08552fe66"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебный" id="fd5aeea0-9a03-452d-ba1e-81c816846c6c" configVersion="f8a3be5d8b2e88a3c91aef9302812d9a7843318c"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебный.Module" id="fd5aeea0-9a03-452d-ba1e-81c816846c6c.0" configVersion="01602b4239886aefd28910c38e45db2d9e311bd4"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебный.Module" id="fd5aeea0-9a03-452d-ba1e-81c816846c6c.0" configVersion="196072be4c421b069557dd889b266ace00bb5076"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебныйВызовСервера" id="64cc4f13-8ea3-43e0-b530-031a569bfcd0" configVersion="8b8a36d52a3c70f6411516282dff44b50709d582"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебныйВызовСервера.Module" id="64cc4f13-8ea3-43e0-b530-031a569bfcd0.0" configVersion="096fe94ceada3bba6c783107320609d74a183f00"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебныйВызовСервера.Module" id="64cc4f13-8ea3-43e0-b530-031a569bfcd0.0" configVersion="73a825cc2be8a3efb9e744a4eb0a542081028180"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебныйКлиентСервер" id="a7341127-4ed0-44b9-b3b2-007ae8f263dc" configVersion="9ce268ec45c272677facf5c52c5cb09d018d6089"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебныйКлиентСервер.Module" id="a7341127-4ed0-44b9-b3b2-007ae8f263dc.0" configVersion="9b7bdef1361fe597e1b781a741fb4cf06b7f8984"/>
<Metadata name="CommonModule.СхПроцессорыСхемЗапросаСлужебныйКлиентСервер.Module" id="a7341127-4ed0-44b9-b3b2-007ae8f263dc.0" configVersion="4bcec7767f7b96306bb8ba377a30a05e815a2035"/>
<Metadata name="CommonPicture.СЗ_Логотип" id="1f46f9f5-7948-4684-80f5-f809aace3848" configVersion="1cd842efa6dbeed87c4bd770ba9fdfea3ffc73c0"/>
<Metadata name="CommonPicture.СЗ_Логотип.Picture" id="1f46f9f5-7948-4684-80f5-f809aace3848.0" configVersion="09958a054a92dc27b186eb0ab627d11bade1f015"/>
<Metadata name="Configuration.СхемаЗапроса" id="727bc241-bb6d-418f-b908-1102fbf1bc00" configVersion="3ff15ae99b006940a3d718ecf86f9c166f1ff52a"/>
<Metadata name="DataProcessor.СхКонсольФункциональныхЗапросов" id="67397753-24bc-416c-9dc1-5fe9545ad4b2" configVersion="d1a6eb3b0f8a2146c0b618c5edcc7ee007a7e801"/>
<Metadata name="DataProcessor.СхКонсольФункциональныхЗапросов.Form.Форма" id="1f613bcb-34f1-4755-8c5b-734e99a89a03" configVersion="aedcf955fb9b922c1fd72335bb59d9b931015e58"/>
<Metadata name="DataProcessor.СхКонсольФункциональныхЗапросов.Form.Форма.Form" id="1f613bcb-34f1-4755-8c5b-734e99a89a03.0" configVersion="7c260ad6a11cea96ce61809459a0433bc7815ad1"/>
<Metadata name="DataProcessor.СхКонсольФункциональныхЗапросов.Form.Форма.Form" id="1f613bcb-34f1-4755-8c5b-734e99a89a03.0" configVersion="ea9a566744db145c41dd5d08a95cae584a5973b7"/>
<Metadata name="DataProcessor.СхПроцессорПредикатов" id="12d6eb41-70d9-4802-8fde-b6464e23bf0b" configVersion="4954bfbfc6b8922ac7373146041de0e8311b766a"/>
<Metadata name="DataProcessor.СхПроцессорПредикатов.Form.Форма" id="9ab75485-6c0a-4548-b3cb-fab32ccd351d" configVersion="12570426f46bd4a3dbb5f4c3b28a92c6db858ede"/>
<Metadata name="DataProcessor.СхПроцессорПредикатов.Form.Форма.Form" id="9ab75485-6c0a-4548-b3cb-fab32ccd351d.0" configVersion="4db6c0d580bf590f3e886c39f9abb7e15029e979"/>
<Metadata name="DataProcessor.СхПроцессорПредикатов.ObjectModule" id="12d6eb41-70d9-4802-8fde-b6464e23bf0b.0" configVersion="544105e6c8ffbdc2120979764205590420377a16"/>
<Metadata name="DataProcessor.СхПроцессорПредикатов.Form.Форма.Form" id="9ab75485-6c0a-4548-b3cb-fab32ccd351d.0" configVersion="97cb3acdc4dd75d2de2f3b80e4da371bdf72a6d7"/>
<Metadata name="DataProcessor.СхПроцессорПредикатов.ObjectModule" id="12d6eb41-70d9-4802-8fde-b6464e23bf0b.0" configVersion="ccdb4171211476fbe7b589b9f3e00927ec37e0e8"/>
<Metadata name="DataProcessor.СхПроцессорСхемЗапроса" id="7008c53a-3e8a-4432-bff6-500c4145bab5" configVersion="78983226bff2a80bc78dd6a1c83023079ccf2a1a"/>
<Metadata name="DataProcessor.СхПроцессорСхемЗапроса.Form.Форма" id="04cd8a25-c99d-4da9-ac0f-5703574d079f" configVersion="f910d6e757792c7cdd2137a7213495bba1da1300"/>
<Metadata name="DataProcessor.СхПроцессорСхемЗапроса.Form.Форма.Form" id="04cd8a25-c99d-4da9-ac0f-5703574d079f.0" configVersion="929a1f8363b66e10c17e7b0c9b0bc4c5b2b374d3"/>
<Metadata name="DataProcessor.СхПроцессорСхемЗапроса.ObjectModule" id="7008c53a-3e8a-4432-bff6-500c4145bab5.0" configVersion="d24fca2c93d620a13f2b287e70d3c4325ce07a0a"/>
<Metadata name="DataProcessor.СхПроцессорСхемЗапроса.Form.Форма.Form" id="04cd8a25-c99d-4da9-ac0f-5703574d079f.0" configVersion="7cef18b5ae35bad253692098d7bcdefb1ba376a9"/>
<Metadata name="DataProcessor.СхПроцессорСхемЗапроса.ObjectModule" id="7008c53a-3e8a-4432-bff6-500c4145bab5.0" configVersion="930c0f7ca6c0c76a3ea5ead60862bda886b70a51"/>
<Metadata name="Language.Русский" id="390892dc-e75e-45a4-b708-a02f7f2dee5a" configVersion="d36425ed50ec1003a922942173f639c4f459684c"/>
<Metadata name="Subsystem.СхОбработки" id="d4e271af-1ead-4743-afb5-9c2aa77055ae" configVersion="f110e9f462bd7349a8a18b57db698a5cb4198d4e"/>
<Metadata name="Subsystem.СхОсновная" id="a09dece7-9d83-44cb-8463-270875de13d2" configVersion="03c18be8084556de42a54ad0474bdd4db01862e8"/>

View File

@@ -87,6 +87,24 @@
Возврат ЭтотОбъект;
КонецФункции
//
//
Функция ПараметрВиртуальнойТаблицы(Номер, Выражение) Экспорт
Если ТипЗнч(Выражение) = Тип("Строка") Или ТипЗнч(Выражение) = Тип("Структура") Тогда
_Выражение = Выражение;
ИначеЕсли ТипЗнч(Выражение) = Тип("ОбработкаОбъект.СхПроцессорПредикатов") Тогда
_Выражение = Выражение.Получить();
Иначе
ВызватьИсключение "Неверный тип выражения в методе ""ПараметрВиртуальнойТаблицы""";
КонецЕсли;
СхПроцессорыСхемЗапросаСлужебныйКлиентСервер
.УстановитьПараметрВиртуальнойТаблицы(СхемаЗапроса, Номер, _Выражение);
Возврат ЭтотОбъект;
КонецФункции
//
//
Функция Поместить(ИмяВременнойТаблицы) Экспорт

View File

@@ -76,6 +76,20 @@
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
Функция ПараметрВиртуальнойТаблицы(Номер, Выражение) Экспорт
СхПроцессорыСхемЗапросаСлужебныйКлиентСервер
.УстановитьПараметрВиртуальнойТаблицы(СхемаЗапроса, Номер, Выражение);
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
Функция Поместить(ИмяВременнойТаблицы) Экспорт
СхПроцессорыСхемЗапросаСлужебныйКлиентСервер
.УстановитьИмяВременнойТаблицы(СхемаЗапроса, ИмяВременнойТаблицы);
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
Функция Где(Предикат) Экспорт