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 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ 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 @@ + +
+ + + + + cfg:DataProcessorObject.СЗ_ПроцессорПредикатов + + true + + + \ 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: ИсточникДанных может быть структурой? Что делать в этом случае? + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ФормаКлиентскогоПриложения") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "ЛевоеСоединение: неверный тип источника данных"; + КонецЕсли; + + Если ТипЗнч(Предикат) = Тип("Структура") Или Предикат = Неопределено Тогда + _Предикат = Предикат; + ИначеЕсли ТипЗнч(Предикат) = Тип("ФормаКлиентскогоПриложения") Тогда + _Предикат = Предикат.Получить(); + Иначе + ВызватьИсключение "ЛевоеСоединение: неверный тип предиката"; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.ДобавитьСоединение( + СхемаЗапроса, ТипСоединения, _ИсточникДанных, _Предикат); + +КонецПроцедуры + +#КонецОбласти