diff --git a/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl index a01ff38..8b2c774 100644 --- a/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl +++ b/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl @@ -35,6 +35,7 @@ .СПараметрами("Правое") .СПараметрами("Внутреннее") .ДобавитьТест("ЛевоеСоединениеПоИсточникуЗапросу") + .ДобавитьТест("ЛевоеСоединениеСГлубокоВложеннымЗапросом") .ДобавитьТест("ЛевоеСоединениеБезПредиката") .ДобавитьТест("ЛевоеСоединениеНесколькоУсловийВПредикате") .ДобавитьТест("ЛевоеСоединениеПредикатЭтоПараметр") @@ -43,6 +44,14 @@ .ДобавитьТестовыйНабор("СЗ: Вложенный запрос") .ДобавитьТест("ИсключениеВложенныйЗапросБезПсевдонима") .ДобавитьТест("ВложенныйЗапрос") + .ДобавитьТест("ОченьГлубокоВложенныйЗапрос") + .ДобавитьТестовыйНабор("СЗ: Объединить") + .ДобавитьТест("Объединить") + .ДобавитьТест("ОбъединитьВсе") + .ДобавитьТест("ОбъединитьВсеНаЧетыреИсточника") + .ДобавитьТест("ОбъединитьВсеСПолями") + .ДобавитьТест("ОбъединитьВсеСРазнымКоличествомПолей") + .ДобавитьТест("ОбъединитьВсеСВложеннымЗапросом") .ДобавитьТестовыйНабор("СЗ: Прочее") .ДобавитьТест("Порядок") .ДобавитьТест("ПорядокУбывания") @@ -116,7 +125,7 @@ ЮТест.ОжидаетЧто(Обработка) .Метод("ВТаблицуЗначений") - .ВыбрасываетИсключение("Источник данных запроса не определен"); + .ВыбрасываетИсключение("ПолучитьТекстЗапроса: источник данных запроса не определен"); КонецПроцедуры @@ -126,7 +135,7 @@ ЮТест.ОжидаетЧто(Запрос) .Метод("ВТаблицуЗначений") - .ВыбрасываетИсключение("Источник данных запроса не определен"); + .ВыбрасываетИсключение("ПолучитьТекстЗапроса: источник данных запроса не определен"); КонецПроцедуры @@ -577,6 +586,42 @@ КонецПроцедуры +Процедура ЛевоеСоединениеСГлубокоВложеннымЗапросом() Экспорт + + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Ссылка, Родитель") + .Псевдоним("ВложенныйЗапрос_0") + ; + + Для Сч = 1 По 9 Цикл + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .Выбрать("Ссылка, Родитель") + .Псевдоним("ВложенныйЗапрос_" + Сч) + ; + КонецЦикла; + + ПредикатДляСоединения = СЗ_Запрос.Предикат() + .Реквизит("Ссылка").Равно("Родитель") + ; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, + |ВложенныйЗапрос_9.Ссылка КАК ВложенныйЗапрос_9Ссылка") + .ЛевоеСоединение(ВложенныйЗапрос, ПредикатДляСоединения) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").Заполнено()) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("ВложенныйЗапрос_9Ссылка").Заполнено()) + ; + +КонецПроцедуры + Процедура ЛевоеСоединениеБезПредиката() Экспорт ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("РегистрСведений.ПримененияЕНВД") @@ -740,6 +785,174 @@ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) .ВТаблицуЗначений() ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + ; + +КонецПроцедуры + +Процедура ОченьГлубокоВложенныйЗапрос() Экспорт + + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Псевдоним("ВложенныйЗапрос_0") + ; + + Для Сч = 1 По 9 Цикл + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .Псевдоним("ВложенныйЗапрос_" + Сч) + ; + КонецЦикла; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + ; + +КонецПроцедуры + +#КонецОбласти + +#Область Объединить + +Процедура Объединить() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Объединить("Документ.РеализацияТоваровУслуг") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсе() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .ОбъединитьВсе("Документ.РеализацияТоваровУслуг") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеНаЧетыреИсточника() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .ОбъединитьВсе("Документ.РеализацияТоваровУслуг") + .ОбъединитьВсе("Документ.ВозвратТоваровОтКлиента") + .ОбъединитьВсе("Документ.ВозвратТоваровПоставщику") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ВозвратТоваровОтКлиента")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ВозвратТоваровПоставщику")) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеСПолями() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер") + .ОбъединитьВсе(СЗ_Запрос.НовыйЗапрос("Документ.РеализацияТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Дата").Заполнено() + .Реквизит("Номер").Заполнено()) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеСРазнымКоличествомПолей() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер") + .ОбъединитьВсе(СЗ_Запрос.НовыйЗапрос("Документ.РеализацияТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер, Партнер")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг") + .Реквизит("Партнер").Пусто()) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг") + .Реквизит("Партнер").Заполнено()) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Дата").Заполнено() + .Реквизит("Номер").Заполнено()) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеСВложеннымЗапросом() Экспорт + + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Документ.РеализацияТоваровУслуг") + .Псевдоним("ВложенныйЗапрос") + .Выбрать("Ссылка, Дата, Номер, Партнер") + ; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер") + .ОбъединитьВсе(СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .Выбрать("Ссылка, Дата, Номер")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Дата").Заполнено() + .Реквизит("Номер").Заполнено()) + ; КонецПроцедуры @@ -822,10 +1035,11 @@ .ВТаблицуЗначений() ; + // TODO: Проверки теста сработал некорректно? ЮТест.ОжидаетЧто(ТаблицаЗначений) .ИмеетТип("ТаблицаЗначений") .ИмеетДлинуБольше(0) - .ЛюбойЭлементСодержитСвойство("ссылка", Null) + .ЛюбойЭлементСодержитСвойство("Ссылка", Null) ; КонецПроцедуры diff --git a/src/cfe/CommonModules/СЗ_ЗапросТестКлиент/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ЗапросТестКлиент/Ext/Module.bsl index d0608c2..4153970 100644 --- a/src/cfe/CommonModules/СЗ_ЗапросТестКлиент/Ext/Module.bsl +++ b/src/cfe/CommonModules/СЗ_ЗапросТестКлиент/Ext/Module.bsl @@ -35,6 +35,7 @@ .СПараметрами("Правое") .СПараметрами("Внутреннее") .ДобавитьТест("ЛевоеСоединениеПоИсточникуЗапросу") + .ДобавитьТест("ЛевоеСоединениеСГлубокоВложеннымЗапросом") .ДобавитьТест("ЛевоеСоединениеБезПредиката") .ДобавитьТест("ЛевоеСоединениеНесколькоУсловийВПредикате") .ДобавитьТест("ЛевоеСоединениеПредикатЭтоПараметр") @@ -43,6 +44,14 @@ .ДобавитьТестовыйНабор("СЗ: Вложенный запрос") .ДобавитьТест("ИсключениеВложенныйЗапросБезПсевдонима") .ДобавитьТест("ВложенныйЗапрос") + .ДобавитьТест("ОченьГлубокоВложенныйЗапрос") + .ДобавитьТестовыйНабор("СЗ: Объединить") + .ДобавитьТест("Объединить") + .ДобавитьТест("ОбъединитьВсе") + .ДобавитьТест("ОбъединитьВсеНаЧетыреИсточника") + .ДобавитьТест("ОбъединитьВсеСПолями") + .ДобавитьТест("ОбъединитьВсеСРазнымКоличествомПолей") + .ДобавитьТест("ОбъединитьВсеСВложеннымЗапросом") .ДобавитьТестовыйНабор("СЗ: Прочее") .ДобавитьТест("Порядок") .ДобавитьТест("ПорядокУбывания") @@ -107,7 +116,7 @@ ЮТест.ОжидаетЧто(Обработка) .Метод("ВТаблицуЗначений") - .ВыбрасываетИсключение("Источник данных запроса не определен"); + .ВыбрасываетИсключение("ПолучитьТекстЗапроса: источник данных запроса не определен"); КонецПроцедуры @@ -117,7 +126,7 @@ ЮТест.ОжидаетЧто(Запрос) .Метод("ВТаблицуЗначений") - .ВыбрасываетИсключение("Источник данных запроса не определен"); + .ВыбрасываетИсключение("ПолучитьТекстЗапроса: источник данных запроса не определен"); КонецПроцедуры @@ -568,6 +577,42 @@ КонецПроцедуры +Процедура ЛевоеСоединениеСГлубокоВложеннымЗапросом() Экспорт + + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Ссылка, Родитель") + .Псевдоним("ВложенныйЗапрос_0") + ; + + Для Сч = 1 По 9 Цикл + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .Выбрать("Ссылка, Родитель") + .Псевдоним("ВложенныйЗапрос_" + Сч) + ; + КонецЦикла; + + ПредикатДляСоединения = СЗ_Запрос.Предикат() + .Реквизит("Ссылка").Равно("Родитель") + ; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, + |ВложенныйЗапрос_9.Ссылка КАК ВложенныйЗапрос_9Ссылка") + .ЛевоеСоединение(ВложенныйЗапрос, ПредикатДляСоединения) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").Заполнено()) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("ВложенныйЗапрос_9Ссылка").Заполнено()) + ; + +КонецПроцедуры + Процедура ЛевоеСоединениеБезПредиката() Экспорт ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("РегистрСведений.ПримененияЕНВД") @@ -720,6 +765,174 @@ ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) .ВТаблицуЗначений() ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + ; + +КонецПроцедуры + +Процедура ОченьГлубокоВложенныйЗапрос() Экспорт + + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Псевдоним("ВложенныйЗапрос_0") + ; + + Для Сч = 1 По 9 Цикл + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .Псевдоним("ВложенныйЗапрос_" + Сч) + ; + КонецЦикла; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + ; + +КонецПроцедуры + +#КонецОбласти + +#Область Объединить + +Процедура Объединить() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Объединить("Документ.РеализацияТоваровУслуг") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсе() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .ОбъединитьВсе("Документ.РеализацияТоваровУслуг") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеНаЧетыреИсточника() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .ОбъединитьВсе("Документ.РеализацияТоваровУслуг") + .ОбъединитьВсе("Документ.ВозвратТоваровОтКлиента") + .ОбъединитьВсе("Документ.ВозвратТоваровПоставщику") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ВозвратТоваровОтКлиента")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ВозвратТоваровПоставщику")) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеСПолями() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер") + .ОбъединитьВсе(СЗ_Запрос.НовыйЗапрос("Документ.РеализацияТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Дата").Заполнено() + .Реквизит("Номер").Заполнено()) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеСРазнымКоличествомПолей() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер") + .ОбъединитьВсе(СЗ_Запрос.НовыйЗапрос("Документ.РеализацияТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер, Партнер")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг") + .Реквизит("Партнер").Пусто()) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг") + .Реквизит("Партнер").Заполнено()) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Дата").Заполнено() + .Реквизит("Номер").Заполнено()) + ; + +КонецПроцедуры + +Процедура ОбъединитьВсеСВложеннымЗапросом() Экспорт + + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Документ.РеализацияТоваровУслуг") + .Псевдоним("ВложенныйЗапрос") + .Выбрать("Ссылка, Дата, Номер, Партнер") + ; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Документ.ПриобретениеТоваровУслуг") + .Выбрать("Ссылка, Дата, Номер") + .ОбъединитьВсе(СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .Выбрать("Ссылка, Дата, Номер")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("Массив") + .ИмеетДлинуБольше(0) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.ПриобретениеТоваровУслуг")) + .ЛюбойЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Ссылка").ИмеетТип("ДокументСсылка.РеализацияТоваровУслуг")) + .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат() + .Реквизит("Дата").Заполнено() + .Реквизит("Номер").Заполнено()) + ; КонецПроцедуры diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl index d544971..fc02b60 100644 --- a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl @@ -34,22 +34,16 @@ Не СтруктураСхемыЗапроса.Свойство("ИсточникДанных") Или ПустаяСтрока(СтруктураСхемыЗапроса.ИсточникДанных) Тогда - ВызватьИсключение "Источник данных запроса не определен"; + ВызватьИсключение "ПолучитьТекстЗапроса: источник данных запроса не определен"; КонецЕсли; СхемаЗапроса = Новый СхемаЗапроса; ЗапросПакета = ДобавитьПолучитьПакет(СхемаЗапроса, СтруктураСхемыЗапроса); - Оператор = ДобавитьПолучитьОператор(ЗапросПакета, СтруктураСхемыЗапроса); + Оператор = ДобавитьПолучитьОператор(ЗапросПакета, Запрос, СтруктураСхемыЗапроса); - // Соединения добавляются раньше всех чтобы к моменту добавления полей у нас - // уже были все возможные источники данных - ДобавитьСоединения(Оператор, СтруктураСхемыЗапроса); - ДобавитьПоля(ЗапросПакета, Оператор, СтруктураСхемыЗапроса); - ДобавитьУсловия(Оператор, Запрос, СтруктураСхемыЗапроса); - ДобавитьГруппировку(Оператор, СтруктураСхемыЗапроса); - ДобавитьПорядок(ЗапросПакета, СтруктураСхемыЗапроса); - ДобавитьИтоги(ЗапросПакета, СтруктураСхемыЗапроса); + ДобавитьДанныеЗапроса(ЗапросПакета, Оператор, Запрос, СтруктураСхемыЗапроса); + ДобавитьОбъединения(ЗапросПакета, Запрос, СтруктураСхемыЗапроса); ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса(); Возврат ТекстЗапроса; @@ -60,6 +54,19 @@ #Область СлужебныеПроцедурыИФункции +Процедура ДобавитьДанныеЗапроса(ЗапросПакета, Оператор, Запрос, СтруктураСхемыЗапроса, ЭтоПоляИзВложенногоЗапроса = Ложь) + + // Соединения добавляются раньше всех чтобы к моменту добавления полей у нас + // уже были все возможные источники данных + ДобавитьСоединения(Оператор, Запрос, СтруктураСхемыЗапроса); + ДобавитьПоля(ЗапросПакета, Оператор, СтруктураСхемыЗапроса, ЭтоПоляИзВложенногоЗапроса); + ДобавитьУсловия(Оператор, Запрос, СтруктураСхемыЗапроса); + ДобавитьГруппировку(Оператор, СтруктураСхемыЗапроса); + ДобавитьПорядок(ЗапросПакета, СтруктураСхемыЗапроса); + ДобавитьИтоги(ЗапросПакета, СтруктураСхемыЗапроса); + +КонецПроцедуры + Функция ДобавитьПолучитьПакет(СхемаЗапроса, СтруктураСхемыЗапроса) ПакетЗапросов = СхемаЗапроса.ПакетЗапросов; @@ -77,7 +84,7 @@ КонецФункции -Функция ДобавитьПолучитьОператор(ЗапросПакета, СтруктураСхемыЗапроса) +Функция ДобавитьПолучитьОператор(ЗапросПакета, Запрос, СтруктураСхемыЗапроса) Если ЗапросПакета.Операторы.Количество() = 1 Тогда Оператор = ЗапросПакета.Операторы[0]; @@ -99,19 +106,15 @@ Если ТипЗнч(СтруктураСхемыЗапроса.ИсточникДанных) = Тип("Строка") Тогда Оператор.Источники.Добавить(СтруктураСхемыЗапроса.ИсточникДанных); Иначе - Если ТипЗнч(СтруктураСхемыЗапроса.ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда - СтруктураСхемыВложенногоЗапроса = СтруктураСхемыЗапроса.ИсточникДанных.Получить(); - Иначе - СтруктураСхемыВложенногоЗапроса = СтруктураСхемыЗапроса.ИсточникДанных; - КонецЕсли; - - ВложенныйЗапрос = ПолучитьЗапрос(СтруктураСхемыВложенногоЗапроса); + СтруктураСхемыВложенногоЗапроса = СтруктураСхемыЗапроса.ИсточникДанных; Если Не СтруктураСхемыВложенногоЗапроса.Свойство("ПсевдонимИсточника") Или ПустаяСтрока(СтруктураСхемыВложенногоЗапроса.ПсевдонимИсточника) Тогда ВызватьИсключение "У вложенного запроса обязательно должен быть псевдоним"; КонецЕсли; + ВложенныйЗапрос = ПолучитьТекстЗапроса(СтруктураСхемыВложенногоЗапроса, Запрос); + ИсточникСхемыЗапроса = Оператор.Источники.Добавить(Тип("ВложенныйЗапросСхемыЗапроса"), СтруктураСхемыВложенногоЗапроса.ПсевдонимИсточника); ИсточникСхемыЗапроса.Источник.Запрос.УстановитьТекстЗапроса(ВложенныйЗапрос); @@ -121,7 +124,7 @@ КонецФункции -Процедура ДобавитьПоля(ЗапросПакета, Оператор, СтруктураСхемыЗапроса) +Процедура ДобавитьПоля(ЗапросПакета, Оператор, СтруктураСхемыЗапроса, ЭтоПоляИзВложенногоЗапроса = Ложь) Если СтруктураСхемыЗапроса.Свойство("Поля") И ТипЗнч(СтруктураСхемыЗапроса.Поля) = Тип("Массив") И @@ -137,7 +140,12 @@ Если Не ИсточникПоля = Неопределено Тогда ДоступноеПоле = ИсточникПоля.Источник.ДоступныеПоля.Найти(Поле.ИмяПоля); Если Не ДоступноеПоле = Неопределено Тогда - НовоеПоле = Оператор.ВыбираемыеПоля.Добавить(ДоступноеПоле); + Если Не ЭтоПоляИзВложенногоЗапроса Тогда + НовоеПоле = Оператор.ВыбираемыеПоля.Добавить(ДоступноеПоле); + Иначе + НовоеПоле = Оператор.ВыбираемыеПоля.Добавить(ДоступноеПоле, + ИсточникПоля.Источник.ДоступныеПоля.Индекс(ДоступноеПоле)); + КонецЕсли; Если Не Поле.Псевдоним = Неопределено Тогда ЗапросПакета.Колонки[ЗапросПакета.Колонки.Количество() - 1].Псевдоним = Поле.Псевдоним; КонецЕсли; @@ -181,7 +189,7 @@ КонецПроцедуры -Процедура ДобавитьСоединения(Оператор, СтруктураСхемыЗапроса) +Процедура ДобавитьСоединения(Оператор, Запрос, СтруктураСхемыЗапроса) Если СтруктураСхемыЗапроса.Свойство("Соединения") И ТипЗнч(СтруктураСхемыЗапроса.Соединения) = Тип("Массив") Тогда Для каждого СтруктураСоединения Из СтруктураСхемыЗапроса.Соединения Цикл @@ -189,7 +197,7 @@ ИсточникСоединения = Оператор.Источники.Добавить(СтруктураСоединения.ИсточникДанных, СтруктураСоединения.Псевдоним); Иначе - ВложенныйЗапрос = ПолучитьЗапрос(СтруктураСоединения.ИсточникДанных); + ВложенныйЗапрос = ПолучитьТекстЗапроса(СтруктураСоединения.ИсточникДанных, Запрос); ИсточникСоединения = Оператор.Источники.Добавить(Тип("ВложенныйЗапросСхемыЗапроса"), СтруктураСоединения.Псевдоним); ИсточникСоединения.Источник.Запрос.УстановитьТекстЗапроса(ВложенныйЗапрос); @@ -279,7 +287,52 @@ Процедура ДобавитьИтоги(ЗапросПакета, СтруктураСхемыЗапроса) - ТочкаОстанова = 1; + Если СтруктураСхемыЗапроса.Свойство("Итоги") И ТипЗнч(СтруктураСхемыЗапроса.Итоги) = Тип("Массив") Тогда + // TODO: + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьОбъединения(ЗапросПакета, Запрос, СтруктураСхемыЗапроса) + + Если СтруктураСхемыЗапроса.Свойство("Объединения") И ТипЗнч(СтруктураСхемыЗапроса.Объединения) = Тип("Массив") Тогда + Для каждого ЭлементОбъединения Из СтруктураСхемыЗапроса.Объединения Цикл + + Оператор = ЗапросПакета.Операторы.Добавить(); + Если ЭлементОбъединения.ТипОбъединения Тогда + Оператор.ТипОбъединения = ТипОбъединенияСхемыЗапроса.ОбъединитьВсе; + Иначе + Оператор.ТипОбъединения = ТипОбъединенияСхемыЗапроса.Объединить; + КонецЕсли; + Если ТипЗнч(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных) = Тип("Строка") Тогда + Оператор.Источники.Добавить(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных); + ДобавитьДанныеЗапроса(ЗапросПакета, Оператор, Запрос, + ЭлементОбъединения.СтруктураСхемыЗапроса); + ИначеЕсли ТипЗнч(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных.ИсточникДанных) = Тип("Строка") Тогда + Оператор.Источники.Добавить(ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных.ИсточникДанных); + ДобавитьДанныеЗапроса(ЗапросПакета, Оператор, Запрос, + ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных); + Иначе + + СтруктураСхемыВложенногоЗапроса = ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных.ИсточникДанных; + Если Не СтруктураСхемыВложенногоЗапроса.Свойство("ПсевдонимИсточника") Или + ПустаяСтрока(СтруктураСхемыВложенногоЗапроса.ПсевдонимИсточника) Тогда + + ВызватьИсключение "ДобавитьОбъединения: у вложенного запроса обязательно должен быть псевдоним"; + КонецЕсли; + + ВложенныйЗапрос = ПолучитьТекстЗапроса(СтруктураСхемыВложенногоЗапроса, Запрос); + + ИсточникСхемыЗапроса = Оператор.Источники.Добавить(Тип("ВложенныйЗапросСхемыЗапроса"), + СтруктураСхемыВложенногоЗапроса.ПсевдонимИсточника); + ИсточникСхемыЗапроса.Источник.Запрос.УстановитьТекстЗапроса(ВложенныйЗапрос); + ДобавитьДанныеЗапроса(ЗапросПакета, Оператор, Запрос, + ЭлементОбъединения.СтруктураСхемыЗапроса.ИсточникДанных, Истина); + + КонецЕсли; + + КонецЦикла; + КонецЕсли; КонецПроцедуры @@ -293,11 +346,4 @@ КонецПроцедуры -Функция ПолучитьЗапрос(СтруктураСхемыЗапроса) - - Запрос = Новый Запрос; - Возврат ПолучитьТекстЗапроса(СтруктураСхемыЗапроса, Запрос); - -КонецФункции - #КонецОбласти diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl index 8c1a61a..31e99fb 100644 --- a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl @@ -179,6 +179,38 @@ КонецПроцедуры +Процедура УстановитьОбъединение(СхемаЗапроса, ИсточникДанных) Экспорт + + МассивОбъединений = Новый Массив; + Если СхемаЗапроса.Свойство("Объединения") И ТипЗнч(СхемаЗапроса.Объединения) = Тип("Массив") Тогда + МассивОбъединений = СхемаЗапроса.Объединения; + КонецЕсли; + + СхемаЗапросаОбъединения = Новый Структура; + СхемаЗапросаОбъединения.Вставить("ИсточникДанных", ИсточникДанных); + + МассивОбъединений.Добавить(Новый Структура("СтруктураСхемыЗапроса, ТипОбъединения", + СхемаЗапросаОбъединения, Ложь)); + СхемаЗапроса.Вставить("Объединения", МассивОбъединений); + +КонецПроцедуры + +Процедура УстановитьОбъединениеВсе(СхемаЗапроса, ИсточникДанных) Экспорт + + МассивОбъединений = Новый Массив; + Если СхемаЗапроса.Свойство("Объединения") И ТипЗнч(СхемаЗапроса.Объединения) = Тип("Массив") Тогда + МассивОбъединений = СхемаЗапроса.Объединения; + КонецЕсли; + + СхемаЗапросаОбъединения = Новый Структура; + СхемаЗапросаОбъединения.Вставить("ИсточникДанных", ИсточникДанных); + + МассивОбъединений.Добавить(Новый Структура("СтруктураСхемыЗапроса, ТипОбъединения", + СхемаЗапросаОбъединения, Истина)); + СхемаЗапроса.Вставить("Объединения", МассивОбъединений); + +КонецПроцедуры + Процедура УстановитьПараметры(СхемаЗапроса, Параметры) Экспорт СхемаЗапроса.Вставить("Параметры", Параметры); diff --git a/src/cfe/ConfigDumpInfo.xml b/src/cfe/ConfigDumpInfo.xml index f873b8a..90a6c6e 100644 --- a/src/cfe/ConfigDumpInfo.xml +++ b/src/cfe/ConfigDumpInfo.xml @@ -2,11 +2,11 @@ - + - + - + @@ -16,14 +16,14 @@ - + - + - + @@ -33,8 +33,8 @@ - - + + diff --git a/src/cfe/Configuration.xml b/src/cfe/Configuration.xml index 65de6be..9d23481 100644 --- a/src/cfe/Configuration.xml +++ b/src/cfe/Configuration.xml @@ -47,7 +47,7 @@ Version8_3_9 Russian - 0.0.1 + 0.0.2 diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl index 41f3044..5b66912 100644 --- a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl +++ b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl @@ -9,8 +9,18 @@ // // Процедура УстановитьИсточникДанных(ИсточникДанных, Первые = -1, Различные = Ложь, Разрешенные = Ложь) Экспорт + + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "Объединить: неверный тип источника данных"; + КонецЕсли; + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьИсточникДанных(СхемаЗапроса, - ИсточникДанных, Первые, Различные, Разрешенные); + _ИсточникДанных, Первые, Различные, Разрешенные); + КонецПроцедуры // @@ -146,6 +156,42 @@ Возврат ЭтотОбъект; КонецФункции +// +// +Функция Объединить(ИсточникДанных) Экспорт + + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "Объединить: неверный тип источника данных"; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьОбъединение(СхемаЗапроса, _ИсточникДанных); + Возврат ЭтотОбъект; + +КонецФункции + +// +// +Функция ОбъединитьВсе(ИсточникДанных) Экспорт + + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "Объединить: неверный тип источника данных"; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьОбъединениеВсе(СхемаЗапроса, _ИсточникДанных); + Возврат ЭтотОбъект; + +КонецФункции + // // Функция Параметры(Параметры) Экспорт diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl index 9fb254e..f780ceb 100644 --- a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl +++ b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl @@ -130,6 +130,40 @@ Возврат ЭтотОбъект; КонецФункции +&НаКлиенте +Функция Объединить(ИсточникДанных) Экспорт + + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ФормаКлиентскогоПриложения") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "Объединить: неверный тип источника данных"; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьОбъединение(СхемаЗапроса, _ИсточникДанных); + Возврат ЭтотОбъект; + +КонецФункции + +&НаКлиенте +Функция ОбъединитьВсе(ИсточникДанных) Экспорт + + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ФормаКлиентскогоПриложения") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "Объединить: неверный тип источника данных"; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьОбъединениеВсе(СхемаЗапроса, _ИсточникДанных); + Возврат ЭтотОбъект; + +КонецФункции + &НаКлиенте Функция Параметры(Параметры) Экспорт СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьПараметры(СхемаЗапроса, Параметры);