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