diff --git a/docs/test-data.md b/docs/test-data.md
index 71dbe3bb..faf5495b 100644
--- a/docs/test-data.md
+++ b/docs/test-data.md
@@ -30,63 +30,137 @@
Примеры
+1. Генерация фейкового документа
+
+ ```bsl
+ #Если Сервер Тогда
+ Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
+ #Иначе
+ Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
+ #КонецЕсли
+
+ Конструктор
+ .Фикция("Поставщик")
+ .Фикция("Склад")
+ .Фикция("Валюта")
+ .Фикция("Организация")
+ .ТабличнаяЧасть("Товары");
+
+ Для Инд1 = 1 По ЮТест.Данные().СлучайноеЧисло(1, 5) Цикл
+ Конструктор.ДобавитьСтроку()
+ .Фикция("Товар")
+ .Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
+ .Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
+ .Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
+ КонецЦикла;
+
+ Ссылка = Конструктор.Провести();
+ ```
+
+2. Генерация произвольных фейковых данных
+
+ ```bsl
+ Функция ОписаниеСервера(Знач Идентификатор = Неопределено) Экспорт
+
+ Описание = БазовоеОписаниеОбъекта(Идентификатор, "СРВ");
+
+ Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
+ Описание.Вставить("ЧастотаЯдра", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(4, 3));
+ Описание.Вставить("КоличествоЯдер", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(10));
+ Описание.Вставить("КоличествоПотоков", Описание.КоличествоЯдер * 2);
+ Описание.Вставить("ПроизводительностьПроцессора", Описание.ЧастотаЯдра * Описание.КоличествоЯдер);
+ Описание.Вставить("ОбъемПамяти", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(1024, 3));
+ Описание.Вставить("Диски", Новый Массив());
+ Описание.Вставить("Кластер");
+
+ Для Инд = 1 По ЮТТестовыеДанные.СлучайноеЧисло(1, 3) Цикл
+ Описание.Диски.Добавить(ОписаниеДиска());
+ КонецЦикла;
+
+ Возврат Описание;
+
+ КонецФункции
+
+ Функция ОписаниеЗаявкиНаСозданиеВМ() Экспорт
+
+ Описание = Новый Структура();
+
+ Описание.Вставить("Наименование", "req-" + ЮТТестовыеДанные.СлучайнаяСтрока());
+ Описание.Вставить("ДатаДобавления", глПолучитьМосковскоеВремя());
+ Описание.Вставить("ДатаОкончанияАренды", глДобавитьКДате(глПолучитьМосковскоеВремя(), "ДЕНЬ", 2));
+ Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
+
+ Описание.Вставить("Проект", Проект());
+ Описание.Вставить("Мейнтейнер", ПараметрыСеанса.Сотрудник);
+
+ Описание.Вставить("КоличествоCPU", ЮТТестовыеДанные.СлучайноеЧисло(1, 4));
+ Описание.Вставить("КоличествоПамяти", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
+ Описание.Вставить("КоличествоДисков", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
+ Описание.Вставить("ОперационнаяСистема", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОперационныеСистемы));
+
+ Описание.Вставить("СредаЭксплуатации", "");
+ Описание.Вставить("Назначение", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.НазначенияВиртуальныхМашин));
+ Описание.Вставить("ТипСреды", Справочники.ТипыИнформационныхСред.BETA);
+ Описание.Вставить("КодСервиса", ЮТТестовыеДанные.СлучайнаяСтрока(1));
+
+ Возврат Описание;
+
+ КонецФункции
+
+ Функция НовыйОбразDocker(Версия, ПоУмолчанию = Истина) Экспорт
+
+ Данные = Новый Структура("Адрес, ВерсияПлатформы, ТипПлатформы, ИспользоватьПоУмолчанию");
+ Данные.Адрес = "gitlab.ru/orais/ci_cd/1cws-apache24:" + Версия;
+ Данные.ВерсияПлатформы = Версия;
+ Данные.ТипПлатформы = Перечисления.ТипыСоединенияИсточникаДанных.Соединение1СПредприятие83Сервер;
+ Данные.ИспользоватьПоУмолчанию = ПоУмолчанию;
+
+ Возврат ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОбразыDocker, Версия, Данные);
+
+ КонецФункции
+ ```
+
+3. Чтение из таблицы Markdown
+
```bsl
-Функция ОписаниеСервера(Знач Идентификатор = Неопределено) Экспорт
-
- Описание = БазовоеОписаниеОбъекта(Идентификатор, "СРВ");
-
- Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
- Описание.Вставить("ЧастотаЯдра", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(4, 3));
- Описание.Вставить("КоличествоЯдер", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(10));
- Описание.Вставить("КоличествоПотоков", Описание.КоличествоЯдер * 2);
- Описание.Вставить("ПроизводительностьПроцессора", Описание.ЧастотаЯдра * Описание.КоличествоЯдер);
- Описание.Вставить("ОбъемПамяти", ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(1024, 3));
- Описание.Вставить("Диски", Новый Массив());
- Описание.Вставить("Кластер");
-
- Для Инд = 1 По ЮТТестовыеДанные.СлучайноеЧисло(1, 3) Цикл
- Описание.Диски.Добавить(ОписаниеДиска());
+ Макет =
+ "| Имя | ИмяКоллекции | Конструктор | Группы | Ссылочный | Реквизиты | Измерения | Ресурсы | РеквизитыАдресации | ТабличныеЧасти |
+ ||------------------------|-------------------------|----------------------|--------|-----------|-----------|-----------|---------|--------------------|----------------|
+ || Справочник | Справочники | СоздатьЭлемент | + | + | + | | | | + |
+ || Документ | Документы | СоздатьДокумент | | + | + | | | | + |
+ || ПланВидовХарактеристик | ПланыВидовХарактеристик | СоздатьЭлемент | + | + | + | | | | + |
+ || ПланСчетов | ПланыСчетов | СоздатьСчет | | + | + | | | | + |
+ || ПланВидовРасчета | ПланыВидовРасчета | СоздатьВидРасчета | | + | + | | | | + |
+ || ПланОбмена | ПланыОбмена | СоздатьУзел | | + | + | | | | + |
+ || РегистрСведений | РегистрыСведений | СоздатьНаборЗаписей | | | + | + | + | | |
+ || РегистрНакопления | РегистрыНакопления | СоздатьНаборЗаписей | | | + | + | + | | |
+ || РегистрБухгалтерии | РегистрыБухгалтерии | СоздатьНаборЗаписей | | | + | + | + | | |
+ || РегистрРасчета | РегистрыРасчета | СоздатьНаборЗаписей | | | + | + | + | | |
+ || БизнесПроцесс | БизнесПроцессы | СоздатьБизнесПроцесс | | + | + | | | | + |
+ || Задача | Задачи | СоздатьЗадачу | | + | + | | | + | + |
+ |";
+ КоллекцияОписаний = ЮТТестовыеДанные.ТаблицаMarkDown(Макет);
+
+ ТипыМетаданных = Новый Структура();
+
+ Для Каждого Запись Из КоллекцияОписаний Цикл
+
+ Описание = Новый Структура();
+ Описание.Вставить("Имя", Запись.Имя);
+ Описание.Вставить("ИмяКоллекции", Запись.ИмяКоллекции);
+ Описание.Вставить("Конструктор", Запись.Конструктор);
+ Описание.Вставить("Группы", Запись.Группы = "+");
+ Описание.Вставить("Ссылочный", Запись.Ссылочный = "+");
+ Описание.Вставить("Реквизиты", Запись.Реквизиты = "+");
+ Описание.Вставить("Измерения", Запись.Измерения = "+");
+ Описание.Вставить("Ресурсы", Запись.Ресурсы = "+");
+ Описание.Вставить("РеквизитыАдресации", Запись.РеквизитыАдресации = "+");
+ Описание.Вставить("ТабличныеЧасти", Запись.ТабличныеЧасти = "+");
+
+ ТипыМетаданных.Вставить(Описание.Имя, Описание);
+ ТипыМетаданных.Вставить(Описание.ИмяКоллекции, Описание);
+
КонецЦикла;
-
- Возврат Описание;
-
-КонецФункции
-Функция ОписаниеЗаявкиНаСозданиеВМ() Экспорт
-
- Описание = Новый Структура();
-
- Описание.Вставить("Наименование", "req-" + ЮТТестовыеДанные.СлучайнаяСтрока());
- Описание.Вставить("ДатаДобавления", глПолучитьМосковскоеВремя());
- Описание.Вставить("ДатаОкончанияАренды", глДобавитьКДате(глПолучитьМосковскоеВремя(), "ДЕНЬ", 2));
- Описание.Вставить("Адрес", ЮТТестовыеДанные.СлучайныйIPАдрес());
-
- Описание.Вставить("Проект", Проект());
- Описание.Вставить("Мейнтейнер", ПараметрыСеанса.Сотрудник);
-
- Описание.Вставить("КоличествоCPU", ЮТТестовыеДанные.СлучайноеЧисло(1, 4));
- Описание.Вставить("КоличествоПамяти", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
- Описание.Вставить("КоличествоДисков", ЮТТестовыеДанные.СлучайноеЧисло(1, 16));
- Описание.Вставить("ОперационнаяСистема", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОперационныеСистемы));
-
- Описание.Вставить("СредаЭксплуатации", "");
- Описание.Вставить("Назначение", ЮТТестовыеДанные.СоздатьЭлемент(Справочники.НазначенияВиртуальныхМашин));
- Описание.Вставить("ТипСреды", Справочники.ТипыИнформационныхСред.BETA);
- Описание.Вставить("КодСервиса", ЮТТестовыеДанные.СлучайнаяСтрока(, 1));
-
- Возврат Описание;
-
-КонецФункции
-
-Функция НовыйОбразDocker(Версия, ПоУмолчанию = Истина) Экспорт
-
- Данные = Новый Структура("Адрес, ВерсияПлатформы, ТипПлатформы, ИспользоватьПоУмолчанию");
- Данные.Адрес = "gitlab.ru/orais/ci_cd/1cws-apache24:" + Версия;
- Данные.ВерсияПлатформы = Версия;
- Данные.ТипПлатформы = Перечисления.ТипыСоединенияИсточникаДанных.Соединение1СПредприятие83Сервер;
- Данные.ИспользоватьПоУмолчанию = ПоУмолчанию;
-
- Возврат ЮТТестовыеДанные.СоздатьЭлемент(Справочники.ОбразыDocker, Версия, Данные);
-
-КонецФункции
+ Возврат ТипыМетаданных;
```
diff --git a/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl
index 0f2c290e..0fd718a7 100644
--- a/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl
@@ -443,7 +443,7 @@
Настройки.Вставить("ПараметрыОбучения", Неопределено);
Настройки.Вставить("ПараметрыПроверки", Неопределено);
- ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Настройки);
+ ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Настройки, Истина);
КонецПроцедуры
diff --git a/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанных/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанных/Module.bsl
new file mode 100644
index 00000000..3e6e6f49
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанных/Module.bsl
@@ -0,0 +1,281 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции для служебного использования внутри подсистемы
+/////////////////////////////////////////////////////////////////////////////////
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Инициализирует конструктор тестовых данных
+//
+// Параметры:
+// Менеджер - Строка - Имя менеджера. Примеры: Справочники.Товары, Документы.ПриходТоваров
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Конструктор
+Функция Инициализировать(Менеджер) Экспорт
+
+ Контекст = НовыйКонтекстКонструктора(Менеджер);
+ ЮТКонтекст.УстановитьЗначениеКонтекста(КлючКонтекста(), Контекст);
+
+ Возврат ЮТКонструкторТестовыхДанных;
+
+КонецФункции
+
+// Устанавливает значение реквизита создаваемого объекта.
+// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значение реквизита строки табличной части
+//
+// Параметры:
+// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
+// Значение - Произвольный - Значение реквизита объекта или табличной части
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Конструктор
+Функция Установить(ИмяРеквизита, Значение) Экспорт
+
+ Контекст = Контекст();
+
+ Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
+ ТекущаяЗапись = ДанныеСтроки();
+ Иначе
+ ТекущаяЗапись = Контекст.Данные;
+ КонецЕсли;
+
+ ТекущаяЗапись.Вставить(ИмяРеквизита, Значение);
+
+ Возврат ЮТКонструкторТестовыхДанных;
+
+КонецФункции
+
+// Устанавливает фиктивное значение реквизита создаваемого объекта.
+// Если метод вызывается после вызова см. ТабличнаяЧасть, то устанавливается значение реквизита строки табличной части.
+//
+// На основании менеджера и имени реквизита вычисляется тип реквизита. На основании типа генерируется фиктивное значение.
+//
+// * Для примитивных значение генерируется случайное значение
+// * Для ссылочных типов создается новый объект
+// * Для перечислений (в том числе системных) выбирается случайно значение перечисления
+//
+// Параметры:
+// ИмяРеквизита - Строка - Имя реквизита объекта или табличной части
+// Реквизиты - Структура - Значения реквизитов заполнения создаваемого объекта базы
+// - Неопределено
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Конструктор
+Функция Фикция(ИмяРеквизита, Реквизиты = Неопределено) Экспорт
+
+ Контекст = Контекст();
+
+ Если ЗначениеЗаполнено(Контекст.ТекущаяТабличнаяЧасть) Тогда
+ ОписаниеРеквизита = Контекст.Метаданные.ТабличныеЧасти[Контекст.ТекущаяТабличнаяЧасть][ИмяРеквизита];
+ ТекущаяЗапись = ДанныеСтроки();
+ Иначе
+ ОписаниеРеквизита = Контекст.Метаданные.Реквизиты[ИмяРеквизита];
+ ТекущаяЗапись = Контекст.Данные;
+ КонецЕсли;
+
+ Значение = ЮТТестовыеДанныеСлужебный.Фикция(ОписаниеРеквизита.Тип);
+ ТекущаяЗапись.Вставить(ИмяРеквизита, Значение);
+
+ Возврат ЮТКонструкторТестовыхДанных;
+
+КонецФункции
+
+// Переключает конструктор на заполнение табличной части объекта
+//
+// Параметры:
+// ИмяТабличнойЧасти - Строка - Имя табличной части
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Конструктор
+Функция ТабличнаяЧасть(ИмяТабличнойЧасти) Экспорт
+
+ Контекст = Контекст();
+ Контекст.ТекущаяТабличнаяЧасть = ИмяТабличнойЧасти;
+ Контекст.Данные.Вставить(ИмяТабличнойЧасти, Новый Массив());
+
+ Возврат ЮТКонструкторТестовыхДанных;
+
+КонецФункции
+
+// Добавляет новую строку табличной части объекта
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Конструктор
+Функция ДобавитьСтроку() Экспорт
+
+ Контекст = Контекст();
+
+ Запись = Новый Структура();
+ ДанныеТабличнойЧасти(Контекст).Добавить(Запись);
+
+ Возврат ЮТКонструкторТестовыхДанных;
+
+КонецФункции
+
+// Устанавливает дополнительное свойство объекта
+//
+// Параметры:
+// ИмяСвойства - Строка - Имя дополнительного свойства
+// Значение - Произвольный - Значение дополнительного свойства
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Конструктор
+Функция УстановитьДополнительноеСвойство(ИмяСвойства, Значение) Экспорт
+
+ Контекст = Контекст();
+ Контекст.ДополнительныеСвойства.Вставить(ИмяСвойства, Значение);
+
+ Возврат ЮТКонструкторТестовыхДанных;
+
+КонецФункции
+
+// Возвращает данные текущей строки табличной части объекта
+//
+// Возвращаемое значение:
+// Структура - Данные строки
+// Неопределено - Если заполняется объект
+Функция ДанныеСтроки() Экспорт
+
+ Контекст = Контекст();
+
+ Если ПустаяСтрока(Контекст.ТекущаяТабличнаяЧасть) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ ДанныеТабличнойЧасти = ДанныеТабличнойЧасти(Контекст);
+
+ Если ДанныеТабличнойЧасти.Количество() Тогда
+ Возврат ДанныеТабличнойЧасти[ДанныеТабличнойЧасти.ВГраница()];
+ Иначе
+ ВызватьИсключение "Сначала необходимо добавить строку табличной части";
+ КонецЕсли;
+
+КонецФункции
+
+// Возвращает данные создаваемого объекта
+//
+// Возвращаемое значение:
+// Структура - Данные объекта
+Функция ДанныеОбъекта() Экспорт
+
+ Контекст = Контекст();
+ Возврат Контекст.Данные;
+
+КонецФункции
+
+// Создает новый объект и возвращает его или ссылку.
+//
+// Важно, после создания данные не очищаются, поэтому многократный вызов метода создаст множество объектов.
+// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор.
+//
+// Параметры:
+// ВернутьОбъект - Булево - Вернуть объект вместо ссылки
+//
+// Возвращаемое значение:
+// Произвольный - Созданный объект или ссылка на него
+Функция Записать(ВернутьОбъект = Ложь) Экспорт
+
+ Контекст = Контекст();
+
+ ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
+ ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
+
+ Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
+
+КонецФункции
+
+// Создает и проводит новый документ и возвращает его или ссылку.
+//
+// Параметры:
+// ВернутьОбъект - Булево - Вернуть объект вместо ссылки
+//
+// Важно, после создания данные не очищаются, поэтому многократный вызов метода создать множество объектов.
+// Если вы хотите создать полностью новый объект, необходимо по-новой инициировать конструктор.
+//
+// Возвращаемое значение:
+// Произвольный - Созданный объект или ссылка на него
+Функция Провести(ВернутьОбъект = Ложь) Экспорт
+
+ Контекст = Контекст();
+
+ ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
+ ПараметрыЗаписи.ДополнительныеСвойства = Контекст.ДополнительныеСвойства;
+ ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение;
+
+ Возврат ЮТТестовыеДанныеВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
+
+КонецФункции
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Процедуры и функции, составляющие внутреннюю реализацию модуля
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныеПроцедурыИФункции
+
+// Контекст.
+//
+// Возвращаемое значение:
+// см. НовыйКонтекстКонструктора
+Функция Контекст()
+
+ Возврат ЮТКонтекст.ЗначениеКонтекста(КлючКонтекста());
+
+КонецФункции
+
+// Новый контекст конструктора.
+//
+// Параметры:
+// Менеджер - Произвольный
+//
+// Возвращаемое значение:
+// Структура - Новый контекст конструктора:
+// * Менеджер - Произвольный
+// * Данные - Структура
+// * Метаданные - см. ЮТМетаданные.ОписаниеОбъектМетаданных
+// * ТекущаяТабличнаяЧасть - Строка -
+// * ДополнительныеСвойства - Структура
+Функция НовыйКонтекстКонструктора(Менеджер)
+
+ Контекст = Новый Структура("Менеджер, Данные, Метаданные", Менеджер, Новый Структура());
+ Контекст.Вставить("Менеджер", Менеджер);
+ Контекст.Вставить("Данные", Новый Структура());
+ Контекст.Вставить("Метаданные", ЮТМетаданные.ОписаниеОбъектМетаданных(Менеджер));
+ Контекст.Вставить("ТекущаяТабличнаяЧасть", "");
+ Контекст.Вставить("ДополнительныеСвойства", Новый Структура());
+
+ Возврат Контекст;
+
+КонецФункции
+
+Функция КлючКонтекста()
+
+ Возврат "КонструкторТестовыхДанных";
+
+КонецФункции
+
+Функция ДанныеТабличнойЧасти(Контекст)
+
+ Возврат Контекст.Данные[Контекст.ТекущаяТабличнаяЧасть];
+
+КонецФункции
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанных/ЮТКонструкторТестовыхДанных.mdo b/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанных/ЮТКонструкторТестовыхДанных.mdo
new file mode 100644
index 00000000..8e2e487f
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТКонструкторТестовыхДанных/ЮТКонструкторТестовыхДанных.mdo
@@ -0,0 +1,11 @@
+
+
+ ЮТКонструкторТестовыхДанных
+
+ ru
+ Конструктор тестовых данных
+
+ true
+ true
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl
new file mode 100644
index 00000000..cfa99df8
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТМетаданные/Module.bsl
@@ -0,0 +1,72 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции, предназначенные для использования другими
+// объектами конфигурации или другими программами
+/////////////////////////////////////////////////////////////////////////////////
+#Область ПрограммныйИнтерфейс
+
+// Модули подсистемы.
+// Возвращает список модулей подсистемы
+// Подсистема должна находится в подсистеме "ЮТФункциональность"
+// Параметры:
+// ИмяПодсистемы - Строка - Имя подсистемы
+//
+// Возвращаемое значение:
+// Массив из Строка - Имена модулей входящих в подсистему
+Функция МодулиПодсистемы(ИмяПодсистемы) Экспорт
+
+ Возврат ЮТМетаданныеПовтИсп.МодулиПодсистемы(ИмяПодсистемы);
+
+КонецФункции
+
+// Описание менеджера.
+//
+// Параметры:
+// Значение - Произвольный
+//
+// Возвращаемое значение:
+// Структура - Описание менеджера:
+// * ОписаниеТипа - см. ЮТМетаданныеСервер.ОписаниеТипаМетаданных
+// * Реквизиты - Структура из см. ЮТМетаданныеСервер.ОписаниеРеквизита
+// * ТабличныеЧасти - Структура из Структура -
+Функция ОписаниеОбъектМетаданных(Знач Значение) Экспорт
+
+ ТипЗначения = ТипЗнч(Значение);
+
+ Если ТипЗначения <> Тип("Тип") И ТипЗначения <> Тип("Строка") Тогда
+ Значение = ТипЗнч(Значение);
+ ТипЗначения = Тип("Тип");
+ КонецЕсли;
+
+ Если ТипЗначения = Тип("Тип") Тогда
+ Возврат ЮТМетаданныеСервер.ОписаниеОбъектМетаданных(Значение);
+ Иначе
+ Возврат ЮТМетаданныеПовтИсп.ОписаниеОбъектМетаданных(Значение);
+ КонецЕсли;
+
+КонецФункции
+
+Функция ТипыМетаданных() Экспорт
+
+ Возврат ЮТМетаданныеСервер.ТипыМетаданных();
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/exts/yaxunit/src/CommonModules/ЮТМетаданные/ЮТМетаданные.mdo b/exts/yaxunit/src/CommonModules/ЮТМетаданные/ЮТМетаданные.mdo
new file mode 100644
index 00000000..8d6beb15
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТМетаданные/ЮТМетаданные.mdo
@@ -0,0 +1,11 @@
+
+
+ ЮТМетаданные
+
+ ru
+ Метаданные
+
+ true
+ true
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/ЮТМетаданныеПовтИсп/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТМетаданныеПовтИсп/Module.bsl
new file mode 100644
index 00000000..2458974a
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТМетаданныеПовтИсп/Module.bsl
@@ -0,0 +1,43 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции, предназначенные для использования другими
+// объектами конфигурации или другими программами
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция МодулиПодсистемы(ИмяПодсистемы) Экспорт
+
+ Возврат ЮТМетаданныеСервер.МодулиПодсистемы(ИмяПодсистемы);
+
+КонецФункции
+
+Функция ОписаниеОбъектМетаданных(Знач Менеджер) Экспорт
+
+ Возврат ЮТМетаданныеСервер.ОписаниеОбъектМетаданных(Менеджер);
+
+КонецФункции
+
+Функция ТипыМетаданных() Экспорт
+
+ Возврат ЮТМетаданныеСервер.ТипыМетаданных();
+
+КонецФункции
+
+#КонецОбласти
\ No newline at end of file
diff --git a/exts/yaxunit/src/CommonModules/ЮТМетаданныеПовтИсп/ЮТМетаданныеПовтИсп.mdo b/exts/yaxunit/src/CommonModules/ЮТМетаданныеПовтИсп/ЮТМетаданныеПовтИсп.mdo
new file mode 100644
index 00000000..fc9ea7d8
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТМетаданныеПовтИсп/ЮТМетаданныеПовтИсп.mdo
@@ -0,0 +1,12 @@
+
+
+ ЮТМетаданныеПовтИсп
+
+ ru
+ Метаданные
+
+ true
+ true
+ true
+ DuringSession
+
diff --git a/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
index c63a93b4..8e7ed9e6 100644
--- a/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТМетаданныеСервер/Module.bsl
@@ -30,18 +30,6 @@
#Область СлужебныйПрограммныйИнтерфейс
-// РасширенияКонфигурации
-// Возвращает список имен установленных расширений
-// Возвращаемое значение:
-// Массив - Расширения конфигурации
-Функция РасширенияКонфигурации() Экспорт
-
- Расширения = РасширенияКонфигурации.Получить();
-
- Возврат ЮТОбщий.ВыгрузитьЗначения(Расширения, "Имя");
-
-КонецФункции
-
// МодулиРасширений
// Выполняет чтение метаданных общих модулей, которые предположительно могут являться тестами
//
@@ -134,6 +122,137 @@
КонецФункции
+Функция ОписаниеОбъектМетаданных(Знач Значение) Экспорт
+
+ ТипЗначение = ТипЗнч(Значение);
+
+ Если ТипЗначение = Тип("Тип") Тогда
+
+ МетаданныеОбъекта = Метаданные.НайтиПоТипу(Значение);
+ ОписаниеТипа = ОписаниеТипаМетаданных(МетаданныеОбъекта);
+
+ ИначеЕсли ТипЗначение = Тип("ОбъектМетаданных") Тогда
+
+ МетаданныеОбъекта = Значение;
+ ОписаниеТипа = ОписаниеТипаМетаданных(МетаданныеОбъекта);
+
+ ИначеЕсли ТипЗначение = Тип("Строка") Тогда
+
+ ЧастиСтроки = СтрРазделить(Значение, ".");
+ Если ЧастиСтроки.Количество() = 2 Тогда
+ ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
+ ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
+ Если ОписаниеТипа <> Неопределено Тогда
+ МетаданныеОбъекта = Метаданные[ОписаниеТипа.ИмяКоллекции][ЧастиСтроки[1]];
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Если МетаданныеОбъекта = Неопределено ИЛИ ОписаниеТипа = Неопределено Тогда
+ Сообщение = СтрШаблон("Не удалось получить описание метаданных для `%1` (%2)", Значение, ТипЗначение);
+ ВызватьИсключение Сообщение;
+ КонецЕсли;
+
+ ОписаниеОбъект = Новый Структура;
+ ОписаниеОбъект.Вставить("ОписаниеТипа", ОписаниеТипа);
+ ОписаниеОбъект.Вставить("Реквизиты", Новый Структура());
+ ОписаниеОбъект.Вставить("ТабличныеЧасти", Новый Структура());
+
+ ДобавитьОписанияРеквизитов(МетаданныеОбъекта.СтандартныеРеквизиты, ОписаниеОбъект.Реквизиты);
+
+ Если ОписаниеТипа.Измерения Тогда
+ ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Измерения, ОписаниеОбъект.Реквизиты);
+ КонецЕсли;
+
+ Если ОписаниеТипа.Реквизиты Тогда
+ ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Реквизиты, ОписаниеОбъект.Реквизиты);
+ КонецЕсли;
+
+ Если ОписаниеТипа.Ресурсы Тогда
+ ДобавитьОписанияРеквизитов(МетаданныеОбъекта.Ресурсы, ОписаниеОбъект.Реквизиты);
+ КонецЕсли;
+
+ Если ОписаниеТипа.РеквизитыАдресации Тогда
+ ДобавитьОписанияРеквизитов(МетаданныеОбъекта.РеквизитыАдресации, ОписаниеОбъект.Реквизиты);
+ КонецЕсли;
+
+ Если ОписаниеТипа.ТабличныеЧасти Тогда
+
+ Для Каждого ТабличнаяЧасть Из МетаданныеОбъекта.ТабличныеЧасти Цикл
+ РеквизитыТабличнойЧасти = Новый Структура();
+ ДобавитьОписанияРеквизитов(ТабличнаяЧасть.Реквизиты, РеквизитыТабличнойЧасти);
+
+ ОписаниеОбъект.ТабличныеЧасти.Вставить(ТабличнаяЧасть.Имя, РеквизитыТабличнойЧасти);
+ КонецЦикла;
+
+ КонецЕсли;
+
+ Возврат ОписаниеОбъект;
+
+КонецФункции
+
+// Описание типа метаданных.
+//
+// Параметры:
+// МетаданныеОбъекта - Тип, ОбъектМетаданных - Тип
+//
+// Возвращаемое значение:
+// Структура - Описание типа метаданных:
+// * Имя - Строка
+// * ИмяКоллекции - Строка
+// * Конструктор - Строка
+// * Группы - Булево
+// * Ссылочный - Булево
+// * Реквизиты - Булево
+// * Измерения - Булево
+// * Ресурсы - Булево
+// * РеквизитыАдресации - Булево
+// * ТабличныеЧасти - Булево
+Функция ОписаниеТипаМетаданных(Знач МетаданныеОбъекта) Экспорт
+
+ Если ТипЗнч(МетаданныеОбъекта) = Тип("Тип") Тогда
+ МетаданныеОбъекта = Метаданные.НайтиПоТипу(МетаданныеОбъекта);
+ КонецЕсли;
+
+ ПолноеИмя = МетаданныеОбъекта.ПолноеИмя();
+ ЧастиИмени = СтрРазделить(ПолноеИмя, ".");
+ Типы = ЮТМетаданные.ТипыМетаданных();
+
+ Возврат Типы[ЧастиИмени[0]];
+
+КонецФункции
+
+Функция ТипыМетаданных() Экспорт
+
+ Макет = ПолучитьОбщийМакет("ЮТОписаниеМетаданных").ПолучитьТекст();
+ КоллекцияОписаний = ЮТТестовыеДанные.ТаблицаMarkDown(Макет);
+
+ ТипыМетаданных = Новый Структура();
+
+ Для Каждого Запись Из КоллекцияОписаний Цикл
+
+ Описание = Новый Структура();
+ Описание.Вставить("Имя", Запись.Имя);
+ Описание.Вставить("ИмяКоллекции", Запись.ИмяКоллекции);
+ Описание.Вставить("Конструктор", Запись.Конструктор);
+ Описание.Вставить("Группы", Запись.Группы = "+");
+ Описание.Вставить("Ссылочный", Запись.Ссылочный = "+");
+ Описание.Вставить("Реквизиты", Запись.Реквизиты = "+");
+ Описание.Вставить("Измерения", Запись.Измерения = "+");
+ Описание.Вставить("Ресурсы", Запись.Ресурсы = "+");
+ Описание.Вставить("РеквизитыАдресации", Запись.РеквизитыАдресации = "+");
+ Описание.Вставить("ТабличныеЧасти", Запись.ТабличныеЧасти = "+");
+
+ ТипыМетаданных.Вставить(Описание.Имя, Описание);
+ ТипыМетаданных.Вставить(Описание.ИмяКоллекции, Описание);
+
+ КонецЦикла;
+
+ Возврат ТипыМетаданных;
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
@@ -142,4 +261,25 @@
#Область СлужебныеПроцедурыИФункции
+Процедура ДобавитьОписанияРеквизитов(КоллекцияРеквизитов, КоллекцияОписаний)
+
+ Для Каждого Реквизит Из КоллекцияРеквизитов Цикл
+
+ КоллекцияОписаний.Вставить(Реквизит.Имя, ОписаниеРеквизита(Реквизит));
+
+ КонецЦикла;
+
+КонецПроцедуры
+
+Функция ОписаниеРеквизита(Реквизит) Экспорт
+
+ Описание = Новый Структура();
+ Описание.Вставить("Имя", Реквизит.Имя);
+ Описание.Вставить("Тип", Реквизит.Тип);
+ Описание.Вставить("Обязательный", Реквизит.ПроверкаЗаполнения = ПроверкаЗаполнения.ВыдаватьОшибку);
+
+ Возврат Описание;
+
+КонецФункции
+
#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
index 84fca172..bb1c0ce3 100644
--- a/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
@@ -91,7 +91,7 @@
КонецФункции
// Сформировать строку символов.
-// Формирует строку из заданого количества повторяемых символов
+// Формирует строку из заданного количества повторяемых символов
// Параметры:
// Символ - Строка - Повторяемый символ
// Количество - Число - Количество повторений
@@ -803,6 +803,44 @@
КонецФункции
+Функция ВычислитьБезопасно(Выражение) Экспорт
+
+#Если НЕ ВебКлиент И НЕ ТонкийКлиент Тогда
+ УстановитьБезопасныйРежим(Истина);
+ Попытка
+ Значение = Вычислить(Выражение);
+ Исключение
+ УстановитьБезопасныйРежим(Ложь);
+ ВызватьИсключение;
+ КонецПопытки;
+
+ УстановитьБезопасныйРежим(Ложь);
+#Иначе
+ Значение = Вычислить(Выражение);
+#КонецЕсли
+
+ Возврат Значение;
+
+КонецФункции
+
+// Параметры записи объекта
+//
+// Возвращаемое значение:
+// Структура - Параметры записи:
+// * ОбменДаннымиЗагрузка - Булево
+// * ДополнительныеСвойства - Структура
+// * РежимЗаписи - РежимЗаписиДокумента
+Функция ПараметрыЗаписи() Экспорт
+
+ ПараметрыЗаписи = Новый Структура();
+ ПараметрыЗаписи.Вставить("ОбменДаннымиЗагрузка", Ложь);
+ ПараметрыЗаписи.Вставить("ДополнительныеСвойства", Новый Структура);
+ ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);
+
+ Возврат ПараметрыЗаписи;
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
@@ -811,9 +849,13 @@
#Область СлужебныйПрограммныйИнтерфейс
+// Описание типов любая ссылка.
+//
+// Возвращаемое значение:
+// ОписаниеТипов - Описание типов любая ссылка
Функция ОписаниеТиповЛюбаяСсылка() Экспорт
- Возврат ЮТОбщийВызовСервера.ОписаниеТиповЛюбаяСсылка();
+ Возврат ЮТПовторногоИспользования.ОписаниеТиповЛюбаяСсылка();
КонецФункции
@@ -853,8 +895,13 @@
Функция Модуль(ИмяМодуля) Экспорт
- //@skip-check server-execution-safe-mode
- Возврат Вычислить(ИмяМодуля);
+ Возврат ВычислитьБезопасно(ИмяМодуля);
+
+КонецФункции
+
+Функция Менеджер(Знач Менеджер) Экспорт
+
+ Возврат ЮТОбщийВызовСервера.Менеджер(Менеджер);
КонецФункции
diff --git a/exts/yaxunit/src/CommonModules/ЮТОбщийВызовСервера/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТОбщийВызовСервера/Module.bsl
index b7571c84..d54a5db0 100644
--- a/exts/yaxunit/src/CommonModules/ЮТОбщийВызовСервера/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТОбщийВызовСервера/Module.bsl
@@ -48,6 +48,16 @@
КонецФункции
+Функция Менеджер(Знач Менеджер) Экспорт
+
+ Если ТипЗнч(Менеджер) = Тип("Строка") Тогда
+ Менеджер = ЮТОбщий.ВычислитьБезопасно(Менеджер);
+ КонецЕсли;
+
+ Возврат Менеджер;
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
diff --git a/exts/yaxunit/src/CommonModules/ЮТПовторногоИспользования/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТПовторногоИспользования/Module.bsl
index 5b9c7944..da8746b2 100644
--- a/exts/yaxunit/src/CommonModules/ЮТПовторногоИспользования/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТПовторногоИспользования/Module.bsl
@@ -47,6 +47,12 @@
КонецФункции
+Функция ОписаниеТиповЛюбаяСсылка() Экспорт
+
+ Возврат ЮТОбщийВызовСервера.ОписаниеТиповЛюбаяСсылка();
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
diff --git a/exts/yaxunit/src/CommonModules/ЮТРасширения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТРасширения/Module.bsl
index d6975aba..b28166e4 100644
--- a/exts/yaxunit/src/CommonModules/ЮТРасширения/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТРасширения/Module.bsl
@@ -37,7 +37,7 @@
Функция ОбработчикиСобытий() Экспорт
- Возврат ЮТМетаданныеСервер.МодулиПодсистемы("ЮТОбработчикиСобытий");
+ Возврат ЮТМетаданные.МодулиПодсистемы("ЮТОбработчикиСобытий");
КонецФункции
@@ -50,7 +50,7 @@
Функция МодулиПодсистемы(ИмяПодсистемы)
- ИменаМодулей = ЮТМетаданныеСервер.МодулиПодсистемы(ИмяПодсистемы);
+ ИменаМодулей = ЮТМетаданные.МодулиПодсистемы(ИмяПодсистемы);
Модули = Новый Массив();
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
index 4c52deda..3280ef1b 100644
--- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
@@ -204,6 +204,12 @@
КонецФункции
+Функция СлучайноеБулево() Экспорт
+
+ Возврат СлучайноеЧисло() %2 = 0;
+
+КонецФункции
+
Функция НовыйФайл(Содержимое = Неопределено, ТолькоЧтение = Ложь, Расширение = Неопределено) Экспорт
Результат = НовоеИмяВременногоФайла(Расширение);
@@ -234,21 +240,14 @@
// Строка
Функция НовоеИмяВременногоФайла(Расширение = Неопределено) Экспорт
-#Если ВебКлиент Тогда
- ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТестовыеДанные.НовоеИмяВременногоФайла");
-#Иначе
Результат = ПолучитьИмяВременногоФайла(Расширение);
ЮТКонтекст.КонтекстТеста().ВременныеФайлы.Добавить(Результат);
Возврат Результат;
-#КонецЕсли
КонецФункции
Функция ТаблицаMarkDown(Строки) Экспорт
-#Если ВебКлиент Тогда
- ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТестовыеДанные.ТаблицаMarkDown");
-#Иначе
ЗагрузилиЗаголовок = Ложь;
Результат = Новый Массив();
Ключи = "";
@@ -307,7 +306,6 @@
Поток.Закрыть();
Возврат Результат;
-#КонецЕсли
КонецФункции
@@ -344,6 +342,33 @@
КонецФункции
+// Возвращает конструктор создания тестовых данных
+//
+// Конструктор имеет ряд особенностей:
+//
+// * Нельзя использовать параллельно несколько конструкторов.
+// Например,
+// ```bsl
+// Пользователь = КонструкторОбъекта(Справочники.Пользователи);
+// Документ = КонструкторОбъекта(Документы.Приход);
+// ...
+// Пользователь.Записать();
+// Документ.Провести();
+// ```
+// * Создание объекта происходит при вызове методов `Записать` и `Провести`, а создание реквизитов происходит во время вызова методов установки.
+// * При использовании на клиенте все значения должны быть сериализуемыми.
+//
+// Параметры:
+// Менеджер - Строка - Имя менеджера. Примеры: Справочники.Товары, Документы.ПриходТоваров
+//
+// Возвращаемое значение:
+// ОбщийМодуль - Конструктор
+Функция КонструкторОбъекта(Менеджер) Экспорт
+
+ Возврат ЮТКонструкторТестовыхДанных.Инициализировать(Менеджер);
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции для служебного использования внутри подсистемы
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl
index b316a269..421336e0 100644
--- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеВызовСервера/Module.bsl
@@ -34,9 +34,7 @@
// ЛюбаяСсылка - Ссылка на созданный объект
Функция СоздатьЭлемент(Знач Менеджер, Знач Наименование = Неопределено, Знач Реквизиты = Неопределено) Экспорт
- Если ТипЗнч(Менеджер) = Тип("Строка") Тогда
- Менеджер = Вычислить(Менеджер);
- КонецЕсли;
+ Менеджер = ЮТОбщий.Менеджер(Менеджер);
Объект = Менеджер.СоздатьЭлемент();
@@ -50,7 +48,11 @@
ЗаполнитьЗначенияСвойств(Объект, Реквизиты);
КонецЕсли;
- Объект.Записать();
+ Если Объект.Метаданные().ДлинаКода И НЕ ЗначениеЗаполнено(Объект.Код) Тогда
+ Объект.УстановитьНовыйКод();
+ КонецЕсли;
+
+ ЗаписатьОбъект(Объект);
Возврат Объект.Ссылка;
@@ -68,9 +70,7 @@
РежимЗаписи = РежимЗаписиДокумента.Запись;
- Если ТипЗнч(Менеджер) = Тип("Строка") Тогда
- Менеджер = Вычислить(Менеджер);
- КонецЕсли;
+ Менеджер = ЮТОбщий.Менеджер(Менеджер);
Объект = Менеджер.СоздатьДокумент();
Объект.Дата = ТекущаяДатаСеанса();
@@ -81,12 +81,68 @@
РежимЗаписи = ЮТОбщий.ЗначениеСтруктуры(Реквизиты, "РежимЗаписи", РежимЗаписи);
КонецЕсли;
- Объект.Записать(РежимЗаписи);
+ ЗаписатьОбъект(Объект, , РежимЗаписи);
Возврат Объект.Ссылка;
КонецФункции
+// Создать запись.
+//
+// Параметры:
+// Менеджер - Произвольный
+// Данные - Структура - Данные заполнения объекта
+// ПараметрыЗаписи - см. ЮТОбщий.
+// ВернутьОбъект - Булево - Вернуть объект
+//
+// Возвращаемое значение:
+// Произвольный - Создать запись
+Функция СоздатьЗапись(Знач Менеджер, Знач Данные, Знач ПараметрыЗаписи = Неопределено, Знач ВернутьОбъект = Ложь) Экспорт
+
+ Менеджер = ЮТОбщий.Менеджер(Менеджер);
+
+ ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектМетаданных(ТипЗнч(Менеджер));
+
+ Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа);
+ ЗаполнитьЗначенияСвойств(Объект, Данные);
+
+ Если ОписаниеОбъектаМетаданных.ОписаниеТипа.ТабличныеЧасти Тогда
+
+ Для Каждого ОписаниеТабличнойЧасти Из ОписаниеОбъектаМетаданных.ТабличныеЧасти Цикл
+
+ ИмяТабличнойЧасти = ОписаниеТабличнойЧасти.Ключ;
+ Если НЕ Данные.Свойство(ИмяТабличнойЧасти) Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Для Каждого Запись Из Данные[ИмяТабличнойЧасти] Цикл
+ Строка = Объект[ИмяТабличнойЧасти].Добавить();
+ ЗаполнитьЗначенияСвойств(Строка, Запись);
+ КонецЦикла;
+
+ КонецЦикла;
+
+ КонецЕсли;
+
+ Если ПараметрыЗаписи = Неопределено Тогда
+ ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
+ Иначе
+ ПереданныеПараметрыЗаписи = ПараметрыЗаписи;
+ ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
+ ЗаполнитьЗначенияСвойств(ПараметрыЗаписи, ПереданныеПараметрыЗаписи);
+ КонецЕсли;
+
+ ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
+
+ ЮТОбщий.ОбъединитьВСтруктуру(Объект.ДополнительныеСвойства, ПараметрыЗаписи.ДополнительныеСвойства);
+
+ РежимЗаписи = ?(СтрСравнить(ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя, "Документ") = 0, ПараметрыЗаписи.РежимЗаписи, Неопределено);
+ ЗаписатьОбъект(Объект, ПараметрыЗаписи.ОбменДаннымиЗагрузка, РежимЗаписи);
+
+ Возврат ?(ВернутьОбъект, Объект, Объект.Ссылка);
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
// Экспортные процедуры и функции для служебного использования внутри подсистемы
@@ -94,6 +150,39 @@
#Область СлужебныйПрограммныйИнтерфейс
+
+Функция ФикцияЗначенияБазы(Знач ТипЗначения) Экспорт
+
+ ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);
+
+ Если ОбъектМетаданных = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Если Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда
+
+ Менеджер = Новый ("ПеречислениеМенеджер." + ОбъектМетаданных.Имя);
+ НомерЗначения = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(Менеджер.Количество());
+ Возврат Менеджер.Получить(НомерЗначения - 1);
+
+ КонецЕсли;
+
+ ОписаниеОбъектаМетаданных = ЮТМетаданныеСервер.ОписаниеОбъектМетаданных(ОбъектМетаданных);
+ ОписаниеТипа = ОписаниеОбъектаМетаданных.ОписаниеТипа;
+
+ ИмяТипаМенеджера = СтрШаблон("%1Менеджер.%2", ОписаниеТипа.Имя, ОбъектМетаданных.Имя);
+ Менеджер = Новый (ИмяТипаМенеджера);
+
+ Объект = СоздатьОбъект(Менеджер, ОписаниеТипа);
+
+ ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
+
+ ЗаписатьОбъект(Объект);
+
+ Возврат Объект.Ссылка;
+
+КонецФункции
+
#КонецОбласти
/////////////////////////////////////////////////////////////////////////////////
@@ -102,4 +191,89 @@
#Область СлужебныеПроцедурыИФункции
+// Создать объект.
+//
+// Параметры: ОписаниеМенеджера -
+// См. ОписаниеМенеджера
+// Менеджер - Произвольный - Менеджер
+// ОписаниеТипа - см. ЮТМетаданные.ОписаниеОбъектМетаданных
+//
+// Возвращаемое значение:
+// Произвольный - Создать объект
+Функция СоздатьОбъект(Менеджер, ОписаниеТипа)
+
+ Если ОписаниеТипа.Конструктор = "СоздатьЭлемент" Тогда
+ Результат = Менеджер.СоздатьЭлемент();
+ ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьДокумент" Тогда
+ Результат = Менеджер.СоздатьДокумент();
+ ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьСчет" Тогда
+ Результат = Менеджер.СоздатьСчет();
+ ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьВидРасчета" Тогда
+ Результат = Менеджер.СоздатьВидРасчета();
+ ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьУзел" Тогда
+ Результат = Менеджер.СоздатьУзел();
+ ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьНаборЗаписей" Тогда
+ Результат = Менеджер.СоздатьНаборЗаписей();
+ ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьБизнесПроцесс" Тогда
+ Результат = Менеджер.СоздатьБизнесПроцесс();
+ ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьЗадачу" Тогда
+ Результат = Менеджер.СоздатьЗадачу();
+ Иначе
+ ВызватьИсключение СтрШаблон("Для %1 не поддерживается создание записей ИБ", ОписаниеТипа.Имя);
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+Процедура ЗаписатьОбъект(Объект, ОбменДаннымиЗагрузка = Ложь, РежимЗаписи = Неопределено)
+
+ Если ОбменДаннымиЗагрузка Тогда
+ Объект.ОбменДанными.Загрузка = Истина;
+ КонецЕсли;
+
+ Попытка
+
+ Если РежимЗаписи <> Неопределено Тогда
+ Объект.Записать(РежимЗаписи);
+ Иначе
+ Объект.Записать();
+ КонецЕсли;
+
+ Исключение
+
+ Сообщение = СтрШаблон("Не удалось записать объект `%1` (%2)
+ |%3", Объект, ТипЗнч(Объект), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
+ ВызватьИсключение Сообщение;
+
+ КонецПопытки;
+
+КонецПроцедуры
+
+Процедура ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных)
+
+ ОписаниеТипа = ОписаниеОбъектаМетаданных.ОписаниеТипа;
+ Если ОписаниеТипа.Имя = "Документ" Тогда
+ Если НЕ ЗначениеЗаполнено(Объект.Дата) Тогда
+ Объект.Дата = ТекущаяДатаСеанса();
+ КонецЕсли;
+ Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда
+ Объект.УстановитьНовыйНомер();
+ КонецЕсли;
+ КонецЕсли;
+
+ Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство("Код")
+ И ОписаниеОбъектаМетаданных.Реквизиты.Код.Обязательный
+ И Не ЗначениеЗаполнено(Объект.Код) Тогда
+ Объект.УстановитьНовыйКод();
+ КонецЕсли;
+
+ Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство("Наименование")
+ И ОписаниеОбъектаМетаданных.Реквизиты.Наименование.Обязательный
+ И Не ЗначениеЗаполнено(Объект.Наименование) Тогда
+ Объект.Наименование = ЮТТестовыеДанные.СлучайнаяСтрока();
+ КонецЕсли;
+
+КонецПроцедуры
+
#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеСлужебный/Module.bsl
new file mode 100644
index 00000000..755bafca
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеСлужебный/Module.bsl
@@ -0,0 +1,138 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции, предназначенные для использования другими
+// объектами конфигурации или другими программами
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Фикция.
+//
+// Параметры:
+// ОписаниеТипа - ОписаниеТипов
+//
+// Возвращаемое значение:
+//
+Функция Фикция(ОписаниеТипа) Экспорт
+
+ Если ОписаниеТипа.Типы().Количество() > 1 Тогда
+ НомерТипа = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(ОписаниеТипа.Типы().Количество());
+ Тип = ОписаниеТипа.Типы()[НомерТипа - 1];
+ Иначе
+ Тип = ОписаниеТипа.Типы()[0];
+ КонецЕсли;
+
+ Значение = Неопределено;
+
+ Если Тип = Тип("Число") Тогда
+
+ МаксимальноеЗначение = 4294967295;
+ Если ОписаниеТипа.КвалификаторыЧисла.ДопустимыйЗнак = ДопустимыйЗнак.Неотрицательный ИЛИ ЮТТестовыеДанные.СлучайноеБулево() Тогда
+ МаксимальноеЗначение = ОписаниеТипа.ПривестиЗначение(МаксимальноеЗначение);
+ Значение = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(МаксимальноеЗначение, ОписаниеТипа.КвалификаторыЧисла.РазрядностьДробнойЧасти);
+ Иначе
+ МаксимальноеЗначение = ОписаниеТипа.ПривестиЗначение(МаксимальноеЗначение);
+ Значение = ЮТТестовыеДанные.СлучайноеОтрицательноеЧисло(МаксимальноеЗначение, ОписаниеТипа.КвалификаторыЧисла.РазрядностьДробнойЧасти);
+ КонецЕсли;
+
+ ИначеЕсли Тип = Тип("Строка") Тогда
+
+ Если ОписаниеТипа.КвалификаторыСтроки.Длина = 0 Тогда
+ Значение = ЮТТестовыеДанные.СлучайнаяСтрока(ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(100));
+ Иначе
+ Значение = ЮТТестовыеДанные.СлучайнаяСтрока(ОписаниеТипа.КвалификаторыСтроки.Длина);
+ КонецЕсли;
+
+ ИначеЕсли Тип = Тип("Дата") Тогда
+
+ Значение = ЮТТестовыеДанные.СлучайнаяДата(ТекущаяДата() - 315360000, ТекущаяДата() + 315360000); // +/- 10 лет
+
+ ИначеЕсли Тип = Тип("Булево") Тогда
+
+ Значение = ЮТТестовыеДанные.СлучайноеБулево();
+
+ ИначеЕсли ЭтоСистемноеПеречисление(Тип) Тогда
+
+ Значение = СлучайноЗначениеСистемногоПеречисления(Тип);
+ Иначе
+
+ Значение = ЮТТестовыеДанныеВызовСервера.ФикцияЗначенияБазы(Тип);
+
+ КонецЕсли;
+
+ Если Значение = Неопределено Тогда
+ ВызватьИсключение СтрШаблон("Создание фейковых значений для `%1` не поддерживается", ОписаниеТипа);
+ КонецЕсли;
+
+
+ Возврат ОписаниеТипа.ПривестиЗначение(Значение);
+
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+Функция ЭтоСистемноеПеречисление(Тип)
+
+ Возврат ТипыСистемныхПеречислений().СодержитТип(Тип);
+
+КонецФункции
+
+Функция ТипыСистемныхПеречислений()
+
+ Возврат Новый ОписаниеТипов(
+ "ВидДвиженияБухгалтерии,
+ |ВидДвиженияНакопления,
+ |ВидПериодаРегистраРасчета,
+ |ВидСчета,
+ |ВидТочкиМаршрутаБизнесПроцесса,
+ |ИспользованиеГруппИЭлементов,
+ |ИспользованиеСреза,
+ |ИспользованиеРежимаПроведения,
+ |РежимАвтоВремя,
+ |РежимЗаписиДокумента,
+ |РежимПроведенияДокумента,
+ |ПериодичностьАгрегатаРегистраНакопления,
+ |ИспользованиеАгрегатаРегистраНакопления");
+
+КонецФункции
+
+Функция ИмяСистемногоПеречисления(Тип)
+
+ Возврат Строка(Тип);
+
+КонецФункции
+
+Функция СлучайноЗначениеСистемногоПеречисления(Тип)
+
+ Менеджер = ЮТОбщий.ВычислитьБезопасно(ИмяСистемногоПеречисления(Тип));
+
+ Значения = Новый Массив();
+
+ Для Каждого Значение Из Менеджер Цикл
+ Значения.Добавить(Значение);
+ КонецЦикла;
+
+ Возврат ЮТТестовыеДанные.СлучайноеЗначениеИзСписка(Значения);
+
+КонецФункции
+
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеСлужебный/ЮТТестовыеДанныеСлужебный.mdo b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеСлужебный/ЮТТестовыеДанныеСлужебный.mdo
new file mode 100644
index 00000000..b69187c8
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанныеСлужебный/ЮТТестовыеДанныеСлужебный.mdo
@@ -0,0 +1,11 @@
+
+
+ ЮТТестовыеДанныеСлужебный
+
+ ru
+ Тестовые данные служебный
+
+ true
+ true
+ true
+
diff --git a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
index 92cffdb9..c7efee30 100644
--- a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
@@ -584,7 +584,7 @@
// Проверяет установленное значение Контекста (или его свойство) на соответствие переданному типу.
//
// Параметры:
-// ОжидаемоеЗначение - Строка, Тип - Ожидается, что значение Контекста (или его свойство) имеет данный тип
+// ОжидаемоеЗначение - Строка, Тип, ОписаниеТипов - Ожидается, что значение Контекста (или его свойство) имеет данный тип
// ОписаниеПроверки - Строка - Описание конкретной проверки
//
// Возвращаемое значение:
@@ -601,7 +601,7 @@
// Проверяет установленное значение Контекста (или его свойство) на несоответствие переданному типу.
//
// Параметры:
-// ОжидаемоеЗначение - Строка, Тип - Ожидается, что значение Контекста (или его свойство) НЕ имеет данный тип
+// ОжидаемоеЗначение - Строка, Тип, ОписаниеТипов - Ожидается, что значение Контекста (или его свойство) НЕ имеет данный тип
// ОписаниеПроверки - Строка - Описание конкретной проверки
//
// Возвращаемое значение:
@@ -1559,7 +1559,8 @@
Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда
// СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено")
- Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено;
+ Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено
+ И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение;
Иначе
Соответствует = ТипЗначения = ОжидаемыйТип;
КонецЕсли;
diff --git a/exts/yaxunit/src/CommonTemplates/ЮТОписаниеМетаданных/Template.txt b/exts/yaxunit/src/CommonTemplates/ЮТОписаниеМетаданных/Template.txt
new file mode 100644
index 00000000..8a842b97
--- /dev/null
+++ b/exts/yaxunit/src/CommonTemplates/ЮТОписаниеМетаданных/Template.txt
@@ -0,0 +1,16 @@
+# Описание свойств метаданных
+
+| Имя | ИмяКоллекции | Конструктор | Группы | Ссылочный | Реквизиты | Измерения | Ресурсы | РеквизитыАдресации | ТабличныеЧасти |
+|------------------------|-------------------------|----------------------|--------|-----------|-----------|-----------|---------|--------------------|----------------|
+| Справочник | Справочники | СоздатьЭлемент | + | + | + | | | | + |
+| Документ | Документы | СоздатьДокумент | | + | + | | | | + |
+| ПланВидовХарактеристик | ПланыВидовХарактеристик | СоздатьЭлемент | + | + | + | | | | + |
+| ПланСчетов | ПланыСчетов | СоздатьСчет | | + | + | | | | + |
+| ПланВидовРасчета | ПланыВидовРасчета | СоздатьВидРасчета | | + | + | | | | + |
+| ПланОбмена | ПланыОбмена | СоздатьУзел | | + | + | | | | + |
+| РегистрСведений | РегистрыСведений | СоздатьНаборЗаписей | | | + | + | + | | |
+| РегистрНакопления | РегистрыНакопления | СоздатьНаборЗаписей | | | + | + | + | | |
+| РегистрБухгалтерии | РегистрыБухгалтерии | СоздатьНаборЗаписей | | | + | + | + | | |
+| РегистрРасчета | РегистрыРасчета | СоздатьНаборЗаписей | | | + | + | + | | |
+| БизнесПроцесс | БизнесПроцессы | СоздатьБизнесПроцесс | | + | + | | | | + |
+| Задача | Задачи | СоздатьЗадачу | | + | + | | | + | + |
diff --git a/exts/yaxunit/src/CommonTemplates/ЮТОписаниеМетаданных/ЮТОписаниеМетаданных.mdo b/exts/yaxunit/src/CommonTemplates/ЮТОписаниеМетаданных/ЮТОписаниеМетаданных.mdo
new file mode 100644
index 00000000..6c8c138b
--- /dev/null
+++ b/exts/yaxunit/src/CommonTemplates/ЮТОписаниеМетаданных/ЮТОписаниеМетаданных.mdo
@@ -0,0 +1,9 @@
+
+
+ ЮТОписаниеМетаданных
+
+ ru
+ Описание метаданных
+
+ TextDocument
+
diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo
index ce2a9184..de89444b 100644
--- a/exts/yaxunit/src/Configuration/Configuration.mdo
+++ b/exts/yaxunit/src/Configuration/Configuration.mdo
@@ -1,10 +1,6 @@
YAXUNIT
-
- ru
- YAXUNIT
-
Adopted
Extended
@@ -37,6 +33,7 @@
CommonPicture.ЮТУпал
CommonPicture.ЮТУспешно
CommonPicture.ЮТЭлементыТестов
+ CommonTemplate.ЮТОписаниеМетаданных
CommonModule.Мокито
CommonModule.МокитоОбучение
CommonModule.МокитоПроверки
@@ -45,12 +42,15 @@
CommonModule.ЮТИсполнитель
CommonModule.ЮТИсполнительСервер
CommonModule.ЮТКонструкторВариантов
+ CommonModule.ЮТКонструкторТестовыхДанных
CommonModule.ЮТКонтекст
CommonModule.ЮТКонтекстКлиент
CommonModule.ЮТКонтекстСервер
CommonModule.ЮТКонтекстТеста
CommonModule.ЮТЛогирование
CommonModule.ЮТЛогированиеВызовСервера
+ CommonModule.ЮТМетаданные
+ CommonModule.ЮТМетаданныеПовтИсп
CommonModule.ЮТМетаданныеСервер
CommonModule.ЮТОбщий
CommonModule.ЮТОбщийВызовСервера
@@ -64,6 +64,7 @@
CommonModule.ЮТСобытия
CommonModule.ЮТТестовыеДанные
CommonModule.ЮТТестовыеДанныеВызовСервера
+ CommonModule.ЮТТестовыеДанныеСлужебный
CommonModule.ЮТТесты
CommonModule.ЮТУтверждения
CommonModule.ЮТФабрика
diff --git a/ТестыПример/.settings/com.e1c.v8codestyle.autosort.prefs b/ТестыПример/.settings/com.e1c.v8codestyle.autosort.prefs
new file mode 100644
index 00000000..23b06250
--- /dev/null
+++ b/ТестыПример/.settings/com.e1c.v8codestyle.autosort.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+topObjects=true
diff --git a/ТестыПример/src/CommonModules/ОМ_Мокито/Module.bsl b/ТестыПример/src/CommonModules/ОМ_Мокито/Module.bsl
index 55a4f630..953462ba 100644
--- a/ТестыПример/src/CommonModules/ОМ_Мокито/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_Мокито/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/ТестыПример/src/CommonModules/ОМ_МокитоОбучение/Module.bsl b/ТестыПример/src/CommonModules/ОМ_МокитоОбучение/Module.bsl
index bba28a8f..a3770671 100644
--- a/ТестыПример/src/CommonModules/ОМ_МокитоОбучение/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_МокитоОбучение/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl b/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl
index f5bafd4a..4b204f4d 100644
--- a/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_Общий/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/ТестыПример/src/CommonModules/ОМ_ОшибкаЗагрузкиСценариев/Module.bsl b/ТестыПример/src/CommonModules/ОМ_ОшибкаЗагрузкиСценариев/Module.bsl
index abc07779..1638341a 100644
--- a/ТестыПример/src/CommonModules/ОМ_ОшибкаЗагрузкиСценариев/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_ОшибкаЗагрузкиСценариев/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl b/ТестыПример/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl
new file mode 100644
index 00000000..d341d443
--- /dev/null
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/Module.bsl
@@ -0,0 +1,121 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции, предназначенные для использования другими
+// объектами конфигурации или другими программами
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+Процедура ИсполняемыеСценарии() Экспорт
+
+ ЮТТесты.ВТранзакции()
+ .ДобавитьТест("ЗаполнитьСправочник")
+ .ДобавитьТест("ЗаполнитьДокумент")
+ ;
+
+КонецПроцедуры
+
+Процедура ЗаполнитьСправочник() Экспорт
+
+#Если Сервер Тогда
+ Конструктор = ЮТест.Данные().КонструкторОбъекта(Справочники.Товары);
+#Иначе
+ Конструктор = ЮТест.Данные().КонструкторОбъекта("Справочники.Товары");
+#КонецЕсли
+
+ Конструктор
+ .Фикция("Наименование")
+ .Фикция("Артикул")
+ .Фикция("Поставщик")
+ .Фикция("Вид");
+
+ ДанныеОбъекта = Конструктор.ДанныеОбъекта();
+ ЮТест.ОжидаетЧто(ДанныеОбъекта, "Данные создаваемого объекта")
+ .Свойство("Наименование").Заполнено()
+ .Свойство("Артикул").Заполнено()
+ .Свойство("Поставщик").Заполнено()
+ .Свойство("Вид").Заполнено();
+
+ Ссылка = Конструктор.Записать();
+#Если Сервер Тогда
+ ЮТест.ОжидаетЧто(Ссылка, "Созданный объект")
+ .Заполнено()
+ .ИмеетТип("СправочникСсылка.Товары")
+ .Свойство("Наименование").Заполнено().Равно(ДанныеОбъекта.Наименование)
+ .Свойство("Артикул").Заполнено().Равно(ДанныеОбъекта.Артикул)
+ .Свойство("Поставщик").Заполнено().Равно(ДанныеОбъекта.Поставщик)
+ .Свойство("Вид").Заполнено().Равно(ДанныеОбъекта.Вид);
+#КонецЕсли
+
+КонецПроцедуры
+
+Процедура ЗаполнитьДокумент() Экспорт
+
+#Если Сервер Тогда
+ Конструктор = ЮТест.Данные().КонструкторОбъекта(Документы.ПриходТовара);
+#Иначе
+ Конструктор = ЮТест.Данные().КонструкторОбъекта("Документы.ПриходТовара");
+#КонецЕсли
+
+ Ссылка = Конструктор
+ .Фикция("Поставщик")
+ .Фикция("Склад")
+ .Фикция("Валюта")
+ .Фикция("Организация")
+ .ТабличнаяЧасть("Товары")
+ .ДобавитьСтроку()
+ .Фикция("Товар")
+ .Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
+ .Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
+ .Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
+ .ДобавитьСтроку()
+ .Фикция("Товар")
+ .Установить("Цена", ЮТест.Данные().СлучайноеПоложительноеЧисло(9999, 2))
+ .Установить("Количество", ЮТест.Данные().СлучайноеПоложительноеЧисло(20))
+ .Установить("Сумма", Конструктор.ДанныеСтроки().Цена * Конструктор.ДанныеСтроки().Количество)
+ .Провести();
+
+#Если Сервер Тогда
+ ЮТест.ОжидаетЧто(Ссылка, "Созданный объект")
+ .Заполнено()
+ .ИмеетТип("ДокументСсылка.ПриходТовара")
+ .Свойство("Номер").Заполнено()
+ .Свойство("Поставщик").Заполнено()
+ .Свойство("Склад").Заполнено()
+ .Свойство("Товары").ИмеетДлину(2)
+ .Свойство("Товары[0].Товар").Заполнено()
+ .Свойство("Товары[0].Цена").Заполнено()
+ .Свойство("Товары[0].Количество").Заполнено()
+ .Свойство("Товары[0].Сумма").Заполнено()
+ .Свойство("Товары[1].Товар").Заполнено()
+ .Свойство("Товары[1].Цена").Заполнено()
+ .Свойство("Товары[1].Количество").Заполнено()
+ .Свойство("Товары[1].Сумма").Заполнено()
+ .Свойство("Проведен").ЭтоИстина()
+ ;
+#КонецЕсли
+
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/ОМ_ЮТКонструкторТестовыхДанных.mdo b/ТестыПример/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/ОМ_ЮТКонструкторТестовыхДанных.mdo
new file mode 100644
index 00000000..e16b5f1d
--- /dev/null
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТКонструкторТестовыхДанных/ОМ_ЮТКонструкторТестовыхДанных.mdo
@@ -0,0 +1,11 @@
+
+
+ ОМ_ЮТКонструкторТестовыхДанных
+
+ ru
+ О м конструктор тестовых данных
+
+ true
+ true
+ true
+
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/Module.bsl b/ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/Module.bsl
new file mode 100644
index 00000000..5b5da2bc
--- /dev/null
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/Module.bsl
@@ -0,0 +1,63 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+// @strict-types
+
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции, предназначенные для использования другими
+// объектами конфигурации или другими программами
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+Процедура ИсполняемыеСценарии() Экспорт
+
+ ЮТТесты
+ .ДобавитьТест("Фикция")
+ .СПараметрами(Новый ОписаниеТипов("Число"))
+ .СПараметрами(Новый ОписаниеТипов("Строка"))
+ .СПараметрами(Новый ОписаниеТипов("Дата"))
+ .СПараметрами(Новый ОписаниеТипов("Булево"))
+ .СПараметрами(Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(3, 2, ДопустимыйЗнак.Неотрицательный)))
+ .СПараметрами(Новый ОписаниеТипов("Строка", , , , Новый КвалификаторыСтроки(3)))
+ .СПараметрами(Новый ОписаниеТипов("Дата", , , , , Новый КвалификаторыДаты(ЧастиДаты.Время)))
+ .СПараметрами(Новый ОписаниеТипов("СправочникСсылка.Банки"))
+ .СПараметрами(Новый ОписаниеТипов("ДокументСсылка.Заказ"))
+ .СПараметрами(Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияЗаказов"))
+ .СПараметрами(Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыХарактеристик"))
+ .СПараметрами(Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ВидыХарактеристик, СправочникСсылка.Банки, ПеречислениеСсылка.СостоянияЗаказов"))
+ .СПараметрами(Новый ОписаниеТипов("ВидДвиженияНакопления"))
+ ;
+
+КонецПроцедуры
+
+Процедура Фикция(ОписаниеТипа) Экспорт
+
+ Результат = ЮТТестовыеДанныеСлужебный.Фикция(ОписаниеТипа);
+
+ ЮТест.ОжидаетЧто(Результат)
+ .Заполнено()
+ .ИмеетТип(ОписаниеТипа);
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/ОМ_ЮТТестовыеДанныеСлужебный.mdo b/ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/ОМ_ЮТТестовыеДанныеСлужебный.mdo
new file mode 100644
index 00000000..a28f4319
--- /dev/null
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТТестовыеДанныеСлужебный/ОМ_ЮТТестовыеДанныеСлужебный.mdo
@@ -0,0 +1,11 @@
+
+
+ ОМ_ЮТТестовыеДанныеСлужебный
+
+ ru
+ О м тестовые данные служебный
+
+ true
+ true
+ true
+
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТТесты/Module.bsl b/ТестыПример/src/CommonModules/ОМ_ЮТТесты/Module.bsl
index 99b4f9f9..ad2e2291 100644
--- a/ТестыПример/src/CommonModules/ОМ_ЮТТесты/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТТесты/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТФильтрация/Module.bsl b/ТестыПример/src/CommonModules/ОМ_ЮТФильтрация/Module.bsl
index d824b495..7e1e352d 100644
--- a/ТестыПример/src/CommonModules/ОМ_ЮТФильтрация/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТФильтрация/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl b/ТестыПример/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl
index 57d349eb..177b9de9 100644
--- a/ТестыПример/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТЧитатель/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -93,7 +93,7 @@
Наборы = ЮТЧитатель.ЗагрузитьТесты(ПараметрыЗапуска);
ЮТест.ОжидаетЧто(Наборы, "Прочитанные наборы расширения tests")
- .ИмеетДлину(9);
+ .ИмеетДлину(11);
КонецПроцедуры
diff --git a/ТестыПример/src/CommonModules/ОМ_ЮТест/Module.bsl b/ТестыПример/src/CommonModules/ОМ_ЮТест/Module.bsl
index 4c7074dd..f0a8cd92 100644
--- a/ТестыПример/src/CommonModules/ОМ_ЮТест/Module.bsl
+++ b/ТестыПример/src/CommonModules/ОМ_ЮТест/Module.bsl
@@ -1,6 +1,6 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
-// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/ТестыПример/src/Configuration/Configuration.mdo b/ТестыПример/src/Configuration/Configuration.mdo
index e9fdb782..4289ee7a 100644
--- a/ТестыПример/src/Configuration/Configuration.mdo
+++ b/ТестыПример/src/Configuration/Configuration.mdo
@@ -23,16 +23,18 @@
ru
+ CommonModule.Интеграция
CommonModule.ОМ_Мокито
CommonModule.ОМ_МокитоОбучение
CommonModule.ОМ_Общий
CommonModule.ОМ_ОшибкаЗагрузкиСценариев
CommonModule.ОМ_ЮТест
+ CommonModule.ОМ_ЮТКонструкторТестовыхДанных
+ CommonModule.ОМ_ЮТТестовыеДанныеСлужебный
CommonModule.ОМ_ЮТТесты
CommonModule.ОМ_ЮТУтверждения
CommonModule.ОМ_ЮТФильтрация
CommonModule.ОМ_ЮТЧитатель
- CommonModule.Интеграция
Catalog.Встречи
Catalog.Товары
Document.ПриходТовара