Типизировать Колонки

SeiOkami 365 5 6 8

Процедура находит колонки с произвольным типом и заменяет их на типизированные

Источник: https://t.me/JuniorOneS

// Процедура находит колонки с произвольным типом и заменяет их на типизированные
//
// Параметры:
//  ТаблицаЗначений	 - ТаблицаЗначений - Таблица, колонки которой необходимо типизировать
//
Процедура ТипизироватьКолонки(ТаблицаЗначений) Экспорт
	
	ТипизируемыеКолонки = Новый Массив;
	
	Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
		
		Если ЗначениеЗаполнено(Колонка.ТипЗначения.Типы()) Тогда
			Продолжить;
		КонецЕсли;
		
		ОписаниеКолонки = Новый Структура("Имя,Заголовок,Типы,Ширина,Значения");
		ЗаполнитьЗначенияСвойств(ОписаниеКолонки, Колонка);
		
		ОписаниеКолонки.Типы     = Новый Массив;
		ОписаниеКолонки.Значения = ТаблицаЗначений.ВыгрузитьКолонку(Колонка.Имя);
		
		Для Каждого ТекущееЗначение Из ОписаниеКолонки.Значения Цикл
			ТипЗначения = ТипЗнч(ТекущееЗначение);
			Если ОписаниеКолонки.Типы.Найти(ТипЗначения) = Неопределено Тогда
				ОписаниеКолонки.Типы.Добавить(ТипЗначения);
			КонецЕсли;
		КонецЦикла;
		
		ТипизируемыеКолонки.Добавить(ОписаниеКолонки);
		
	КонецЦикла;
	
	Для Каждого ОписаниеКолонки Из ТипизируемыеКолонки Цикл
		
		ТипыКолонки  = ОписаниеКолонки.Типы;
		//"Нюанс" платформы. Невозможно создать описание типов с Неопределено. Для 1С это будет как "Произвольный"
		Если ТипыКолонки.Количество() = 1 И ТипыКолонки[0] = Тип("Неопределено") Тогда
			ТипыКолонки.Добавить(Тип("Null"));
			ТипыКолонки.Добавить(Тип("Булево"));
		КонецЕсли;
		
		ОписаниеТипа = Новый ОписаниеТипов(ОписаниеКолонки.Типы);
		
		ВременноеИмя = "Колонка" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
		
		НоваяКолонка = ТаблицаЗначений.Колонки.Добавить(ВременноеИмя, 
		ОписаниеТипа, ОписаниеКолонки.Заголовок, ОписаниеКолонки.Ширина);
		
		ТаблицаЗначений.ЗагрузитьКолонку(ОписаниеКолонки.Значения, НоваяКолонка);
		
		ТаблицаЗначений.Колонки.Удалить(ОписаниеКолонки.Имя);
		
		НоваяКолонка.Имя = ОписаниеКолонки.Имя;
		
	КонецЦикла;
	
КонецПроцедуры
1

Рекомендации

См. также

Типизированная таблица значений

ТелоСодержитТипизированноеСообщение (БСП)

КолонкиДляЗагрузкиДанных (БСП)

КолонкиИмеютГруппировку (БСП)

КолонкаМакета (БСП)

УдалитьКолонкуМакета (БСП)

Добавить или обновить колонку

Свернуть табличную часть

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз

Комментарии

akop4
#1, ред. 14 сентября 2021 12:08

Опечатка у вас:
Было:

ОписаниеКолонки.Значения = ТаблицаЗначений.ВыгрузитьКолонку(0);

Стало:

ОписаниеКолонки.Значения = ТаблицаЗначений.ВыгрузитьКолонку(Колонка.Имя);

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


Модератору