From 5a4139c60760cb593a94a275067c01f809ba8cd7 Mon Sep 17 00:00:00 2001
From: alkoleft <alkoleft@gmail.com>
Date: Fri, 19 May 2023 03:17:58 +0300
Subject: [PATCH] #90
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Унификация создания данных
Создание групп
---
 .../src/CommonModules/ЮТОбщий/Module.bsl      |  3 +-
 .../CommonModules/ЮТТестовыеДанные/Module.bsl | 51 +++++++++++++++-
 .../ЮТТестовыеДанныеВызовСервера/Module.bsl   | 60 ++++---------------
 .../ОМ_ЮТКонструкторТестовыхДанных/Module.bsl | 12 ++++
 .../ОМ_ЮТТестовыеДанные/Module.bsl            | 12 +++-
 5 files changed, 85 insertions(+), 53 deletions(-)

diff --git a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
index fad62160..0ab71e4a 100644
--- a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
@@ -175,12 +175,11 @@
 Функция ЗначениеСтруктуры(Знач ИсходнаяСтруктура, ИмяПоля, Знач ЗначениеПоУмолчанию = Неопределено,	ПроверятьЗаполненность = Ложь) Экспорт
 	
 	Если ПустаяСтрока(ИмяПоля) Тогда
-		
 		Возврат ЗначениеПоУмолчанию;
-		
 	КонецЕсли;
 	
 	ЗначениеПоля = Неопределено;
+	
 	Если ИсходнаяСтруктура.Свойство(ИмяПоля, ЗначениеПоля) Тогда
 		Если ПроверятьЗаполненность И ЗначениеЗаполнено(ЗначениеПоля) Или Не ПроверятьЗаполненность Тогда
 			Возврат ЗначениеПоля;
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
index 1b4cb406..1f938707 100644
--- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
@@ -29,8 +29,19 @@
 //  ЛюбаяСсылка - Ссылка на созданный объект
 Функция СоздатьЭлемент(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено) Экспорт
 	
-	Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЭлемент(Менеджер, Наименование, Реквизиты);
+	Если Реквизиты <> Неопределено Тогда
+		Данные = Реквизиты;
+	Иначе
+		Данные = Новый Структура;
+	КонецЕсли;
+	
+	Если ЗначениеЗаполнено(Наименование) Тогда
+		Данные.Вставить("Наименование", Наименование);
+	КонецЕсли;
+	
+	Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Менеджер, Данные, Неопределено, Ложь);
 	ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка);
+	
 	Возврат Ссылка;
 	
 КонецФункции
@@ -45,12 +56,48 @@
 //  ДокументСсылка - Ссылка на созданный объект
 Функция СоздатьДокумент(Менеджер, Реквизиты = Неопределено) Экспорт
 	
-	Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьДокумент(Менеджер, Реквизиты);
+	Если Реквизиты <> Неопределено Тогда
+		Данные = Реквизиты;
+	Иначе
+		Данные = Новый Структура;
+	КонецЕсли;
+	
+	Если Данные.Свойство("РежимЗаписи") Тогда
+		ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
+		ПараметрыЗаписи.РежимЗаписи = Данные.РежимЗаписи;
+		Данные.Удалить("РежимЗаписи");
+	КонецЕсли;
+	
+	Ссылка = ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь);
 	ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(Ссылка);
+	
 	Возврат Ссылка;
 	
 КонецФункции
 
+// Создает новую группу
+//  
+// Параметры:
+//  Менеджер - Произвольный - Менеджер справочника/ПВХ и тд.
+//  Наименование - Строка, Неопределено - Наименование элемента
+//  Реквизиты - Структура, Неопределено - Значения реквизитов элемента
+// 
+// Возвращаемое значение:
+//  ЛюбаяСсылка - Ссылка на созданную группу
+Функция СоздатьГруппу(Менеджер, Наименование = Неопределено, Реквизиты = Неопределено) Экспорт
+	
+	Если Реквизиты <> Неопределено Тогда
+		Данные = Реквизиты;
+	Иначе
+		Данные = Новый Структура;
+	КонецЕсли;
+	
+	Данные.Вставить("ЭтоГруппа", Истина);
+	
+	Возврат СоздатьЭлемент(Менеджер, Наименование, Данные);
+	
+КонецФункции
+
 // Генерирует и возвращает случайное число.
 // 
 // Параметры:
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl
index a8ce26d9..b59bf709 100644
--- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl
@@ -18,49 +18,6 @@
 
 #Область СлужебныйПрограммныйИнтерфейс
 
