Функция копирования колонок в таблицу или дерево значений (конструктор таблиц и деревьев значений)

Sokolin D.A. 48 2 3

Данная функция может использоваться как конструктор для создания таблицы или дерева значений из других объектов, имеющих коллекцию колонок, включая РезультатЗапроса. А также дополнения колонок из других коллекций.

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

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

См. также

Создание схемы компоновки данных программно

ТаблицаЗначений из кроны ДереваЗначений

СформироватьОписаниеКолонок (БСП)

Таблица значений из списка колонок

Преобразование Объекта ДеревоЗначений в Объект ТаблицаЗначений

Таблица Значений Без Null

Таблица значений на УФ с динамическим набором колонок

Объединить таблицы значений

Вывод данных СКД в таблицу значений (дерево)

Модератору