1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-23 18:54:40 +02:00
Проверки входных данных
This commit is contained in:
alkoleft 2023-09-03 17:56:56 +03:00
parent ec6ae1f290
commit ff519c5755
8 changed files with 343 additions and 175 deletions

View File

@ -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)",
ИмяПараметра,
ИмяМетода,
ОжидаемыйТип,
ТипЗнч(Значение),
Значение);
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КонецПроцедуры
Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип) Экспорт
ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип);
Если ТипОжидаемогоТипа = Тип("Строка") Тогда
Если СтрНайти(ОжидаемыйТип, ",") Тогда
ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип);
ТипОжидаемогоТипа = Тип("ОписаниеТипов");
Иначе
ОжидаемыйТип = Тип(ОжидаемыйТип);
ТипОжидаемогоТипа = Тип("Тип");
КонецЕсли;
КонецЕсли;
ТипЗначения = ТипЗнч(Значение);
Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда
// СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено")
Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено
И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение;
Иначе
Соответствует = ТипЗначения = ОжидаемыйТип;
КонецЕсли;
Возврат Соответствует;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="93359001-ba03-4990-9337-70d21cbbb080">
<name>ЮТПроверкиСлужебный</name>
<synonym>
<key>ru</key>
<value>Проверки служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -143,7 +143,7 @@
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
Результат = ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
Реверс(Результат, ПараметрыПроверки);
@ -360,7 +360,7 @@
Возврат Истина;
КонецЕсли;
Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
Если НЕ Соответствует Тогда
ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4",
@ -375,34 +375,6 @@
КонецФункции
Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип)
ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип);
Если ТипОжидаемогоТипа = Тип("Строка") Тогда
Если СтрНайти(ОжидаемыйТип, ",") Тогда
ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип);
ТипОжидаемогоТипа = Тип("ОписаниеТипов");
Иначе
ОжидаемыйТип = Тип(ОжидаемыйТип);
ТипОжидаемогоТипа = Тип("Тип");
КонецЕсли;
КонецЕсли;
ТипЗначения = ТипЗнч(Значение);
Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда
// СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено")
Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено
И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение;
Иначе
Соответствует = ТипЗначения = ОжидаемыйТип;
КонецЕсли;
Возврат Соответствует;
КонецФункции
Функция СравнитьПоЗначению(Значение1, Значение2)
Попытка

View File

