diff --git a/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl
index 56ab3d9..a01ff38 100644
--- a/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl
+++ b/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl
@@ -30,7 +30,10 @@
.ДобавитьТест("ЗапросСУсловиемНеВСписке")
.Перед("Перед_ЗапросСУсловиемНеВСписке")
.ДобавитьТестовыйНабор("СЗ: Соединения")
- .ДобавитьТест("ЛевоеСоединениеПоИсточникуСтроке")
+ .ДобавитьТест("СоединениеПоИсточникуСтроке")
+ .СПараметрами("Левое")
+ .СПараметрами("Правое")
+ .СПараметрами("Внутреннее")
.ДобавитьТест("ЛевоеСоединениеПоИсточникуЗапросу")
.ДобавитьТест("ЛевоеСоединениеБезПредиката")
.ДобавитьТест("ЛевоеСоединениеНесколькоУсловийВПредикате")
@@ -506,18 +509,31 @@
#Область Соединения
-Процедура ЛевоеСоединениеПоИсточникуСтроке() Экспорт
+Процедура СоединениеПоИсточникуСтроке(ТипСоединения) Экспорт
ПредикатДляСоединения = СЗ_Запрос.Предикат()
.Реквизит("НоменклатураСоединение.Ссылка").Равно("Номенклатура.Родитель")
;
- ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ Запрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
.Выбрать("Номенклатура.Ссылка,
|НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка")
- .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения)
- .ВТаблицуЗначений()
;
+ Если ТипСоединения = "Левое" Тогда
+ Запрос
+ .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения)
+ ;
+ ИначеЕсли ТипСоединения = "Правое" Тогда
+ Запрос
+ .ПравоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения)
+ ;
+ Иначе // Если ТипСоединения = "Внутреннее" Тогда
+ Запрос
+ .ВнутреннееСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения)
+ ;
+ КонецЕсли;
+
+ ТаблицаЗначений = Запрос.ВТаблицуЗначений();
ЮТест.ОжидаетЧто(ТаблицаЗначений)
.ИмеетТип("ТаблицаЗначений")
@@ -534,7 +550,9 @@
Процедура ЛевоеСоединениеПоИсточникуЗапросу() Экспорт
- ЗапросДляСоединения = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура");
+ ЗапросДляСоединения = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Псевдоним("НоменклатураСоединение")
+ ;
ПредикатДляСоединения = СЗ_Запрос.Предикат()
.Реквизит("Ссылка").Равно("Родитель")
;
diff --git a/src/cfe/CommonModules/СЗ_ЗапросТестКлиент.xml b/src/cfe/CommonModules/СЗ_ЗапросТестКлиент.xml
new file mode 100644
index 0000000..96d9e8d
--- /dev/null
+++ b/src/cfe/CommonModules/СЗ_ЗапросТестКлиент.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ СЗ_ЗапросТестКлиент
+
+
+ ru
+ Схема запроса: запрос тест клиент
+
+
+
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git a/src/cfe/CommonModules/СЗ_ЗапросТестКлиент/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ЗапросТестКлиент/Ext/Module.bsl
new file mode 100644
index 0000000..d0608c2
--- /dev/null
+++ b/src/cfe/CommonModules/СЗ_ЗапросТестКлиент/Ext/Module.bsl
@@ -0,0 +1,889 @@
+#Область ОбъявлениеТестов
+
+Процедура ИсполняемыеСценарии() Экспорт
+
+ ЮТТесты.УдалениеТестовыхДанных()
+ .ДобавитьТестовыйНабор("СЗ: Базовые")
+ .ДобавитьТест("ИсключениеИсточникОтсутствует")
+ .ДобавитьТест("ИсключениеИсточникПустаяСтрока")
+ .ДобавитьТест("ЗапросВТаблицуЗначений")
+ .ДобавитьТест("ЗапросВМассив")
+ .ДобавитьТест("Первые")
+ .ДобавитьТест("Различные")
+ .ДобавитьТест("Разрешенные")
+ .ДобавитьТестовыйНабор("СЗ: Поля")
+ .ДобавитьТест("ИсключениеПолеОтсутствует")
+ .ДобавитьТест("ДобавитьПоляССинонимами")
+ .ДобавитьТест("ДобавитьНесколькоПолей")
+ .ДобавитьТест("ДобавитьНесколькоПолейСПереносомСтроки")
+ .ДобавитьТест("ДобавитьПоляССинонимамиИСписком")
+ .ДобавитьТест("ВсеПоляДляНеСсылочногоТипа")
+ .ДобавитьТест("ВсеПоляДляСсылочногоТипа")
+ .ДобавитьТестовыйНабор("СЗ: Условия")
+ .ДобавитьТест("ЗапросСУсловиемРавно")
+ .ДобавитьТест("ЗапросСУсловиемНеРавно")
+ .ДобавитьТест("ЗапросСУсловиемПодобно")
+ .ДобавитьТест("ЗапросСУсловиемНеПодобно")
+ .ДобавитьТест("ЗапросСУсловиемМежду")
+ .ДобавитьТест("ЗапросСУсловиемВСписке")
+ .Перед("Перед_ЗапросСУсловиемВСписке")
+ .ДобавитьТест("ЗапросСУсловиемНеВСписке")
+ .Перед("Перед_ЗапросСУсловиемНеВСписке")
+ .ДобавитьТестовыйНабор("СЗ: Соединения")
+ .ДобавитьТест("СоединениеПоИсточникуСтроке")
+ .СПараметрами("Левое")
+ .СПараметрами("Правое")
+ .СПараметрами("Внутреннее")
+ .ДобавитьТест("ЛевоеСоединениеПоИсточникуЗапросу")
+ .ДобавитьТест("ЛевоеСоединениеБезПредиката")
+ .ДобавитьТест("ЛевоеСоединениеНесколькоУсловийВПредикате")
+ .ДобавитьТест("ЛевоеСоединениеПредикатЭтоПараметр")
+ .ДобавитьТест("ЛевоеСоединениеБезПсевдонимовВСоединении")
+ .ДобавитьТест("НесколькоЛевыхСоединений")
+ .ДобавитьТестовыйНабор("СЗ: Вложенный запрос")
+ .ДобавитьТест("ИсключениеВложенныйЗапросБезПсевдонима")
+ .ДобавитьТест("ВложенныйЗапрос")
+ .ДобавитьТестовыйНабор("СЗ: Прочее")
+ .ДобавитьТест("Порядок")
+ .ДобавитьТест("ПорядокУбывания")
+ .ДобавитьТест("Итоги")
+ .ДобавитьТестовыйНабор("СЗ: Реальные запросы")
+ .ДобавитьТест("АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений")
+ .Перед("Перед_АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений")
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область События
+
+Процедура Перед_ЗапросСУсловиемВСписке() Экспорт
+
+ ПодготовитьСписокНоменклатуры();
+
+КонецПроцедуры
+
+Процедура Перед_ЗапросСУсловиемНеВСписке() Экспорт
+
+ ПодготовитьСписокНоменклатуры();
+
+ Контекст = ЮТест.КонтекстТеста();
+
+ МассивНоменклатуры = СЗ_ЗапросТестСлужебныйВызовСервера
+ .ПолучитьНоменклатуруНеСписке(Контекст.МассивНоменклатуры);
+ Контекст.Вставить("МассивНоменклатурыНеВСписке", МассивНоменклатуры);
+
+КонецПроцедуры
+
+Процедура Перед_АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений() Экспорт
+
+ Для Сч = 1 По 3 Цикл
+ ЮТест.Данные().КонструкторОбъекта("РегистрСведений.УровниСокращенийАдресныхСведений")
+ .Установить("Значение", "Абонентский Ящик")
+ .Установить("Сокращение", "А/Я")
+ .Записать()
+ ;
+ КонецЦикла;
+ Для Сч = 1 По 5 Цикл
+ ЮТест.Данные().КонструкторОбъекта("РегистрСведений.УровниСокращенийАдресныхСведений")
+ .Установить("Значение", "Деревня")
+ .Установить("Сокращение", "Д.")
+ .Записать()
+ ;
+ КонецЦикла;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Тесты
+
+#Область Базовые
+
+Процедура ИсключениеИсточникОтсутствует() Экспорт
+
+ Обработка = ПолучитьФорму("Обработка.СЗ_ПроцессорСхемЗапроса.Форма.Форма");
+
+ ЮТест.ОжидаетЧто(Обработка)
+ .Метод("ВТаблицуЗначений")
+ .ВыбрасываетИсключение("Источник данных запроса не определен");
+
+КонецПроцедуры
+
+Процедура ИсключениеИсточникПустаяСтрока() Экспорт
+
+ Запрос = СЗ_Запрос.НовыйЗапрос("");
+
+ ЮТест.ОжидаетЧто(Запрос)
+ .Метод("ВТаблицуЗначений")
+ .ВыбрасываетИсключение("Источник данных запроса не определен");
+
+КонецПроцедуры
+
+Процедура ЗапросВТаблицуЗначений() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+
+КонецПроцедуры
+
+Процедура ЗапросВМассив() Экспорт
+
+ Массив = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .ВМассив("Ссылка")
+ ;
+
+ ЮТест.ОжидаетЧто(Массив)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(Массив.Количество())
+ .Больше(0)
+ ;
+
+КонецПроцедуры
+
+Процедура Первые() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура", 10)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Равно(10)
+ ;
+
+КонецПроцедуры
+
+Процедура Различные() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура",, Истина)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+
+КонецПроцедуры
+
+Процедура Разрешенные() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура",,, Истина)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Поля
+
+// TODO: Поля могут быть выражениями
+
+Процедура ИсключениеПолеОтсутствует() Экспорт
+
+ НеправильноеНаименованиеПоля = "йцукен";
+
+ Запрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать(НеправильноеНаименованиеПоля)
+ ;
+
+ ЮТест.ОжидаетЧто(Запрос)
+ .Метод("ВТаблицуЗначений")
+ .ВыбрасываетИсключение(
+ СтрШаблон("Поле %1 в источнике не определено", НеправильноеНаименованиеПоля));
+
+КонецПроцедуры
+
+Процедура ДобавитьПоляССинонимами() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать(СЗ_Запрос.НовоеПоле("Ссылка",, "СсылкаНоменклатуры"))
+ .Выбрать(СЗ_Запрос.НовоеПоле("Наименование",, "НаименованиеНоменклатуры"))
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("СсылкаНоменклатуры")
+ .ИмеетСвойство("НаименованиеНоменклатуры")
+ ;
+
+КонецПроцедуры
+
+Процедура ДобавитьНесколькоПолей() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, Наименование, ЭтоГруппа")
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("Наименование")
+ .ИмеетСвойство("ЭтоГруппа")
+ ;
+
+КонецПроцедуры
+
+Процедура ДобавитьНесколькоПолейСПереносомСтроки() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, Наименование,
+ |ЭтоГруппа")
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("Наименование")
+ .ИмеетСвойство("ЭтоГруппа")
+ ;
+
+КонецПроцедуры
+
+Процедура ДобавитьПоляССинонимамиИСписком() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать(СЗ_Запрос.НовоеПоле("Ссылка",, "СсылкаНоменклатуры"))
+ .Выбрать("Наименование КАК НаименованиеНоменклатуры, ЭтоГруппа")
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("СсылкаНоменклатуры")
+ .ИмеетСвойство("НаименованиеНоменклатуры")
+ .ИмеетСвойство("ЭтоГруппа")
+ ;
+
+КонецПроцедуры
+
+Процедура ВсеПоляДляНеСсылочногоТипа() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("РегистрСведений.КурсыВалют")
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Валюта")
+ .ИмеетСвойство("Курс")
+ .ИмеетСвойство("Кратность")
+ ;
+
+КонецПроцедуры
+
+Процедура ВсеПоляДляСсылочногоТипа() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .ВыбратьВсе()
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("Наименование")
+ .ИмеетСвойство("ЭтоГруппа")
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Условия
+
+Процедура ЗапросСУсловиемРавно() Экспорт
+
+ Предикат = СЗ_Запрос.Предикат()
+ .Реквизит("ЭтоГруппа").Равно(Ложь)
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, ЭтоГруппа")
+ .Где(Предикат)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("ЭтоГруппа").Равно(Ложь))
+ ;
+
+КонецПроцедуры
+
+Процедура ЗапросСУсловиемНеРавно() Экспорт
+
+ Предикат = СЗ_Запрос.Предикат()
+ .Реквизит("ЭтоГруппа").НеРавно(Ложь)
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, ЭтоГруппа")
+ .Где(Предикат)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("ЭтоГруппа").Равно(Истина))
+ ;
+
+КонецПроцедуры
+
+Процедура ЗапросСУсловиемПодобно() Экспорт
+
+ Предикат = СЗ_Запрос.Предикат()
+ .Реквизит("Наименование").Подобно("Хлеб")
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, Наименование")
+ .Где(Предикат)
+ .ВТаблицуЗначений()
+ ;
+
+ Утверждения = ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0)
+ ;
+
+ СЗ_ЗапросТестСлужебныйВызовСервера.ПроверитьПодобноПоРегулярномуВыражению(ТаблицаЗначений);
+
+КонецПроцедуры
+
+Процедура ЗапросСУсловиемНеПодобно() Экспорт
+
+ Предикат = СЗ_Запрос.Предикат()
+ .Реквизит("Наименование").НеПодобно("Хлеб")
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, Наименование")
+ .Где(Предикат)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0)
+ ;
+
+ СЗ_ЗапросТестСлужебныйВызовСервера.ПроверитьНеПодобноПоРегулярномуВыражению(ТаблицаЗначений);
+
+КонецПроцедуры
+
+Процедура ЗапросСУсловиемМежду() Экспорт
+
+ ДатаНачала = Дата("20230601000000");
+ ДатаОкончания = Дата("20230630235959");
+ Предикат = СЗ_Запрос.Предикат()
+ .Реквизит("Дата").Между(ДатаНачала, ДатаОкончания)
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ЗаказКлиента")
+ .Выбрать("Ссылка, Дата")
+ .Где(Предикат)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("Дата").Между(ДатаНачала, ДатаОкончания))
+ ;
+
+КонецПроцедуры
+
+Процедура ЗапросСУсловиемВСписке() Экспорт
+
+ Контекст = ЮТест.КонтекстТеста();
+
+ Предикат = СЗ_Запрос.Предикат()
+ .Реквизит("Ссылка").ВСписке(Контекст.МассивНоменклатуры)
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Где(Предикат)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлину(5)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("Ссылка").ВСписке(Контекст.МассивНоменклатуры))
+ ;
+
+КонецПроцедуры
+
+Процедура ЗапросСУсловиемНеВСписке() Экспорт
+
+ Контекст = ЮТест.КонтекстТеста();
+
+ Предикат = СЗ_Запрос.Предикат()
+ .Реквизит("Ссылка").НеВСписке(Контекст.МассивНоменклатуры)
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Где(Предикат)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("Ссылка").ВСписке(Контекст.МассивНоменклатурыНеВСписке))
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Соединения
+
+Процедура СоединениеПоИсточникуСтроке(ТипСоединения) Экспорт
+
+ ПредикатДляСоединения = СЗ_Запрос.Предикат()
+ .Реквизит("НоменклатураСоединение.Ссылка").Равно("Номенклатура.Родитель")
+ ;
+
+ Запрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Номенклатура.Ссылка,
+ |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка")
+ ;
+ Если ТипСоединения = "Левое" Тогда
+ Запрос
+ .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения)
+ ;
+ ИначеЕсли ТипСоединения = "Правое" Тогда
+ Запрос
+ .ПравоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения)
+ ;
+ Иначе // Если ТипСоединения = "Внутреннее" Тогда
+ Запрос
+ .ВнутреннееСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения)
+ ;
+ КонецЕсли;
+
+ ТаблицаЗначений = Запрос.ВТаблицуЗначений();
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("НоменклатураСоединениеСсылка")
+ ;
+
+КонецПроцедуры
+
+Процедура ЛевоеСоединениеПоИсточникуЗапросу() Экспорт
+
+ ЗапросДляСоединения = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Псевдоним("НоменклатураСоединение")
+ ;
+ ПредикатДляСоединения = СЗ_Запрос.Предикат()
+ .Реквизит("Ссылка").Равно("Родитель")
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Номенклатура.Ссылка,
+ |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка")
+ .ЛевоеСоединение(ЗапросДляСоединения, ПредикатДляСоединения)
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("НоменклатураСоединениеСсылка")
+ ;
+
+КонецПроцедуры
+
+Процедура ЛевоеСоединениеБезПредиката() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("РегистрСведений.ПримененияЕНВД")
+ .Выбрать("ПримененияЕНВД.Организация КАК Организация,
+ |ПримененияЕНВДСоединение.Склад КАК Склад")
+ .ЛевоеСоединение("РегистрСведений.ПримененияЕНВД КАК ПримененияЕНВДСоединение")
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Организация")
+ .ИмеетСвойство("Склад")
+ ;
+
+КонецПроцедуры
+
+Процедура ЛевоеСоединениеНесколькоУсловийВПредикате() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Номенклатура.Ссылка,
+ |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка")
+ .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", СЗ_Запрос.Предикат()
+ .Реквизит("НоменклатураСоединение.Ссылка").Равно("Номенклатура.Родитель")
+ .Реквизит("НоменклатураСоединение.ЭтоГруппа").Равно("ИСТИНА"))
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("НоменклатураСоединениеСсылка")
+ ;
+
+КонецПроцедуры
+
+Процедура ЛевоеСоединениеПредикатЭтоПараметр() Экспорт
+
+ // Подготовка
+ МассивПараметров = Новый Массив;
+ МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение",
+ "Родитель", СЗ_ЗапросТестСлужебныйВызовСервера.ПолучитьГруппуНоменклатуры()));
+
+ // Выполнение
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Номенклатура.Ссылка,
+ |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка")
+ .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", СЗ_Запрос.Предикат()
+ .Реквизит("НоменклатураСоединение.Родитель").Равно("&Родитель"))
+ .Параметры(МассивПараметров)
+ .ВТаблицуЗначений()
+ ;
+
+ // Проверки
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("НоменклатураСоединениеСсылка")
+ ;
+
+КонецПроцедуры
+
+Процедура ЛевоеСоединениеБезПсевдонимовВСоединении() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Номенклатура.Ссылка, Номенклатура1.Ссылка")
+ .ЛевоеСоединение("Справочник.Номенклатура", СЗ_Запрос.Предикат()
+ .Реквизит("Ссылка").Равно("Родитель")
+ .Реквизит("ЭтоГруппа").Равно("ИСТИНА"))
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("Ссылка1")
+ ;
+
+КонецПроцедуры
+
+Процедура НесколькоЛевыхСоединений() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Номенклатура.Ссылка, Номенклатура1.Ссылка, Номенклатура2.Ссылка")
+ .ЛевоеСоединение("Справочник.Номенклатура", СЗ_Запрос.Предикат()
+ .Реквизит("Ссылка").Равно("Родитель")
+ .Реквизит("ЭтоГруппа").Равно("ИСТИНА"))
+ .ЛевоеСоединение("Справочник.Номенклатура", СЗ_Запрос.Предикат()
+ .Реквизит("Ссылка").Равно("Родитель")
+ .Реквизит("ЭтоГруппа").Равно("ИСТИНА"))
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество())
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений[0])
+ .ИмеетСвойство("Ссылка")
+ .ИмеетСвойство("Ссылка1")
+ .ИмеетСвойство("Ссылка2")
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область ВложенныеЗапросы
+
+Процедура ИсключениеВложенныйЗапросБезПсевдонима() Экспорт
+
+ ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура");
+
+ Запрос = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос);
+
+ ЮТест.ОжидаетЧто(Запрос)
+ .Метод("ВТаблицуЗначений")
+ .ВыбрасываетИсключение("У вложенного запроса обязательно должен быть псевдоним");
+
+КонецПроцедуры
+
+Процедура ВложенныйЗапрос() Экспорт
+
+ ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Псевдоним("ВложенныйЗапрос")
+ ;
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос)
+ .ВТаблицуЗначений()
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область Прочее
+
+Процедура Порядок() Экспорт
+
+ // Выполнение
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, ЭтоГруппа")
+ .Упорядочить("ЭтоГруппа, Наименование")
+ .ВТаблицуЗначений()
+ ;
+
+ // Проверки
+ СпсисокЭлементов = Новый СписокЗначений;
+ Сч = 0;
+ Для каждого СтрокаТаблицы Из ТаблицаЗначений Цикл
+ Если Не СтрокаТаблицы.ЭтоГруппа Тогда
+ СпсисокЭлементов.Добавить(Сч);
+ Иначе
+ Прервать;
+ КонецЕсли;
+ Сч = Сч + 1;
+ КонецЦикла;
+ СпсисокЭлементов.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
+ Для каждого СтрокаТаблицыЭлементы Из СпсисокЭлементов Цикл
+ ТаблицаЗначений.Удалить(СтрокаТаблицыЭлементы.Значение);
+ КонецЦикла;
+
+ ЮТест.ОжидаетЧто(СпсисокЭлементов.Количество(), "Количество элементов")
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0, "Количество групп")
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("ЭтоГруппа").Равно(Истина))
+ ;
+
+КонецПроцедуры
+
+Процедура ПорядокУбывания() Экспорт
+
+ // Выполнение
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Выбрать("Ссылка, ЭтоГруппа")
+ .Упорядочить("ЭтоГруппа УБЫВ, Наименование")
+ .ВТаблицуЗначений()
+ ;
+
+ // Проверки
+ СпсисокГрупп = Новый СписокЗначений;
+ Сч = 0;
+ Для каждого СтрокаТаблицы Из ТаблицаЗначений Цикл
+ Если СтрокаТаблицы.ЭтоГруппа Тогда
+ СпсисокГрупп.Добавить(Сч);
+ Иначе
+ Прервать;
+ КонецЕсли;
+ Сч = Сч + 1;
+ КонецЦикла;
+ СпсисокГрупп.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
+ Для каждого СтрокаТаблицыГруппы Из СпсисокГрупп Цикл
+ ТаблицаЗначений.Удалить(СтрокаТаблицыГруппы.Значение);
+ КонецЦикла;
+
+ ЮТест.ОжидаетЧто(СпсисокГрупп.Количество(), "Количество групп")
+ .Больше(0)
+ ;
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0, "Количество элементов")
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("ЭтоГруппа").Равно(Ложь))
+ ;
+
+КонецПроцедуры
+
+Процедура Итоги() Экспорт
+
+ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура")
+ .Итоги("ЭтоГруппа")
+ .ВТаблицуЗначений()
+ ;
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .ИмеетТип("Массив")
+ .ИмеетДлинуБольше(0)
+ .ЛюбойЭлементСодержитСвойство("ссылка", Null)
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область РеальныеЗапросы
+
+Процедура АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений() Экспорт
+
+ // Подготовка
+ НаименованияАдресныхОбъектов = Новый Массив;
+ НаименованияАдресныхОбъектов.Добавить("Абонентский Ящик");
+
+ // Выполнение
+ Запрос = СЗ_Запрос.НовыйЗапрос("РегистрСведений.УровниСокращенийАдресныхСведений")
+ .Выбрать("Значение КАК Наименование, Сокращение")
+ .Сгруппировать("Значение, Сокращение")
+ .Упорядочить("Наименование");
+
+ Если ТипЗнч(НаименованияАдресныхОбъектов) = Тип("Массив") И НаименованияАдресныхОбъектов.Количество() > 0 Тогда
+ Запрос = Запрос
+ .Где(СЗ_Запрос.Предикат()
+ .Реквизит("Значение").ВСписке(НаименованияАдресныхОбъектов));
+ КонецЕсли;
+
+ Результат = Запрос.ВТаблицуЗначений();
+
+ // Проверки
+ ЮТест.ОжидаетЧто(Результат)
+ .ИмеетТип("Массив")
+ ;
+ ЮТест.ОжидаетЧто(Результат.Количество())
+ .Равно(1)
+ ;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ПодготовитьСписокНоменклатуры()
+
+ ВидНоменклатуры = ЮТест.Данные().КонструкторОбъекта("Справочники.ВидыНоменклатуры")
+ .Фикция("Наименование")
+ .Установить("ТипНоменклатуры", ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"))
+ .Записать()
+ ;
+
+ Массив = Новый Массив;
+
+ Для Сч = 1 По 5 Цикл
+
+ Номенклатура = ЮТест.Данные().КонструкторОбъекта("Справочники.Номенклатура")
+ .Фикция("Наименование")
+ .Установить("ВидНоменклатуры", ВидНоменклатуры)
+ .Установить("ТипНоменклатуры", ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"))
+ .Установить("ИспользованиеХарактеристик",
+ ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать"))
+ .Записать()
+ ;
+
+ Массив.Добавить(Номенклатура);
+
+ КонецЦикла;
+
+ Контекст = ЮТест.КонтекстТеста();
+ Контекст.Вставить("МассивНоменклатуры", Массив);
+
+КонецПроцедуры
+
+#КонецОбласти
diff --git a/src/cfe/CommonModules/СЗ_ЗапросТестСлужебныйВызовСервера.xml b/src/cfe/CommonModules/СЗ_ЗапросТестСлужебныйВызовСервера.xml
new file mode 100644
index 0000000..b3c2baf
--- /dev/null
+++ b/src/cfe/CommonModules/СЗ_ЗапросТестСлужебныйВызовСервера.xml
@@ -0,0 +1,23 @@
+
+
+
+
+ СЗ_ЗапросТестСлужебныйВызовСервера
+
+
+ ru
+ Схема запроса: запрос тест служебный вызов сервера
+
+
+
+ false
+ false
+ true
+ false
+ false
+ true
+ false
+ DontUse
+
+
+
\ No newline at end of file
diff --git a/src/cfe/CommonModules/СЗ_ЗапросТестСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ЗапросТестСлужебныйВызовСервера/Ext/Module.bsl
new file mode 100644
index 0000000..d4bd3bb
--- /dev/null
+++ b/src/cfe/CommonModules/СЗ_ЗапросТестСлужебныйВызовСервера/Ext/Module.bsl
@@ -0,0 +1,49 @@
+
+Функция ПолучитьГруппуНоменклатуры() Экспорт
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
+ | Номенклатура.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.Номенклатура КАК Номенклатура
+ |ГДЕ
+ | Номенклатура.ЭтоГруппа";
+
+ Выборка = Запрос.Выполнить().Выбрать();
+ Выборка.Следующий();
+
+ Возврат Выборка.Ссылка;
+
+КонецФункции
+
+Функция ПолучитьНоменклатуруНеСписке(МассивНоменклатуры) Экспорт
+
+ Запрос = Новый Запрос;
+ Запрос.Текст = "ВЫБРАТЬ
+ | Номенклатура.Ссылка КАК Ссылка
+ |ИЗ
+ | Справочник.Номенклатура КАК Номенклатура
+ |ГДЕ
+ | Номенклатура.Ссылка НЕ В (&МассивНоменклатуры)";
+
+ Запрос.УстановитьПараметр("МассивНоменклатуры", МассивНоменклатуры);
+
+ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
+
+КонецФункции
+
+Процедура ПроверитьПодобноПоРегулярномуВыражению(ТаблицаЗначений) Экспорт
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("Наименование").СодержитСтрокуПоШаблону("(Х|х)леб"))
+
+КонецПроцедуры
+
+Процедура ПроверитьНеПодобноПоРегулярномуВыражению(ТаблицаЗначений) Экспорт
+
+ ЮТест.ОжидаетЧто(ТаблицаЗначений)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .Реквизит("Наименование").НеСодержитСтрокуПоШаблону("(Х|х)леб"))
+
+КонецПроцедуры
diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl
index b0936aa..d544971 100644
--- a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl
+++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl
@@ -185,8 +185,15 @@
Если СтруктураСхемыЗапроса.Свойство("Соединения") И ТипЗнч(СтруктураСхемыЗапроса.Соединения) = Тип("Массив") Тогда
Для каждого СтруктураСоединения Из СтруктураСхемыЗапроса.Соединения Цикл
- ИсточникСоединения = Оператор.Источники.Добавить(СтруктураСоединения.ИсточникДанных,
- СтруктураСоединения.Псевдоним);
+ Если ТипЗнч(СтруктураСоединения.ИсточникДанных) = Тип("Строка") Тогда
+ ИсточникСоединения = Оператор.Источники.Добавить(СтруктураСоединения.ИсточникДанных,
+ СтруктураСоединения.Псевдоним);
+ Иначе
+ ВложенныйЗапрос = ПолучитьЗапрос(СтруктураСоединения.ИсточникДанных);
+ ИсточникСоединения = Оператор.Источники.Добавить(Тип("ВложенныйЗапросСхемыЗапроса"),
+ СтруктураСоединения.Псевдоним);
+ ИсточникСоединения.Источник.Запрос.УстановитьТекстЗапроса(ВложенныйЗапрос);
+ КонецЕсли;
Если Оператор.Источники[0].Соединения.Количество() = 0 Тогда
Оператор.Источники[0].Соединения.Добавить(ИсточникСоединения);
КонецЕсли;
diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера/Ext/Module.bsl
index 57858fb..2eadc1f 100644
--- a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера/Ext/Module.bsl
+++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера/Ext/Module.bsl
@@ -1 +1,53 @@
-// TODO:
\ No newline at end of file
+
+#Область ПрограммныйИнтерфейс
+
+Функция ПолучитьТаблицуЗначений(СтруктураСхемыЗапроса) Экспорт
+ ТаблицаЗначений = СЗ_ПроцессорыСхемЗапросаСлужебный
+ .ПолучитьРезультатЗапроса(СтруктураСхемыЗапроса)
+ .Выгрузить();
+ Возврат ПреобразоватьТаблицуЗначенийВМассивСтруктур(ТаблицаЗначений);
+КонецФункции
+
+Функция ПолучитьМассив(СтруктураСхемыЗапроса, ИмяКолонки) Экспорт
+ Возврат СЗ_ПроцессорыСхемЗапросаСлужебный
+ .ПолучитьРезультатЗапроса(СтруктураСхемыЗапроса)
+ .Выгрузить()
+ .ВыгрузитьКолонку(ИмяКолонки);
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ПреобразоватьТаблицуЗначенийВМассивСтруктур(ТаблицаЗначений)
+
+ Массив = Новый Массив();
+
+ СтруктураСтрокой = "";
+ НужнаЗапятая = Ложь;
+
+ ОписаниеТаблицыЗначений = Новый ОписаниеТипов("ТаблицаЗначений");
+ Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
+ Если Колонка.ТипЗначения = ОписаниеТаблицыЗначений Тогда
+ Продолжить;
+ КонецЕсли;
+ Если НужнаЗапятая Тогда
+ СтруктураСтрокой = СтруктураСтрокой + ",";
+ КонецЕсли;
+
+ СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
+ НужнаЗапятая = Истина;
+ КонецЦикла;
+
+ Для Каждого Строка Из ТаблицаЗначений Цикл
+ НоваяСтрока = Новый Структура(СтруктураСтрокой);
+ ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
+
+ Массив.Добавить(НоваяСтрока);
+ КонецЦикла;
+
+ Возврат Массив;
+
+КонецФункции
+
+#КонецОбласти
diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl
index 81f4301..8c1a61a 100644
--- a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl
+++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl
@@ -85,29 +85,31 @@
Процедура ДобавитьСоединение(СхемаЗапроса, ТипСоединения, ИсточникДанных, Предикат) Экспорт
+ МассивСоединений = Новый Массив;
+ Если СхемаЗапроса.Свойство("Соединения") И ТипЗнч(СхемаЗапроса.Поля) = Тип("Массив") Тогда
+ МассивСоединений = СхемаЗапроса.Соединения;
+ КонецЕсли;
+
Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда
-
- МассивСоединений = Новый Массив;
- Если СхемаЗапроса.Свойство("Соединения") И ТипЗнч(СхемаЗапроса.Поля) = Тип("Массив") Тогда
- МассивСоединений = СхемаЗапроса.Соединения;
- КонецЕсли;
-
Псевдоним = "";
Если СтрНайти(ИсточникДанных, " КАК ") > 0 Тогда
ИнформацияОбИсточникеДанных = СтрЗаменить(ИсточникДанных, " КАК ", Символы.ПС);
ИсточникДанных = СтрПолучитьСтроку(ИнформацияОбИсточникеДанных, 1);
Псевдоним = СтрПолучитьСтроку(ИнформацияОбИсточникеДанных, 2);
КонецЕсли;
-
- МассивСоединений.Добавить(Новый Структура("ТипСоединения, ИсточникДанных, Псевдоним, Условие",
- ТипСоединения, ИсточникДанных, Псевдоним, ПолучитьУсловияСоединения(Предикат)));
- СхемаЗапроса.Вставить("Соединения", МассивСоединений);
-
- Иначе // Структура = вложенный запрос
-
- ВызватьИсключение "Не реализовано!";
-
+ Иначе // Вложенный запрос
+ Если Не ИсточникДанных.Свойство("ПсевдонимИсточника") Или
+ ПустаяСтрока(ИсточникДанных.ПсевдонимИсточника) Тогда
+
+ ВызватьИсключение "ДобавитьСоединение: у вложенного запроса обязательно должен быть псевдоним";
+ КонецЕсли;
+
+ Псевдоним = ИсточникДанных.ПсевдонимИсточника;
КонецЕсли;
+
+ МассивСоединений.Добавить(Новый Структура("ТипСоединения, ИсточникДанных, Псевдоним, Условие",
+ ТипСоединения, ИсточникДанных, Псевдоним, ПолучитьУсловияСоединения(Предикат)));
+ СхемаЗапроса.Вставить("Соединения", МассивСоединений);
КонецПроцедуры
diff --git a/src/cfe/ConfigDumpInfo.xml b/src/cfe/ConfigDumpInfo.xml
index 83555dd..f873b8a 100644
--- a/src/cfe/ConfigDumpInfo.xml
+++ b/src/cfe/ConfigDumpInfo.xml
@@ -4,7 +4,11 @@
-
+
+
+
+
+
@@ -12,23 +16,25 @@
-
+
-
+
-
+
-
+
-
+
+
+
-
-
+
+
diff --git a/src/cfe/Configuration.xml b/src/cfe/Configuration.xml
index 11018fb..65de6be 100644
--- a/src/cfe/Configuration.xml
+++ b/src/cfe/Configuration.xml
@@ -63,6 +63,8 @@
СЗ_Логотип
СЗ_Запрос
СЗ_ЗапросТест
+ СЗ_ЗапросТестКлиент
+ СЗ_ЗапросТестСлужебныйВызовСервера
СЗ_ПроцессорыПредикатовКлиентСервер
СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер
СЗ_ПроцессорыСхемЗапросаКлиентСервер
diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов.xml b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов.xml
index c5a82fa..6832f8b 100644
--- a/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов.xml
+++ b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов.xml
@@ -21,12 +21,14 @@
true
-
+ DataProcessor.СЗ_ПроцессорПредикатов.Form.Форма
false
-
+
+
+
\ No newline at end of file
diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма.xml b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма.xml
new file mode 100644
index 0000000..3f71100
--- /dev/null
+++ b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма.xml
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма/Ext/Form.xml b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма/Ext/Form.xml
new file mode 100644
index 0000000..6810b55
--- /dev/null
+++ b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма/Ext/Form.xml
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма/Ext/Form/Module.bsl b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма/Ext/Form/Module.bsl
new file mode 100644
index 0000000..b3916a1
--- /dev/null
+++ b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Forms/Форма/Ext/Form/Module.bsl
@@ -0,0 +1,93 @@
+#Область ОписаниеПеременных
+
+&НаКлиенте
+Перем Предикат;
+
+#КонецОбласти
+
+#Область ПрограммныйИнтерфейс
+
+&НаКлиенте
+Функция Реквизит(ИмяРеквизита) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьИмяРеквизита(Предикат, ИмяРеквизита);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция Равно(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Равно, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция НеРавно(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().НеРавно, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция Больше(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Больше, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция Меньше(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Меньше, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция ВСписке(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().ВСписке, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция НеВСписке(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().НеВСписке, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция Подобно(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Подобно, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция НеПодобно(Значение) Экспорт
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().НеПодобно, Значение);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+&НаКлиенте
+Функция Между(НачалоИнтервала, ОкончаниеИнтервала) Экспорт
+
+ Значения = Новый Массив;
+ Значения.Добавить(НачалоИнтервала);
+ Значения.Добавить(ОкончаниеИнтервала);
+
+ СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат,
+ СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Между, Значения);
+
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+&НаКлиенте
+Функция Получить() Экспорт
+
+ Возврат Предикат;
+
+КонецФункции
+
+#КонецОбласти
diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl
index 7582da9..41f3044 100644
--- a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl
+++ b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl
@@ -104,26 +104,21 @@
//
//
Функция ЛевоеСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт
+ СоздатьСоединение("Левое", ИсточникДанных, Предикат);
+ Возврат ЭтотОбъект;
+КонецФункции
- // TODO: ИсточникДанных может быть структурой? Что делать в этом случае?
- Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда
- _ИсточникДанных = ИсточникДанных;
- ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда
- _ИсточникДанных = ИсточникДанных.Получить();
- Иначе
- ВызватьИсключение "ЛевоеСоединение: неверный тип источника данных";
- КонецЕсли;
-
- Если ТипЗнч(Предикат) = Тип("Структура") Или Предикат = Неопределено Тогда
- _Предикат = Предикат;
- ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда
- _Предикат = Предикат.Получить();
- Иначе
- ВызватьИсключение "ЛевоеСоединение: неверный тип предиката";
- КонецЕсли;
+//
+//
+Функция ПравоеСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт
+ СоздатьСоединение("Правое", ИсточникДанных, Предикат);
+ Возврат ЭтотОбъект;
+КонецФункции
- СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.ДобавитьСоединение(
- СхемаЗапроса, "Левое", _ИсточникДанных, _Предикат);
+//
+//
+Функция ВнутреннееСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт
+ СоздатьСоединение("Внутреннее", ИсточникДанных, Предикат);
Возврат ЭтотОбъект;
КонецФункции
@@ -170,6 +165,28 @@
#Область СлужебныеПроцедурыИФункции
+Процедура СоздатьСоединение(ТипСоединения, ИсточникДанных, Предикат)
+
+ // TODO: ИсточникДанных может быть структурой? Что делать в этом случае?
+ Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда
+ _ИсточникДанных = ИсточникДанных;
+ ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда
+ _ИсточникДанных = ИсточникДанных.Получить();
+ Иначе
+ ВызватьИсключение "ЛевоеСоединение: неверный тип источника данных";
+ КонецЕсли;
+
+ Если ТипЗнч(Предикат) = Тип("Структура") Или Предикат = Неопределено Тогда
+ _Предикат = Предикат;
+ ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда
+ _Предикат = Предикат.Получить();
+ Иначе
+ ВызватьИсключение "ЛевоеСоединение: неверный тип предиката";
+ КонецЕсли;
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.ДобавитьСоединение(
+ СхемаЗапроса, ТипСоединения, _ИсточникДанных, _Предикат);
+
+КонецПроцедуры
#КонецОбласти
diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl
index 614c888..9fb254e 100644
--- a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl
+++ b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl
@@ -9,39 +9,56 @@
&НаКлиенте
Процедура УстановитьИсточникДанных(ИсточникДанных, Первые = -1, Различные = Ложь, Разрешенные = Ложь) Экспорт
+
+ _ИсточникДанных = ИсточникДанных;
+ Если ТипЗнч(ИсточникДанных) = Тип("ФормаКлиентскогоПриложения") Тогда
+ _ИсточникДанных = ИсточникДанных.Получить();
+ КонецЕсли;
+
СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьИсточникДанных(СхемаЗапроса,
- ИсточникДанных, Первые, Различные, Разрешенные);
+ _ИсточникДанных, Первые, Различные, Разрешенные);
+
КонецПроцедуры
+&НаКлиенте
+Функция Псевдоним(ИмяПсевдонима) Экспорт
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер
+ .УстановитьПсевдонимИсточника(СхемаЗапроса, ИмяПсевдонима);
+ Возврат ЭтотОбъект;
+КонецФункции
+
&НаКлиенте
Функция ВТаблицуЗначений() Экспорт
ТаблицаЗначений = СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера
- .ПолучитьРезультатЗапроса(СхемаЗапроса).Выгрузить();
+ .ПолучитьТаблицуЗначений(СхемаЗапроса);
Возврат ТаблицаЗначений;
КонецФункции
&НаКлиенте
Функция ВМассив(ИмяКолонки) Экспорт
- ТаблицаЗначений = СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера
- .ПолучитьРезультатЗапроса(СхемаЗапроса).Выгрузить();
- Возврат ТаблицаЗначений.ВыгрузитьКолонку(ИмяКолонки);
+ Массив = СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера
+ .ПолучитьМассив(СхемаЗапроса, ИмяКолонки);
+ Возврат Массив;
КонецФункции
&НаКлиенте
Функция Первые(Количество) Экспорт
- // TODO:
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер
+ .УстановитьПервые(СхемаЗапроса, Количество);
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
Функция Различные() Экспорт
- // TODO:
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер
+ .УстановитьРазличные(СхемаЗапроса);
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
Функция Разрешенные() Экспорт
- // TODO:
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер
+ .УстановитьРазрешенные(СхемаЗапроса);
Возврат ЭтотОбъект;
КонецФункции
@@ -64,7 +81,7 @@
Если ТипЗнч(Предикат) = Тип("Структура") Тогда
_Предикат = Предикат;
- ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда
+ ИначеЕсли ТипЗнч(Предикат) = Тип("ФормаКлиентскогоПриложения") Тогда
_Предикат = Предикат.Получить();
Иначе
ВызватьИсключение "Неверный тип предиката в методе ""Где""";
@@ -76,44 +93,40 @@
&НаКлиенте
Функция ЛевоеСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт
+ СоздатьСоединение("Левое", ИсточникДанных, Предикат);
+ Возврат ЭтотОбъект;
+КонецФункции
- // TODO: ИсточникДанных может быть структурой? Что делать в этом случае?
- Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда
- _ИсточникДанных = ИсточникДанных;
- ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда
- _ИсточникДанных = ИсточникДанных.Получить();
- Иначе
- ВызватьИсключение "ЛевоеСоединение: неверный тип источника данных";
- КонецЕсли;
-
- Если ТипЗнч(Предикат) = Тип("Структура") Или Предикат = Неопределено Тогда
- _Предикат = Предикат;
- ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда
- _Предикат = Предикат.Получить();
- Иначе
- ВызватьИсключение "ЛевоеСоединение: неверный тип предиката";
- КонецЕсли;
+&НаКлиенте
+Функция ПравоеСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт
+ СоздатьСоединение("Правое", ИсточникДанных, Предикат);
+ Возврат ЭтотОбъект;
+КонецФункции
- СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.ДобавитьСоединение(
- СхемаЗапроса, "Левое", ИсточникДанных, _Предикат);
+&НаКлиенте
+Функция ВнутреннееСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт
+ СоздатьСоединение("Внутреннее", ИсточникДанных, Предикат);
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
Функция Сгруппировать(Поля) Экспорт
- // TODO:
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер
+ .УстановитьГруппировку(СхемаЗапроса, Поля);
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
Функция Упорядочить(Поля) Экспорт
- // TODO:
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер
+ .УстановитьПорядок(СхемаЗапроса, Поля);
Возврат ЭтотОбъект;
КонецФункции
&НаКлиенте
-Функция Итоги() Экспорт
- // TODO:
+Функция Итоги(Поля) Экспорт
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер
+ .УстановитьИтоги(СхемаЗапроса, Поля);
Возврат ЭтотОбъект;
КонецФункции
@@ -131,3 +144,32 @@
КонецФункции
#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+&НаКлиенте
+Процедура СоздатьСоединение(ТипСоединения, ИсточникДанных, Предикат)
+
+ // TODO: ИсточникДанных может быть структурой? Что делать в этом случае?
+ Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда
+ _ИсточникДанных = ИсточникДанных;
+ ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ФормаКлиентскогоПриложения") Тогда
+ _ИсточникДанных = ИсточникДанных.Получить();
+ Иначе
+ ВызватьИсключение "ЛевоеСоединение: неверный тип источника данных";
+ КонецЕсли;
+
+ Если ТипЗнч(Предикат) = Тип("Структура") Или Предикат = Неопределено Тогда
+ _Предикат = Предикат;
+ ИначеЕсли ТипЗнч(Предикат) = Тип("ФормаКлиентскогоПриложения") Тогда
+ _Предикат = Предикат.Получить();
+ Иначе
+ ВызватьИсключение "ЛевоеСоединение: неверный тип предиката";
+ КонецЕсли;
+
+ СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.ДобавитьСоединение(
+ СхемаЗапроса, ТипСоединения, _ИсточникДанных, _Предикат);
+
+КонецПроцедуры
+
+#КонецОбласти