mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2025-02-13 19:42:02 +02:00
Поддержка клиента
Удалил лишнее
This commit is contained in:
parent
cb3b8e04f7
commit
c837d71da2
@ -34,59 +34,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Читает табличный документ в массив структур
|
||||
//
|
||||
// Параметры:
|
||||
// ТабличныйДокумент - ТабличныйДокумент - Исходный табличный документ
|
||||
// НомерКолонки - Число - Номер строки таблицы, с которой следует начать считывание
|
||||
// НомерСтроки - Число - Номер колонки таблицы, с которой следует начать считывание
|
||||
// Возвращаемое значение:
|
||||
// Массив из Структура - Данные табличного документа
|
||||
Функция СтруктурыТабличногоДокумента(ТабличныйДокумент, Знач НомерКолонки = 1, Знач НомерСтроки = 1) Экспорт
|
||||
|
||||
МассивДанных = Новый Массив;
|
||||
СведенияКолонок = Новый Массив;
|
||||
|
||||
ЗаменяемыеСтроки = ЮТТестовыеДанныеСлужебный.ПодстрокиДляЗаменыВИменахСвойств();
|
||||
|
||||
ЗначениеКолонки = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки).Текст;
|
||||
Пока ЗначениеЗаполнено(ЗначениеКолонки) Цикл
|
||||
|
||||
Для Каждого Замена Из ЗаменяемыеСтроки Цикл
|
||||
ПодстрокаПоиска = Замена.Ключ;
|
||||
ПодстрокаЗамены = Замена.Значение;
|
||||
ИмяКолонки = СтрЗаменить(ЗначениеКолонки, ПодстрокаПоиска, ПодстрокаЗамены);
|
||||
КонецЦикла;
|
||||
|
||||
Сведения = Новый Структура("НомерКолонки, ИмяКолонки", НомерКолонки, ИмяКолонки);
|
||||
СведенияКолонок.Добавить(Сведения);
|
||||
|
||||
НомерКолонки = НомерКолонки + 1;
|
||||
ЗначениеКолонки = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки).Текст;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
НомерСтроки = НомерСтроки + 1;
|
||||
|
||||
Пока ЕстьЗначенияВСтроке(ТабличныйДокумент, НомерСтроки, СведенияКолонок) Цикл
|
||||
|
||||
Структура = Новый Структура;
|
||||
|
||||
Для Каждого Сведения Из СведенияКолонок Цикл
|
||||
Значение = СокрЛП(ТабличныйДокумент.Область(НомерСтроки, Сведения.НомерКолонки).Текст);
|
||||
Структура.Вставить(Сведения.ИмяКолонки, Значение);
|
||||
КонецЦикла;
|
||||
|
||||
МассивДанных.Добавить(Структура);
|
||||
|
||||
НомерСтроки = НомерСтроки + 1;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МассивДанных;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
@ -500,7 +500,9 @@
|
||||
// Возвращаемое значение:
|
||||
// ОбщийМодуль - Подражатель
|
||||
Функция Подражатель() Экспорт
|
||||
|
||||
Возврат ЮТПодражательСлужебный.Инициализировать();
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает таблицу значений из табличного документа
|
||||
@ -514,17 +516,24 @@
|
||||
// * ОбменДаннымиЗагрузка - Булево - По умолчанию - Истина
|
||||
// Возвращаемое значение:
|
||||
// см. ЮТТестовыеДанные_ТаблицыЗначений.ТипизированнаяТаблицаЗначений
|
||||
Функция ТаблицаЗначенийИзТабличногоДокумента(ТабличныйДокумент,
|
||||
Функция ТипизированныеДанныеТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений = Неопределено,
|
||||
ЗаменяемыеЗначения = Неопределено,
|
||||
ПараметрыСозданияОбъектов = Неопределено) Экспорт
|
||||
|
||||
Возврат ЮТТестовыеДанныеСлужебный.ТаблицаЗначенийИзТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыСозданияОбъектов);
|
||||
#Если Сервер Тогда
|
||||
ТаблицаЗначений = Истина;
|
||||
#Иначе
|
||||
ТаблицаЗначений = Ложь;
|
||||
#КонецЕсли
|
||||
|
||||
Возврат ЮТТестовыеДанныеСлужебный.ТипизированныеДанныеТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыСозданияОбъектов,
|
||||
ТаблицаЗначений);
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -18,111 +18,36 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Возвращает таблицу значений, заполненную из массива структур
|
||||
//
|
||||
// Параметры:
|
||||
// Данные - Массив из Структура - Значения для преобразования в таблицу
|
||||
// ОписанияТипов - Соответствие из Строка - Соответствие имен колонок таблицы к типам значений
|
||||
// КэшЗначений - Соответствие из Произвольный - Соответствие для хранения создаваемых значений
|
||||
// ЗаменяемыеЗначения - Соответствие из Строка - Значения, использующиеся для замены
|
||||
// Параметры - см. ЮТТестовыеДанные_ТаблицыЗначений.ПараметрыЗаполненияТаблицыЗначений
|
||||
// Возвращаемое значение:
|
||||
// ТаблицаЗначений
|
||||
Функция ТипизированнаяТаблицаЗначений(Данные,
|
||||
ОписанияТипов,
|
||||
КэшЗначений = Неопределено,
|
||||
ЗаменяемыеЗначения = Неопределено,
|
||||
Параметры = Неопределено) Экспорт
|
||||
Функция ТипизированныеДанныеТабличногоДокумента(ТабличныйДокумент, ОписанияТипов, КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения) Экспорт
|
||||
|
||||
Если Не ЗначениеЗаполнено(Данные) Тогда
|
||||
Возврат Новый ТаблицаЗначений;
|
||||
КонецЕсли;
|
||||
ТабличныйДокумент = ТабличныйДокумент(ТабличныйДокумент);
|
||||
|
||||
ИменаКолонок = ЮТОбщий.ВыгрузитьЗначения(Данные[0], "Ключ");
|
||||
Колонки = ОписаниеКолонок(ТабличныйДокумент, ОписанияТипов);
|
||||
|
||||
НедостающиеКолонки = НедостающиеКолонкиДанных(ИменаКолонок, ОписанияТипов);
|
||||
Если ЗначениеЗаполнено(НедостающиеКолонки) Тогда
|
||||
ТекстИсключения = "Отсутствуют данные для ожидаемых колонок: " + СтрСоединить(НедостающиеКолонки, ",");
|
||||
ВызватьИсключение ТекстИсключения;
|
||||
КонецЕсли;
|
||||
ТаблицаЗначений = Новый ТаблицаЗначений();
|
||||
Для Каждого ОписаниеКолонки Из Колонки Цикл
|
||||
ТаблицаЗначений.Колонки.Добавить(ОписаниеКолонки.Имя, ОписаниеКолонки.ОписаниеТипа);
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗаменяемыеЗначения = Неопределено Тогда
|
||||
ЗаменяемыеЗначения = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
ПодготовитьПараметрыЗаполненияТаблицы(КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения, Колонки);
|
||||
ПараметрыСоздания = ПараметрыЗаполнения.СозданиеОбъектовМетаданных;
|
||||
|
||||
Если Параметры = Неопределено Тогда
|
||||
Параметры = ПараметрыЗаполненияТаблицыЗначений();
|
||||
КонецЕсли;
|
||||
Выборка = ЮТПреобразованияСервер.ВыборкаИзТабличногоДокумента(ТабличныйДокумент);
|
||||
|
||||
ПараметрыСозданияОбъектовМетаданных = Параметры.СозданиеОбъектовМетаданных;
|
||||
|
||||
СведенияОбъектовМетаданных = СведенияОбъектовМетаданныхИзОписанийТипов(ИменаКолонок, ОписанияТипов);
|
||||
СведенияОРеквизитахОбъектов = СведенияРеквизитовОбъектовМетаданных(ИменаКолонок, СведенияОбъектовМетаданных);
|
||||
ТаблицаЗначений = ИнициализированнаяТаблицаЗначений(ИменаКолонок, ОписанияТипов);
|
||||
|
||||
ИнициализироватьКэшЗначенийОбъектовМетаданных(КэшЗначений, ИменаКолонок, СведенияОбъектовМетаданных);
|
||||
|
||||
Для Каждого Источник Из Данные Цикл
|
||||
Пока Выборка.Следующий() Цикл
|
||||
|
||||
НоваяСтрока = ТаблицаЗначений.Добавить();
|
||||
Строка = ТаблицаЗначений.Добавить();
|
||||
|
||||
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
|
||||
Для Каждого ОписаниеКолонки Из Колонки Цикл
|
||||
|
||||
ИмяКолонки = Колонка.Имя;
|
||||
ОписаниеТипа = Колонка.ТипЗначения;
|
||||
ЗначениеПредставления = Выборка[ОписаниеКолонки.Индекс];
|
||||
|
||||
ЗначениеИсточника = Источник[ИмяКолонки];
|
||||
|
||||
Если Не ЗначениеЗаполнено(ЗначениеИсточника) Тогда
|
||||
Если ПустаяСтрока(ЗначениеПредставления) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
СведенияОбъекта = СведенияОбъектовМетаданных.Получить(ИмяКолонки);
|
||||
ЗаменяемоеЗначение = ЗаменяемыеЗначения.Получить(ЗначениеИсточника);
|
||||
|
||||
Если ЗаменяемоеЗначение <> Неопределено Тогда
|
||||
|
||||
ЗначениеТаблицы = ЗаменяемоеЗначение;
|
||||
|
||||
ИначеЕсли СведенияОбъекта <> Неопределено Тогда
|
||||
|
||||
Менеджер = СведенияОбъекта.Менеджер;
|
||||
ОписаниеОбъектаМетаданных = СведенияОбъекта.ОписаниеОбъектаМетаданных;
|
||||
|
||||
ЗначениеТаблицы = КэшЗначений[Менеджер].Получить(ЗначениеИсточника);
|
||||
|
||||
Если ЗначениеТаблицы = Неопределено Тогда
|
||||
|
||||
ЗначенияРеквизитовОбъекта = ПолучитьЗначенияРеквизитовПоУмолчанию(ОписаниеОбъектаМетаданных, ЗначениеИсточника);
|
||||
|
||||
СведенияРеквизитовОбъекта = СведенияОРеквизитахОбъектов.Получить(ИмяКолонки);
|
||||
Если СведенияРеквизитовОбъекта <> Неопределено Тогда
|
||||
|
||||
ДополнитьЗначенияРеквизитовОбъекта(ЗначенияРеквизитовОбъекта,
|
||||
СведенияРеквизитовОбъекта,
|
||||
Источник,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыСозданияОбъектовМетаданных);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗначениеТаблицы = ЗначениеОбъектаМетаданных(ОписаниеОбъектаМетаданных,
|
||||
Менеджер,
|
||||
ЗначенияРеквизитовОбъекта,
|
||||
ПараметрыСозданияОбъектовМетаданных);
|
||||
|
||||
КэшЗначений[Менеджер].Вставить(ЗначениеИсточника, ЗначениеТаблицы);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
ЗначениеТаблицы = ПривестиЗначение(ОписаниеТипа, ЗначениеИсточника);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрока[ИмяКолонки] = ЗначениеТаблицы;
|
||||
Значение = ЗачениеЯчейки(Выборка, ЗначениеПредставления, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания);
|
||||
Строка[ОписаниеКолонки.Имя] = Значение;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
@ -132,413 +57,242 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Возвращает фиксированную структуру параметров для заполнения таблицы значений
|
||||
// Параметры:
|
||||
// СозданиеОбъектовМетаданных - Структура:
|
||||
// * ФикцияОбязательныхПолей - Булево
|
||||
// * ОбменДаннымиЗагрузка - Булево
|
||||
// Возвращаемое значение:
|
||||
// ФиксированнаяСтруктура:
|
||||
// * СозданиеОбъектовМетаданных - ФиксированнаяСтруктура:
|
||||
// * ФикцияОбязательныхПолей - Булево
|
||||
// * ОбменДаннымиЗагрузка - Булево
|
||||
Функция ПараметрыЗаполненияТаблицыЗначений(СозданиеОбъектовМетаданных = Неопределено) Экспорт
|
||||
|
||||
ФикцияОбязательныхПолей = Ложь;
|
||||
ОбменДаннымиЗагрузка = Истина;
|
||||
|
||||
Если ТипЗнч(СозданиеОбъектовМетаданных) = Тип("Структура") Тогда
|
||||
ФикцияОбязательныхПолей = ЮТОбщий.ЗначениеСтруктуры(СозданиеОбъектовМетаданных, "ФикцияОбязательныхПолей", ФикцияОбязательныхПолей);
|
||||
ОбменДаннымиЗагрузка = ЮТОбщий.ЗначениеСтруктуры(СозданиеОбъектовМетаданных, "ОбменДаннымиЗагрузка", ОбменДаннымиЗагрузка);
|
||||
КонецЕсли;
|
||||
|
||||
СозданиеОбъектовМетаданных = Новый Структура;
|
||||
СозданиеОбъектовМетаданных.Вставить("ФикцияОбязательныхПолей", ФикцияОбязательныхПолей);
|
||||
СозданиеОбъектовМетаданных.Вставить("ОбменДаннымиЗагрузка", ОбменДаннымиЗагрузка);
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("СозданиеОбъектовМетаданных", СозданиеОбъектовМетаданных);
|
||||
|
||||
Возврат Новый ФиксированнаяСтруктура(Параметры);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция НедостающиеКолонкиДанных(ИменаКолонок, ОписанияТипов)
|
||||
Функция ТабличныйДокумент(Знач ТабличныйДокумент)
|
||||
|
||||
НедостающиеКолонки = Новый Массив;
|
||||
ОжидаемыеКолонки = ЮТОбщий.ВыгрузитьЗначения(ОписанияТипов, "Ключ");
|
||||
Для Каждого ИмяКолонки Из ОжидаемыеКолонки Цикл
|
||||
Если ИменаКолонок.Найти(ИмяКолонки) = Неопределено Тогда
|
||||
НедостающиеКолонки.Добавить(ИмяКолонки);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
ТипПараметра = ТипЗнч(ТабличныйДокумент);
|
||||
|
||||
Возврат НедостающиеКолонки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СведенияОбъектовМетаданныхИзОписанийТипов(ИменаКолонок, ОписанияТипов)
|
||||
|
||||
МенеджерыЗначений = Новый Соответствие;
|
||||
|
||||
Для Каждого ИмяКолонки Из ИменаКолонок Цикл
|
||||
|
||||
ОписаниеТипа = ОписанияТипов.Получить(ИмяКолонки);
|
||||
ОписаниеОбъектаМетаданных = ОписаниеОбъектаМетаданныхПоОписаниюТипа(ОписаниеТипа);
|
||||
|
||||
Если ОписаниеОбъектаМетаданных = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Менеджер = МенеджерОбъектаИзОписанияОбъектаМетаданных(ОписаниеОбъектаМетаданных);
|
||||
|
||||
Сведения = Новый Структура;
|
||||
Сведения.Вставить("Менеджер", Менеджер);
|
||||
Сведения.Вставить("ОписаниеОбъектаМетаданных", ОписаниеОбъектаМетаданных);
|
||||
|
||||
МенеджерыЗначений.Вставить(ИмяКолонки, Сведения);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МенеджерыЗначений;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеОбъектаМетаданныхПоОписаниюТипа(ОписаниеТипа)
|
||||
|
||||
ОписаниеОбъектаМетаданных = Неопределено;
|
||||
|
||||
Тип = ТипИзОписанияТипа(ОписаниеТипа);
|
||||
|
||||
Если Тип = Неопределено Тогда
|
||||
Возврат ОписаниеОбъектаМетаданных;
|
||||
КонецЕсли;
|
||||
|
||||
ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип);
|
||||
|
||||
Если ОбъектМетаданных = Неопределено Тогда
|
||||
Возврат ОписаниеОбъектаМетаданных;
|
||||
КонецЕсли;
|
||||
|
||||
Если Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда
|
||||
ОписаниеОбъектаМетаданных = Новый Структура;
|
||||
ОписаниеОбъектаМетаданных.Вставить("Имя", ОбъектМетаданных.Имя);
|
||||
Если ТипПараметра = Тип("ТабличныйДокумент") Тогда
|
||||
Возврат ТабличныйДокумент;
|
||||
ИначеЕсли ТипПараметра = Тип("Строка") Тогда
|
||||
Возврат ЮТОбщийВызовСервера.Макет(ТабличныйДокумент);
|
||||
Иначе
|
||||
ОписаниеОбъектаМетаданных = ЮтМетаданные.ОписаниеОбъектаМетаданных(ОбъектМетаданных.ПолноеИмя());
|
||||
ВызватьИсключение ЮТОбщий.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.ТабличныйДокумент", ТабличныйДокумент);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ОписаниеОбъектаМетаданных;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТипИзОписанияТипа(ОписаниеТипа)
|
||||
Функция ОписаниеКолонок(ТабличныйДокумент, ОписанияТипов)
|
||||
|
||||
Если ОписаниеТипа = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
Колонки = Новый Массив();
|
||||
ВсеКолонки = Новый Массив();
|
||||
|
||||
Если ТипЗнч(ОписаниеТипа) <> Тип("ОписаниеТипов") Или Не ЗначениеЗаполнено(ОписаниеТипа.Типы()) Тогда
|
||||
ВызватьИсключение ЮТОбщий.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанные_ТаблицыЗначений.ТипИзОписанияТипа", ОписаниеТипа);
|
||||
КонецЕсли;
|
||||
ОсновныеКолонки = Новый Структура();
|
||||
|
||||
Возврат ОписаниеТипа.Типы()[0];
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция МенеджерОбъектаИзОписанияОбъектаМетаданных(ОписаниеОбъектаМетаданных)
|
||||
|
||||
Если Метаданные.Перечисления.Найти(ОписаниеОбъектаМетаданных.Имя) <> Неопределено Тогда
|
||||
Для Инд = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
|
||||
|
||||
Менеджер = Новый ("ПеречислениеМенеджер." + ОписаниеОбъектаМетаданных.Имя);
|
||||
ИмяКолонки = ТабличныйДокумент.Область(1, Инд).Текст;
|
||||
|
||||
Иначе
|
||||
Если ПустаяСтрока(ИмяКолонки) Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеТипа = ОписаниеОбъектаМетаданных.ОписаниеТипа;
|
||||
ЧастиИмени = СтрРазделить(ИмяКолонки, ".");
|
||||
|
||||
ИмяТипаМенеджера = СтрШаблон("%1Менеджер.%2", ОписаниеТипа.Имя, ОписаниеОбъектаМетаданных.Имя);
|
||||
Менеджер = Новый (ИмяТипаМенеджера);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Менеджер;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СведенияРеквизитовОбъектовМетаданных(ИменаКолонок, СведенияОбъектовМетаданных)
|
||||
|
||||
ПодстрокиДляЗамены = ЮТТестовыеДанныеСлужебный.ПодстрокиДляЗаменыВИменахСвойств();
|
||||
ПодстрокаЗаменыТочки = ПодстрокиДляЗамены.Получить(".");
|
||||
|
||||
СведенияРеквизитовОбъекта = Новый Соответствие;
|
||||
|
||||
Для Каждого ИмяКолонкиОбъекта Из ИменаКолонок Цикл
|
||||
|
||||
СведенияОбъектаМетаданных = СведенияОбъектовМетаданных.Получить(ИмяКолонкиОбъекта);
|
||||
|
||||
Если СведенияОбъектаМетаданных = Неопределено Тогда
|
||||
Если ОписанияТипов[ЧастиИмени[0]] = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеОбъектаМетаданных = СведенияОбъектаМетаданных.ОписаниеОбъектаМетаданных;
|
||||
ЭтоВложенныйРеквизит = ЧастиИмени.Количество() = 2;
|
||||
ЭтоОсновнойРеквизит = ЧастиИмени.Количество() = 1;
|
||||
|
||||
МассивСведений = Новый Массив;
|
||||
ОписаниеКолонки = Новый Структура;
|
||||
ОписаниеКолонки.Вставить("Индекс", Инд - 1);
|
||||
|
||||
Для Каждого ИмяКолонки Из ИменаКолонок Цикл
|
||||
Если ЭтоОсновнойРеквизит Тогда
|
||||
ОписаниеКолонки.Вставить("Имя", ИмяКолонки);
|
||||
Иначе
|
||||
ОписаниеКолонки.Вставить("Имя", ЧастиИмени[1]);
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеКолонки.Вставить("ОписаниеТипа", ОписанияТипов[ИмяКолонки]);
|
||||
|
||||
Если ОписаниеКолонки.ОписаниеТипа = Неопределено И ЭтоВложенныйРеквизит Тогда
|
||||
|
||||
Если СтрНайти(ИмяКолонки, ИмяКолонкиОбъекта) = 0 Или СтрНайти(ИмяКолонки, ПодстрокаЗаменыТочки) = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
Родитель = ОсновныеКолонки[ЧастиИмени[0]];
|
||||
Реквизиты = Родитель.ОписаниеОбъектаМетаданных.Реквизиты;
|
||||
|
||||
Массив = СтрРазделить(ИмяКолонки, ПодстрокаЗаменыТочки, Ложь);
|
||||
|
||||
Если Массив.Количество() <> 2 Тогда
|
||||
Продолжить;
|
||||
Если Реквизиты.Свойство(ЧастиИмени[1]) Тогда
|
||||
ОписаниеКолонки.ОписаниеТипа = Реквизиты[ЧастиИмени[1]].Тип;
|
||||
Иначе
|
||||
РеквизитОбъекта = Неопределено;
|
||||
ОписаниеОбъектаМетаданных.Реквизиты.Свойство(Массив[1], РеквизитОбъекта);
|
||||
Если РеквизитОбъекта <> Неопределено Тогда
|
||||
Сведения = Новый Структура;
|
||||
Сведения.Вставить("Идентификатор", ИмяКолонки);
|
||||
Сведения.Вставить("ИмяРеквизита", РеквизитОбъекта.Имя);
|
||||
Сведения.Вставить("ОписаниеТипа", РеквизитОбъекта.Тип);
|
||||
МассивСведений.Добавить(Сведения);
|
||||
КонецЕсли;
|
||||
Продолжить; // TODO
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Если ЗначениеЗаполнено(МассивСведений) Тогда
|
||||
СведенияРеквизитовОбъекта.Вставить(ИмяКолонкиОбъекта, МассивСведений);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СведенияРеквизитовОбъекта;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИнициализированнаяТаблицаЗначений(ИменаКолонок, ОписанияТипов)
|
||||
|
||||
ТаблицаЗначений = Новый ТаблицаЗначений;
|
||||
|
||||
Для Каждого ИмяКолонки Из ИменаКолонок Цикл
|
||||
ОписаниеКолонки.Вставить("ТипЗначения", ОписаниеКолонки.ОписаниеТипа.Типы()[0]);
|
||||
ОписаниеКолонки.Вставить("Ссылочный", ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ОписаниеКолонки.ТипЗначения));
|
||||
ОписаниеКолонки.Вставить("ДополнительныеРеквизиты", Новый Массив());
|
||||
ОписаниеКолонки.Вставить("Составное", Ложь);
|
||||
ОписаниеКолонки.Вставить("Менеджер", Неопределено);
|
||||
ОписаниеКолонки.Вставить("ОписаниеОбъектаМетаданных", Неопределено);
|
||||
ОписаниеКолонки.Вставить("ЭтоПеречисление", Ложь);
|
||||
ОписаниеКолонки.Вставить("ЭтоЧисло", ОписаниеКолонки.ТипЗначения = Тип("Число"));
|
||||
ОписаниеКолонки.Вставить("ЭтоДата", ОписаниеКолонки.ТипЗначения = Тип("Дата"));
|
||||
|
||||
ОписаниеТипаКолонки = ОписанияТипов.Получить(ИмяКолонки);
|
||||
|
||||
Если ОписаниеТипаКолонки = Неопределено Тогда
|
||||
Продолжить;
|
||||
Если ОписаниеКолонки.Ссылочный Тогда
|
||||
ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ОписаниеКолонки.ТипЗначения);
|
||||
ОписаниеКолонки.ЭтоПеречисление = СтрСравнить(ОписаниеКолонки.ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя, "Перечисление") = 0; // TODO
|
||||
ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ТипЗначения);
|
||||
КонецЕсли;
|
||||
|
||||
ТаблицаЗначений.Колонки.Добавить(ИмяКолонки, ОписаниеТипаКолонки);
|
||||
ВсеКолонки.Добавить(ОписаниеКолонки);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ТаблицаЗначений;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ИнициализироватьКэшЗначенийОбъектовМетаданных(КэшЗначений, ИменаКолонок, СведенияОбъектовМетаданных)
|
||||
|
||||
Если Не ЗначениеЗаполнено(КэшЗначений) Тогда
|
||||
КэшЗначений = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого ИмяКолонки Из ИменаКолонок Цикл
|
||||
|
||||
СведенияОбъекта = СведенияОбъектовМетаданных.Получить(ИмяКолонки);
|
||||
Если СведенияОбъекта = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Менеджер = СведенияОбъекта.Менеджер;
|
||||
Если КэшЗначений.Получить(Менеджер) = Неопределено Тогда
|
||||
КэшЗначений.Вставить(Менеджер, Новый Соответствие);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьЗначенияРеквизитовПоУмолчанию(ОписаниеОбъектаМетаданных, Значение)
|
||||
|
||||
ЗначенияРеквизитовПоУмолчанию = Новый Структура;
|
||||
|
||||
Если Метаданные.Перечисления.Найти(ОписаниеОбъектаМетаданных.Имя) <> Неопределено Тогда
|
||||
ЗначенияРеквизитовПоУмолчанию.Вставить("Значение", Значение);
|
||||
ИначеЕсли ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя = "Справочник" Тогда
|
||||
ИмяРеквизита = "Наименование";
|
||||
Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизита) = Неопределено Тогда
|
||||
ИмяРеквизита = "Код";
|
||||
КонецЕсли;
|
||||
ЗначенияРеквизитовПоУмолчанию.Вставить(ИмяРеквизита, Значение);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЗначенияРеквизитовПоУмолчанию;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДополнитьЗначенияРеквизитовОбъекта(Результат,
|
||||
СведенияРеквизитов,
|
||||
Источник,
|
||||
КешЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыСозданияОбъектовМетаданных)
|
||||
|
||||
Для Каждого Сведения Из СведенияРеквизитов Цикл
|
||||
|
||||
ЗначениеИсточника = Источник[Сведения.Идентификатор];
|
||||
|
||||
Если ЗначениеЗаполнено(ЗначениеИсточника) Тогда
|
||||
Если ЧастиИмени.Количество() = 1 Тогда
|
||||
|
||||
ЗаменяемоеЗначение = ЗаменяемыеЗначения.Получить(ЗначениеИсточника);
|
||||
ОписаниеОбъектаМетаданных = ОписаниеОбъектаМетаданныхПоОписаниюТипа(Сведения.ОписаниеТипа);
|
||||
Колонки.Добавить(ОписаниеКолонки);
|
||||
ОсновныеКолонки.Вставить(ИмяКолонки, ОписаниеКолонки);
|
||||
|
||||
Если ЗаменяемоеЗначение <> Неопределено Тогда
|
||||
|
||||
ЗначениеРеквизита = ЗаменяемоеЗначение;
|
||||
|
||||
ИначеЕсли ОписаниеОбъектаМетаданных = Неопределено Тогда
|
||||
|
||||
ЗначениеРеквизита = Сведения.ОписаниеТипа.ПривестиЗначение(ЗначениеИсточника);
|
||||
|
||||
Иначе
|
||||
|
||||
Менеджер = МенеджерОбъектаИзОписанияОбъектаМетаданных(ОписаниеОбъектаМетаданных);
|
||||
|
||||
ЗначенияМенеджера = КешЗначений[Менеджер];
|
||||
Если ЗначенияМенеджера = Неопределено Тогда
|
||||
ЗначенияМенеджера = Новый Соответствие;
|
||||
КешЗначений.Вставить(Менеджер, ЗначенияМенеджера);
|
||||
КонецЕсли;
|
||||
|
||||
ЗначениеРеквизита = ЗначенияМенеджера.Получить(ЗначениеИсточника);
|
||||
Если ЗначениеРеквизита = Неопределено Тогда
|
||||
|
||||
ЗначенияРеквизитовОбъекта = ПолучитьЗначенияРеквизитовПоУмолчанию(
|
||||
ОписаниеОбъектаМетаданных,
|
||||
ЗначениеИсточника
|
||||
);
|
||||
|
||||
ЗначениеРеквизита = ЗначениеОбъектаМетаданных(
|
||||
ОписаниеОбъектаМетаданных,
|
||||
Менеджер,
|
||||
ЗначенияРеквизитовОбъекта,
|
||||
ПараметрыСозданияОбъектовМетаданных
|
||||
);
|
||||
|
||||
КешЗначений[Менеджер].Вставить(ЗначениеИсточника, ЗначениеРеквизита);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
ИначеЕсли ЭтоВложенныйРеквизит Тогда
|
||||
|
||||
Родитель = ОсновныеКолонки[ЧастиИмени[0]];
|
||||
Родитель.ДополнительныеРеквизиты.Добавить(ОписаниеКолонки);
|
||||
|
||||
Иначе
|
||||
|
||||
ЗначениеРеквизита = Неопределено;
|
||||
ВызватьИсключение СтрШаблон("Недопустимо использовать несколько точек в имени колонки, `%1`", ИмяКолонки);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Результат.Вставить(Сведения.ИмяРеквизита, ЗначениеРеквизита);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
Для Каждого ОписаниеКолонки Из ВсеКолонки Цикл
|
||||
ОписаниеКолонки.Составное = ЗначениеЗаполнено(ОписаниеКолонки.ДополнительныеРеквизиты);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Колонки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначениеОбъектаМетаданных(ОписаниеОбъектаМетаданных, Менеджер, ЗначенияРеквизитов, Параметры)
|
||||
Функция ЗачениеЯчейки(СтрокаДанных, ЗначениеПредставления, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания)
|
||||
|
||||
Если Метаданные.Перечисления.Найти(ОписаниеОбъектаМетаданных.Имя) <> Неопределено Тогда
|
||||
|
||||
Значение = Менеджер[ЗначенияРеквизитов.Значение];
|
||||
|
||||
Иначе
|
||||
|
||||
КонструкторОбъекта = ЮТест.Данные().КонструкторОбъекта(Менеджер);
|
||||
Для Каждого ДанныеЗначения Из ЗначенияРеквизитов Цикл
|
||||
КонструкторОбъекта.Установить(ДанныеЗначения.Ключ, ДанныеЗначения.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Если Параметры.ФикцияОбязательныхПолей Тогда
|
||||
КонструкторОбъекта.ФикцияОбязательныхПолей();
|
||||
Значение = ЗаменяемыеЗначения[ЗначениеПредставления];
|
||||
|
||||
КэшироватьЗначение = Значение = Неопределено И ОписаниеКолонки.Менеджер <> Неопределено;
|
||||
|
||||
Если КэшироватьЗначение Тогда
|
||||
Если КэшЗначений[ОписаниеКолонки.Менеджер] = Неопределено Тогда
|
||||
КэшЗначений.Вставить(ОписаниеКолонки.Менеджер, Новый Соответствие());
|
||||
Иначе
|
||||
Значение = КэшЗначений[ОписаниеКолонки.Менеджер][ЗначениеПредставления];
|
||||
КонецЕсли;
|
||||
|
||||
Значение = КонструкторОбъекта.Записать(, Параметры.ОбменДаннымиЗагрузка);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если Значение <> Неопределено Тогда
|
||||
Возврат Значение;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеКолонки.Составное Тогда
|
||||
ЗначенияРеквизитов = ЗначенияРеквизитов(СтрокаДанных, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, ПараметрыСоздания);
|
||||
Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания);
|
||||
Иначе
|
||||
Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, Неопределено, ПараметрыСоздания);
|
||||
КонецЕсли;
|
||||
|
||||
Если КэшироватьЗначение Тогда
|
||||
КэшЗначений[ОписаниеКолонки.Менеджер].Вставить(ЗначениеПредставления, Значение);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПривестиЗначение(ОписаниеТипа, Значение)
|
||||
Процедура ПодготовитьПараметрыЗаполненияТаблицы(КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения, Колонки)
|
||||
|
||||
Если ОписаниеТипа.СодержитТип(Тип("Дата")) Тогда
|
||||
Результат = ПривестиЗначениеКДате(ОписаниеТипа, Значение);
|
||||
ИначеЕсли ОписаниеТипа.СодержитТип(Тип("Число")) Тогда
|
||||
Результат = ПривестиЗначениеКЧислу(ОписаниеТипа, Значение);
|
||||
Иначе
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
Если ЗаменяемыеЗначения = Неопределено Тогда
|
||||
ЗаменяемыеЗначения = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПривестиЗначениеКДате(ОписаниеТипа, Знач Значение)
|
||||
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
Если ЗначениеЗаполнено(Результат) Тогда
|
||||
Возврат Результат;
|
||||
Если Не ЗначениеЗаполнено(КэшЗначений) Тогда
|
||||
КэшЗначений = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
|
||||
МассивРазделителей = Новый Массив;
|
||||
МассивРазделителей.Добавить(".");
|
||||
МассивРазделителей.Добавить("/");
|
||||
МассивРазделителей.Добавить("-");
|
||||
|
||||
СтрокаДаты = Неопределено;
|
||||
Для Каждого Разделитель Из МассивРазделителей Цикл
|
||||
Для Каждого Колонка Из Колонки Цикл
|
||||
|
||||
Если ЗначениеЗаполнено(СтрокаДаты) Тогда
|
||||
Прервать;
|
||||
Если НЕ Колонка.Ссылочный Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
МассивЧастейДат = СтрРазделить(Значение, Разделитель);
|
||||
Если МассивЧастейДат.Количество() = 3 Тогда
|
||||
Если СтрДлина(МассивЧастейДат[2]) = 4 Тогда
|
||||
СтрокаДаты = МассивЧастейДат[2] + МассивЧастейДат[1] + МассивЧастейДат[0];
|
||||
ИначеЕсли СтрДлина(МассивЧастейДат[0]) = 4 Тогда
|
||||
СтрокаДаты = МассивЧастейДат[0] + МассивЧастейДат[1] + МассивЧастейДат[2];
|
||||
Иначе
|
||||
СтрокаДаты = "20" + МассивЧастейДат[2] + МассивЧастейДат[1] + МассивЧастейДат[0];
|
||||
КонецЕсли;
|
||||
Если КэшЗначений[Колонка.Менеджер] = Неопределено Тогда
|
||||
КэшЗначений.Вставить(Колонка.Менеджер, Новый Соответствие);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(СтрокаДаты);
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЗначенияРеквизитов(СтрокаТаблицы, ОписаниеКолонки, ЗаменяемыеЗначения, КэшЗначений, Параметры)
|
||||
|
||||
Возврат Результат;
|
||||
ЗначенияРеквизитов = Новый Структура();
|
||||
|
||||
Для Каждого ОписаниеВложеннойКолонки Из ОписаниеКолонки.ДополнительныеРеквизиты Цикл
|
||||
|
||||
ПредставлениеЗначения = СтрокаТаблицы[ОписаниеВложеннойКолонки.Индекс];
|
||||
Если ПустаяСтрока(ПредставлениеЗначения) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Значение = ЗачениеЯчейки(СтрокаТаблицы,
|
||||
ПредставлениеЗначения,
|
||||
ОписаниеВложеннойКолонки,
|
||||
ЗаменяемыеЗначения,
|
||||
КэшЗначений,
|
||||
Параметры);
|
||||
ЗначенияРеквизитов.Вставить(ОписаниеВложеннойКолонки.Имя, Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ОписаниеОбъектаМетаданных = ОписаниеКолонки.ОписаниеОбъектаМетаданных;
|
||||
|
||||
Если ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя = "Справочник" Тогда
|
||||
ИмяРеквизита = "Наименование";
|
||||
Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизита) = Неопределено Тогда
|
||||
ИмяРеквизита = "Код";
|
||||
КонецЕсли;
|
||||
ЗначенияРеквизитов.Вставить(ИмяРеквизита, СтрокаТаблицы[ОписаниеКолонки.Индекс]);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЗначенияРеквизитов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПривестиЗначениеКЧислу(ОписаниеТипа, Знач Значение)
|
||||
Функция ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыЗаписи)
|
||||
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
Если ЗначениеЗаполнено(Результат) Тогда
|
||||
Возврат Результат;
|
||||
Если ОписаниеКолонки.ЭтоПеречисление Тогда
|
||||
Значение = ОписаниеКолонки.Менеджер[ЗначениеПредставления];
|
||||
ИначеЕсли ОписаниеКолонки.Ссылочный Тогда
|
||||
Значение = СоздатьНовуюЗапись(ОписаниеКолонки, ЗначенияРеквизитов, ПараметрыЗаписи);
|
||||
ИначеЕсли ОписаниеКолонки.ЭтоДата Тогда
|
||||
Значение = ЮТПреобразования.ПривестиЗначениеКДате(ОписаниеКолонки.ОписаниеТипа, ЗначениеПредставления);
|
||||
ИначеЕсли ОписаниеКолонки.ЭтоЧисло Тогда
|
||||
Значение = ЮТПреобразования.ПривестиЗначениеКЧислу(ОписаниеКолонки.ОписаниеТипа, ЗначениеПредставления);
|
||||
Иначе
|
||||
Значение = ОписаниеКолонки.ОписаниеТипа.ПривестиЗначение(ЗначениеПредставления);
|
||||
КонецЕсли;
|
||||
|
||||
Значение = СтрЗаменить(Значение, " ", "");
|
||||
Результат = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
|
||||
Возврат Результат;
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьНовуюЗапись(ОписаниеКолонки, ЗначенияРеквизитов, ПараметрыЗаписи)
|
||||
|
||||
Конструктор = ЮТТестовыеДанные.КонструкторОбъекта(ОписаниеКолонки.Менеджер);
|
||||
|
||||
Если ЗначениеЗаполнено(ЗначенияРеквизитов) Тогда
|
||||
Для Каждого ДанныеЗначения Из ЗначенияРеквизитов Цикл
|
||||
Конструктор.Установить(ДанныеЗначения.Ключ, ДанныеЗначения.Значение);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Если ПараметрыЗаписи.ФикцияОбязательныхПолей Тогда
|
||||
Конструктор.ФикцияОбязательныхПолей();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Конструктор.Записать(, ПараметрыЗаписи.ПараметрыЗаписи.ОбменДаннымиЗагрузка);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -170,122 +170,35 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТаблицаЗначенийИзТабличногоДокумента(Знач ТабличныйДокумент,
|
||||
Знач ОписанияТипов,
|
||||
Знач КэшЗначений,
|
||||
Знач ЗаменяемыеЗначения,
|
||||
Знач ПараметрыЗаполнения) Экспорт
|
||||
Функция ТипизированныеДанныеТабличногоДокумента(Знач ТабличныйДокумент,
|
||||
Знач ОписанияТипов,
|
||||
Знач КэшЗначений,
|
||||
Знач ЗаменяемыеЗначения,
|
||||
Знач ПараметрыЗаполнения,
|
||||
Знач ТаблицаЗначений) Экспорт
|
||||
|
||||
ТабличныйДокумент = ТабличныйДокумент(ТабличныйДокумент);
|
||||
Таблица = ЮТТестовыеДанные_ТаблицыЗначений.ТипизированныеДанныеТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыЗаполнения);
|
||||
|
||||
Колонки = ОписаниеКолонок(ТабличныйДокумент, ОписанияТипов);
|
||||
|
||||
ТаблицаЗначений = Новый ТаблицаЗначений();
|
||||
Для Каждого ОписаниеКолонки Из Колонки Цикл
|
||||
ТаблицаЗначений.Колонки.Добавить(ОписаниеКолонки.Имя, ОписаниеКолонки.ОписаниеТипа);
|
||||
КонецЦикла;
|
||||
|
||||
ПодготовитьПараметрыЗаполненияТаблицы(КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения, Колонки);
|
||||
ПараметрыСоздания = ПараметрыЗаполнения.СозданиеОбъектовМетаданных;
|
||||
|
||||
Выборка = ЮТПреобразованияСервер.ВыборкаИзТабличногоДокумента(ТабличныйДокумент);
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
|
||||
Строка = ТаблицаЗначений.Добавить();
|
||||
|
||||
Для Каждого ОписаниеКолонки Из Колонки Цикл
|
||||
|
||||
ЗначениеПредставления = Выборка[ОписаниеКолонки.Индекс];
|
||||
|
||||
Если ПустаяСтрока(ЗначениеПредставления) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Значение = ЗаменяемыеЗначения[ЗначениеПредставления];
|
||||
|
||||
КэшироватьЗначение = Значение = Неопределено И ОписаниеКолонки.Менеджер <> Неопределено;
|
||||
|
||||
Если КэшироватьЗначение Тогда
|
||||
Значение = КэшЗначений[ОписаниеКолонки.Менеджер][ЗначениеПредставления];
|
||||
КэшироватьЗначение = Значение <> Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеКолонки.Составное Тогда
|
||||
ЗначенияРеквизитов = ЗначенияРеквизитов(Выборка, ОписаниеКолонки, ПараметрыСоздания);
|
||||
Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания);
|
||||
Иначе
|
||||
Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, Неопределено, ПараметрыСоздания);
|
||||
КонецЕсли;
|
||||
|
||||
Если КэшироватьЗначение Тогда
|
||||
КэшЗначений[ОписаниеКолонки.Менеджер].Вставить(ЗначениеПредставления, Значение);
|
||||
КонецЕсли;
|
||||
|
||||
Строка[ОписаниеКолонки.Имя] = Значение;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
// ИсточникДанных = СтруктурыТабличногоДокумента(ТабличныйДокумент);
|
||||
// ТаблицаЗначений = ЮТТестовыеДанные_ТаблицыЗначений.ТипизированнаяТаблицаЗначений(ИсточникДанных,
|
||||
// ОписанияТипов,
|
||||
// КэшЗначений,
|
||||
// ЗаменяемыеЗначения,
|
||||
// ПараметрыЗаполнения);
|
||||
//
|
||||
Возврат ТаблицаЗначений;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗачениеЯчейки(Параметры)
|
||||
|
||||
Значение = ЗаменяемыеЗначения[ЗначениеПредставления];
|
||||
|
||||
КэшироватьЗначение = Значение = Неопределено И ОписаниеКолонки.Менеджер <> Неопределено;
|
||||
|
||||
Если КэшироватьЗначение Тогда
|
||||
Значение = КэшЗначений[ОписаниеКолонки.Менеджер][ЗначениеПредставления];
|
||||
КэшироватьЗначение = Значение <> Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Если ОписаниеКолонки.Составное Тогда
|
||||
ЗначенияРеквизитов = ЗначенияРеквизитов(Выборка, ОписаниеКолонки, ПараметрыСоздания);
|
||||
Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыСоздания);
|
||||
Иначе
|
||||
Значение = ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, Неопределено, ПараметрыСоздания);
|
||||
КонецЕсли;
|
||||
|
||||
Если КэшироватьЗначение Тогда
|
||||
КэшЗначений[ОписаниеКолонки.Менеджер].Вставить(ЗначениеПредставления, Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПодготовитьПараметрыЗаполненияТаблицы(КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения, Колонки)
|
||||
|
||||
Если ЗаменяемыеЗначения = Неопределено Тогда
|
||||
ЗаменяемыеЗначения = Новый Соответствие;
|
||||
Если ТаблицаЗначений Тогда
|
||||
Возврат Таблица;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ЗначениеЗаполнено(КэшЗначений) Тогда
|
||||
КэшЗначений = Новый Соответствие;
|
||||
КонецЕсли;
|
||||
Реквизиты = СтрСоединить(ЮТОбщий.ВыгрузитьЗначения(Таблица.Колонки, "Имя"), ",");
|
||||
Результат = Новый Массив(Таблица.Количество());
|
||||
|
||||
Для Каждого Колонка Из Колонки Цикл
|
||||
|
||||
Если НЕ Колонка.Ссылочный Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Если КэшЗначений[Колонка.Менеджер] = Неопределено Тогда
|
||||
КэшЗначений.Вставить(Колонка.Менеджер, Новый Соответствие);
|
||||
КонецЕсли;
|
||||
|
||||
Для Инд = 0 По Таблица.Количество() - 1 Цикл
|
||||
Запись = Новый Структура(Реквизиты);
|
||||
ЗаполнитьЗначенияСвойств(Запись, Таблица[Инд]);
|
||||
Результат[Инд] = Запись
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
@ -427,163 +340,4 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТабличныйДокумент(Знач ТабличныйДокумент)
|
||||
|
||||
ТипПараметра = ТипЗнч(ТабличныйДокумент);
|
||||
|
||||
Если ТипПараметра = Тип("ТабличныйДокумент") Тогда
|
||||
Возврат ТабличныйДокумент;
|
||||
ИначеЕсли ТипПараметра = Тип("Строка") Тогда
|
||||
Возврат ЮТОбщийВызовСервера.Макет(ТабличныйДокумент);
|
||||
Иначе
|
||||
ВызватьИсключение ЮТОбщий.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.ТабличныйДокумент", ТабличныйДокумент);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеКолонок(ТабличныйДокумент, ОписанияТипов)
|
||||
|
||||
Колонки = Новый Массив();
|
||||
ВсеКолонки = Новый Массив();
|
||||
|
||||
ОсновныеКолонки = Новый Структура();
|
||||
|
||||
Для Инд = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
|
||||
|
||||
ИмяКолонки = ТабличныйДокумент.Область(1, Инд).Текст;
|
||||
|
||||
Если ПустаяСтрока(ИмяКолонки) Тогда
|
||||
Прервать;
|
||||
КонецЕсли;
|
||||
|
||||
ЧастиИмени = СтрРазделить(ИмяКолонки, ".");
|
||||
|
||||
Если ОписанияТипов[ЧастиИмени[0]] = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ЭтоВложенныйРеквизит = ЧастиИмени.Количество() = 2;
|
||||
|
||||
ОписаниеКолонки = Новый Структура;
|
||||
ОписаниеКолонки.Вставить("Индекс", Инд - 1);
|
||||
ОписаниеКолонки.Вставить("Имя", ИмяКолонки);
|
||||
ОписаниеКолонки.Вставить("ОписаниеТипа", ОписанияТипов[ИмяКолонки]);
|
||||
|
||||
Если ОписаниеКолонки.ОписаниеТипа = Неопределено И ЭтоВложенныйРеквизит Тогда
|
||||
|
||||
Родитель = ОсновныеКолонки[ЧастиИмени[0]];
|
||||
Реквизиты = Родитель.ОписаниеОбъектаМетаданных.Реквизиты;
|
||||
|
||||
Если Реквизиты.Свойство(ЧастиИмени[1]) Тогда
|
||||
ОписаниеКолонки.ОписаниеТипа = Реквизиты[ЧастиИмени[1]].Тип;
|
||||
Иначе
|
||||
Продолжить; // TODO
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеКолонки.Вставить("ТипЗначения", ОписаниеКолонки.ОписаниеТипа.Типы()[0]);
|
||||
ОписаниеКолонки.Вставить("Ссылочный", ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ОписаниеКолонки.ТипЗначения));
|
||||
ОписаниеКолонки.Вставить("ДополнительныеРеквизиты", Новый Массив());
|
||||
ОписаниеКолонки.Вставить("Составное", Ложь);
|
||||
ОписаниеКолонки.Вставить("Менеджер", Неопределено);
|
||||
ОписаниеКолонки.Вставить("ОписаниеОбъектаМетаданных", Неопределено);
|
||||
ОписаниеКолонки.Вставить("ЭтоПеречисление", Ложь);
|
||||
ОписаниеКолонки.Вставить("ЭтоЧисло", ОписаниеКолонки.ТипЗначения = Тип("Число"));
|
||||
ОписаниеКолонки.Вставить("ЭтоДата", ОписаниеКолонки.ТипЗначения = Тип("Дата"));
|
||||
|
||||
Если ОписаниеКолонки.Ссылочный Тогда
|
||||
ОписаниеКолонки.ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ОписаниеКолонки.ТипЗначения);
|
||||
ОписаниеКолонки.ЭтоПеречисление = СтрСравнить(ОписаниеКолонки.ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя, "Перечисление") = 0; // TODO
|
||||
ОписаниеКолонки.Менеджер = ЮТОбщий.Менеджер(ОписаниеКолонки.ТипЗначения);
|
||||
КонецЕсли;
|
||||
|
||||
ВсеКолонки.Добавить(ОписаниеКолонки);
|
||||
|
||||
Если ЧастиИмени.Количество() = 1 Тогда
|
||||
|
||||
Колонки.Добавить(ОписаниеКолонки);
|
||||
ОсновныеКолонки.Вставить(ИмяКолонки, ОписаниеКолонки);
|
||||
|
||||
ИначеЕсли ЭтоВложенныйРеквизит Тогда
|
||||
|
||||
ОписаниеКолонки = ОсновныеКолонки[ЧастиИмени[0]];
|
||||
ОписаниеКолонки.ДополнительныеРеквизиты.Добавить(ОписаниеКолонки);
|
||||
|
||||
Иначе
|
||||
|
||||
ВызватьИсключение СтрШаблон("Недопустимо использовать несколько точек в имени колонки, `%1`", ИмяКолонки);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого ОписаниеКолонки Из ВсеКолонки Цикл
|
||||
ОписаниеКолонки.Составное = ЗначениеЗаполнено(ОписаниеКолонки.ДополнительныеРеквизиты);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Колонки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗначенияРеквизитов(СтрокаТаблицы, ОписаниеКолонки, Параметры)
|
||||
|
||||
ЗначенияРеквизитов = Новый Структура();
|
||||
|
||||
Для Каждого ОписаниеВложеннойКолонки Из ОписаниеКолонки.ДополнительныеРеквизиты Цикл
|
||||
|
||||
Значение = ПривестиЗначениеКолонки(ОписаниеВложеннойКолонки, СтрокаТаблицы[ОписаниеВложеннойКолонки.Индекс], Неопределено, Параметры);
|
||||
ЗначенияРеквизитов.Вставить(ОписаниеВложеннойКолонки.Имя, Значение);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ОписаниеОбъектаМетаданных = ОписаниеКолонки.ОписаниеОбъектаМетаданных;
|
||||
Если ОписаниеОбъектаМетаданных.ОписаниеТипа.Имя = "Справочник" Тогда
|
||||
ИмяРеквизита = "Наименование";
|
||||
Если ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизита) = Неопределено Тогда
|
||||
ИмяРеквизита = "Код";
|
||||
КонецЕсли;
|
||||
ЗначенияРеквизитов.Вставить(ИмяРеквизита, СтрокаТаблицы[ОписаниеКолонки.Индекс]);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ЗначенияРеквизитов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПривестиЗначениеКолонки(ОписаниеКолонки, ЗначениеПредставления, ЗначенияРеквизитов, ПараметрыЗаписи)
|
||||
|
||||
Если ОписаниеКолонки.ЭтоПеречисление Тогда
|
||||
Значение = ОписаниеКолонки.Менеджер[ЗначенияРеквизитов.Значение];
|
||||
ИначеЕсли ОписаниеКолонки.Ссылочный Тогда
|
||||
Значение = СоздатьНовуюЗапись(ОписаниеКолонки, ЗначенияРеквизитов, ПараметрыЗаписи);
|
||||
ИначеЕсли ОписаниеКолонки.ЭтоДата Тогда
|
||||
Значение = ЮТПреобразования.ПривестиЗначениеКДате(ОписаниеКолонки.ОписаниеТипа, ЗначениеПредставления);
|
||||
ИначеЕсли ОписаниеКолонки.ЭтоЧисло Тогда
|
||||
Значение = ЮТПреобразования.ПривестиЗначениеКЧислу(ОписаниеКолонки.ОписаниеТипа, ЗначениеПредставления);
|
||||
Иначе
|
||||
Значение = ОписаниеКолонки.ОписаниеТипа.ПривестиЗначение(ЗначениеПредставления);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьНовуюЗапись(ОписаниеКолонки, ЗначенияРеквизитов, ПараметрыЗаписи)
|
||||
|
||||
Конструктор = ЮТТестовыеДанные.КонструкторОбъекта(ОписаниеКолонки.Менеджер);
|
||||
|
||||
Если ЗначениеЗаполнено(ЗначенияРеквизитов) Тогда
|
||||
Для Каждого ДанныеЗначения Из ЗначенияРеквизитов Цикл
|
||||
Конструктор.Установить(ДанныеЗначения.Ключ, ДанныеЗначения.Значение);
|
||||
КонецЦикла;
|
||||
КонецЕсли;
|
||||
|
||||
Если ПараметрыЗаписи.ФикцияОбязательныхПолей Тогда
|
||||
Конструктор.ФикцияОбязательныхПолей();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Конструктор.Записать(, ПараметрыЗаписи.ПараметрыЗаписи.ОбменДаннымиЗагрузка);
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -150,19 +150,21 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ТаблицаЗначенийИзТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений = Неопределено,
|
||||
ЗаменяемыеЗначения = Неопределено,
|
||||
ПараметрыСозданияОбъектов = Неопределено) Экспорт
|
||||
Функция ТипизированныеДанныеТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыСозданияОбъектов,
|
||||
ТаблицаЗначений) Экспорт
|
||||
|
||||
ПараметрыЗаполнения = ЮТФабрика.ПараметрыЗаполненияТаблицыЗначений(ПараметрыСозданияОбъектов);
|
||||
|
||||
Возврат ЮТТестовыеДанныеВызовСервера.ТаблицаЗначенийИзТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыЗаполнения);
|
||||
Возврат ЮТТестовыеДанныеВызовСервера.ТипизированныеДанныеТабличногоДокумента(ТабличныйДокумент,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыЗаполнения,
|
||||
ТаблицаЗначений);
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@ -26,8 +26,7 @@
|
||||
// .ДобавитьТест("Удалить")
|
||||
// .ДобавитьТест("ВариантыПараметров")
|
||||
// .ДобавитьТест("СоздатьГруппу")
|
||||
.ДобавитьСерверныйТест("СтруктурыТабличногоДокумента")
|
||||
.ДобавитьСерверныйТест("ТаблицаЗначенийИзТабличногоДокумента")
|
||||
.ДобавитьТест("ТаблицаЗначенийИзТабличногоДокумента")
|
||||
// .ДобавитьСерверныйТест("ТаблицаЗначенийИзТаблицыMarkDown")
|
||||
.ДобавитьТест("СлучайныйИдентификатор")
|
||||
;
|
||||
@ -108,57 +107,24 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Если Сервер Тогда
|
||||
|
||||
Процедура СтруктурыТабличногоДокумента() Экспорт
|
||||
|
||||
ТабличныйДокумент = ПолучитьОбщийМакет("ЮТ_МакетТестовыхДанных");
|
||||
|
||||
МассивДанных = ЮТПреобразованияСервер.СтруктурыТабличногоДокумента(ТабличныйДокумент, 1, 8);
|
||||
Ютест.ОжидаетЧто(МассивДанных.Количество()).Равно(3);
|
||||
|
||||
// ЮТест.ОжидаетЧто(МассивДанных)
|
||||
// .ИмеетДлину(3)
|
||||
// .Свойство("[0]").ИмеетТип("Структура")
|
||||
// .Свойство("[1]").ИмеетТип("Структура")
|
||||
// .Свойство("[2]").ИмеетТип("Структура")
|
||||
// .Свойство("[0].Товар").Равно("Товар 1")
|
||||
// .Свойство("[0].Цена").Равно("100.55")
|
||||
// .Свойство("[0].Количество").Равно("1")
|
||||
// .Свойство("[0].Сумма").Равно("100.55")
|
||||
// .Свойство("[1].Товар").Равно("Товар 2")
|
||||
// .Свойство("[1].Цена").Равно("1500.2")
|
||||
// .Свойство("[1].Количество").Равно("1")
|
||||
// .Свойство("[1].Сумма").Равно("1500.2")
|
||||
// .Свойство("[2].Товар").Равно("Услуга")
|
||||
// .Свойство("[2].Цена").Равно("1000000")
|
||||
// .Свойство("[2].Количество").Равно("1")
|
||||
// .Свойство("[2].Сумма").Равно("1000000")
|
||||
// ;
|
||||
//
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ТаблицаЗначенийИзТабличногоДокумента() Экспорт
|
||||
|
||||
// Подготовка тестового окружения
|
||||
|
||||
ТабличныйДокумент = ПолучитьОбщийМакет("ЮТ_МакетТестовыхДанных");
|
||||
|
||||
ОписанияТипов = Новый Соответствие;
|
||||
ОписанияТипов.Вставить("Период", Новый ОписаниеТипов("Дата"));
|
||||
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
|
||||
ОписанияТипов.Вставить("Цена", Новый ОписаниеТипов("Число"));
|
||||
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
|
||||
|
||||
КэшЗначений = Неопределено;
|
||||
|
||||
Поставщик = ЮТест.Данные().СоздатьЭлемент(Справочники.Контрагенты, "Поставщик");
|
||||
Поставщик = ЮТест.Данные().СоздатьЭлемент("Справочники.Контрагенты", "Поставщик");
|
||||
|
||||
ЗаменяемыеЗначения = Новый Соответствие;
|
||||
ЗаменяемыеЗначения.Вставить("Поставщик 1", Поставщик);
|
||||
|
||||
// Вызов тестируемого сценария
|
||||
|
||||
ТаблицаРезультатов = ЮТест.Данные().ТаблицаЗначенийИзТабличногоДокумента("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C11",
|
||||
ТаблицаРезультатов = ЮТест.Данные().ТипизированныеДанныеТабличногоДокумента("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C11",
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения
|
||||
@ -166,31 +132,52 @@
|
||||
|
||||
// Проверка поведения и результатов
|
||||
|
||||
#Если Сервер Тогда
|
||||
Ютест.ОжидаетЧто(ТаблицаРезультатов)
|
||||
.ИмеетТип("ТаблицаЗначений")
|
||||
.ИмеетДлину(3)
|
||||
.Свойство("[0].Товар.Поставщик").Равно(Поставщик)
|
||||
.Свойство("[0].Товар.Артикул").Равно("Артикул 1")
|
||||
.Свойство("[0].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
|
||||
.Свойство("[0].Товар.Вид").Равно(ПредопределенноеЗначение("Перечисление.ВидыТоваров.Товар"))
|
||||
.Свойство("[0].Товар.Описание").Заполнено()
|
||||
.Свойство("[0].Количество").Равно(1)
|
||||
.Свойство("[0].Цена").Равно(100.55)
|
||||
.Свойство("[1].Товар.Поставщик").Заполнено().НеРавно(Поставщик)
|
||||
.Свойство("[1].Товар.Артикул").Равно("Артикул 2")
|
||||
.Свойство("[1].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
|
||||
.Свойство("[1].Товар.Вид").Равно(ПредопределенноеЗначение("Перечисление.ВидыТоваров.Товар"))
|
||||
.Свойство("[1].Товар.Описание").НеЗаполнено()
|
||||
.Свойство("[1].Количество").Равно(1)
|
||||
.Свойство("[1].Цена").Равно(1500.2)
|
||||
.Свойство("[2].Товар.Поставщик").НеЗаполнено()
|
||||
.Свойство("[2].Товар.Артикул").Равно("Артикул 3")
|
||||
.Свойство("[2].Товар.Вид").Равно(Перечисления.ВидыТоваров.Услуга)
|
||||
.Свойство("[2].Товар.Вид").Равно(ПредопределенноеЗначение("Перечисление.ВидыТоваров.Услуга"))
|
||||
.Свойство("[2].Товар.Описание").Заполнено()
|
||||
.Свойство("[2].Количество").Равно(1)
|
||||
.Свойство("[2].Цена").Равно(1000000)
|
||||
;
|
||||
|
||||
#Иначе
|
||||
Ютест.ОжидаетЧто(ТаблицаРезультатов)
|
||||
.ИмеетТип("Массив")
|
||||
.ИмеетДлину(3)
|
||||
.КаждыйЭлементСоответствуетПредикату(ЮТест.Предикат()
|
||||
.Реквизит("Товар").Заполнено().ИмеетТип("СправочникСсылка.Товары")
|
||||
.Реквизит("Период").Заполнено().ИмеетТип("Дата")
|
||||
.Реквизит("Количество").Заполнено().ИмеетТип("Число")
|
||||
.Реквизит("Цена").Заполнено().ИмеетТип("Число")
|
||||
)
|
||||
.Свойство("[0].Количество").Равно(1)
|
||||
.Свойство("[0].Цена").Равно(100.55)
|
||||
.Свойство("[1].Количество").Равно(1)
|
||||
.Свойство("[1].Цена").Равно(1500.2)
|
||||
.Свойство("[2].Количество").Равно(1)
|
||||
.Свойство("[2].Цена").Равно(1000000)
|
||||
;
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Если Сервер Тогда
|
||||
|
||||
Процедура ТаблицаЗначенийИзТаблицыMarkDown() Экспорт
|
||||
|
||||
// Подготовка тестового окружения
|
||||
|
@ -1,156 +0,0 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ВТранзакции()
|
||||
.УдалениеТестовыхДанных()
|
||||
.ДобавитьТестовыйНабор("ТипизированнаяТаблицаЗначений")
|
||||
.ДобавитьТест("ЗаполнитьТипизированнуюТаблицуЗначений")
|
||||
.ДобавитьТест("ВызватьИсключениеПриНехваткеДанных");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Область События
|
||||
|
||||
Процедура ПередВсемиТестами() Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередКаждымТестом() Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеКаждогоТеста() Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Процедура ЗаполнитьТипизированнуюТаблицуЗначений() Экспорт
|
||||
|
||||
// Подготовка тестового окружения
|
||||
|
||||
ТабличныйДокумент = ПолучитьОбщийМакет("ЮТ_МакетТестовыхДанных");
|
||||
|
||||
ИсходныеДанные = ТабличныйДокумент.ПолучитьОбласть(2, 1, 5, 11);
|
||||
МассивСтруктур = ЮТест.Данные().СтруктурыТабличногоДокумента(ИсходныеДанные);
|
||||
|
||||
ОписанияТипов = Новый Соответствие;
|
||||
ОписанияТипов.Вставить("Период", Новый ОписаниеТипов("Дата"));
|
||||
ОписанияТипов.Вставить("Активность", Новый ОписаниеТипов("Булево"));
|
||||
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
|
||||
ОписанияТипов.Вставить("Цена", Новый ОписаниеТипов("Число"));
|
||||
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
|
||||
ОписанияТипов.Вставить("Сумма", Новый ОписаниеТипов("Число"));
|
||||
|
||||
КэшЗначений = Новый Соответствие;
|
||||
|
||||
КоличествоСтрок = МассивСтруктур.Количество();
|
||||
ОжидаемыйПериод = Дата(2023, 01, 01);
|
||||
|
||||
// Вызов тестируемого сценария
|
||||
|
||||
ТаблицаЗначений = ЮТТестовыеДанные_ТаблицыЗначений.ТипизированнаяТаблицаЗначений(
|
||||
МассивСтруктур,
|
||||
ОписанияТипов,
|
||||
КэшЗначений
|
||||
);
|
||||
|
||||
// Проверка поведения и результатов
|
||||
|
||||
Ютест.ОжидаетЧто(ТаблицаЗначений)
|
||||
.ИмеетТип("ТаблицаЗначений")
|
||||
.ИмеетДлину(КоличествоСтрок)
|
||||
.КаждыйЭлементСодержитСвойство("Период")
|
||||
.КаждыйЭлементСодержитСвойство("Активность")
|
||||
.КаждыйЭлементСодержитСвойство("Товар")
|
||||
.КаждыйЭлементСодержитСвойство("Цена")
|
||||
.КаждыйЭлементСодержитСвойство("Количество")
|
||||
.КаждыйЭлементСодержитСвойство("Сумма")
|
||||
.Свойство("[0].Период").Равно(ОжидаемыйПериод)
|
||||
.Свойство("[0].Активность").Равно(Истина)
|
||||
.Свойство("[0].Товар.Наименование").Равно("Товар 1")
|
||||
.Свойство("[0].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
|
||||
.Свойство("[0].Товар.Поставщик").Заполнено()
|
||||
.Свойство("[0].Количество").Равно(1)
|
||||
.Свойство("[0].Цена").Равно(100.55)
|
||||
.Свойство("[0].Сумма").Равно(100.55)
|
||||
.Свойство("[1].Период").Равно(ОжидаемыйПериод)
|
||||
.Свойство("[1].Активность").Равно(Истина)
|
||||
.Свойство("[1].Товар.Наименование").Равно("Товар 2")
|
||||
.Свойство("[1].Товар.Вид").Равно(Перечисления.ВидыТоваров.Товар)
|
||||
.Свойство("[1].Товар.Поставщик").Заполнено()
|
||||
.Свойство("[1].Количество").Равно(1)
|
||||
.Свойство("[1].Цена").Равно(1500.2)
|
||||
.Свойство("[1].Сумма").Равно(1500.2)
|
||||
.Свойство("[2].Период").Равно(ОжидаемыйПериод)
|
||||
.Свойство("[2].Активность").Равно(Ложь)
|
||||
.Свойство("[2].Товар.Наименование").Равно("Услуга")
|
||||
.Свойство("[2].Товар.Вид").Равно(Перечисления.ВидыТоваров.Услуга)
|
||||
.Свойство("[2].Товар.Поставщик").НеЗаполнено()
|
||||
.Свойство("[2].Количество").Равно(1)
|
||||
.Свойство("[2].Цена").Равно(1000000)
|
||||
.Свойство("[2].Сумма").Равно(1000000);
|
||||
|
||||
Ютест.ОжидаетЧто(ТаблицаЗначений.Колонки.Количество()).Равно(ОписанияТипов.Количество());
|
||||
|
||||
Ютест.ОжидаетЧто(КэшЗначений)
|
||||
.ИмеетДлину(3)
|
||||
.Свойство(Справочники.Товары).ИмеетДлину(3)
|
||||
.Свойство(Справочники.Контрагенты).ИмеетДлину(2)
|
||||
.Свойство(Перечисления.ВидыТоваров).ИмеетДлину(2);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВызватьИсключениеПриНехваткеДанных() Экспорт
|
||||
|
||||
// Подготовка тестового окружения
|
||||
|
||||
Данные = "
|
||||
|| Товар | Цена | Количество |
|
||||
||---------|-------|------------|
|
||||
|| Товар 1 | 100 | 1 |
|
||||
|| Товар 2 | 2 000 | 1 |
|
||||
|| Услуга | 300,5 | 1 |
|
||||
|";
|
||||
|
||||
ИсходныеДанные = ЮТест.Данные().ТаблицаMarkdown(Данные);
|
||||
|
||||
ОписанияТипов = Новый Соответствие;
|
||||
ОписанияТипов.Вставить("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"));
|
||||
ОписанияТипов.Вставить("Цена", Новый ОписаниеТипов("Число"));
|
||||
ОписанияТипов.Вставить("Количество", Новый ОписаниеТипов("Число"));
|
||||
ОписанияТипов.Вставить("Сумма", Новый ОписаниеТипов("Число"));
|
||||
|
||||
// Проверка поведения и результатов
|
||||
|
||||
ЮТУтверждения.Что(ЮТТестовыеДанные_ТаблицыЗначений)
|
||||
.Метод("ТипизированнаяТаблицаЗначений", Мокито.МассивПараметров(ИсходныеДанные, ОписанияТипов))
|
||||
.ВыбрасываетИсключение("Отсутствуют данные для ожидаемых колонок: Сумма");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="30b469d3-34e0-4b23-9959-1a890e5f3fd9">
|
||||
<name>ОМ_ЮТТестовыеДанные_ТаблицыЗначений</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>О м ЮТТестовые данные таблицы значений</value>
|
||||
</synonym>
|
||||
<server>true</server>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
@ -40,7 +40,6 @@
|
||||
<commonModules>CommonModule.ОМ_ЮТПредикатыКлиентСервер</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТСравнениеКлиентСервер</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТестовыеДанные</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТестовыеДанные_ТаблицыЗначений</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТестовыеДанныеСлужебный</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТесты</commonModules>
|
||||
<commonModules>CommonModule.ОМ_ЮТТипыДанныхСлужебный</commonModules>
|
||||
|
Loading…
x
Reference in New Issue
Block a user