|
|||||||
Получить таблицу значений из макета
Время создания: 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 По МассивИменКолонок.Количество() Цикл Если СтрокаДанных[ИмяКолонки] <> "" Тогда СтрокаНеСодержитДанных = Ложь; Прервать; КонецЕсли; КонецЦикла;
Возврат СтрокаНеСодержитДанных;
КонецФункции Функция ПолучитьЗначениеКолонкиВСтроке(СтрокаДанных, ИмяКолонки, ТипКолонки)
Значение = Неопределено; ЗначениеСтрока = СтрокаДанных[ИмяКолонки];
Если ТипКолонки = Тип("Число") Тогда Значение = Число(СтрЗаменить(ЗначениеСтрока, " ", "")); ИначеЕсли ТипКолонки = Тип("Булево") Тогда Значение = Булево(ЗначениеСтрока); ИначеЕсли ТипКолонки = Тип("Дата") Тогда Значение = Дата(ЗначениеСтрока); ИначеЕсли ТипКолонки = Тип("Строка") Тогда Значение = ЗначениеСтрока; Иначе Попытка Значение = Справочники[ТипКолонки.Имя].НайтиПоНаименованию(ЗначениеСтрока); Исключение Значение = Справочники[ТипКолонки.Имя].ПустаяСсылка(); КонецПопытки; КонецЕсли;
Возврат Значение;
КонецФункции Функция ОбъектныйТип(Тип) ВозвращаемыйТип = Истина; Попытка ПустойУИД = Тип.УникальныйИдентификатор(); Исключение ВозвращаемыйТип = Ложь; КонецПопытки; Возврат ВозвращаемыйТип; КонецФункции &КонецОбласти |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|