mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-01-20 18:48:36 +02:00
Merge pull request #226 from bia-technologies/feature/187
187 / Доработаны утверждения ИБ для проверки строк неограниченной длины
This commit is contained in:
commit
0360905e59
@ -60,7 +60,7 @@
|
||||
// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
|
||||
// - см. ЮТФабрика.ВыражениеПредиката
|
||||
// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// Возвращаемое значение:
|
||||
// Структура, Неопределено - Содержит все данные записи, включая табличный части
|
||||
Функция Запись(ИмяТаблицы, Предикат) Экспорт
|
||||
@ -78,7 +78,7 @@
|
||||
// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
|
||||
// - см. ЮТФабрика.ВыражениеПредиката
|
||||
// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// Возвращаемое значение:
|
||||
// Массив из Структура - Найденные записи, включая табличный части
|
||||
Функция Записи(ИмяТаблицы, Предикат) Экспорт
|
||||
@ -134,7 +134,7 @@
|
||||
// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
|
||||
// - см. ЮТФабрика.ВыражениеПредиката
|
||||
// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// Возвращаемое значение:
|
||||
// Булево - Таблица содержит записи
|
||||
Функция ТаблицаСодержитЗаписи(ИмяТаблицы, Предикат = Неопределено) Экспорт
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция РезультатЗапроса(ОписаниеЗапроса, ДляКлиента) Экспорт
|
||||
Функция РезультатЗапроса(Знач ОписаниеЗапроса, Знач ДляКлиента) Экспорт
|
||||
|
||||
Запрос = Запрос(ОписаниеЗапроса);
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
@ -53,7 +53,7 @@
|
||||
// Возвращаемое значение:
|
||||
// - Структура Из Произвольный - Значения реквизитов ссылки при получении значений множества реквизитов
|
||||
// - Произвольный - Значение реквизита ссылки при получении значения одного реквизита
|
||||
Функция ЗначенияРеквизитов(Ссылка, ИменаРеквизитов, ОдинРеквизит) Экспорт
|
||||
Функция ЗначенияРеквизитов(Знач Ссылка, Знач ИменаРеквизитов, Знач ОдинРеквизит) Экспорт
|
||||
|
||||
ИмяТаблицы = Ссылка.Метаданные().ПолноеИмя();
|
||||
|
||||
@ -77,7 +77,7 @@
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из Структура, Структура, Неопределено - Записи
|
||||
Функция Записи(ОписаниеЗапроса, ОднаЗапись) Экспорт
|
||||
Функция Записи(Знач ОписаниеЗапроса, Знач ОднаЗапись) Экспорт
|
||||
|
||||
Если ОднаЗапись Тогда
|
||||
ОписаниеЗапроса.КоличествоЗаписей = 1;
|
||||
@ -108,7 +108,7 @@
|
||||
// - Структура Из Произвольный - Значения множества реквизитов записи
|
||||
// - Произвольный - Значение одного реквизита записи
|
||||
//
|
||||
Функция ЗначенияРеквизитовЗаписи(ОписаниеЗапроса, ОдинРеквизит) Экспорт
|
||||
Функция ЗначенияРеквизитовЗаписи(Знач ОписаниеЗапроса, Знач ОдинРеквизит) Экспорт
|
||||
|
||||
Запись = Записи(ОписаниеЗапроса, Истина);
|
||||
|
||||
@ -144,6 +144,8 @@
|
||||
// Запрос
|
||||
Функция Запрос(ОписаниеЗапроса)
|
||||
|
||||
Запрос = Новый Запрос;
|
||||
|
||||
Строки = Новый Массив();
|
||||
Строки.Добавить("ВЫБРАТЬ ");
|
||||
|
||||
@ -159,10 +161,12 @@
|
||||
|
||||
Строки.Добавить(СтрСоединить(ВыбираемыеПоля, "," + Символы.ПС));
|
||||
Строки.Добавить("ИЗ " + ОписаниеЗапроса.ИмяТаблицы);
|
||||
|
||||
Условия = СформироватьУсловия(ОписаниеЗапроса.Условия, ОписаниеЗапроса.ИмяТаблицы, Запрос);
|
||||
|
||||
Если ОписаниеЗапроса.Условия.Количество() Тогда
|
||||
Если Условия.Количество() Тогда
|
||||
Строки.Добавить("ГДЕ (");
|
||||
Строки.Добавить(СтрСоединить(ОписаниеЗапроса.Условия, ") И (" + Символы.ПС));
|
||||
Строки.Добавить(СтрСоединить(Условия, ") И (" + Символы.ПС));
|
||||
Строки.Добавить(")");
|
||||
КонецЕсли;
|
||||
|
||||
@ -171,7 +175,7 @@
|
||||
Строки.Добавить(СтрСоединить(ОписаниеЗапроса.Порядок, ","));
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Новый Запрос(СтрСоединить(Строки, Символы.ПС));
|
||||
Запрос.Текст = СтрСоединить(Строки, Символы.ПС);
|
||||
ЮТОбщий.ОбъединитьВСтруктуру(Запрос.Параметры, ОписаниеЗапроса.ЗначенияПараметров);
|
||||
|
||||
Возврат Запрос;
|
||||
@ -269,4 +273,123 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ШаблонУсловия(ВыражениеПредиката, ВыраженияПредикатов, ТипРеквизита)
|
||||
Выражение = ВыражениеПредиката.ВидСравнения;
|
||||
|
||||
Отрицание = ЮТПредикатыКлиентСервер.ЭтоВыраженияОтрицания(Выражение);
|
||||
Если Отрицание Тогда
|
||||
Выражение = ЮТПредикатыКлиентСервер.ВыраженияБезОтрицания(Выражение);
|
||||
КонецЕсли;
|
||||
|
||||
Если Выражение = ВыраженияПредикатов.Равно Тогда
|
||||
Если ЭтоСтрокаНеограниченнойДлинны(ТипРеквизита) Тогда
|
||||
Шаблон = СтрШаблон("ВЫРАЗИТЬ(%%1 КАК Строка(%1)) = &%%2", XMLСтрока(СтрДлина(ВыражениеПредиката.Значение) + 1));
|
||||
Иначе
|
||||
Шаблон = "%1 = &%2";
|
||||
КонецЕсли;
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Больше Тогда
|
||||
Шаблон = "%1 > &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.БольшеРавно Тогда
|
||||
Шаблон = "%1 >= &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Меньше Тогда
|
||||
Шаблон = "%1 < &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.МеньшеРавно Тогда
|
||||
Шаблон = "%1 <= &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.ИмеетТип Тогда
|
||||
Шаблон = "ТИПЗНАЧЕНИЯ(%1) = &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Содержит Тогда
|
||||
Шаблон = "%1 ПОДОБНО ""%%"" + &%2 + ""%%""";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Заполнено Тогда
|
||||
// TODO Реализовать
|
||||
ВызватьИсключение "Проверка заполненности пока не поддерживается";
|
||||
Иначе
|
||||
ВызватьИсключение "Неподдерживаемое выражения предикатов " + Выражение;
|
||||
КонецЕсли;
|
||||
|
||||
Если Отрицание Тогда
|
||||
Шаблон = СтрШаблон("НЕ (%1)", Шаблон);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Шаблон;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТипыРеквизитов(ИмяТаблицы, Предикаты)
|
||||
|
||||
Результат = Новый Соответствие();
|
||||
Реквизиты = Новый Массив();
|
||||
|
||||
ПсевдонимТаблицы = ЮТТестовыеДанные.СлучайныйИдентификатор() + СтрЗаменить(ИмяТаблицы, ".", "");
|
||||
ДлинаПсевдонима = СтрДлина(ПсевдонимТаблицы);
|
||||
|
||||
Для Каждого ВыражениеПредиката Из Предикаты Цикл
|
||||
Если ЮТПредикатыКлиентСервер.ЭтоПредикат(ВыражениеПредиката) И ЗначениеЗаполнено(ВыражениеПредиката.ИмяРеквизита) Тогда
|
||||
Реквизиты.Добавить(СтрШаблон("%1.%2 КАК _%3", ПсевдонимТаблицы, ВыражениеПредиката.ИмяРеквизита, Реквизиты.Количество()));
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Реквизиты) Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
Схема = Новый СхемаЗапроса();
|
||||
|
||||
Попытка
|
||||
Схема.УстановитьТекстЗапроса(СтрШаблон("ВЫБРАТЬ %1 ИЗ %2 КАК %3", СтрСоединить(Реквизиты, ","), ИмяТаблицы, ПсевдонимТаблицы));
|
||||
Исключение
|
||||
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки("Не удалось получить типы реквизитов отбора.
|
||||
|Возможно имена реквизитов заданы неверно");
|
||||
ВызватьИсключение
|
||||
КонецПопытки;
|
||||
|
||||
Для Каждого Колонка Из Схема.ПакетЗапросов[0].Колонки Цикл
|
||||
Выражение = Строка(Колонка.Поля[0]);
|
||||
Результат.Вставить(Сред(Выражение, ДлинаПсевдонима + 2), Новый ОписаниеТипов(Колонка.ТипЗначения, , "Null"));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоСтрокаНеограниченнойДлинны(ТипРеквизита)
|
||||
|
||||
Возврат ТипРеквизита <> Неопределено
|
||||
И ТипРеквизита.СодержитТип(Тип("Строка"))
|
||||
И ТипРеквизита.КвалификаторыСтроки.Длина = 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьУсловия(Условия, ИмяТаблицы, Запрос) Экспорт
|
||||
|
||||
Результат = Новый Массив();
|
||||
|
||||
Если НЕ ЗначениеЗаполнено(Условия) Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
ТипыРеквизитов = ТипыРеквизитов(ИмяТаблицы, Условия);
|
||||
ВидыСравнения = ЮТПредикаты.Выражения();
|
||||
|
||||
Для Каждого Условие Из Условия Цикл
|
||||
|
||||
Если НЕ ЮТПредикатыКлиентСервер.ЭтоПредикат(Условие) Тогда
|
||||
Результат.Добавить(Условие);
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПараметра = "Параметр_" + ЮТОбщий.ЧислоВСтроку(Запрос.Параметры.Количество() + 1);
|
||||
ТипРеквизита = ТипыРеквизитов[Условие.ИмяРеквизита];
|
||||
Шаблон = ШаблонУсловия(Условие, ВидыСравнения, ТипРеквизита);
|
||||
|
||||
ТекстУсловия = СтрШаблон(Шаблон, Условие.ИмяРеквизита, ИмяПараметра);
|
||||
|
||||
Результат.Добавить(ТекстУсловия);
|
||||
Запрос.Параметры.Вставить(ИмяПараметра, Условие.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -28,75 +28,18 @@
|
||||
ЗаполнитьВыбираемыеПоля(Описание, ВыбираемыеПоля);
|
||||
КонецЕсли;
|
||||
|
||||
СформироватьУсловия(ПредикатыУсловия, Описание.Условия, Описание.ЗначенияПараметров);
|
||||
Если ПредикатыУсловия <> Неопределено Тогда
|
||||
Описание.Условия = ЮТПредикатыКлиентСервер.НаборПредикатов(ПредикатыУсловия);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура СформироватьУсловия(Предикат, КоллекцияУсловий, ЗначенияПараметров) Экспорт
|
||||
|
||||
Если Предикат = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Предикаты = ЮТПредикатыКлиентСервер.НаборПредикатов(Предикат);
|
||||
ВидыСравнения = ЮТПредикаты.Выражения();
|
||||
|
||||
Для Каждого ВыражениеПредиката Из Предикаты Цикл
|
||||
|
||||
ИмяПараметра = "Параметр_" + ЮТОбщий.ЧислоВСтроку(ЗначенияПараметров.Количество() + 1);
|
||||
Шаблон = ШаблонУсловия(ВыражениеПредиката.ВидСравнения, ВидыСравнения);
|
||||
|
||||
Условие = СтрШаблон(Шаблон, ВыражениеПредиката.ИмяРеквизита, ИмяПараметра);
|
||||
|
||||
КоллекцияУсловий.Добавить(Условие);
|
||||
ЗначенияПараметров.Вставить(ИмяПараметра, ВыражениеПредиката.Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ШаблонУсловия(Знач Выражение, ВыраженияПредикатов)
|
||||
|
||||
Отрицание = ЮТПредикатыКлиентСервер.ЭтоВыраженияОтрицания(Выражение);
|
||||
Если Отрицание Тогда
|
||||
Выражение = ЮТПредикатыКлиентСервер.ВыраженияБезОтрицания(Выражение);
|
||||
КонецЕсли;
|
||||
|
||||
Если Выражение = ВыраженияПредикатов.Равно Тогда
|
||||
Шаблон = "%1 = &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Больше Тогда
|
||||
Шаблон = "%1 > &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.БольшеРавно Тогда
|
||||
Шаблон = "%1 >= &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Меньше Тогда
|
||||
Шаблон = "%1 < &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.МеньшеРавно Тогда
|
||||
Шаблон = "%1 <= &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.ИмеетТип Тогда
|
||||
Шаблон = "ТИПЗНАЧЕНИЯ(%1) = &%2";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Содержит Тогда
|
||||
Шаблон = "%1 ПОДОБНО ""%%"" + &%2 + ""%%""";
|
||||
ИначеЕсли Выражение = ВыраженияПредикатов.Заполнено Тогда
|
||||
// TODO Реализовать
|
||||
ВызватьИсключение "Проверка заполненности пока не поддерживается";
|
||||
Иначе
|
||||
ВызватьИсключение "Неподдерживаемое выражения предикатов " + Выражение;
|
||||
КонецЕсли;
|
||||
|
||||
Если Отрицание Тогда
|
||||
Шаблон = СтрШаблон("НЕ (%1)", Шаблон);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Шаблон;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьВыбираемыеПоля(ОписаниеЗапроса, Знач ВыбираемыеПоля)
|
||||
|
||||
ТипПараметра = ТипЗнч(ВыбираемыеПоля);
|
||||
|
@ -144,7 +144,7 @@
|
||||
.Фикция("Наименование")
|
||||
.Фикция("Поставщик");
|
||||
Ссылка = Конструктор.Записать();
|
||||
ДанныеСправочника = Конструктор.ДанныеОбъекта();
|
||||
Конструктор.ДанныеОбъекта();
|
||||
|
||||
ОписаниеЗапроса = ЮТЗапросы.ОписаниеЗапроса();
|
||||
ОписаниеЗапроса.ИмяТаблицы = "Справочник.Товары";
|
||||
@ -187,6 +187,29 @@
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи)
|
||||
.Свойство("Ссылка").Равно(Ссылка);
|
||||
|
||||
// Поиск по неограниченной строке
|
||||
ИмяФайла = ЮТест.Данные().СлучайнаяСтрока();
|
||||
Ссылка = ЮТест.Данные().КонструкторОбъекта("Справочники.ХранимыеФайлы")
|
||||
.ФикцияОбязательныхПолей()
|
||||
.Установить("ИмяФайла", ИмяФайла)
|
||||
.Записать();
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Справочник.ХранимыеФайлы", ЮТест.Предикат()
|
||||
.Реквизит("ИмяФайла").Равно(ИмяФайла));
|
||||
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи, "Поиск по неограниченной строке")
|
||||
.Свойство("Ссылка").Равно(Ссылка);
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Справочник.ХранимыеФайлы", ЮТест.Предикат()
|
||||
.Реквизит("ИмяФайла").Равно(5));
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи, "Поиск по неограниченной строке, число")
|
||||
.НеЗаполнено();
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Справочник.ХранимыеФайлы", ЮТест.Предикат()
|
||||
.Реквизит("ИмяФайла").Равно(Неопределено));
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи, "Поиск по неограниченной строке, Неопределено")
|
||||
.НеЗаполнено();
|
||||
|
||||
// Документ, тест на табличную часть
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара")
|
||||
.Фикция("Склад")
|
||||
|
Loading…
x
Reference in New Issue
Block a user