diff --git a/src/cfe/.gitkeep b/src/cfe/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/cfe/CommonModules/СЗ_Запрос.xml b/src/cfe/CommonModules/СЗ_Запрос.xml new file mode 100644 index 0000000..9658e77 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_Запрос.xml @@ -0,0 +1,23 @@ + + + + + СЗ_Запрос + + + ru + Схема запроса: запрос + + + + false + true + true + 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..15b46b5 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_Запрос/Ext/Module.bsl @@ -0,0 +1,27 @@ + +Функция НовыйЗапрос(ИсточникДанных, Первые = 0, Различные = Ложь, Разрешенные = Ложь) Экспорт + + ПроцессорСхемЗапроса = СЗ_ПроцессорыСхемЗапросаКлиентСервер + .НовыйПроцессорСхемЗапроса(ИсточникДанных, Первые, Различные, Разрешенные); + + Возврат ПроцессорСхемЗапроса; + +КонецФункции + +Функция Предикат() Экспорт + + ПроцессорПредикатов = СЗ_ПроцессорыПредикатовКлиентСервер + .НовыйПроцессорПредикатов(); + + Возврат ПроцессорПредикатов; + +КонецФункции + +// TODO: В модуле СЗ_ПроцессорыСхемЗапросаКлиентСерверСлужебный так же регулярно требуетс +// такая структура. Рефакторинг! +Функция НовоеПоле(ИмяПоля, Источник, Псевдоним) Экспорт + + Возврат Новый Структура("ИмяПоля, Источник, Псевдоним", + ИмяПоля, Источник, Псевдоним); + +КонецФункции \ No newline at end of file diff --git a/src/cfe/CommonModules/СЗ_ЗапросТест.xml b/src/cfe/CommonModules/СЗ_ЗапросТест.xml new file mode 100644 index 0000000..f2dd27a --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ЗапросТест.xml @@ -0,0 +1,23 @@ + + + + + СЗ_ЗапросТест + + + ru + Схема запроса: запрос тест + + + + false + false + true + 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..079245f --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ЗапросТест/Ext/Module.bsl @@ -0,0 +1,566 @@ +#Область ОбъявлениеТестов + +Процедура ИсполняемыеСценарии() Экспорт + + ЮТТесты + .ДобавитьТест("ИсключениеИсточникОтсутствует") + .ДобавитьТест("ИсключениеИсточникПустаяСтрока") + .ДобавитьТест("ЗапросВТаблицуЗначений") + .ДобавитьТест("ЗапросВМассив") + .ДобавитьТест("Первые") + .ДобавитьТест("Различные") + .ДобавитьТест("Разрешенные") + .ДобавитьТест("ИсключениеПолеОтсутствует") + .ДобавитьТест("ДобавитьПоляССинонимами") + .ДобавитьТест("ДобавитьНесколькоПолей") + .ДобавитьТест("ДобавитьНесколькоПолейСПереносомСтроки") + .ДобавитьТест("ДобавитьПоляССинонимамиИСписком") + .ДобавитьТест("ВсеПоляДляНеСсылочногоТипа") + .ДобавитьТест("ВсеПоляДляСсылочногоТипа") + .ДобавитьТест("ЗапросСУсловием") + .ДобавитьТест("ЛевоеСоединениеПоИсточникуСтроке") + .ДобавитьТест("ЛевоеСоединениеПоИсточникуЗапросу") + .ДобавитьТест("ЛевоеСоединениеБезПредиката") + .ДобавитьТест("ЛевоеСоединениеНесколькоУсловийВПредикате") + .ДобавитьТест("ЛевоеСоединениеПредикатЭтоПараметр") + .ДобавитьТест("ЛевоеСоединениеБезПсевдонимовВСоединении") + .ДобавитьТест("НесколькоЛевыхСоединений") + .ДобавитьТест("ВложенныйЗапрос") + .ДобавитьТест("Порядок") + .ДобавитьТест("Итоги") + .ДобавитьТест("АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений") + ; + +КонецПроцедуры + +#КонецОбласти + +#Область Тесты + +#Область Базовые + +Процедура ИсключениеИсточникОтсутствует() Экспорт + + Предикат = СЗ_Запрос.Предикат() + .Реквизит("ЭтоГруппа").Равно(Ложь) + .Получить() + ; + + Обработка = Обработки.СЗ_ПроцессорСхемЗапроса.Создать(); + + ЮТест.ОжидаетЧто(Обработка) + .Метод("ВТаблицуЗначений") + .ВыбрасываетИсключение("Источник данных запроса не определен"); + +КонецПроцедуры + +Процедура ИсключениеИсточникПустаяСтрока() Экспорт + + Предикат = СЗ_Запрос.Предикат() + .Реквизит("ЭтоГруппа").Равно(Ложь) + .Получить() + ; + + Запрос = СЗ_Запрос.НовыйЗапрос("") + .Где(Предикат) + ; + + ЮТест.ОжидаетЧто(Запрос) + .Метод("ВТаблицуЗначений") + .ВыбрасываетИсключение("Источник данных запроса не определен"); + +КонецПроцедуры + +Процедура ЗапросВТаблицуЗначений() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + +КонецПроцедуры + +Процедура ЗапросВМассив() Экспорт + + Массив = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .ВМассив("Ссылка") + ; + + ЮТест.ОжидаетЧто(Массив) + .ИмеетТип("Массив") + ; + ЮТест.ОжидаетЧто(Массив.Количество()) + .Больше(0) + ; + +КонецПроцедуры + +Процедура Первые() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура", 10) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Равно(10) + ; + +КонецПроцедуры + +Процедура Различные() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура",, Истина) + .ВТаблицуЗначений() + ; + +КонецПроцедуры + +Процедура Разрешенные() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура",,, Истина) + .ВТаблицуЗначений() + ; + +КонецПроцедуры + +#КонецОбласти + +#Область Поля + +// TODO: Поля могут быть выражениями + +Процедура ИсключениеПолеОтсутствует() Экспорт + + НеправильноеНаименованиеПоля = "йцукен"; + + Запрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать(НеправильноеНаименованиеПоля) + ; + + ЮТест.ОжидаетЧто(Запрос) + .Метод("ВТаблицуЗначений") + .ВыбрасываетИсключение( + СтрШаблон("Поле %1 в источнике не определено", НеправильноеНаименованиеПоля)); + +КонецПроцедуры + +Процедура ДобавитьПоляССинонимами() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать(СЗ_Запрос.НовоеПоле("Ссылка",, "СсылкаНоменклатуры")) + .Выбрать(СЗ_Запрос.НовоеПоле("Наименование",, "НаименованиеНоменклатуры")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("СсылкаНоменклатуры") + .ИмеетСвойство("НаименованиеНоменклатуры") + ; + +КонецПроцедуры + +Процедура ДобавитьНесколькоПолей() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Ссылка, Наименование, ЭтоГруппа") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("Наименование") + .ИмеетСвойство("ЭтоГруппа") + ; + +КонецПроцедуры + +Процедура ДобавитьНесколькоПолейСПереносомСтроки() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Ссылка, Наименование, + |ЭтоГруппа") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("Наименование") + .ИмеетСвойство("ЭтоГруппа") + ; + +КонецПроцедуры + +Процедура ДобавитьПоляССинонимамиИСписком() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать(СЗ_Запрос.НовоеПоле("Ссылка",, "СсылкаНоменклатуры")) + .Выбрать("Наименование КАК НаименованиеНоменклатуры, ЭтоГруппа") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("СсылкаНоменклатуры") + .ИмеетСвойство("НаименованиеНоменклатуры") + .ИмеетСвойство("ЭтоГруппа") + ; + +КонецПроцедуры + +Процедура ВсеПоляДляНеСсылочногоТипа() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("РегистрСведений.КурсыВалют") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Валюта") + .ИмеетСвойство("Курс") + .ИмеетСвойство("Кратность") + ; + +КонецПроцедуры + +Процедура ВсеПоляДляСсылочногоТипа() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .ВыбратьВсе() + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("Наименование") + .ИмеетСвойство("ЭтоГруппа") + ; + +КонецПроцедуры + +#КонецОбласти + +#Область Условия + +Процедура ЗапросСУсловием() Экспорт + + Предикат = СЗ_Запрос.Предикат() + .Реквизит("ЭтоГруппа").Равно(Ложь) + ; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Где(Предикат) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + +КонецПроцедуры + +#КонецОбласти + +#Область Соединения + +Процедура ЛевоеСоединениеПоИсточникуСтроке() Экспорт + + ПредикатДляСоединения = СЗ_Запрос.Предикат() + .Реквизит("НоменклатураСоединение.Ссылка").Равно("Номенклатура.Родитель") + ; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, + |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка") + .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", ПредикатДляСоединения) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("НоменклатураСоединениеСсылка") + ; + +КонецПроцедуры + +Процедура ЛевоеСоединениеПоИсточникуЗапросу() Экспорт + + ЗапросДляСоединения = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура"); + ПредикатДляСоединения = СЗ_Запрос.Предикат() + .Реквизит("Ссылка").Равно("Родитель") + ; + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, + |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка") + .ЛевоеСоединение(ЗапросДляСоединения, ПредикатДляСоединения) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("НоменклатураСоединениеСсылка") + ; + +КонецПроцедуры + +Процедура ЛевоеСоединениеБезПредиката() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("РегистрСведений.ПримененияЕНВД") + .Выбрать("ПримененияЕНВД.Организация КАК Организация, + |ПримененияЕНВДСоединение.Склад КАК Склад") + .ЛевоеСоединение("РегистрСведений.ПримененияЕНВД КАК ПримененияЕНВДСоединение") + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Организация") + .ИмеетСвойство("Склад") + ; + +КонецПроцедуры + +Процедура ЛевоеСоединениеНесколькоУсловийВПредикате() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, + |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка") + .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", СЗ_Запрос.Предикат() + .Реквизит("НоменклатураСоединение.Ссылка").Равно("Номенклатура.Родитель") + .Реквизит("НоменклатураСоединение.ЭтоГруппа").Равно("ИСТИНА")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("НоменклатураСоединениеСсылка") + ; + +КонецПроцедуры + +Процедура ЛевоеСоединениеПредикатЭтоПараметр() Экспорт + + // Подготовка + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | Номенклатура.Ссылка КАК Ссылка + |ИЗ + | Справочник.Номенклатура КАК Номенклатура + |ГДЕ + | Номенклатура.ЭтоГруппа"; + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(Новый Структура("ИмяПараметра, Значение", + "Родитель", Выборка.Ссылка)); + + // Выполнение + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, + |НоменклатураСоединение.Ссылка КАК НоменклатураСоединениеСсылка") + .ЛевоеСоединение("Справочник.Номенклатура КАК НоменклатураСоединение", СЗ_Запрос.Предикат() + .Реквизит("НоменклатураСоединение.Родитель").Равно("&Родитель")) + .Параметры(МассивПараметров) + .ВТаблицуЗначений() + ; + + // Проверки + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("НоменклатураСоединениеСсылка") + ; + +КонецПроцедуры + +Процедура ЛевоеСоединениеБезПсевдонимовВСоединении() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, Номенклатура1.Ссылка") + .ЛевоеСоединение("Справочник.Номенклатура", СЗ_Запрос.Предикат() + .Реквизит("Ссылка").Равно("Родитель") + .Реквизит("ЭтоГруппа").Равно("ИСТИНА")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("Ссылка1") + ; + +КонецПроцедуры + +Процедура НесколькоЛевыхСоединений() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Выбрать("Номенклатура.Ссылка, Номенклатура1.Ссылка, Номенклатура2.Ссылка") + .ЛевоеСоединение("Справочник.Номенклатура", СЗ_Запрос.Предикат() + .Реквизит("Ссылка").Равно("Родитель") + .Реквизит("ЭтоГруппа").Равно("ИСТИНА")) + .ЛевоеСоединение("Справочник.Номенклатура", СЗ_Запрос.Предикат() + .Реквизит("Ссылка").Равно("Родитель") + .Реквизит("ЭтоГруппа").Равно("ИСТИНА")) + .ВТаблицуЗначений() + ; + + ЮТест.ОжидаетЧто(ТаблицаЗначений) + .ИмеетТип("ТаблицаЗначений") + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений.Количество()) + .Больше(0) + ; + ЮТест.ОжидаетЧто(ТаблицаЗначений[0]) + .ИмеетСвойство("Ссылка") + .ИмеетСвойство("Ссылка1") + .ИмеетСвойство("Ссылка2") + ; + +КонецПроцедуры + +#КонецОбласти + +Процедура ВложенныйЗапрос() Экспорт + + ВложенныйЗапрос = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура"); + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос(ВложенныйЗапрос) + .ВТаблицуЗначений() + ; + +КонецПроцедуры + +Процедура Порядок() Экспорт + + // Выполнение + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + .Упорядочить("ЭтоГруппа, Наименование") + .ВТаблицуЗначений() + ; + + // Проверки + // TODO: + +КонецПроцедуры + +Процедура Итоги() Экспорт + + ТаблицаЗначений = СЗ_Запрос.НовыйЗапрос("Справочник.Номенклатура") + // TODO: + .Итоги() + .ВТаблицуЗначений() + ; + +КонецПроцедуры + +#Область РеальныеЗапросы + +Процедура АдресныйКлассификаторСлужебный_ТаблицаАдресныхСокращений() Экспорт + + // Подготовка + НаименованияАдресныхОбъектов = Новый Массив; + НаименованияАдресныхОбъектов.Добавить("Абонентский Ящик"); + + // Выполнение + Запрос = СЗ_Запрос.НовыйЗапрос("РегистрСведений.УровниСокращенийАдресныхСведений") + .Выбрать("Значение КАК Наименование, Сокращение") + .Сгруппировать("Значение, Сокращение") + .Упорядочить("Наименование"); + + Если ТипЗнч(НаименованияАдресныхОбъектов) = Тип("Массив") И НаименованияАдресныхОбъектов.Количество() > 0 Тогда + Запрос = Запрос + .Где(СЗ_Запрос.Предикат() + .Реквизит("Значение").В(НаименованияАдресныхОбъектов)); + КонецЕсли; + + Результат = Запрос.ВТаблицуЗначений(); + + // Проверки + ЮТест.ОжидаетЧто(Результат) + .ИмеетТип("ТаблицаЗначений") + ; + // TODO: + +КонецПроцедуры + +#КонецОбласти + +#КонецОбласти diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовКлиентСервер.xml b/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовКлиентСервер.xml new file mode 100644 index 0000000..41ea9b9 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + СЗ_ПроцессорыПредикатовКлиентСервер + + + ru + Схема запроса: процессоры предикатов клиент сервер + + + + false + true + true + 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..28138fa --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовКлиентСервер/Ext/Module.bsl @@ -0,0 +1,27 @@ +#Область ПрограммныйИнтерфейс + +Функция НовыйПроцессорПредикатов() Экспорт + + #Если Клиент Тогда + ПроцессорПредикатов = ПолучитьФорму("Обработка.СЗ_ПроцессорПредикатов.Форма.Форма"); + #Иначе + ПроцессорПредикатов = Обработки.СЗ_ПроцессорПредикатов.Создать(); + #КонецЕсли + + Возврат ПроцессорПредикатов; + +КонецФункции + +Функция Выражения() Экспорт + + Выражения = Новый Структура; + Выражения.Вставить("Равно", "Равно"); + Выражения.Вставить("Больше", "Больше"); + Выражения.Вставить("Меньше", "Меньше"); + Выражения.Вставить("В", "В"); + + Возврат Новый ФиксированнаяСтруктура(Выражения); + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.xml b/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.xml new file mode 100644 index 0000000..34f2de9 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер + + + ru + Схема запроса: процессоры предикатов служебный клиент сервер + + + + false + true + true + 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..41afd9e --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер/Ext/Module.bsl @@ -0,0 +1,27 @@ +#Область ПрограммныйИнтерфейс + +Процедура УстановитьИмяРеквизита(Предикат, ИмяРеквизита) Экспорт + + Если Предикат = Неопределено Тогда + Предикат = Новый Структура("ИмяРеквизита, Условия", + "", Новый Массив); + КонецЕсли; + + Предикат.ИмяРеквизита = ИмяРеквизита; + +КонецПроцедуры + +Процедура УстановитьПредикат(Предикат, ВидСравнения, Значение) Экспорт + + Если Предикат = Неопределено Или ПустаяСтрока(Предикат.ИмяРеквизита) Тогда + ВызватьИсключение "Ошибочный порядок вызова функций формирования предиката"; + КонецЕсли; + + Условие = Новый Структура("ИмяРеквизита, ВидСравнения, Значение", + Предикат.ИмяРеквизита, ВидСравнения, Значение); + + Предикат.Условия.Добавить(Условие); + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаКлиентСервер.xml b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаКлиентСервер.xml new file mode 100644 index 0000000..bd27893 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + СЗ_ПроцессорыСхемЗапросаКлиентСервер + + + ru + Схема запроса: процессоры схем запроса + + + + false + true + true + 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..ed804e8 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаКлиентСервер/Ext/Module.bsl @@ -0,0 +1,17 @@ +#Область ПрограммныйИнтерфейс + +Функция НовыйПроцессорСхемЗапроса(ИсточникДанных, Первые = 0, Различные = Ложь, Разрешенные = Ложь) Экспорт + + #Если Клиент Тогда + ПроцессорСхемЗапроса = ПолучитьФорму("Обработка.СЗ_ПроцессорСхемЗапроса.Форма.Форма"); + #Иначе + ПроцессорСхемЗапроса = Обработки.СЗ_ПроцессорСхемЗапроса.Создать(); + #КонецЕсли + + ПроцессорСхемЗапроса.УстановитьИсточникДанных(ИсточникДанных, Первые, Различные, Разрешенные); + + Возврат ПроцессорСхемЗапроса; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный.xml b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный.xml new file mode 100644 index 0000000..f7c21d9 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный.xml @@ -0,0 +1,23 @@ + + + + + СЗ_ПроцессорыСхемЗапросаСлужебный + + + ru + Схема запроса: процессоры схем запроса служебный + + + + false + false + true + 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..21bbcfd --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебный/Ext/Module.bsl @@ -0,0 +1,237 @@ + +#Область ПрограммныйИнтерфейс + +Функция ПолучитьРезультатЗапроса(СтруктураСхемыЗапроса) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = ПолучитьТекстЗапроса(СтруктураСхемыЗапроса, Запрос); + ДобавитьПараметрыЗапроса(СтруктураСхемыЗапроса, Запрос); + + Возврат Запрос.Выполнить(); + +КонецФункции + +Функция ПолучитьТекстЗапроса(СтруктураСхемыЗапроса, Запрос) Экспорт + + Если Не ТипЗнч(СтруктураСхемыЗапроса) = Тип("Структура") Или + Не СтруктураСхемыЗапроса.Свойство("ИсточникДанных") Или + ПустаяСтрока(СтруктураСхемыЗапроса.ИсточникДанных) Тогда + + ВызватьИсключение "Источник данных запроса не определен"; + КонецЕсли; + + СхемаЗапроса = Новый СхемаЗапроса; + + ЗапросПакета = ДобавитьПолучитьПакет(СхемаЗапроса, СтруктураСхемыЗапроса); + Оператор = ДобавитьПолучитьОператор(ЗапросПакета, СтруктураСхемыЗапроса); + + // Соединения добавляются раньше всех чтобы к моменту добавления полей у нас + // уже были все возможные источники данных + ДобавитьСоединения(Оператор, СтруктураСхемыЗапроса); + ДобавитьПоля(ЗапросПакета, Оператор, СтруктураСхемыЗапроса); + ДобавитьУсловия(Оператор, Запрос, СтруктураСхемыЗапроса); + ДобавитьГруппировку(Оператор, СтруктураСхемыЗапроса); + ДобавитьПорядок(ЗапросПакета, СтруктураСхемыЗапроса); + + ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса(); + Возврат ТекстЗапроса; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ДобавитьПолучитьПакет(СхемаЗапроса, СтруктураСхемыЗапроса) + + ПакетЗапросов = СхемаЗапроса.ПакетЗапросов; + Если ПакетЗапросов.Количество() = 1 И СхемаЗапроса.ПолучитьТекстЗапроса() = "" Тогда + ЗапросПакета = ПакетЗапросов[0]; + Иначе + ЗапросПакета = СхемаЗапроса.ПакетЗапросов.Добавить(Тип("ЗапросВыбораСхемыЗапроса")); + КонецЕсли; + + Если СтруктураСхемыЗапроса.Свойство("Разрешенные") И СтруктураСхемыЗапроса.Разрешенные Тогда + ЗапросПакета.ВыбиратьРазрешенные = Истина; + КонецЕсли; + + Возврат ЗапросПакета; + +КонецФункции + +Функция ДобавитьПолучитьОператор(ЗапросПакета, СтруктураСхемыЗапроса) + + Если ЗапросПакета.Операторы.Количество() = 1 Тогда + Оператор = ЗапросПакета.Операторы[0]; + Если НЕ Оператор.Источники.Количество() = 0 ИЛИ НЕ Оператор.ВыбираемыеПоля.Количество() = 0 Тогда + Оператор = Неопределено; + КонецЕсли; + КонецЕсли; + Если Оператор = Неопределено Тогда + Оператор = ЗапросПакета.Операторы.Добавить(); + КонецЕсли; + + Если СтруктураСхемыЗапроса.Свойство("Первые") И СтруктураСхемыЗапроса.Первые > 0 Тогда + Оператор.КоличествоПолучаемыхЗаписей = СтруктураСхемыЗапроса.Первые; + КонецЕсли; + Если СтруктураСхемыЗапроса.Свойство("Различные") И СтруктураСхемыЗапроса.Различные Тогда + Оператор.ВыбиратьРазличные = Истина; + КонецЕсли; + + Оператор.Источники.Добавить(СтруктураСхемыЗапроса.ИсточникДанных); + + Возврат Оператор; + +КонецФункции + +Процедура ДобавитьПоля(ЗапросПакета, Оператор, СтруктураСхемыЗапроса) + + Если СтруктураСхемыЗапроса.Свойство("Поля") И + ТипЗнч(СтруктураСхемыЗапроса.Поля) = Тип("Массив") И + СтруктураСхемыЗапроса.Поля.Количество() > 0 Тогда + + Для каждого Поле Из СтруктураСхемыЗапроса.Поля Цикл + Если Не Поле.Источник = Неопределено Тогда + ИсточникПоля = Оператор.Источники.НайтиПоПсевдониму(Поле.Источник); + Иначе + ИсточникПоля = Оператор.Источники[0]; + КонецЕсли; + + ДоступноеПоле = ИсточникПоля.Источник.ДоступныеПоля.Найти(Поле.ИмяПоля); + Если Не ДоступноеПоле = Неопределено Тогда + НовоеПоле = Оператор.ВыбираемыеПоля.Добавить(ДоступноеПоле); + Если Не Поле.Псевдоним = Неопределено Тогда + ЗапросПакета.Колонки[ЗапросПакета.Колонки.Количество() - 1].Псевдоним = Поле.Псевдоним; + КонецЕсли; + Иначе + ВызватьИсключение СтрШаблон("Поле %1 в источнике не определено", Поле.ИмяПоля); + КонецЕсли; + КонецЦикла; + Иначе + ЕстьСсылка = Ложь; + Для каждого Источник Из Оператор.Источники Цикл + Если Не Источник.Источник.ДоступныеПоля.Найти("Ссылка") = Неопределено Тогда + ЕстьСсылка = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ЕстьСсылка Или (СтруктураСхемыЗапроса.Свойство("ВсеПоля") И СтруктураСхемыЗапроса.ВсеПоля) Тогда + Для каждого Источник Из Оператор.Источники Цикл + Для каждого Поле Из Источник.Источник.ДоступныеПоля Цикл + Оператор.ВыбираемыеПоля.Добавить(Поле); + КонецЦикла; + КонецЦикла; + Иначе + Оператор.ВыбираемыеПоля.Добавить(Оператор.Источники[0].Источник.ДоступныеПоля.Найти("Ссылка")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьУсловия(Оператор, Запрос, СтруктураСхемыЗапроса) + + Если СтруктураСхемыЗапроса.Свойство("Условия") И ТипЗнч(СтруктураСхемыЗапроса.Условия) = Тип("Массив") Тогда + Для каждого Условие Из СтруктураСхемыЗапроса.Условия Цикл + Оператор.Отбор.Добавить(Условие.УсловиеСтрокой); + Запрос.УстановитьПараметр(Условие.ИмяПараметра, Условие.Значение); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьСоединения(Оператор, СтруктураСхемыЗапроса) + + Если СтруктураСхемыЗапроса.Свойство("Соединения") И ТипЗнч(СтруктураСхемыЗапроса.Соединения) = Тип("Массив") Тогда + Для каждого СтруктураСоединения Из СтруктураСхемыЗапроса.Соединения Цикл + ИсточникСоединения = Оператор.Источники.Добавить(СтруктураСоединения.ИсточникДанных, + СтруктураСоединения.Псевдоним); + Если Оператор.Источники[0].Соединения.Количество() = 0 Тогда + Оператор.Источники[0].Соединения.Добавить(ИсточникСоединения); + КонецЕсли; + + Условия = ПроверитьНаНеоднозначностьПолей(СтруктураСоединения.Условие, + Оператор.Источники[0].Источник, ИсточникСоединения.Источник); + + Соединение = Оператор.Источники[0].Соединения[Оператор.Источники[0].Соединения.Количество() - 1]; + Соединение.Условие = Новый ВыражениеСхемыЗапроса(СтрСоединить(Условия, " И ")); + // TODO: Строки заменить на функцию? + Если СтруктураСоединения.ТипСоединения = "Левое" Тогда + Соединение.ТипСоединения = ТипСоединенияСхемыЗапроса.ЛевоеВнешнее; + ИначеЕсли СтруктураСоединения.ТипСоединения = "Правое" Тогда + Соединение.ТипСоединения = ТипСоединенияСхемыЗапроса.ПравоеВнешнее; + ИначеЕсли СтруктураСоединения.ТипСоединения = "Внутреннее" Тогда + Соединение.ТипСоединения = ТипСоединенияСхемыЗапроса.Внутреннее; + ИначеЕсли СтруктураСоединения.ТипСоединения = "Полное" Тогда + Соединение.ТипСоединения = ТипСоединенияСхемыЗапроса.ПолноеВнешнее; + Иначе + ВызватьИсключение СтрШаблон("ДобавитьСоединения: неподдерживаемый тип соединения %1", + СтруктураСоединения.ТипСоединения); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьГруппировку(Оператор, СтруктураСхемыЗапроса) + + Если СтруктураСхемыЗапроса.Свойство("Группировка") И ТипЗнч(СтруктураСхемыЗапроса.Группировка) = Тип("Массив") Тогда + Для каждого Группировка Из СтруктураСхемыЗапроса.Группировка Цикл + Оператор.Группировка.Добавить(Группировка); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьПорядок(ЗапросПакета, СтруктураСхемыЗапроса) + + Если СтруктураСхемыЗапроса.Свойство("Порядок") И ТипЗнч(СтруктураСхемыЗапроса.Порядок) = Тип("Массив") Тогда + Для каждого ЭлементПорядка Из СтруктураСхемыЗапроса.Порядок Цикл + ЗапросПакета.Порядок.Добавить(ЭлементПорядка); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Функция ПроверитьНаНеоднозначностьПолей(МассивУсловий, ТаблицаОсновная, ТаблицаСоединения) + + // TODO: Пока не учитывается ситуация типа: "Ссылка = Ссылка" + // Похоже вообще не имеет смысла преобразовывать условие в строку на предыдущем этапе. + // Преобразовывать надо здесь с учетом неоднозначности полей. Рефакторинг! + НовыйМассивУсловий = Новый Массив; + + Для каждого Условие Из МассивУсловий Цикл + УсловиеСтрокой = Условие.УсловиеСтрокой; + + Если Не Условие.ЛеваяЧасть = Неопределено И + Не ТаблицаОсновная.ДоступныеПоля.Найти(Условие.ЛеваяЧасть) = Неопределено И + Не ТаблицаСоединения.ДоступныеПоля.Найти(Условие.ЛеваяЧасть) = Неопределено Тогда + + УсловиеСтрокой = СтрЗаменить(УсловиеСтрокой, Условие.ЛеваяЧасть, + ТаблицаОсновная.Псевдоним + "." + Условие.ЛеваяЧасть); + КонецЕсли; + Если Не Условие.ПраваяЧасть = Неопределено И + Не ТаблицаОсновная.ДоступныеПоля.Найти(Условие.ПраваяЧасть) = Неопределено И + Не ТаблицаСоединения.ДоступныеПоля.Найти(Условие.ПраваяЧасть) = Неопределено Тогда + + УсловиеСтрокой = СтрЗаменить(УсловиеСтрокой, Условие.ПраваяЧасть, + ТаблицаСоединения.Псевдоним + "." + Условие.ПраваяЧасть); + КонецЕсли; + + НовыйМассивУсловий.Добавить(УсловиеСтрокой); + КонецЦикла; + + Возврат НовыйМассивУсловий; + +КонецФункции + +Процедура ДобавитьПараметрыЗапроса(СтруктураСхемыЗапроса, Запрос) + + Если СтруктураСхемыЗапроса.Свойство("Параметры") И ТипЗнч(СтруктураСхемыЗапроса.Параметры) = Тип("Массив") Тогда + Для каждого Параметр Из СтруктураСхемыЗапроса.Параметры Цикл + Запрос.УстановитьПараметр(Параметр.ИмяПараметра, Параметр.Значение); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера.xml b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера.xml new file mode 100644 index 0000000..aaa5f16 --- /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..57858fb --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера/Ext/Module.bsl @@ -0,0 +1 @@ +// TODO: \ No newline at end of file diff --git a/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.xml b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.xml new file mode 100644 index 0000000..fdea0b6 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.xml @@ -0,0 +1,23 @@ + + + + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + + + ru + Схема запроса: процессоры схем запроса служебный клиент сервер + + + + false + true + true + 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..7fd0d01 --- /dev/null +++ b/src/cfe/CommonModules/СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер/Ext/Module.bsl @@ -0,0 +1,305 @@ +#Область ПрограммныйИнтерфейс + +Процедура УстановитьИсточникДанных(СхемаЗапроса, ИсточникДанных, Первые, Различные, Разрешенные) Экспорт + + Если СхемаЗапроса = Неопределено Тогда + СхемаЗапроса = Новый Структура; + КонецЕсли; + + СхемаЗапроса.Вставить("ИсточникДанных", ИсточникДанных); + Если Первые >= 0 Тогда + СхемаЗапроса.Вставить("Первые", Первые); + КонецЕсли; + СхемаЗапроса.Вставить("Различные", Различные); + СхемаЗапроса.Вставить("Разрешенные", Разрешенные); + +КонецПроцедуры + +Процедура УстановитьПервые(СхемаЗапроса, Количество) Экспорт + + СхемаЗапроса.Вставить("Первые", Количество); + +КонецПроцедуры + +Процедура УстановитьРазличные(СхемаЗапроса) Экспорт + + СхемаЗапроса.Вставить("Различные", Истина); + +КонецПроцедуры + +Процедура УстановитьРазрешенные(СхемаЗапроса) Экспорт + + СхемаЗапроса.Вставить("Разрешенные", Истина); + +КонецПроцедуры + +Процедура УстановитьВыборВсехПолей(СхемаЗапроса) Экспорт + + СхемаЗапроса.Вставить("ВсеПоля", Истина); + +КонецПроцедуры + +Процедура УстановитьПоляВыборки(СхемаЗапроса, Поля) Экспорт + + Если ТипЗнч(Поля) = Тип("Строка") Тогда + НовыеПоля = ПолучитьПоляИзСтроки(Поля); + ИначеЕсли ТипЗнч(Поля) = Тип("Массив") Тогда + НовыеПоля = Поля; + ИначеЕсли ТипЗнч(Поля) = Тип("Структура") Тогда + НовыеПоля = Новый Массив; + НовыеПоля.Добавить(Поля); + Иначе + ВызватьИсключение "УстановитьПоляВыборки: неподдерживаемый тип данных в параметре ""Поля"""; + КонецЕсли; + + МассивПолей = Новый Массив; + Если СхемаЗапроса.Свойство("Поля") И ТипЗнч(СхемаЗапроса.Поля) = Тип("Массив") Тогда + МассивПолей = СхемаЗапроса.Поля; + КонецЕсли; + Для каждого НовоеПоле Из НовыеПоля Цикл + Поле = ПолучитьПоле(НовоеПоле); + МассивПолей.Добавить(Поле); + КонецЦикла; + + СхемаЗапроса.Вставить("Поля", МассивПолей); + +КонецПроцедуры + +Процедура УстановитьУсловие(СхемаЗапроса, Предикат) Экспорт + + СхемаЗапроса.Вставить("Условия", ПолучитьУсловияОтбора(Предикат)); + +КонецПроцедуры + +Процедура ДобавитьСоединение(СхемаЗапроса, ТипСоединения, ИсточникДанных, Предикат) Экспорт + + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + + МассивСоединений = Новый Массив; + Если СхемаЗапроса.Свойство("Соединения") И ТипЗнч(СхемаЗапроса.Поля) = Тип("Массив") Тогда + МассивСоединений = СхемаЗапроса.Соединения; + КонецЕсли; + + Псевдоним = ""; + Если СтрНайти(ИсточникДанных, " КАК ") > 0 Тогда + ИнформацияОбИсточникеДанных = СтрЗаменить(ИсточникДанных, " КАК ", Символы.ПС); + ИсточникДанных = СтрПолучитьСтроку(ИнформацияОбИсточникеДанных, 1); + Псевдоним = СтрПолучитьСтроку(ИнформацияОбИсточникеДанных, 2); + КонецЕсли; + + МассивСоединений.Добавить(Новый Структура("ТипСоединения, ИсточникДанных, Псевдоним, Условие", + ТипСоединения, ИсточникДанных, Псевдоним, ПолучитьУсловияСоединения(Предикат))); + СхемаЗапроса.Вставить("Соединения", МассивСоединений); + + Иначе // Структура = вложенный запрос + + // TODO: + + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьГруппировку(СхемаЗапроса, Поля) Экспорт + + Если ТипЗнч(Поля) = Тип("Строка") Тогда + НовыеПоля = ПолучитьПоляИзСтроки(Поля); + ИначеЕсли ТипЗнч(Поля) = Тип("Массив") Тогда + НовыеПоля = Поля; + Иначе + ВызватьИсключение "УстановитьГруппировку: неподдерживаемый тип данных в параметре ""Поля"""; + КонецЕсли; + + МассивПолей = Новый Массив; + Если СхемаЗапроса.Свойство("Группировка") И ТипЗнч(СхемаЗапроса.Поля) = Тип("Массив") Тогда + МассивПолей = СхемаЗапроса.Поля; + КонецЕсли; + Для каждого НовоеПоле Из НовыеПоля Цикл + МассивПолей.Добавить(НовоеПоле); + КонецЦикла; + + СхемаЗапроса.Вставить("Группировка", МассивПолей); + +КонецПроцедуры + +Процедура УстановитьПорядок(СхемаЗапроса, Поля) Экспорт + + Если ТипЗнч(Поля) = Тип("Строка") Тогда + НовыеПоля = ПолучитьПоляИзСтроки(Поля); + ИначеЕсли ТипЗнч(Поля) = Тип("Массив") Тогда + НовыеПоля = Поля; + Иначе + ВызватьИсключение "УстановитьПорядок: неподдерживаемый тип данных в параметре ""Поля"""; + КонецЕсли; + + МассивПолей = Новый Массив; + Если СхемаЗапроса.Свойство("Порядок") И ТипЗнч(СхемаЗапроса.Поля) = Тип("Массив") Тогда + МассивПолей = СхемаЗапроса.Поля; + КонецЕсли; + Для каждого НовоеПоле Из НовыеПоля Цикл + МассивПолей.Добавить(НовоеПоле); + КонецЦикла; + + СхемаЗапроса.Вставить("Порядок", МассивПолей); + +КонецПроцедуры + +Процедура УстановитьПараметры(СхемаЗапроса, Параметры) Экспорт + + СхемаЗапроса.Вставить("Параметры", Параметры); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПолучитьПоляИзСтроки(СтрокаИменПолей) + + МассивПолей = СтрРазделить(СтрокаИменПолей, ",", Ложь); + Для Сч = 0 По МассивПолей.Количество() - 1 Цикл + МассивПолей[Сч] = СокрЛП(МассивПолей[Сч]); + КонецЦикла; + + Возврат МассивПолей; + +КонецФункции + +Функция ПолучитьПоле(Поле) + + // TODO: Строки проверять на корректность синтаксиса - отсутствие пробелов и спец.символов + + Если ТипЗнч(Поле) = Тип("Строка") Тогда + + Если СтрНайти(Поле, " КАК ") > 0 Тогда + ИнформацияОПоле = СтрЗаменить(Поле, " КАК ", Символы.ПС); + Возврат Новый Структура("ИмяПоля, Источник, Псевдоним", + ПолучитьИмяПоляБезИсточника(СтрПолучитьСтроку(ИнформацияОПоле, 1)), + ПолучитьИсточникИзИмениПоля(Поле), + СтрПолучитьСтроку(ИнформацияОПоле, 2)); + КонецЕсли; + + Возврат Новый Структура("ИмяПоля, Источник, Псевдоним", + ПолучитьИмяПоляБезИсточника(Поле), + ПолучитьИсточникИзИмениПоля(Поле), + Неопределено); + + ИначеЕсли ТипЗнч(Поле) = Тип("Структура") Тогда + + Если Поле.Свойство("ИмяПоля") Тогда + Если Поле.Свойство("Источник") И Не Поле.Источник = Неопределено Тогда + Если Поле.Свойство("Псевдоним") Тогда + Возврат Поле; + КонецЕсли; + + Возврат Новый Структура("ИмяПоля, Источник, Псевдоним", + ПолучитьИмяПоляБезИсточника(Поле.ИмяПоля), + ПолучитьИсточникИзИмениПоля(Поле.ИмяПоля), + Неопределено); + КонецЕсли; + + Если Поле.Свойство("Псевдоним") Тогда + Возврат Новый Структура("ИмяПоля, Источник, Псевдоним", + ПолучитьИмяПоляБезИсточника(Поле.ИмяПоля), + ПолучитьИсточникИзИмениПоля(Поле.ИмяПоля), + Поле.Псевдоним); + КонецЕсли; + + Возврат Новый Структура("ИмяПоля, Источник, Псевдоним", + ПолучитьИмяПоляБезИсточника(Поле.ИмяПоля), + ПолучитьИсточникИзИмениПоля(Поле.ИмяПоля), + Неопределено); + КонецЕсли; + + ВызватьИсключение "ПолучитьПоле: некорректная структура передана в параметре ""Поле"""; + + КонецЕсли; + + ВызватьИсключение "ПолучитьПоле: неподдерживаемый тип данных в параметре ""Поле"""; + +КонецФункции + +Функция ПолучитьИмяПоляБезИсточника(ИмяПоля) + + Если СтрНайти(ИмяПоля, ".") > 0 Тогда + МассивЭлементовПоля = СтрРазделить(ИмяПоля, "."); + МассивЭлементовПоля.Удалить(0); + Возврат СтрСоединить(МассивЭлементовПоля, "."); + КонецЕсли; + + Возврат ИмяПоля; + +КонецФункции + +Функция ПолучитьИсточникИзИмениПоля(ИмяПоля) + + Если СтрНайти(ИмяПоля, ".") > 0 Тогда + МассивЭлементовПоля = СтрРазделить(ИмяПоля, "."); + Возврат МассивЭлементовПоля[0]; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +Функция ПолучитьУсловияОтбора(Предикат) + + // TODO: Нумерация (Сч) сквозная через все запросы + + МассивУсловий = Новый Массив; + Сч = 0; + + Для каждого Условие Из Предикат.Условия Цикл + ИмяПараметра = СтрШаблон("Параметр_%1", Сч); + + Шаблон = ШаблонУсловия(Условие.ВидСравнения); + МассивУсловий.Добавить(Новый Структура("ИмяПараметра, УсловиеСтрокой, Значение", + ИмяПараметра, СтрШаблон(Шаблон, Условие.ИмяРеквизита, ИмяПараметра), Условие.Значение)); + + Сч = Сч + 1; + КонецЦикла; + + Возврат МассивУсловий; + +КонецФункции + +Функция ПолучитьУсловияСоединения(Предикат) + + МассивУсловий = Новый Массив; + Если Предикат = Неопределено Тогда + МассивУсловий.Добавить( + Новый Структура("ЛеваяЧасть, ПраваяЧасть, УсловиеСтрокой",,, "ИСТИНА")); + + Возврат МассивУсловий; + КонецЕсли; + + Для каждого Условие Из Предикат.Условия Цикл + Шаблон = ШаблонУсловия(Условие.ВидСравнения, Ложь); + МассивУсловий.Добавить(Новый Структура("ЛеваяЧасть, ПраваяЧасть, УсловиеСтрокой", + Условие.ИмяРеквизита, Условие.Значение, СтрШаблон(Шаблон, Условие.ИмяРеквизита, Условие.Значение))); + КонецЦикла; + + Возврат МассивУсловий; + +КонецФункции + +Функция ШаблонУсловия(ВидСравнения, Амперсанд = Истина) + + Выражения = СЗ_ПроцессорыПредикатовКлиентСервер.Выражения(); + + Если ВидСравнения = Выражения.Равно Тогда + Шаблон = "%1 = " + ?(Амперсанд, "&", "") + "%2"; + ИначеЕсли ВидСравнения = Выражения.Больше Тогда + Шаблон = "%1 > " + ?(Амперсанд, "&", "") + "%2"; + ИначеЕсли ВидСравнения = Выражения.Меньше Тогда + Шаблон = "%1 < " + ?(Амперсанд, "&", "") + "%2"; + ИначеЕсли ВидСравнения = Выражения.В Тогда + Шаблон = "%1 В (" + ?(Амперсанд, "&", "") + "%2)"; + Иначе + ВызватьИсключение "Неподдерживаемое выражение предиката " + ВидСравнения; + КонецЕсли; + + Возврат Шаблон; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/ConfigDumpInfo.xml b/src/cfe/ConfigDumpInfo.xml new file mode 100644 index 0000000..f1ba7a0 --- /dev/null +++ b/src/cfe/ConfigDumpInfo.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/cfe/Configuration.xml b/src/cfe/Configuration.xml new file mode 100644 index 0000000..debe389 --- /dev/null +++ b/src/cfe/Configuration.xml @@ -0,0 +1,71 @@ + + + + + + 9cd510cd-abfc-11d4-9434-004095e12fc7 + 79fc0bfa-a7d2-4fcc-9968-cfb47caa8fd8 + + + 9fcd25a0-4822-11d4-9414-008048da11f9 + bf90fb71-1da9-4052-b179-033ccc51e8de + + + e3687481-0a87-462c-a166-9f34594f9bba + a8573e3a-9a13-4e2b-9666-240ff4f3d932 + + + 9de14907-ec23-4a07-96f0-85521cb6b53b + 7e4ad5ff-f2b7-4283-a3c4-e62bfacbb5df + + + 51f2d5d8-ea4d-4064-8892-82951750031e + 048a7528-7f13-42d2-8898-549305be15a9 + + + e68182ea-4237-4383-967f-90c1e3370bc7 + f748cda1-e6d2-4aa2-8c76-75e9f4fe7eb7 + + + fb282519-d103-4dd3-bc12-cb271d631dfc + fc951404-a9cc-4c5d-bd94-f031bd348ea2 + + + + Adopted + СхемаЗапроса + + + ru + Схема запроса + + + + AddOn + true + СЗ_ + Version8_3_24 + Russian + + 0.0.1 + + + + + + TaxiEnableVersion8_2 + + + СЗ_Запрос + СЗ_ЗапросТест + СЗ_ПроцессорыПредикатовКлиентСервер + СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер + СЗ_ПроцессорыСхемЗапросаКлиентСервер + СЗ_ПроцессорыСхемЗапросаСлужебный + СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + СЗ_ПроцессорПредикатов + СЗ_ПроцессорСхемЗапроса + + + \ No newline at end of file diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов.xml b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов.xml new file mode 100644 index 0000000..c5a82fa --- /dev/null +++ b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов.xml @@ -0,0 +1,32 @@ + + + + + + 20e56103-de11-460e-989e-38009e54630a + 207e5e5e-fb17-43ad-959f-910b588f6d68 + + + e3602dbd-6e64-429f-99f4-b0c9a7b7102f + facb276b-1229-4f98-960f-86720e17c5c9 + + + + СЗ_ПроцессорПредикатов + + + ru + С з процессор предикатов + + + + true + + + false + + + + + + \ No newline at end of file diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Ext/ObjectModule.bsl b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Ext/ObjectModule.bsl new file mode 100644 index 0000000..953769c --- /dev/null +++ b/src/cfe/DataProcessors/СЗ_ПроцессорПредикатов/Ext/ObjectModule.bsl @@ -0,0 +1,44 @@ +#Область ОписаниеПеременных + +Перем Предикат; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +Функция Реквизит(ИмяРеквизита) Экспорт + СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьИмяРеквизита(Предикат, ИмяРеквизита); + Возврат ЭтотОбъект; +КонецФункции + +Функция Равно(Значение) Экспорт + СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат, + СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Равно, Значение); + Возврат ЭтотОбъект; +КонецФункции + +Функция Больше(Значение) Экспорт + СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат, + СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Больше, Значение); + Возврат ЭтотОбъект; +КонецФункции + +Функция Меньше(Значение) Экспорт + СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат, + СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().Меньше, Значение); + Возврат ЭтотОбъект; +КонецФункции + +Функция В(Значение) Экспорт + СЗ_ПроцессорыПредикатовСлужебныйКлиентСервер.УстановитьПредикат(Предикат, + СЗ_ПроцессорыПредикатовКлиентСервер.Выражения().В, Значение); + Возврат ЭтотОбъект; +КонецФункции + +Функция Получить() Экспорт + + Возврат Предикат; + +КонецФункции + +#КонецОбласти diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса.xml b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса.xml new file mode 100644 index 0000000..b27445a --- /dev/null +++ b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса.xml @@ -0,0 +1,34 @@ + + + + + + 8fa76ff0-784b-4ebd-a63a-5bfed72f02c2 + 4b2cbc6f-5517-4354-9cca-09e37ffb6ef4 + + + 4c35d9a4-671c-4413-b87e-b984a2286b1e + 2db60e26-72c2-46c7-adef-d744c9274c32 + + + + СЗ_ПроцессорСхемЗапроса + + + ru + Схема запроса: процессор схем запроса + + + + true + DataProcessor.СЗ_ПроцессорСхемЗапроса.Form.Форма + + false + + + + +
Форма
+
+
+
\ No newline at end of file diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl new file mode 100644 index 0000000..50c2ecf --- /dev/null +++ b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Ext/ObjectModule.bsl @@ -0,0 +1,125 @@ +#Область ОписаниеПеременных + +Перем СхемаЗапроса; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +Процедура УстановитьИсточникДанных(ИсточникДанных, Первые = -1, Различные = Ложь, Разрешенные = Ложь) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьИсточникДанных(СхемаЗапроса, + ИсточникДанных, Первые, Различные, Разрешенные); +КонецПроцедуры + +Функция ВТаблицуЗначений() Экспорт + ТаблицаЗначений = СЗ_ПроцессорыСхемЗапросаСлужебный + .ПолучитьРезультатЗапроса(СхемаЗапроса).Выгрузить(); + Возврат ТаблицаЗначений; +КонецФункции + +Функция ВМассив(ИмяКолонки) Экспорт + ТаблицаЗначений = СЗ_ПроцессорыСхемЗапросаСлужебный + .ПолучитьРезультатЗапроса(СхемаЗапроса).Выгрузить(); + Возврат ТаблицаЗначений.ВыгрузитьКолонку(ИмяКолонки); +КонецФункции + +Функция Первые(Количество) Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +Функция Различные() Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +Функция Разрешенные() Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +Функция Выбрать(Поля) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьПоляВыборки(СхемаЗапроса, Поля); + Возврат ЭтотОбъект; +КонецФункции + +Функция ВыбратьВсе() Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьВыборВсехПолей(СхемаЗапроса); + Возврат ЭтотОбъект; +КонецФункции + +Функция Где(Предикат) Экспорт + + Если ТипЗнч(Предикат) = Тип("Структура") Тогда + _Предикат = Предикат; + ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда + _Предикат = Предикат.Получить(); + Иначе + ВызватьИсключение "Неверный тип предиката в методе ""Где"""; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьУсловие(СхемаЗапроса, _Предикат); + Возврат ЭтотОбъект; +КонецФункции + +Функция ЛевоеСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт + + // TODO: ИсточникДанных может быть структурой? Что делать в этом случае? + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "ЛевоеСоединение: неверный тип источника данных"; + КонецЕсли; + + Если ТипЗнч(Предикат) = Тип("Структура") Или Предикат = Неопределено Тогда + _Предикат = Предикат; + ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда + _Предикат = Предикат.Получить(); + Иначе + ВызватьИсключение "ЛевоеСоединение: неверный тип предиката"; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.ДобавитьСоединение( + СхемаЗапроса, "Левое", ИсточникДанных, _Предикат); + Возврат ЭтотОбъект; +КонецФункции + +Функция Сгруппировать(Поля) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьГруппировку(СхемаЗапроса, Поля); + Возврат ЭтотОбъект; +КонецФункции + +Функция Упорядочить(Поля) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьПорядок(СхемаЗапроса, Поля); + Возврат ЭтотОбъект; +КонецФункции + +Функция Итоги() Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +Функция Параметры(Параметры) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьПараметры(СхемаЗапроса, Параметры); + Возврат ЭтотОбъект; +КонецФункции + +Функция Получить() Экспорт + + Возврат СхемаЗапроса; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + + + +#КонецОбласти diff --git a/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма.xml b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма.xml new file mode 100644 index 0000000..15510d0 --- /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..c15ed5f --- /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..614c888 --- /dev/null +++ b/src/cfe/DataProcessors/СЗ_ПроцессорСхемЗапроса/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,133 @@ +#Область ОписаниеПеременных + +&НаКлиенте +Перем СхемаЗапроса; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +&НаКлиенте +Процедура УстановитьИсточникДанных(ИсточникДанных, Первые = -1, Различные = Ложь, Разрешенные = Ложь) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьИсточникДанных(СхемаЗапроса, + ИсточникДанных, Первые, Различные, Разрешенные); +КонецПроцедуры + +&НаКлиенте +Функция ВТаблицуЗначений() Экспорт + ТаблицаЗначений = СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера + .ПолучитьРезультатЗапроса(СхемаЗапроса).Выгрузить(); + Возврат ТаблицаЗначений; +КонецФункции + +&НаКлиенте +Функция ВМассив(ИмяКолонки) Экспорт + ТаблицаЗначений = СЗ_ПроцессорыСхемЗапросаСлужебныйВызовСервера + .ПолучитьРезультатЗапроса(СхемаЗапроса).Выгрузить(); + Возврат ТаблицаЗначений.ВыгрузитьКолонку(ИмяКолонки); +КонецФункции + +&НаКлиенте +Функция Первые(Количество) Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Различные() Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Разрешенные() Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Выбрать(Поля) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьПоляВыборки(СхемаЗапроса, Поля); + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция ВыбратьВсе() Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер + .УстановитьВыборВсехПолей(СхемаЗапроса); + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Где(Предикат) Экспорт + + Если ТипЗнч(Предикат) = Тип("Структура") Тогда + _Предикат = Предикат; + ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда + _Предикат = Предикат.Получить(); + Иначе + ВызватьИсключение "Неверный тип предиката в методе ""Где"""; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьУсловие(СхемаЗапроса, _Предикат); + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция ЛевоеСоединение(ИсточникДанных, Предикат = Неопределено) Экспорт + + // TODO: ИсточникДанных может быть структурой? Что делать в этом случае? + Если ТипЗнч(ИсточникДанных) = Тип("Строка") Тогда + _ИсточникДанных = ИсточникДанных; + ИначеЕсли ТипЗнч(ИсточникДанных) = Тип("ОбработкаОбъект.СЗ_ПроцессорСхемЗапроса") Тогда + _ИсточникДанных = ИсточникДанных.Получить(); + Иначе + ВызватьИсключение "ЛевоеСоединение: неверный тип источника данных"; + КонецЕсли; + + Если ТипЗнч(Предикат) = Тип("Структура") Или Предикат = Неопределено Тогда + _Предикат = Предикат; + ИначеЕсли ТипЗнч(Предикат) = Тип("ОбработкаОбъект.СЗ_ПроцессорПредикатов") Тогда + _Предикат = Предикат.Получить(); + Иначе + ВызватьИсключение "ЛевоеСоединение: неверный тип предиката"; + КонецЕсли; + + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.ДобавитьСоединение( + СхемаЗапроса, "Левое", ИсточникДанных, _Предикат); + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Сгруппировать(Поля) Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Упорядочить(Поля) Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Итоги() Экспорт + // TODO: + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Параметры(Параметры) Экспорт + СЗ_ПроцессорыСхемЗапросаСлужебныйКлиентСервер.УстановитьПараметры(СхемаЗапроса, Параметры); + Возврат ЭтотОбъект; +КонецФункции + +&НаКлиенте +Функция Получить() Экспорт + + Возврат СхемаЗапроса; + +КонецФункции + +#КонецОбласти