@ -529,6 +529,16 @@
ТаблицаЗначений = Ложь;
#КонецЕсли
Если НЕ ЗначениеЗаполнено(Макет) Тогда
ВызватьИсключение "Укажите источник данных (Макет)";
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ОписанияТипов) Тогда
ВызватьИсключение "Укажите описание загружаемых колонок (ОписанияТипов)";
КонецЕсли;
ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОписанияТипов, "Структура, Соответствие", "ЮТТестовыеДанные.ЗагрузитьИзМакета", "ОписанияТипов");
Возврат ЮТТестовыеДанныеСлужебный.ЗагрузитьИзМакета(Макет,
ОписанияТипов,
КэшЗначений,

View File

@ -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];
ОписаниеКолонки.ТипЗначения = ТипЗначения;
ОписаниеКолонки.Ссылочный = ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения);
ОписаниеКолонки.ЭтоЧисло = ТипЗначения = Тип("Число");
ОписаниеКолонки.ЭтоДата = ТипЗначения = Тип("Дата");
Если ОписаниеКолонки.Ссылочный Тогда
ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ТипЗначения);
ОписаниеКолонки.ЭтоПеречисление = ЮТМетаданные.ЭтоПеречисление(ОписаниеКолонки.ОписаниеОбъектаМетаданных);
ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ОписаниеОбъектаМетаданных);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -1547,6 +1547,10 @@
ИскомоеЗначениеНайдено = ПроверяемоеЗначение.НайтиПоЗначению(ОжидаемоеЗначение) <> Неопределено;
ИначеЕсли ЮТОбщий.МетодМодуляСуществует(ПроверяемоеЗначение, "Найти", , Ложь) Тогда
ИскомоеЗначениеНайдено = ПроверяемоеЗначение.Найти(ОжидаемоеЗначение) <> Неопределено;
КонецЕсли;
Возврат ИскомоеЗначениеНайдено;
@ -1622,7 +1626,7 @@
Попытка
ПроверяемоеЗначение = ПроверяемоеЗначение(Контекст);
ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, Новый ОписаниеТипов("ОписаниеТипов, Тип, Строка"));
Результат = ТипЗначенияСоответствует(ПроверяемоеЗначение, ОжидаемоеЗначение);
Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ОжидаемоеЗначение);
Исключение
ЮТРегистрацияОшибок.СгенерироватьОшибкуВыполнения(ИнформацияОбОшибке(), Контекст);
КонецПопытки;
@ -1643,7 +1647,7 @@
Возврат;
КонецЕсли;
Соответствует = ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
Соответствует = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(Значение, ОжидаемыйТип);
Если НЕ Соответствует Тогда
ТекстОшибки = СтрШаблон("Не верный тип %1 (`%2`), должен быть `%3`%4",
@ -1656,34 +1660,6 @@
КонецПроцедуры
Функция ТипЗначенияСоответствует(Значение, ОжидаемыйТип)
ТипОжидаемогоТипа = ТипЗнч(ОжидаемыйТип);
Если ТипОжидаемогоТипа = Тип("Строка") Тогда
Если СтрНайти(ОжидаемыйТип, ",") Тогда
ОжидаемыйТип = Новый ОписаниеТипов(ОжидаемыйТип);
ТипОжидаемогоТипа = Тип("ОписаниеТипов");
Иначе
ОжидаемыйТип = Тип(ОжидаемыйТип);
ТипОжидаемогоТипа = Тип("Тип");
КонецЕсли;
КонецЕсли;
ТипЗначения = ТипЗнч(Значение);
Если ТипОжидаемогоТипа = Тип("ОписаниеТипов") Тогда
// СодержитТип не подходит, всегда выдает истину если проверяем Тип("Неопределено")
Соответствует = ОжидаемыйТип.Типы().Найти(ТипЗначения) <> Неопределено
И ОжидаемыйТип.ПривестиЗначение(Значение) = Значение;
Иначе
Соответствует = ТипЗначения = ОжидаемыйТип;
КонецЕсли;
Возврат Соответствует;
КонецФункции
Функция ЭтоТипМассива(Тип)
Возврат Тип = Тип("Массив") Или Тип = Тип("ФиксированныйМассив");

View File

@ -88,6 +88,7 @@
<commonModules>CommonModule.ЮТПредикаты</commonModules>
<commonModules>CommonModule.ЮТПредикатыКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТПреобразования</commonModules>
<commonModules>CommonModule.ЮТПроверкиСлужебный</commonModules>
<commonModules>CommonModule.ЮТРасширения</commonModules>
<commonModules>CommonModule.ЮТРегистрацияОшибок</commonModules>
<commonModules>CommonModule.ЮТСобытия</commonModules>

View File

@ -28,6 +28,8 @@
.ДобавитьТест("СоздатьГруппу")
.ДобавитьТест("ЗагрузитьИзМакета_ТабличныйДокумент")
.ДобавитьТест("ЗагрузитьИзМакета_MarkDown")
.ДобавитьТест("ЗагрузитьИзМакета_ЧастичнаяЗагрузкаДанных")
.ДобавитьТест("ЗагрузитьИзМакета_Проверки")
.ДобавитьТест("СлучайныйИдентификатор")
;
@ -243,4 +245,78 @@
КонецПроцедуры
Процедура ЗагрузитьИзМакета_ЧастичнаяЗагрузкаДанных() Экспорт
ОписанияТипов = Новый Структура;
ОписанияТипов.Вставить("Период", Новый ОписаниеТипов("Дата"));
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
ТаблицаРезультатов = ЮТест.Данные().ЗагрузитьИзМакета("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C11", ОписанияТипов);
#Если Сервер Тогда
Ютест.ОжидаетЧто(ТаблицаРезультатов)
.ИмеетДлину(3)
.Свойство("Колонки").ИмеетДлину(2)
.Содержит("Период")
.Содержит("Количество")
;
#Иначе
Ютест.ОжидаетЧто(ТаблицаРезультатов)
.ИмеетТип("Массив")
.ИмеетДлину(3)
.КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
.ИмеетДлину(2)
.ИмеетСвойство("Период")
.ИмеетСвойство("Количество")
)
;
#КонецЕсли
КонецПроцедуры
Процедура ЗагрузитьИзМакета_Проверки() Экспорт
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("ЗагрузитьИзМакета")
.Параметр(Неопределено)
.Параметр(Новый Массив)
.ВыбрасываетИсключение("Укажите источник данных (Макет)");
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("ЗагрузитьИзМакета")
.Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
.Параметр(Новый Массив)
.ВыбрасываетИсключение("Укажите описание загружаемых колонок (ОписанияТипов)");
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("ЗагрузитьИзМакета")
.Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
.Параметр(1)
.ВыбрасываетИсключение("Некорректный тип параметра `ОписанияТипов` метода `ЮТТестовыеДанные.ЗагрузитьИзМакета`. Метод принимает `Соответствие, Структура`, а получили `Число` (1)");
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("ЗагрузитьИзМакета")
.Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
.Параметр(Новый Структура("Количество, Резерв", Новый ОписаниеТипов("Число"), Новый ОписаниеТипов("Число")))
.ВыбрасываетИсключение("Макет не содержит колонку `Резерв`");
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("ЗагрузитьИзМакета")
.Параметр("ОбщийМакет.ЮТ_ТестовыеДанныеMarkdown")
.Параметр(Новый Структура("Количество, Резерв", Новый ОписаниеТипов("Число"), Новый ОписаниеТипов("Число")))
.ВыбрасываетИсключение("Макет не содержит колонку `Резерв`");
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("ЗагрузитьИзМакета")
.Параметр("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C4:R5C5")
.Параметр(Новый Структура("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары")))
.ВыбрасываетИсключение("не найдена в макете основная колонка с именем `Товар`");
ЮТест.ОжидаетЧто(ЮТест.Данные())
.Метод("ЗагрузитьИзМакета")
.Параметр("ОбщийМакет.ЮТ_МакетТестовыхДанных.ОсновнаяТаблица")
.Параметр(Новый Структура("Цена", Новый ОписаниеТипов("Дата")))
.ВыбрасываетИсключение("Область не найдена: ОсновнаяТаблица");
КонецПроцедуры
#КонецОбласти