diff --git a/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/Module.bsl
new file mode 100644
index 00000000..a2f4bf79
--- /dev/null
+++ b/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/Module.bsl
@@ -0,0 +1,73 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// 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.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Процедура ПроверитьТипПараметра(Значение, ОжидаемыйТип, ИмяМетода, ИмяПараметра, ЕслиУстановлен = Ложь) Экспорт
+
+ Если ЕслиУстановлен И Значение = Неопределено Тогда
+ Возврат;
+ КонецЕсли;
+
+ Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
+
+ Если НЕ Соответствует Тогда
+ ТекстОшибки = СтрШаблон("Некорректный тип параметра `%1` метода `%2`. Метод принимает `%3`, а получили `%4` (%5)",
+ ИмяПараметра,
+ ИмяМетода,
+ ОжидаемыйТип,
+ ТипЗнч(Значение),
+ Значение);
+ ВызватьИсключение ТекстОшибки;
+ КонецЕсли;
+
+КонецПроцедуры
+
+Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип) Экспорт
+
+ ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип);
+
+ Если ТипОжидаемогоТипа = Тип("Строка") Тогда
+ Если СтрНайти(ОжидаемыйТип, ",") Тогда
+ ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип);
+ ТипОжидаемогоТипа = Тип("ОписаниеТипов");
+ Иначе
+ ОжидаемыйТип = Тип(ОжидаемыйТип);
+ ТипОжидаемогоТипа = Тип("Тип");
+ КонецЕсли;
+ КонецЕсли;
+
+ ТипЗначения = ТипЗнч(Значение);
+
+ Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда
+ // СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено")
+ Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено
+ И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение;
+ Иначе
+ Соответствует = ТипЗначения = ОжидаемыйТип;
+ КонецЕсли;
+
+ Возврат Соответствует;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/ЮТПроверкиСлужебный.mdo b/exts/yaxunit/src/CommonModules/ЮТПроверкиСлужебный/ЮТПроверкиСлужебный.mdo
new file mode 100644
index 00000000..895017eb
--- /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 f7e130db..aabd88bf 100644
--- a/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТСравнениеКлиентСервер/Module.bsl
@@ -143,7 +143,7 @@
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
- Результат = ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
+ Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
Реверс(Результат, ПараметрыПроверки);
@@ -360,7 +360,7 @@
Возврат Истина;
КонецЕсли;
- Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
+ Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
Если НЕ Соответствует Тогда
ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4",
@@ -375,34 +375,6 @@
КонецФункции
-Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип)
-
- ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип);
-
- Если ТипОжидаемогоТипа = Тип("Строка") Тогда
- Если СтрНайти(ОжидаемыйТип, ",") Тогда
- ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип);
- ТипОжидаемогоТипа = Тип("ОписаниеТипов");
- Иначе
- ОжидаемыйТип = Тип(ОжидаемыйТип);
- ТипОжидаемогоТипа = Тип("Тип");
- КонецЕсли;
- КонецЕсли;
-
- ТипЗначения = ТипЗнч(Значение);
-
- Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда
- // СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено")
- Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено
- И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение;
- Иначе
- Соответствует = ТипЗначения = ОжидаемыйТип;
- КонецЕсли;
-
- Возврат Соответствует;
-
-КонецФункции
-
Функция СравнитьПоЗначению(Значение1, Значение2)
Попытка
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
index 326199ff..efe3604d 100644
--- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные/Module.bsl
@@ -529,6 +529,16 @@
ТаблицаЗначений = Ложь;
#КонецЕсли
+ Если НЕ ЗначениеЗаполнено(Макет) Тогда
+ ВызватьИсключение "Укажите источник данных (Макет)";
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(ОписанияТипов) Тогда
+ ВызватьИсключение "Укажите описание загружаемых колонок (ОписанияТипов)";
+ КонецЕсли;
+
+ ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОписанияТипов, "Структура, Соответствие", "ЮТТестовыеДанные.ЗагрузитьИзМакета", "ОписанияТипов");
+
Возврат ЮТТестовыеДанныеСлужебный.ЗагрузитьИзМакета(Макет,
ОписанияТипов,
КэшЗначений,
diff --git a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl
index 0f22081e..f692100b 100644
--- a/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТТестовыеДанные_ТаблицыЗначений/Module.bsl
@@ -257,116 +257,6 @@
КонецФункции
-Функция ОписаниеКолонок(КолонкиМакета, ОписанияТипов)
-
- Колонки = Новый Массив();
- ВсеКолонки = Новый Массив();
-
- ОсновныеКолонки = Новый Структура();
-
- Для Инд = 0 По КолонкиМакета.ВГраница() Цикл
-
- ИмяКолонки = КолонкиМакета[Инд];
- ЧастиИмени = СтрРазделить(ИмяКолонки, ".");
-
- Если ПустаяСтрока(ИмяКолонки) ИЛИ ОписанияТипов[ЧастиИмени[0]] = Неопределено Тогда
- Продолжить;
- КонецЕсли;
-
- ЭтоВложенныйРеквизит = ЧастиИмени.Количество() = 2;
- ЭтоОсновнойРеквизит = ЧастиИмени.Количество() = 1;
-
- ОписаниеКолонки = ОписаниеКолонки(Инд);
-
- Если ЭтоОсновнойРеквизит Тогда
- ОписаниеКолонки.Имя = ИмяКолонки;
- Иначе
- ОписаниеКолонки.Имя = ЧастиИмени[1];
- КонецЕсли;
-
- ОписаниеКолонки.ОписаниеТипа = ОписанияТипов[ИмяКолонки];
-
- Если ОписаниеКолонки.ОписаниеТипа = Неопределено И ЭтоВложенныйРеквизит Тогда
-
- Родитель = ОсновныеКолонки[ЧастиИмени[0]];
- Реквизиты = Родитель.ОписаниеОбъектаМетаданных.Реквизиты;
-
- Если Реквизиты.Свойство(ЧастиИмени[1]) Тогда
- ОписаниеКолонки.ОписаниеТипа = Реквизиты[ЧастиИмени[1]].Тип;
- Иначе
- Продолжить; // TODO
- КонецЕсли;
-
- КонецЕсли;
-
- ДозаполнитьОписаниеКолонки(ОписаниеКолонки);
-
- ВсеКолонки.Добавить(ОписаниеКолонки);
-
- Если ЭтоОсновнойРеквизит Тогда
-
- Колонки.Добавить(ОписаниеКолонки);
- ОсновныеКолонки.Вставить(ИмяКолонки, ОписаниеКолонки);
-
- ИначеЕсли ЭтоВложенныйРеквизит Тогда
-
- Родитель = ОсновныеКолонки[ЧастиИмени[0]];
- Родитель.ДополнительныеРеквизиты.Добавить(ОписаниеКолонки);
-
- Иначе
-
- ВызватьИсключение СтрШаблон("Недопустимо использовать несколько точек в имени колонки, `%1`", ИмяКолонки);
-
- КонецЕсли;
-
- КонецЦикла;
-
- Для Каждого ОписаниеКолонки Из ВсеКолонки Цикл
- ОписаниеКолонки.Составное = ЗначениеЗаполнено(ОписаниеКолонки.ДополнительныеРеквизиты);
- КонецЦикла;
-
- Возврат Колонки;
-
-КонецФункции
-
-Функция ОписаниеКолонки(Индекс)
-
- ОписаниеКолонки = Новый Структура;
- ОписаниеКолонки.Вставить("Индекс", Индекс);
- ОписаниеКолонки.Вставить("Имя", "");
-
- ОписаниеКолонки.Вставить("ОписаниеТипа", Неопределено);
- ОписаниеКолонки.Вставить("ТипЗначения", Неопределено);
- ОписаниеКолонки.Вставить("Ссылочный", Ложь);
- ОписаниеКолонки.Вставить("ДополнительныеРеквизиты", Новый Массив());
- ОписаниеКолонки.Вставить("Составное", Ложь);
- ОписаниеКолонки.Вставить("Менеджер", Неопределено);
- ОписаниеКолонки.Вставить("ОписаниеОбъектаМетаданных", Неопределено);
- ОписаниеКолонки.Вставить("ЭтоПеречисление", Ложь);
- ОписаниеКолонки.Вставить("ЭтоЧисло", Ложь);
- ОписаниеКолонки.Вставить("ЭтоДата", Ложь);
-
- Возврат ОписаниеКолонки;
-
-КонецФункции
-
-Процедура ДозаполнитьОписаниеКолонки(ОписаниеКолонки)
-
- ТипЗначения = ОписаниеКолонки.ОписаниеТипа.Типы()[0];
- ОписаниеКолонки.ТипЗначения = ТипЗначения;
-
- ОписаниеКолонки.Ссылочный = ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения);
- ОписаниеКолонки.ЭтоЧисло = ТипЗначения = Тип("Число");
- ОписаниеКолонки.ЭтоДата = ТипЗначения = Тип("Дата");
-
- Если ОписаниеКолонки.Ссылочный Тогда
- ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипЗначения);
- ОписаниеКолонки.ЭтоПеречисление = ЮТМетаданные.ЭтоПеречисление(ОписаниеКолонки.ОписаниеОбъектаМетаданных);
- ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ОписаниеОбъектаМетаданных);
- КонецЕсли;
-
-КонецПроцедуры
-
Функция ЗначениеЯчейки(СтрокаДанных, ЗначениеПредставления, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания)
Значение = ЗаменяемыеЗначения[ЗначениеПредставления];
@@ -386,11 +276,7 @@
КонецЕсли;
ЗначенияРеквизитов = ЗначенияРеквизитов(СтрокаДанных, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания);
- Если ОписаниеКолонки.Составное Тогда
- Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания);
- Иначе
- Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания);
- КонецЕсли;
+ Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания);
Если КэшироватьЗначение Тогда
КэшЗначений[ОписаниеКолонки.Менеджер].Вставить(ЗначениеПредставления, Значение);
@@ -520,4 +406,167 @@
КонецФункции
+#Область ОписаниеКолонок
+
+Функция ОписаниеКолонок(КолонкиМакета, ОписанияТипов)
+
+ ОсновныеКолонки = ОсновныеКолонкиМакета(КолонкиМакета);
+
+ Для Каждого Элемент Из ОписанияТипов Цикл
+
+ Если НЕ ОсновныеКолонки.Свойство(Элемент.Ключ) Тогда
+
+ Сообщение = СтрШаблон("Макет не содержит колонку `%1`", Элемент.Ключ);
+ ВызватьИсключение Сообщение;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ЗагружаемыеКолонки = Новый Массив();
+
+ Для Каждого Элемент Из ОсновныеКолонки Цикл
+
+ ОписаниеТиповКолонки = ОписаниеТиповКолонки(ОписанияТипов, Элемент.Ключ);
+
+ Если ОписаниеТиповКолонки = Неопределено Тогда
+ Продолжить;
+ КонецЕсли;
+
+ ОсновнаяКолонка = Элемент.Значение;
+ ЗагружаемыеКолонки.Добавить(ОсновнаяКолонка);
+
+ ОсновнаяКолонка.ОписаниеТипа = ОписаниеТиповКолонки;
+ ДозаполнитьОписаниеКолонки(ОсновнаяКолонка);
+
+ ДополнительныеКолонки = ОсновнаяКолонка.ДополнительныеРеквизиты;
+ ОсновнаяКолонка.ДополнительныеРеквизиты = Новый Массив();
+
+ Для Каждого ВложеннаяКолонка Из ДополнительныеКолонки Цикл
+
+ ПолноеИмя = СтрШаблон("%1.%2", ОсновнаяКолонка.Имя, ВложеннаяКолонка.Имя);
+ ВложеннаяКолонка.ОписаниеТипа = ОписаниеТиповКолонки(ОписанияТипов, ПолноеИмя);
+
+ Если ВложеннаяКолонка.ОписаниеТипа = Неопределено Тогда
+ Реквизиты = ОсновнаяКолонка.ОписаниеОбъектаМетаданных.Реквизиты;
+
+ Если Реквизиты.Свойство(ВложеннаяКолонка.Имя) Тогда
+ ВложеннаяКолонка.ОписаниеТипа = Реквизиты[ВложеннаяКолонка.Имя].Тип;
+ Иначе
+ Продолжить;
+ КонецЕсли;
+ КонецЕсли;
+
+ ОсновнаяКолонка.ДополнительныеРеквизиты.Добавить(ВложеннаяКолонка);
+ ДозаполнитьОписаниеКолонки(ВложеннаяКолонка);
+
+ КонецЦикла;
+
+ ОсновнаяКолонка.Составное = ЗначениеЗаполнено(ОсновнаяКолонка.ДополнительныеРеквизиты);
+
+ КонецЦикла;
+
+ Возврат ЗагружаемыеКолонки;
+
+КонецФункции
+
+Функция ОписаниеТиповКолонки(ОписанияТипов, ИмяКолонки)
+
+ Если ТипЗнч(ОписанияТипов) = Тип("Структура") Тогда
+ Возврат ?(ОписанияТипов.Свойство(ИмяКолонки), ОписанияТипов[ИмяКолонки], Неопределено);
+ Иначе
+ Возврат ОписанияТипов[ИмяКолонки];
+ КонецЕсли;
+
+КонецФункции
+
+Функция ОписаниеКолонки(Индекс)
+
+ ОписаниеКолонки = Новый Структура;
+ ОписаниеКолонки.Вставить("Индекс", Индекс);
+ ОписаниеКолонки.Вставить("Имя", "");
+
+ ОписаниеКолонки.Вставить("ОписаниеТипа", Неопределено);
+ ОписаниеКолонки.Вставить("ТипЗначения", Неопределено);
+ ОписаниеКолонки.Вставить("Ссылочный", Ложь);
+ ОписаниеКолонки.Вставить("ДополнительныеРеквизиты", Новый Массив());
+ ОписаниеКолонки.Вставить("Составное", Ложь);
+ ОписаниеКолонки.Вставить("Менеджер", Неопределено);
+ ОписаниеКолонки.Вставить("ОписаниеОбъектаМетаданных", Неопределено);
+ ОписаниеКолонки.Вставить("ЭтоПеречисление", Ложь);
+ ОписаниеКолонки.Вставить("ЭтоЧисло", Ложь);
+ ОписаниеКолонки.Вставить("ЭтоДата", Ложь);
+
+ Возврат ОписаниеКолонки;
+
+КонецФункции
+
+Функция ОсновныеКолонкиМакета(КолонкиМакета)
+
+ ОсновныеКолонки = Новый Структура();
+
+ // Сначала соберем основные колонки
+ Для Инд = 0 По КолонкиМакета.ВГраница() Цикл
+
+ ИмяКолонки = КолонкиМакета[Инд];
+ ЧастиИмени = СтрРазделить(ИмяКолонки, ".");
+
+ Если ПустаяСтрока(ИмяКолонки) ИЛИ ЧастиИмени.Количество() = 2 Тогда
+ Продолжить;
+ ИначеЕсли ЧастиИмени.Количество() > 2 Тогда
+ Сообщение = СтрШаблон("Некорреткное имя колонки макета `%1`, доступно использовать максимум 1 уровень вложенности", ИмяКолонки);
+ ВызватьИсключение Сообщение;
+ КонецЕсли;
+
+ ОписаниеКолонки = ОписаниеКолонки(Инд);
+ ОписаниеКолонки.Имя = ИмяКолонки;
+
+ ОсновныеКолонки.Вставить(ИмяКолонки, ОписаниеКолонки);
+
+ КонецЦикла;
+
+ Для Инд = 0 По КолонкиМакета.ВГраница() Цикл
+
+ ЧастиИмени = СтрРазделить(КолонкиМакета[Инд], ".");
+
+ Если ЧастиИмени.Количество() <> 2 Тогда
+ Продолжить;
+ КонецЕсли;
+
+ Если НЕ ОсновныеКолонки.Свойство(ЧастиИмени[0]) Тогда
+ Сообщение = СтрШаблон("Для колонки `%1` не найдена в макете основная колонка с именем `%2`", ИмяКолонки, ЧастиИмени[0]);
+ ВызватьИсключение Сообщение;
+ КонецЕсли;
+
+ ОсновнаяКолонка = ОсновныеКолонки[ЧастиИмени[0]];
+ ОписаниеКолонки = ОписаниеКолонки(Инд);
+ ОписаниеКолонки.Имя = ЧастиИмени[1];
+
+ ОсновнаяКолонка.ДополнительныеРеквизиты.Добавить(ОписаниеКолонки);
+
+ КонецЦикла;
+
+ Возврат ОсновныеКолонки;
+
+КонецФункции
+
+Процедура ДозаполнитьОписаниеКолонки(ОписаниеКолонки)
+
+ ТипЗначения = ОписаниеКолонки.ОписаниеТипа.Типы()[0];
+ ОписаниеКолонки.ТипЗначения = ТипЗначения;
+
+ ОписаниеКолонки.Ссылочный = ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения);
+ ОписаниеКолонки.ЭтоЧисло = ТипЗначения = Тип("Число");
+ ОписаниеКолонки.ЭтоДата = ТипЗначения = Тип("Дата");
+
+ Если ОписаниеКолонки.Ссылочный Тогда
+ ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипЗначения);
+ ОписаниеКолонки.ЭтоПеречисление = ЮТМетаданные.ЭтоПеречисление(ОписаниеКолонки.ОписаниеОбъектаМетаданных);
+ ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ОписаниеОбъектаМетаданных);
+ КонецЕсли;
+
+КонецПроцедуры
+
+#КонецОбласти
+
#КонецОбласти
diff --git a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
index 9b647dbd..eac3846e 100644
--- a/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
+++ b/exts/yaxunit/src/CommonModules/ЮТУтверждения/Module.bsl
@@ -1547,6 +1547,10 @@
ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ОжидаемоеЗначение) <> Неопределено;
+ ИначеЕсли ЮТОбщий.МетодМодуляСуществует(ПроверяемоеЗначение, "Найти", , Ложь) Тогда
+
+ ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ОжидаемоеЗначение) <> Неопределено;
+
КонецЕсли;
Возврат ИскомоеЗначениеНайдено;
@@ -1622,7 +1626,7 @@
Попытка
ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст);
ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, Новый ОписаниеТипов("ОписаниеТипов, Тип, Строка"));
- Результат = ТипЗначенияСоответствует(ПроверяемоеЗначение, ОжидаемоеЗначение);
+ Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ОжидаемоеЗначение);
Исключение
ЮТРегистрацияОшибок.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст);
КонецПопытки;
@@ -1643,7 +1647,7 @@
Возврат;
КонецЕсли;
- Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
+ Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
Если НЕ Соответствует Тогда
ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4",
@@ -1656,34 +1660,6 @@
КонецПроцедуры
-Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип)
-
- ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип);
-
- Если ТипОжидаемогоТипа = Тип("Строка") Тогда
- Если СтрНайти(ОжидаемыйТип, ",") Тогда
- ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип);
- ТипОжидаемогоТипа = Тип("ОписаниеТипов");
- Иначе
- ОжидаемыйТип = Тип(ОжидаемыйТип);
- ТипОжидаемогоТипа = Тип("Тип");
- КонецЕсли;
- КонецЕсли;
-
- ТипЗначения = ТипЗнч(Значение);
-
- Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда
- // СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено")
- Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено
- И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение;
- Иначе
- Соответствует = ТипЗначения = ОжидаемыйТип;
- КонецЕсли;
-
- Возврат Соответствует;
-
-КонецФункции
-
Функция ЭтоТипМассива(Тип)
Возврат Тип = Тип("Массив") Или Тип = Тип("ФиксированныйМассив");
diff --git a/exts/yaxunit/src/Configuration/Configuration.mdo b/exts/yaxunit/src/Configuration/Configuration.mdo
index c31c4831..0f804e87 100644
--- a/exts/yaxunit/src/Configuration/Configuration.mdo
+++ b/exts/yaxunit/src/Configuration/Configuration.mdo
@@ -88,6 +88,7 @@
CommonModule.ЮТПредикаты
CommonModule.ЮТПредикатыКлиентСервер
CommonModule.ЮТПреобразования
+ CommonModule.ЮТПроверкиСлужебный
CommonModule.ЮТРасширения
CommonModule.ЮТРегистрацияОшибок
CommonModule.ЮТСобытия
diff --git a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
index d69b0616..497e822a 100644
--- a/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
+++ b/tests/src/CommonModules/ОМ_ЮТТестовыеДанные/Module.bsl
@@ -28,6 +28,8 @@
.ДобавитьТест("СоздатьГруппу")
.ДобавитьТест("ЗагрузитьИзМакета_ТабличныйДокумент")
.ДобавитьТест("ЗагрузитьИзМакета_MarkDown")
+ .ДобавитьТест("ЗагрузитьИзМакета_ЧастичнаяЗагрузкаДанных")
+ .ДобавитьТест("ЗагрузитьИзМакета_Проверки")
.ДобавитьТест("СлучайныйИдентификатор")
;
@@ -243,4 +245,78 @@
КонецПроцедуры
+Процедура ЗагрузитьИзМакета_ЧастичнаяЗагрузкаДанных() Экспорт
+
+ ОписанияТипов = Новый Структура;
+ ОписанияТипов.Вставить("Период", Новый ОписаниеТипов("Дата"));
+ ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
+
+ ТаблицаРезультатов = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C11", ОписанияТипов);
+
+#Если Сервер Тогда
+ Ютест.ОжидаетЧто(ТаблицаРезультатов)
+ .ИмеетДлину(3)
+ .Свойство("Колонки").ИмеетДлину(2)
+ .Содержит("Период")
+ .Содержит("Количество")
+ ;
+#Иначе
+ Ютест.ОжидаетЧто(ТаблицаРезультатов)
+ .ИмеетТип("Массив")
+ .ИмеетДлину(3)
+ .КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
+ .ИмеетДлину(2)
+ .ИмеетСвойство("Период")
+ .ИмеетСвойство("Количество")
+ )
+ ;
+#КонецЕсли
+КонецПроцедуры
+
+Процедура ЗагрузитьИзМакета_Проверки() Экспорт
+
+ ЮТест.ОжидаетЧто(ЮТест.Данные())
+ .Метод("ЗагрузитьИзМакета")
+ .Параметр(Неопределено)
+ .Параметр(Новый Массив)
+ .ВыбрасываетИсключение("Укажите источник данных (Макет)");
+
+ ЮТест.ОжидаетЧто(ЮТест.Данные())
+ .Метод("ЗагрузитьИзМакета")
+ .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
+ .Параметр(Новый Массив)
+ .ВыбрасываетИсключение("Укажите описание загружаемых колонок (ОписанияТипов)");
+
+ ЮТест.ОжидаетЧто(ЮТест.Данные())
+ .Метод("ЗагрузитьИзМакета")
+ .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
+ .Параметр(1)
+ .ВыбрасываетИсключение("Некорректный тип параметра `ОписанияТипов` метода `ЮТТестовыеДанные.ЗагрузитьИзМакета`. Метод принимает `Соответствие, Структура`, а получили `Число` (1)");
+
+ ЮТест.ОжидаетЧто(ЮТест.Данные())
+ .Метод("ЗагрузитьИзМакета")
+ .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
+ .Параметр(Новый Структура("Количество, Резерв", Новый ОписаниеТипов("Число"), Новый ОписаниеТипов("Число")))
+ .ВыбрасываетИсключение("Макет не содержит колонку `Резерв`");
+
+ ЮТест.ОжидаетЧто(ЮТест.Данные())
+ .Метод("ЗагрузитьИзМакета")
+ .Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
+ .Параметр(Новый Структура("Количество, Резерв", Новый ОписаниеТипов("Число"), Новый ОписаниеТипов("Число")))
+ .ВыбрасываетИсключение("Макет не содержит колонку `Резерв`");
+
+ ЮТест.ОжидаетЧто(ЮТест.Данные())
+ .Метод("ЗагрузитьИзМакета")
+ .Параметр("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C4:R5C5")
+ .Параметр(Новый Структура("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары")))
+ .ВыбрасываетИсключение("не найдена в макете основная колонка с именем `Товар`");
+
+ ЮТест.ОжидаетЧто(ЮТест.Данные())
+ .Метод("ЗагрузитьИзМакета")
+ .Параметр("ОбщийМакет.ЮТ_МакетТестовыхДанных.ОсновнаяТаблица")
+ .Параметр(Новый Структура("Цена", Новый ОписаниеТипов("Дата")))
+ .ВыбрасываетИсключение("Область не найдена: ОсновнаяТаблица");
+
+КонецПроцедуры
+
#КонецОбласти