diff --git a/exts/yaxunit/src/CommonModules/ЮТЗапросы/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТЗапросы/Module.bsl index 56d53266..b117f901 100644 --- a/exts/yaxunit/src/CommonModules/ЮТЗапросы/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТЗапросы/Module.bsl @@ -46,10 +46,9 @@ // ИмяРеквизита - Строка - Имя получаемого реквизита, можно указать путь к вложенному реквизиту через точку // // Возвращаемое значение: -// Структура Из Произвольный - Значения реквизитов ссылки +// Произвольный - Значение реквизита ссылки Функция ЗначениеРеквизита(Ссылка, ИмяРеквизита) Экспорт - //@skip-check constructor-function-return-section Возврат ЮТЗапросыВызовСервера.ЗначенияРеквизитов(Ссылка, ИмяРеквизита, Истина); КонецФункции @@ -89,6 +88,45 @@ КонецФункции +// Возвращает значения реквизитов первой записи таблицы, соответствующей условиям +// +// Параметры: +// ИмяТаблицы - Строка +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ИменаРеквизитов - Строка - Имена получаемых реквизитов +// +// Возвращаемое значение: +// Произвольный - Значение реквизита записи +// +Функция ЗначенияРеквизитовЗаписи(ИмяТаблицы, Предикат, ИменаРеквизитов) Экспорт + + ОписаниеЗапроса = ЮТЗапросыКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, ИменаРеквизитов); + Возврат ЮТЗапросыВызовСервера.ЗначенияРеквизитовЗаписи(ОписаниеЗапроса, Ложь); + +КонецФункции + +// Возвращает значение реквизита первой записи таблицы, соответствующей условиям +// +// Параметры: +// ИмяТаблицы - Строка +// Предикат - Массив из см. ЮТФабрика.ВыражениеПредиката - Набор условий, см. ЮТПредикаты.Получить +// - см. ЮТФабрика.ВыражениеПредиката +// - ОбщийМодуль - Модуль настройки предикатов, см. ЮТест.Предикат +// ИмяРеквизита - Строка - Имя получаемого реквизита +// +// Возвращаемое значение: +// Структура Из Произвольный - Значения реквизитов записи +// +Функция ЗначениеРеквизитаЗаписи(ИмяТаблицы, Предикат, ИмяРеквизита) Экспорт + + ОписаниеЗапроса = ЮТЗапросыКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Предикат, ИмяРеквизита); + //@skip-check constructor-function-return-section + Возврат ЮТЗапросыВызовСервера.ЗначенияРеквизитовЗаписи(ОписаниеЗапроса, Истина); + +КонецФункции + // Вернет признак содержит ли таблица записи удовлетворяющие переданным условиям // // Параметры: diff --git a/exts/yaxunit/src/CommonModules/ЮТЗапросыВызовСервера/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТЗапросыВызовСервера/Module.bsl index 9a31a352..f4ce99d5 100644 --- a/exts/yaxunit/src/CommonModules/ЮТЗапросыВызовСервера/Module.bsl +++ b/exts/yaxunit/src/CommonModules/ЮТЗапросыВызовСервера/Module.bsl @@ -51,8 +51,8 @@ // ОдинРеквизит - Булево // // Возвращаемое значение: -// Структура Из Произвольный - Значения реквизитов ссылки, про значений получения множества реквизитов -// Произвольный - Значения реквизитов ссылки, если при получении значения одного реквизита +// - Структура Из Произвольный - Значения реквизитов ссылки при получении значений множества реквизитов +// - Произвольный - Значение реквизита ссылки при получении значения одного реквизита Функция ЗначенияРеквизитов(Ссылка, ИменаРеквизитов, ОдинРеквизит) Экспорт ИмяТаблицы = Ссылка.Метаданные().ПолноеИмя(); @@ -98,6 +98,39 @@ КонецФункции +// Возвращает значения реквизитов записи +// +// Параметры: +// ОписаниеЗапроса - см. ЮТЗапросы.ОписаниеЗапроса +// ОдинРеквизит - Булево +// +// Возвращаемое значение: +// - Структура Из Произвольный - Значения множества реквизитов записи +// - Произвольный - Значение одного реквизита записи +// +Функция ЗначенияРеквизитовЗаписи(ОписаниеЗапроса, ОдинРеквизит) Экспорт + + Запись = Записи(ОписаниеЗапроса, Истина); + + Если ТипЗнч(Запись) <> Тип("Структура") Тогда + Если ОдинРеквизит Тогда + Возврат Неопределено; + Иначе + Реквизиты = СтрСоединить(ОписаниеЗапроса.ВыбираемыеПоля, ","); + Возврат Новый Структура(Реквизиты); + КонецЕсли; + КонецЕсли; + + Если ОдинРеквизит Тогда + Для каждого КлючЗнач Из Запись Цикл + Возврат КлючЗнач.Значение; + КонецЦикла; + Иначе + Возврат Запись; + КонецЕсли; + +КонецФункции + #КонецОбласти #Область СлужебныеПроцедурыИФункции diff --git a/tests/src/CommonModules/ОМ_ЮТЗапросы/Module.bsl b/tests/src/CommonModules/ОМ_ЮТЗапросы/Module.bsl index afcf8ac8..0ae89ee6 100644 --- a/tests/src/CommonModules/ОМ_ЮТЗапросы/Module.bsl +++ b/tests/src/CommonModules/ОМ_ЮТЗапросы/Module.bsl @@ -28,6 +28,8 @@ .ДобавитьТест("РезультатПустой") .ДобавитьТест("Запись") .ДобавитьТест("Записи") + .ДобавитьТест("ЗначенияРеквизитовЗаписи") + .ДобавитьТест("ЗначениеРеквизитаЗаписи") ; КонецПроцедуры @@ -261,4 +263,70 @@ КонецПроцедуры +Процедура ЗначенияРеквизитовЗаписи() Экспорт + + Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары") + .Фикция("Наименование") + .Фикция("Штрихкод") + .Фикция("Поставщик"); + Данные = Конструктор.ДанныеОбъекта(); + Конструктор.Записать(); + + Предикат = ЮТест.Предикат().Реквизит("Наименование").Равно(Данные.Наименование); + ДанныеСсылки = ЮТЗапросы.ЗначенияРеквизитовЗаписи("Справочник.Товары", Предикат, "Наименование"); + ЮТест.ОжидаетЧто(ДанныеСсылки) + .ИмеетТип("Структура") + .Заполнено() + .Свойство("Наименование").Равно(Данные.Наименование); + + Предикат = ЮТест.Предикат() + .Реквизит("Штрихкод").Равно(Данные.Штрихкод) + .Реквизит("Поставщик").Равно(Данные.Поставщик); + ДанныеСсылки = ЮТЗапросы.ЗначенияРеквизитовЗаписи("Справочник.Товары", Предикат, "Штрихкод, Поставщик"); + ЮТест.ОжидаетЧто(ДанныеСсылки) + .ИмеетТип("Структура") + .Заполнено() + .Свойство("Штрихкод").Равно(Данные.Штрихкод) + .Свойство("Поставщик").Равно(Данные.Поставщик); + + Предикат = ЮТест.Предикат().Реквизит("Ссылка").Равно(ПредопределенноеЗначение("Справочник.Товары.ПустаяСсылка")); + ДанныеСсылки = ЮТЗапросы.ЗначенияРеквизитовЗаписи("Справочник.Товары", Предикат, "Код, Поставщик"); + ЮТест.ОжидаетЧто(ДанныеСсылки) + .ИмеетТип("Структура") + .Заполнено() + .Свойство("Код").Равно(Неопределено) + .Свойство("Поставщик").Равно(Неопределено); + +КонецПроцедуры + +Процедура ЗначениеРеквизитаЗаписи() Экспорт + + Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары") + .Фикция("Наименование") + .Фикция("Поставщик"); + Данные = Конструктор.ДанныеОбъекта(); + Конструктор.Записать(); + + Предикат = ЮТест.Предикат().Реквизит("Наименование").Равно(Данные.Наименование); + ЮТест.ОжидаетЧто(ЮТЗапросы.ЗначениеРеквизитаЗаписи("Справочник.Товары", Предикат, "Наименование")) + .ИмеетТип("Строка") + .Заполнено() + .Равно(Данные.Наименование); + + Предикат = ЮТест.Предикат().Реквизит("Поставщик").Равно(Данные.Поставщик); + ЮТест.ОжидаетЧто(ЮТЗапросы.ЗначениеРеквизитаЗаписи("Справочник.Товары", Предикат, "Поставщик")) + .Равно(Данные.Поставщик); + + Предикат = ЮТест.Предикат() + .Реквизит("Наименование").Равно(Данные.Наименование) + .Реквизит("Поставщик").Равно(Данные.Поставщик); + ЮТест.ОжидаетЧто(ЮТЗапросы.ЗначениеРеквизитаЗаписи("Справочник.Товары", Предикат, "Наименование, Поставщик")) + .Равно(Данные.Наименование); + + Предикат = ЮТест.Предикат().Реквизит("Ссылка").Равно(ПредопределенноеЗначение("Справочник.Товары.ПустаяСсылка")); + ЮТест.ОжидаетЧто(ЮТЗапросы.ЗначениеРеквизитаЗаписи("Справочник.Товары", Предикат, "Наименование")) + .Равно(Неопределено); + +КонецПроцедуры + #КонецОбласти