Каталог решений - Вывод результата компоновки в таблицу и дерево значений

Вывод результата компоновки в таблицу и дерево значений

Вывод результата компоновки в таблицу и дерево значений

В наличии

Загрузка данных из ТабличногоДокумента в ТаблицуЗначений с использованием внешних наборов данных СКД, для последующей обработки в запросе.

Категория:

Описание

Возникла необходимость загрузки данных из ТабличногоДокумента в ТаблицуЗначений для последующей обработки ее в запросе.

ТабличныйДокумент выглядит так:

Загрузку решено было сделать с использованием СКД. Был создан следующий макет:

В объекте "Область" передается ОбластьЯчеекТабличногоДокумента содержащая исходные данные.


 

Для получения ТаблицыЗначений использовалась следующая функция:

Функция ПолучитьТаблицуИзМакета(ИмяМакета, НаборДанных, Параметры = Неопределено) 
	
	СхемаКомпоновкиДанных = ПолучитьМакет(ИмяМакета);
	КомпоновщикМакета     = Новый КомпоновщикМакетаКомпоновкиДанных;
	ПроцессорКомпоновки   = Новый ПроцессорКомпоновкиДанных;
	ПроцессорВывода       = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	Если Параметры <> Неопределено Тогда
		КомпоновщикНастроек	= Новый КомпоновщикНастроекКомпоновкиДанных;
		КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
		Для Каждого Параметр Из Параметры Цикл
			КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Параметр.Ключ), Параметр.Значение);
		КонецЦикла;	
		МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	Иначе
		МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	КонецЕсли;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, НаборДанных, , Истина);
	Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	Возврат Результат;
	
КонецФункции	

Полученная ТаблицаЗначений далее использовалась в запросе:

	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ДанныеТабличногоДокумента.КодВнешнейСистемы КАК КодВнешнейСистемы,
	|	ДанныеТабличногоДокумента.КодERP КАК КодERP
	|ПОМЕСТИТЬ ВТ_ДанныеТабличногоДокумента
	|ИЗ
	|	&ДанныеТабличногоДокумента КАК ДанныеТабличногоДокумента");

В процессе разработки возникла необходимость дополнить значения колонки "КодERP" лидирующими нулями, что бы в дальнейшем получить ссылки на номенклатуру. Для этого был переделан макет компоновки данных. На закладке "Наборы данных" путь к колонке "КодERP" был изменен на "КраткийКодERP", на закладке "Вычисляемые поля" было добавлено ВычисляемоеПоле "КодERP" с выражением содержащим вызов функции общего модуля: 

СтроковыеФункцииКлиентСервер.ДополнитьСтроку(КраткийКодERP, 11, "0", "Слева")

Настройки макета компоновки при этом не изменились. 

Однако, при использовании полученной ТаблицыЗначений в запросе, стала появляться ошибка:

Причиной был тип колонки "КодERP", вернее его отсутствие. Напомню, что данная колонка была получена из вычисляемого  поля.

Так выглядит колонка "КодERP" до использования ВычисляемогоПоля:

Так выглядит колонка "КодERP" после использования ВычисляемогоПоля:

Попытки использовать условное оформление и оформление ВычислямогоПоля ни к чему не привели. Это разъяснено на ИТС. Однако там не сказано, что если у объекта  ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений вызвать метод УстановитьОбъект(), то при заполнении полей установленного объекта значения будут приведены к типу соответствующей колонки объекта.

Процедура получения таблицы значений была переделана:

Функция ПолучитьТаблицуИзМакета(ИмяМакета, НаборДанных, Параметры = Неопределено, Результат = Неопределено) 
	
	СхемаКомпоновкиДанных = ПолучитьМакет(ИмяМакета);
	КомпоновщикМакета	  = Новый КомпоновщикМакетаКомпоновкиДанных;
	ПроцессорКомпоновки   = Новый ПроцессорКомпоновкиДанных;
	ПроцессорВывода		  = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	Если Параметры <> Неопределено Тогда
		КомпоновщикНастроек	= Новый КомпоновщикНастроекКомпоновкиДанных;
		КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
		Для Каждого Параметр Из Параметры Цикл
			КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Параметр.Ключ), Параметр.Значение);
		КонецЦикла;	
		МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	Иначе
		МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	КонецЕсли;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, НаборДанных, , Истина);
	
	Если Результат <> Неопределено Тогда
		ПроцессорВывода.УстановитьОбъект(Результат);
	КонецЕсли;	

	Результат = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	Возврат Результат;
	
КонецФункции	

В качестве параметра Результат передается таблица значений с типизированными колонками.

А так выглядит колонка КодERP после использования ВычисляемогоПоля и вызова метода УстановитьОбъект():

Полученная в итоге ТаблицаЗначений может использоваться в запросе.

has been added to your cart:
Оформление заказа