друзья подскажите: как динамически (в цикле) построить структуру таблицы значений?
Т.е. есть некий цикл, внутри которого определяются идентификаторы колонок (например "Колонка1", "Колонка2" и т.д.)... и вот на выходе мне нужна ТЗ с этими колонками...
Не могу сообразить как это сделать
Вставить новую колонку в таблицу значений в указанную позицию.
Синтаксис:
ВставитьКолонку(<Идентификатор>, <НомерКолонки>, <Тип>, <Длина>, <Точность>, <3аголовок>, <Ширина>, <Формат>, <Положение>)
Параметры:
<Идентификатор> Необязательный параметр. Идентификатор колонки, если не указан обращение к колонке возможно только по номеру.
<НомерКолонки> Необязательный параметр. Числовое выражение, содержащее позицию, в которую вставляется новая колонка.
<Тип>Необязательный параметр. Строка или вид суб кон-то, задающий тип колонки. Если не указан, то можно хранить любой тип.
<Длина> Необязательный параметр. Длина для числовой или строковой колонки.
<Точность>Необязательный параметр. Точность (длина дробной части) для числовой колонки.
<Заголовок>Необязательный параметр. Строковое выражение, содержащее заголовок колонки в элементе диалога типа «ТаблицаЗначений».
<Ширина>Необязательный параметр. Числовое выражение, содержащее ширину колонки (в символах) для представления колонки в элементе диалога типа «ТаблицаЗначений».
<Формат>Необязательный параметр. Строковое выражение, содержащее форматную строку, которая будет использована при визуальном отображении значений данной колонки.
<Положение>Необязательный параметр. Определяет вариант выравнивания при визуальном отображении значений данной колонки. Число: 1 — слева; 2 — справа.
Возвращаемое значение: номер новой колонки.
Описание:
Метод ВставитьКолонку вставляет новую колонку в таблицу значений в указанную позицию.
ТЗ=СоздатьОбъект("ТаблицаЗначений");
Для к = 1 по 10000000 Цикл
ТЗ.НоваяКолонка("Вася"+к);
КонецЦикла;
или так:
Для к = 1 по 10000000 Цикл
ТЗ.НоваяКолонка(); //оно само идентификатор задаст
КонецЦикла;
(7) Че ?
Есть какая то монопенисуальная разница, как будет задаваться идентификатор колонки ?
А создание колонок
Вася1,Вася2....Вася1000000 - это не цикл ?
Спр=СоздатьОбъект("Спраовнчик.Сотрудники"):
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Имя=СокрЛП(Спр.Фамилия);
ТЗ.НоваяКолонка(Имя);
КонецЦикла;
Спр=СоздатьОбъект("Справочник.Сотрудники"):
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Если Спр.ЭтоГруппа = 0 Тогда
Имя = "_" + Спр.Код + "_" + СокрЛП(Спр.Фамилия);
ТЗ.НоваяКолонка(Имя);
КонецЕсли;
КонецЦикла;
(23) Также в свое время вышел из положения как в (15), когда надо было сохранить заголовок колонки "как есть" (с точками, пробелами и прочей....). Хочу только отметить, что это не идентификатор, а "<Заголовок>Необязательный параметр. Строковое выражение, содержащее заголовок колонки в элементе диалога типа «ТаблицаЗначений»" То есть к колонке обратиться по нему нельзя. Но мне это было и не надо. У меня вообще не было идентификатора (обращался при необходимости по номеру колонки)
P.S. написал бы об этом еще в пятницу, но сбило с толку слово "идентификаторы" у ТС.
(24) Rokky78, не много не так, в моем случае заголовки не важны, важны именно идентификаторы колонок ТЗ, и в (15) точный диагноз. Я так понял, что т.к. наименования элементов справочника формально могут совпадать (по факту они у меня уникальны и никаких точек пробелов и прочего в них нет) то платформа и выдает ошибку, т.к. есть вероятность дублей по наименованию
(25) pisarevEV, если наименования уникальны - платформа ругаться не будет. Ругань возникает лишь в том случае, когда есть попытка завести новую колонку с уже существующим идентификатором. Вообще, если платформа ругается - значит, или есть дубли, или пробелы в середине наименования, или неотображаемые символы в наименовании. Раз код в (17) работает, значит, дело не в пробелах и не в символах. Значит, дубли 100%.
Для к = 1 по 10000000 Цикл
ТЗ.НоваяКолонка(); //оно само идентификатор задаст
КонецЦикла;
или так
Для к = 1 по 10000000 Цикл
ТЗ.НоваяКолонка("_"+к); //оно само идентификатор задаст
КонецЦикла;
Функция глКлонироватьСтруктуруТЗ(Тз) экспорт
перем Тип,Длина,Точность;
Резулт=СоздатьОбъект("ТаблицаЗначений");
Для сч=1 по Тз.КоличествоКолонок() Цикл
поле=Тз.ПолучитьПараметрыКолонки(сч,тип,Длина,Точность);
Резулт.НоваяКолонка(поле,тип,длина,Точность);
КонецЦикла;
возврат резулт
КонецФункции