MyTetra Share
Делитесь знаниями!
Получить таблицу значений из макета
Время создания: 14.09.2016 14:29
Автор: pola
Текстовые метки: 1c.testing.xunit.mylib
Раздел: Программирование - 1с - Тестирование - Функциональное - xUnit - my lib
Запись: xintrea/mytetra_anatolean/raw/master/base/14738525494j03jk4cgi/text.html на bitbucket.org

#Область ПолучитьТаблицуИзМакета

Функция ПолучитьТаблицуЗначенийИзМакета(ИмяМакета, ИмяОбластиДанных, ИмяОбластиТипов) Экспорт

Сообщить("Получение данных: " + ИмяМакета);

Данные = ТаблицаНетипизированнаяИзМакета(ИмяМакета, ИмяОбластиДанных);

Типы = ТаблицаНетипизированнаяИзМакета(ИмяМакета, ИмяОбластиТипов);

ТаблицаРезультат = ПолучитьТаблицуТипизированнуюПустую(Типы);

ЗаполнитьТипизированнуюТаблицуДанными(ТаблицаРезультат, Данные);

Возврат ТаблицаРезультат;

КонецФункции

Функция ТаблицаНетипизированнаяИзМакета(ИмяМакета, ИмяОбласти)

ТаблицаРезультат = Новый ТаблицаЗначений;

Попытка

Макет = ПолучитьМакет(ИмяМакета);

ПостроительЗапроса = Новый ПостроительЗапроса;

ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область(ИмяОбласти));

ПостроительЗапроса.Выполнить();

ТаблицаРезультат = ПостроительЗапроса.Результат.Выгрузить();

Исключение

Сообщить(" Не удалось получить нетипизированную таблицу из области """ + ИмяОбласти + """ макета """ + ИмяМакета + """");

КонецПопытки;

Возврат ТаблицаРезультат;

КонецФункции

Функция ПолучитьТаблицуТипизированнуюПустую(ТаблицаТипов)

ТаблицаРезультат = Новый ТаблицаЗначений;

Попытка

СтрокаТипов = ТаблицаТипов[0];

Для Каждого Колонка Из ТаблицаТипов.Колонки Цикл

ИмяКолонки = Колонка.Имя;

ТаблицаРезультат.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов(СтрокаТипов[Колонка.Имя]));

КонецЦикла;

Исключение

Сообщить(" Не удалось получить типизированную таблицу");

КонецПопытки;

Возврат ТаблицаРезультат;

КонецФункции

Процедура ЗаполнитьТипизированнуюТаблицуДанными(ТаблицаРезультат, Данные)

МассивИменКолонокДанных = Новый Массив;

Для Каждого КолонкаДанных Из Данные.Колонки Цикл

МассивИменКолонокДанных.Добавить(КолонкаДанных.Имя);

КонецЦикла;

Попытка

Для Каждого СтрокаДанных Из Данные Цикл

Если Не СтрокаДанныхПустая(СтрокаДанных, МассивИменКолонокДанных) Тогда

НоваяСтрокаРезультат = ТаблицаРезультат.Добавить();

Для Каждого Колонка Из ТаблицаРезультат.Колонки Цикл

ИмяКолонки = Колонка.Имя;

Если ОбъектныйТип(НоваяСтрокаРезультат[ИмяКолонки]) Тогда

ТипКолонки = НоваяСтрокаРезультат[ИмяКолонки].Метаданные();

Иначе

ТипКолонки = ТипЗнч(НоваяСтрокаРезультат[ИмяКолонки])

КонецЕсли;

НоваяСтрокаРезультат[ИмяКолонки] = ПолучитьЗначениеКолонкиВСтроке(СтрокаДанных, ИмяКолонки, ТипКолонки);

КонецЦикла;

КонецЕсли;

КонецЦикла;

Исключение

Сообщить(" Не удалось заполнить таблицу данными");

КонецПопытки;

КонецПроцедуры

//Если все значения атрибутов строки данных есть суть пустые строки, то строка не содержит данных

Функция СтрокаДанныхПустая(СтрокаДанных, МассивИменКолонок)

СтрокаНеСодержитДанных = Истина;

Для ИмяКолонки = 1 По МассивИменКолонок.Количество() Цикл

Если СтрокаДанных[ИмяКолонки] <> "" Тогда

СтрокаНеСодержитДанных = Ложь;

Прервать;

КонецЕсли;

КонецЦикла;

Возврат СтрокаНеСодержитДанных;

КонецФункции

Функция ПолучитьЗначениеКолонкиВСтроке(СтрокаДанных, ИмяКолонки, ТипКолонки)

Значение = Неопределено;

ЗначениеСтрока = СтрокаДанных[ИмяКолонки];

Если ТипКолонки = Тип("Число") Тогда

Значение = Число(СтрЗаменить(ЗначениеСтрока, " ", ""));

ИначеЕсли ТипКолонки = Тип("Булево") Тогда

Значение = Булево(ЗначениеСтрока);

ИначеЕсли ТипКолонки = Тип("Дата") Тогда

Значение = Дата(ЗначениеСтрока);

ИначеЕсли ТипКолонки = Тип("Строка") Тогда

Значение = ЗначениеСтрока;

Иначе

Попытка

Значение = Справочники[ТипКолонки.Имя].НайтиПоНаименованию(ЗначениеСтрока);

Исключение

Значение = Справочники[ТипКолонки.Имя].ПустаяСсылка();

КонецПопытки;

КонецЕсли;

Возврат Значение;

КонецФункции

Функция ОбъектныйТип(Тип)

ВозвращаемыйТип = Истина;

Попытка

ПустойУИД = Тип.УникальныйИдентификатор();

Исключение

ВозвращаемыйТип = Ложь;

КонецПопытки;

Возврат ВозвращаемыйТип;

КонецФункции

&КонецОбласти

 
MyTetra Share v.0.65
Яндекс индекс цитирования