1С 8.3 Типизация колонок Таблицы Значений
Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Перейти в раздел примеры кода 1С 8.3:

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