mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-03-17 20:48:01 +02:00
Расширен API запросов
This commit is contained in:
parent
084c6102be
commit
e954f52bde
@ -54,6 +54,41 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращяет первую запись таблицы соответствующую условиям
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяТаблицы - Строка - Имя таблицы базы
|
||||
// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
|
||||
// - см. ЮТФабрика.ВыражениеПредиката
|
||||
// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// Возвращаемое значение:
|
||||
// Структура, Неопределено - Содержит все данные записи, включая табличный части
|
||||
Функция Запись(ИмяТаблицы, Предикат) Экспорт
|
||||
|
||||
ОписаниеЗапроса = ЮТЗапросыКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, "*");
|
||||
//@skip-check constructor-function-return-section
|
||||
Возврат ЮТЗапросыВызовСервера.Записи(ОписаниеЗапроса, Истина);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращяет записи таблицы соответствующую условиям
|
||||
//
|
||||
// Параметры:
|
||||
// ИмяТаблицы - Строка - Имя таблицы базы
|
||||
// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить
|
||||
// - см. ЮТФабрика.ВыражениеПредиката
|
||||
// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат
|
||||
// - Неопределено - Проверит, что таблица не пустая
|
||||
// Возвращаемое значение:
|
||||
// Массив из Структура - Найденные записи, включая табличный части
|
||||
Функция Записи(ИмяТаблицы, Предикат) Экспорт
|
||||
|
||||
ОписаниеЗапроса = ЮТЗапросыКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, "*");
|
||||
Возврат ЮТЗапросыВызовСервера.Записи(ОписаниеЗапроса, Ложь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Вернет признак содержит ли таблица записи удовлетворяющие переданным условиям
|
||||
//
|
||||
// Параметры:
|
||||
@ -107,9 +142,7 @@
|
||||
// Возвращаемое значение:
|
||||
// Структура - Описание запроса:
|
||||
// * ИмяТаблицы - Строка -
|
||||
// * ВыбираемыеПоля - Структура - Выражения выбираемых полей:
|
||||
// * Ключ - Строка - Имя поля
|
||||
// * Значение - Строка - выражение поля
|
||||
// * ВыбираемыеПоля - Массив из Строка
|
||||
// * КоличествоЗаписей - Число, Неопределено - Ограничение количества выбираемых записей
|
||||
// * Условия - Массив из Строка - Коллекция выражений условий, которые будут объединены через `И`
|
||||
// * ЗначенияПараметров - Структура - Набор параметров запроса
|
||||
@ -117,7 +150,7 @@
|
||||
|
||||
Описание = Новый Структура();
|
||||
Описание.Вставить("ИмяТаблицы", "");
|
||||
Описание.Вставить("ВыбираемыеПоля", Новый Структура);
|
||||
Описание.Вставить("ВыбираемыеПоля", Новый Массив);
|
||||
Описание.Вставить("КоличествоЗаписей", Неопределено);
|
||||
Описание.Вставить("Условия", Новый Массив());
|
||||
Описание.Вставить("ЗначенияПараметров", Новый Структура());
|
||||
|
@ -23,26 +23,7 @@
|
||||
Запрос = Запрос(ОписаниеЗапроса);
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
Если НЕ ДляКлиента Тогда
|
||||
Возврат РезультатЗапроса.Выгрузить();
|
||||
ИначеЕсли РезультатЗапроса.Пустой() Тогда
|
||||
Возврат Новый Массив();
|
||||
КонецЕсли;
|
||||
|
||||
Ключи = СтрСоединить(ЮТОбщий.ВыгрузитьЗначения(РезультатЗапроса.Колонки, "Имя"), ",");
|
||||
Результат = Новый Массив();
|
||||
|
||||
Выборка = РезультатЗапроса.Выбрать();
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
|
||||
Запись = Новый Структура(Ключи);
|
||||
ЗаполнитьЗначенияСвойств(Запись, Выборка);
|
||||
Результат.Добавить(Запись);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
Возврат ВыгрузитьРезультатЗапроса(РезультатЗапроса, ДляКлиента);
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -88,6 +69,35 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращяет записи результат запроса
|
||||
//
|
||||
// Параметры:
|
||||
// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса
|
||||
// ОднаЗапись - Булево - Вернуть первую запись
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив из Структура, Структура, Неопределено - Записи
|
||||
Функция Записи(ОписаниеЗапроса, ОднаЗапись) Экспорт
|
||||
|
||||
Если ОднаЗапись Тогда
|
||||
ОписаниеЗапроса.КоличествоЗаписей = 1;
|
||||
КонецЕсли;
|
||||
|
||||
Запрос = Запрос(ОписаниеЗапроса);
|
||||
РезультатЗапроса = Запрос.Выполнить();
|
||||
|
||||
Записи = ВыгрузитьРезультатЗапроса(РезультатЗапроса, Истина);
|
||||
|
||||
Если НЕ ОднаЗапись Тогда
|
||||
Возврат Записи;
|
||||
ИначеЕсли Записи.Количество() Тогда
|
||||
Возврат Записи[0];
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
@ -108,14 +118,10 @@
|
||||
Строки.Добавить("ПЕРВЫЕ " + ЮТОбщий.ЧислоВСтроку(ОписаниеЗапроса.КоличествоЗаписей));
|
||||
КонецЕсли;
|
||||
|
||||
ВыбираемыеПоля = Новый Массив();
|
||||
Для Каждого Выражение Из ОписаниеЗапроса.ВыбираемыеПоля Цикл
|
||||
Поле = СтрШаблон(" %1 КАК %2", ?(Выражение.Значение = Неопределено, Выражение.Ключ, Выражение.Значение), Выражение.Ключ);
|
||||
ВыбираемыеПоля.Добавить(Поле);
|
||||
КонецЦикла;
|
||||
|
||||
Если НЕ ВыбираемыеПоля.Количество() Тогда
|
||||
ВыбираемыеПоля.Добавить("1 КАК Поле");
|
||||
Если ОписаниеЗапроса.ВыбираемыеПоля.Количество() Тогда
|
||||
ВыбираемыеПоля = ОписаниеЗапроса.ВыбираемыеПоля;
|
||||
Иначе
|
||||
ВыбираемыеПоля = ЮТОбщий.ЗначениеВМассиве("1 КАК Поле");
|
||||
КонецЕсли;
|
||||
|
||||
Строки.Добавить(СтрСоединить(ВыбираемыеПоля, "," + Символы.ПС));
|
||||
@ -159,4 +165,51 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыгрузитьРезультатЗапроса(РезультатЗапроса, ВМассив)
|
||||
|
||||
Если НЕ ВМассив Тогда
|
||||
Возврат РезультатЗапроса.Выгрузить();
|
||||
Иначе
|
||||
Результат = Новый Массив();
|
||||
КонецЕсли;
|
||||
|
||||
Если РезультатЗапроса.Пустой() Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
Реквизиты = Новый Массив();
|
||||
ТабличныеЧасти = Новый Массив();
|
||||
|
||||
ТипРезультатЗапроса = Тип("РезультатЗапроса");
|
||||
Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл
|
||||
|
||||
Реквизиты.Добавить(Колонка.Имя);
|
||||
|
||||
Если Колонка.ТипЗначения.СодержитТип(ТипРезультатЗапроса) Тогда
|
||||
ТабличныеЧасти.Добавить(Колонка.Имя);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ПараметрыКонструктора = СтрСоединить(Реквизиты, ",");
|
||||
|
||||
Выборка = РезультатЗапроса.Выбрать();
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
|
||||
Запись = Новый Структура(ПараметрыКонструктора);
|
||||
ЗаполнитьЗначенияСвойств(Запись, Выборка);
|
||||
|
||||
Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
|
||||
Запись[ТабличнаяЧасть] = ВыгрузитьРезультатЗапроса(Выборка[ТабличнаяЧасть], ВМассив);
|
||||
КонецЦикла;
|
||||
|
||||
Результат.Добавить(Запись);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -22,7 +22,11 @@
|
||||
|
||||
Описание = ЮТЗапросы.ОписаниеЗапроса();
|
||||
Описание.ИмяТаблицы = ИмяТаблицы;
|
||||
Описание.ВыбираемыеПоля.Вставить("Проверка", "1");
|
||||
Если ВыбираемыеПоля = Неопределено Тогда
|
||||
Описание.ВыбираемыеПоля.Добавить("1 КАК Проверка");
|
||||
Иначе
|
||||
ЗаполнитьВыбираемыеПоля(Описание, ВыбираемыеПоля)
|
||||
КонецЕсли;
|
||||
|
||||
СформироватьУсловия(ПредикатыУсловия, Описание.Условия, Описание.ЗначенияПараметров);
|
||||
|
||||
@ -93,4 +97,32 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьВыбираемыеПоля(ОписаниеЗапроса, Знач ВыбираемыеПоля)
|
||||
|
||||
ТипПараметра = ТипЗнч(ВыбираемыеПоля);
|
||||
|
||||
Если ТипПараметра = Тип("Строка") Тогда
|
||||
ВыбираемыеПоля = ЮТОбщий.РазложитьСтрокуВМассивПодстрок(ВыбираемыеПоля, ",", Истина);
|
||||
ТипПараметра = Тип("Массив");
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипПараметра = Тип("Массив") Тогда
|
||||
|
||||
ОписаниеЗапроса.ВыбираемыеПоля = ВыбираемыеПоля;
|
||||
|
||||
ИначеЕсли ТипПараметра = Тип("Структура") Тогда
|
||||
|
||||
Для Каждого Поле Из ВыбираемыеПоля Цикл
|
||||
Выражение = СтрШаблон("%1 КАК %2", Поле.Значение, Поле.Ключ);
|
||||
ОписаниеЗапроса.ВыбираемыеПоля.Добавить(Выражение);
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
ВызватьИсключение ЮТОбщий.НеподдерживаемыйПараметрМетода("ЮТЗапросыКлиентСервер.ЗаполнитьВыбираемыеПоля", ВыбираемыеПоля);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -26,6 +26,8 @@
|
||||
.ДобавитьТест("ТаблицаСодержитЗаписи")
|
||||
.ДобавитьТест("РезультатЗапроса")
|
||||
.ДобавитьТест("РезультатПустой")
|
||||
.ДобавитьТест("Запись")
|
||||
.ДобавитьТест("Записи")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -123,8 +125,8 @@
|
||||
ОписаниеЗапроса.Условия.Добавить("Ссылка = &Ссылка");
|
||||
ОписаниеЗапроса.Условия.Добавить("НЕ ПометкаУдаления");
|
||||
ОписаниеЗапроса.ЗначенияПараметров.Вставить("Ссылка", Ссылка);
|
||||
ОписаниеЗапроса.ВыбираемыеПоля.Вставить("Наименование");
|
||||
ОписаниеЗапроса.ВыбираемыеПоля.Вставить("Число", "1+1");
|
||||
ОписаниеЗапроса.ВыбираемыеПоля.Добавить("Наименование");
|
||||
ОписаниеЗапроса.ВыбираемыеПоля.Добавить("1+1 КАК Число");
|
||||
|
||||
ЮТест.ОжидаетЧто(ЮТЗапросы.РезультатЗапроса(ОписаниеЗапроса))
|
||||
.ИмеетДлину(1)
|
||||
@ -153,4 +155,110 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Запись() Экспорт
|
||||
|
||||
// Справочник
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары")
|
||||
.Фикция("Наименование")
|
||||
.Фикция("Поставщик");
|
||||
Ссылка = Конструктор.Записать();
|
||||
ДанныеОбъекта = Конструктор.ДанныеОбъекта();
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Справочник.Товары", ЮТест.Предикат()
|
||||
.Реквизит("Ссылка").Равно(Ссылка));
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Справочник.Товары", ЮТест.Предикат()
|
||||
.Реквизит("Поставщик").Равно(ДанныеОбъекта.Поставщик));
|
||||
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи)
|
||||
.ИмеетТип("Структура")
|
||||
.Заполнено()
|
||||
.Свойство("Ссылка").Равно(Ссылка)
|
||||
.Свойство("Наименование").Равно(ДанныеОбъекта.Наименование)
|
||||
.Свойство("Поставщик").Равно(ДанныеОбъекта.Поставщик);
|
||||
|
||||
// Справочник поиск по реквизиту
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Справочник.Товары", ЮТест.Предикат()
|
||||
.Реквизит("Поставщик").Равно(ДанныеОбъекта.Поставщик));
|
||||
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи)
|
||||
.Свойство("Ссылка").Равно(Ссылка);
|
||||
|
||||
// Документ, тест на табличную часть
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара")
|
||||
.Фикция("Склад")
|
||||
.Фикция("Организация")
|
||||
.Фикция("Поставщик")
|
||||
.ТабличнаяЧасть("Товары")
|
||||
.ДобавитьСтроку()
|
||||
.Фикция("Товар")
|
||||
.Фикция("Цена");
|
||||
|
||||
Ссылка = Конструктор.Записать();
|
||||
ДанныеОбъекта = Конструктор.ДанныеОбъекта();
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Документ.ПриходТовара", ЮТест.Предикат()
|
||||
.Реквизит("Ссылка").Равно(Ссылка));
|
||||
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи)
|
||||
.Свойство("Ссылка").Равно(Ссылка)
|
||||
.Свойство("Поставщик").Равно(ДанныеОбъекта.Поставщик)
|
||||
.Свойство("Товары")
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(1)
|
||||
.Свойство("Товары[0].НомерСтроки").Равно(1)
|
||||
.Свойство("Товары[0].Товар").Равно(ДанныеОбъекта.Товары[0].Товар);
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("Документ.ПриходТовара.Товары", ЮТест.Предикат()
|
||||
.Реквизит("Товар").Равно(ДанныеОбъекта.Товары[0].Товар));
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи)
|
||||
.Свойство("Ссылка").Равно(Ссылка)
|
||||
.Свойство("Товар").Равно(ДанныеОбъекта.Товары[0].Товар);
|
||||
|
||||
// Регистры
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("РегистрыСведений.КурсыВалют")
|
||||
.Фикция("Период")
|
||||
.Фикция("Валюта")
|
||||
.Фикция("Курс");
|
||||
Конструктор.Записать();
|
||||
ДанныеОбъекта = Конструктор.ДанныеОбъекта();
|
||||
|
||||
ДанныеЗаписи = ЮТЗапросы.Запись("РегистрСведений.КурсыВалют", ЮТест.Предикат()
|
||||
.Реквизит("Валюта").Равно(ДанныеОбъекта.Валюта));
|
||||
|
||||
ЮТест.ОжидаетЧто(ДанныеЗаписи)
|
||||
.Свойство("Валюта").Равно(ДанныеОбъекта.Валюта)
|
||||
.Свойство("Курс").Равно(ДанныеОбъекта.Курс);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Записи() Экспорт
|
||||
|
||||
ТоварыПоставщика = Новый Соответствие();
|
||||
Поставщик = ЮТест.Данные().СоздатьЭлемент("Справочники.Контрагенты");
|
||||
|
||||
Для Инд = 1 По 5 Цикл
|
||||
Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары")
|
||||
.Фикция("Наименование")
|
||||
.Установить("Поставщик", Поставщик);
|
||||
ТоварыПоставщика.Вставить(Конструктор.Записать(), Конструктор.ДанныеОбъекта());
|
||||
КонецЦикла;
|
||||
|
||||
Записи = ЮТЗапросы.Записи("Справочник.Товары", ЮТест.Предикат()
|
||||
.Реквизит("Поставщик").Равно(Поставщик));
|
||||
|
||||
ЮТест.ОжидаетЧто(Записи)
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(5);
|
||||
|
||||
Для Каждого Запись Из Записи Цикл
|
||||
ЮТест.ОжидаетЧто(Запись)
|
||||
.ИмеетТип("Структура")
|
||||
.Свойство("Ссылка")
|
||||
.Свойство("Поставщик").Равно(Поставщик)
|
||||
.Свойство("Код");
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
Loading…
x
Reference in New Issue
Block a user