-Функция СоздатьЭлемент(Знач Менеджер, Знач Наименование, Знач Реквизиты) Экспорт
-	
-	Менеджер = ЮТОбщий.Менеджер(Менеджер);
-	
-	Объект = Менеджер.СоздатьЭлемент();
-	
-	Если ЗначениеЗаполнено(Наименование) Тогда
-		Объект.Наименование = Наименование;
-	ИначеЕсли Объект.Метаданные().ДлинаНаименования > 0 Тогда
-		Объект.Наименование = ЮТТестовыеДанные.УникальнаяСтрока();
-	КонецЕсли;
-	
-	Если Реквизиты <> Неопределено Тогда
-		ЗаполнитьЗначенияСвойств(Объект, Реквизиты);
-	КонецЕсли;
-	
-	Если Объект.Метаданные().ДлинаКода И НЕ ЗначениеЗаполнено(Объект.Код) Тогда
-		Объект.УстановитьНовыйКод();
-	КонецЕсли;
-	
-	Возврат ЗаписатьОбъект(Объект);
-	
-КонецФункции
-
-Функция СоздатьДокумент(Знач Менеджер, Знач Реквизиты) Экспорт
-	
-	РежимЗаписи = РежимЗаписиДокумента.Запись;
-	
-	Менеджер = ЮТОбщий.Менеджер(Менеджер);
-	
-	Объект = Менеджер.СоздатьДокумент();
-	Объект.Дата = ТекущаяДатаСеанса();
-	Объект.УстановитьНовыйНомер();
-	
-	Если Реквизиты <> Неопределено Тогда
-		ЗаполнитьЗначенияСвойств(Объект, Реквизиты);
-		РежимЗаписи = ЮТОбщий.ЗначениеСтруктуры(Реквизиты, "РежимЗаписи", РежимЗаписи);
-	КонецЕсли;
-	
-	Возврат ЗаписатьОбъект(Объект, , РежимЗаписи);
-	
-КонецФункции
-
 Функция СоздатьЗапись(Знач Менеджер, Знач Данные, Знач ПараметрыЗаписи, Знач ВернутьОбъект) Экспорт
 	
 	Менеджер = ЮТОбщий.Менеджер(Менеджер);
@@ -103,7 +60,7 @@
 	
 	ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектМетаданных(ТипЗнч(Менеджер));
 	
-	Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа);
+	Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, Данные);
 	ЗаполнитьЗначенияСвойств(Объект, Данные);
 	
 	Если ОписаниеОбъектаМетаданных.ОписаниеТипа.ТабличныеЧасти Тогда
@@ -201,7 +158,7 @@
 	ИмяТипаМенеджера = СтрШаблон("%1Менеджер.%2", ОписаниеТипа.Имя, ОбъектМетаданных.Имя);
 	Менеджер = Новый (ИмяТипаМенеджера);
 	
-	Объект = СоздатьОбъект(Менеджер, ОписаниеТипа);
+	Объект = СоздатьОбъект(Менеджер, ОписаниеТипа, РеквизитыЗаполнения);
 	
 	Если ЗначениеЗаполнено(РеквизитыЗаполнения) Тогда
 		ЗаполнитьЗначенияСвойств(Объект, РеквизитыЗаполнения);
@@ -223,13 +180,20 @@
 // См. ОписаниеМенеджера
 //  Менеджер - Произвольный - Менеджер
 //  ОписаниеТипа - см. ЮТМетаданные.ОписаниеОбъектМетаданных
-// 
+//  Данные - Структура
 // Возвращаемое значение:
 //  Произвольный - Создать объект
-Функция СоздатьОбъект(Менеджер, ОписаниеТипа)
+Функция СоздатьОбъект(Менеджер, ОписаниеТипа, Данные)
 	
 	Если ОписаниеТипа.Конструктор = "СоздатьЭлемент" Тогда
-		Результат = Менеджер.СоздатьЭлемент();
+		
+		ЭтоГруппа = ?(Данные = Неопределено, Ложь, ЮТОбщий.ЗначениеСтруктуры(Данные, "ЭтоГруппа", Ложь));
+		Если ЭтоГруппа Тогда
+			Результат = Менеджер.СоздатьГруппу();
+		Иначе
+			Результат = Менеджер.СоздатьЭлемент();
+		КонецЕсли;
+		
 	ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьДокумент" Тогда
 		Результат = Менеджер.СоздатьДокумент();
 	ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьСчет" Тогда
diff --git a/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl b/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl
index f8f2364a..5ed0a8ef 100644
--- a/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl
+++ b/tests/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl
@@ -25,6 +25,7 @@
 		.ДобавитьТест("ЗаполнитьДокумент")
 		.ДобавитьТест("Фикция")
 		.ДобавитьТест("ФикцияОбязательныхПолей")
+		.ДобавитьТест("СоздатьГруппу")
 	;
 		
 КонецПроцедуры
@@ -178,4 +179,15 @@
 		.Свойство("Курс").Заполнено();
 КонецПроцедуры
 
+Процедура СоздатьГруппу() Экспорт
+	
+	Группа = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары")
+		.Установить("ЭтоГруппа", Истина)
+		.Записать();
+	
+	ЭтоГруппа = ЮТЗапросы.ЗначениеРеквизита(Группа, "ЭтоГруппа");
+	ЮТест.ОжидаетЧто(ЭтоГруппа).ЭтоИстина();
+	
+КонецПроцедуры
+
 #КонецОбласти
diff --git a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
index 1afbd12c..4aa6e819 100644
--- a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
+++ b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
@@ -24,7 +24,8 @@
 		.ВТранзакции()
 		.УдалениеТестовыхДанных()
 		.ДобавитьТест("Удалить")
-		.ДобавитьТест("ВариантыПараметров");
+		.ДобавитьТест("ВариантыПараметров")
+		.ДобавитьТест("СоздатьГруппу")
 	;
 		
 КонецПроцедуры
@@ -78,5 +79,14 @@
 	
 КонецПроцедуры
 
+Процедура СоздатьГруппу() Экспорт
+	
+	Группа = ЮТест.Данные().СоздатьГруппу("Справочники.Товары");
+	
+	ЭтоГруппа = ЮТЗапросы.ЗначениеРеквизита(Группа, "ЭтоГруппа");
+	ЮТест.ОжидаетЧто(ЭтоГруппа).ЭтоИстина();
+	
+КонецПроцедуры
+
 #КонецОбласти