Всем доброго дня! Стоит задача создать программно создать 20 колонок в тз на форме, с определенными именами, типом и шириной у каждой колонки. код в процедуре :
```1c
    НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(,Новый ОписаниеТипов("Строка"));
    НоваяКолонка.Имя = "Наименование";
    НоваяКолонка.ТекстШапки = "Наименование";
    НоваяКолонка.Ширина = 50;
```
---
Тогда Вам проще таблицу создать с исходными данными и потом из нее работать
---
массив массивов можно сделать, заменяет таблицу значений на уф.
---
Вы уже пробовали как-то и у вас не получилось?
Приведите код, который у вас вызывает затруднения. И перепишите последнее ваше предложение.
---
Извините за мой французкий, задача, изначально тупорылая, не надо это делать при открытии, либо тч либо программно, но НЕ ТАК
---
Мне нужно программно создать 20 колонок, у каждой свой имя и ширина, как это проще сделать?
---
Друг мой извини, но проще в екселе
---
Подскажите, почему нельзя создать колонки в процедуре ПриОткрытии ?
---
присоединяюсь, сначала заполняете ТЗ, и в обычных формах есть команда СоздатьКолонки()

ЭлементТаблицаРезультата.Значение = ТекРезультатТаблица.Скопировать();
ЭлементТаблицаРезультата.СоздатьКолонки();
---
Если Вы с 1с гасите, то макет с отчетом, там можно плясать как угодно, либо, наймите программиста
---
не понял, что Вы имели этим ввиду ?
---
не берите близко к сердцу, имел ввиду что вы программер
---
Добавить(<Имя>, <Тип>, <Заголовок>, <Ширина>)
НоваяКолонка = тз.Колонки.Добавить(,Новый ОписаниеТипов("Строка"),"Наименование",50);
---
Так у меня изначально не пошло, Слишком много фактических параметров
---
тз.Колонки.Добавить("Наименование",Новый ОписаниеТипов("Строка"),"Наименование",50) а так?
---
Неверное имя колонки
---
НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(Наименование,Новый ОписаниеТипов("Строка"));
                     НоваяКолонка.ТекстШапки = "Наименование";
            НоваяКолонка.Ширина = 50;
вот так работает ,но не 20 раз же так писать
---
А чем мешает Цикл применить?
---
а как в цикл данные передать ? имена колонок, ширину, тип и заголовок ?
---
А че, коллекциями пользоваться не учили?
---
Колонки.Добавить("Наименование",Новый ОписаниеТипов("Строка"),"Наименование",50)
вот так сработало
Колонки.Добавить("Наименование1",Новый ОписаниеТипов("Строка"),"Наименование1",50)
Колонки.Добавить("Наименование2",Новый ОписаниеТипов("Строка"),"Наименование2",50)
Колонки.Добавить("Наименование3",Новый ОписаниеТипов("Строка"),"Наименование3",50)
Колонки.Добавить("Наименование4",Новый ОписаниеТипов("Строка"),"Наименование4",50)
ЭлементыФормы.тз.СоздатьКолонки();
---
А если понадобится создать 120 колонок?
---
Раз в год такая задача на форуме точно всплывает.
И все упорно пытаются в цикле использовать одно и то же имя колонки.
Подумать о том, чтобы создать уникальные имена колонок - даже 10 лет стажа на форуме никак не помогают...

Пилите, Шура. Пилите!
---
Пилю) я еще в цикле ничего не создавал.
---
А кто сказал, что одно и то же!? Я думаю Автор сам пойиет, что имя Уникально!
---
Не надо за него думать. Мой опыт подсказывает - что тот, кто приходит сюда с такими вопросами - вряд ли понимает про уникальность и циклы.
---
Что вы говорите ? Понимаю про уникальность!
---
Вот и я про то же!
---
```1c
    СтрокаЦикла Из МассивИмен Цикл
    НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(Наименование,Новый ОписаниеТипов("Строка"));
    НоваяКолонка.ТекстШапки = СтрокаЦикла;
    НоваяКолонка.Ширина = 50;
    КонецЦикла
```
---
Это то понятно. Но в массиве еще нужно иметь наименование,тип, текстШапки и ширину.
---
Они откуда-то должны сами придуматься?
---
Задать нужно естественно,
---
Так задай.
---
конечно, список имен колонок с параметрами .Например ? как задать ?
---
Че, не научили создавать список или массив?
---
Я так понимаю Имена где-то есть.
---
Да не надо за автора "понимать". Он сам не понимает - есть они где-то или нет.
А то потом ты начнешь пытаться за него понимать про "ширину и типизацию колонок".
---
А Выто почему за Автора решаете, что Он знаеет, а чего нет!!!
---
А ты?
---
```1c
    СтрокаЦикла Из МассивИмен Цикл
    НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(Наименование,Новый ОписаниеТипов("Строка"));
    НоваяКолонка.ТекстШапки = СтрокаЦикла;
    НоваяКолонка.Ширина = 50;
    КонецЦикла
```

Давай, расскажи про уникальность имен колонок в твоём коде.
---
Где вы видите мой код ? я его в цикл не загонял
---
А я разве с тобой сейчас разговариваю? Сообщение (25) разве ты написал?
---
```1c
    СтрокаЦикла Из МассивИмен Цикл
    НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(СтрокаЦикла ,Новый ОписаниеТипов("Строка"));
    НоваяКолонка.ТекстШапки = СтрокаЦикла;
    НоваяКолонка.Ширина = 50;
    КонецЦикла
```

Ну Да, оштбочка закралась
---
```1c
    ОписаниеТиаСтрока = Новый ОписаниеТипов("Строка");
    Для а=1 по 50 Цикл
    ИмяКолонки = "Наименование"+а;
    Колонки.Добавить(ИмяКолонки, ОписаниеТиаСтрока, ИмяКолонки, 50);
    КонецЦикла;
```
---
У меня у каждой колонки свое имя Например: Тип, страна, цвет, и т.п.
---
У меня у каждой колонки свое имя
Где они у вас? В чем они хранятся или на листке бумаги написаны и на столе лежат?
---
Тссс... Он щас сам догадается, он в курсе (как утверждает Ася Озерова).
---
Ну и? Что у нас можно использовать в качестве элемента коллекции, в каждом из которых содержится несколько значений?
---
В (47) Функция, обращайтесь к ней с 3-мя параметрами: Имя, Тип, Ширина из Своего Модуля
---
"СтрокаЦикла" - там это что?
---
Да я понял, спасибо. Просто тут про цикл из массива писали, но как в массив столько параметров засунуть.
---
А это смотря что хранить в массиве в качестве элемента...
---
имя, тип, заголовок,.ширину
---
Это не элемент. Это конечные значения одного из элементов массива. А элементом массива могут быть ЛЮБЫЕ объекты.
---
В каком виде они у Вас есть в сущности?
---
Ну реши опять за автора, что ж ты...
---
что вы взъелись ?
---
есть список имен колонок, надо их задать в одном месте и программно создать колонки, предложите свое видение
---
Ок, список Имен у тебя есть. А список заголовков, типов, ширин - у тебя есть?
---
```1c
    Функция СоздатьКолонку(Имя, Тип, Ширина)
    НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(Имя,Новый ОписаниеТипов(Тип));
    НоваяКолонка.ТекстШапки = СтрокаЦикла;
    НоваяКолонка.Ширина = Ширина;
    КонецФункции;
```
---
спасибо, я понял. Создаем без циклов.
---
Красавчик! Продолжай!
---
Это ирония ?
---
Сам как думаешь? А если потом возникнет задача создать не 20, а 25 колонок - что будешь делать?
---
```1c
    Функция СоздатьКолонку(Имя, Тип, Ширина)
    НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(Имя,Новый ОписаниеТипов(Тип));
    НоваяКолонка.ТекстШапки = СтрокаЦикла;
    НоваяКолонка.Ширина = Ширина;
    КонецФункции;
```

И нахрена тут неработающая функция? Что она возвращает? Или опять "ошибочка закралась"?
---
```1c
    Функция СоздатьКолонку(Имя, Тип, Ширина)
    НоваяКолонка = ЭлементыФормы.тз.Колонки.Добавить(Имя,Новый ОписаниеТипов(Тип));
    НоваяКолонка.ТекстШапки = Имя;
    НоваяКолонка.Ширина = Ширина;
    КонецФункции;
```

Да, опять "Закралась"
---
То есть продолжаешь утверждать, что функцию можно использовать без оператора Возврат.
Ну ок, продолжай учительствовать тут дальше.
---
Ну поменяй на "Процедура" суть изменилась?
---
Конечно.
---
что функцию можно использовать без оператора Возврат

Проблема если в функции будешь использовать возврат и ничего не возвращать. Или возвращать ерунду.
В С++, на сколько я помню, нет процедур. Может я конечно плохо помню или в прошлом веке так было в С++. Но обходились.

А в ассемблере я не помню функций. Только процедуры. И что?
---
А не надо с чужим уставом в свой язык программирования...
---
А не надо с чужим уставом в свой язык программирования...

Почему в чужой язык программирования. 1С что не на есть наш российский.

В 1С если внутри функции нет вызова "ВОЗВРАТ", то по факту от процедуры она мало чем отличается.
Отличается только тем, что потенциально могла бы возвращать значение, но не делает этого. Процедура никогда ничего не возвращает.

В С++ тем функциям, которые не должны ничего возвращать рисуют тип возвращаемого значения void. Т.е. ничего. Получается практически процедура.
В 1С процедуры можно вообще не использовать примерно по такому же принципу. При необходимости нарисовать "Возврат" рисовать, например "Возврат Неопределенно". Но тут на любителя. :-)
---
Тебе не про это писали.
Где находится источник данных твоих имен и типов колонок и названий в шапке?
Откуда ты их берешь?

Если каждый раз кто-то приносит на бумажке, то сиди и каждый раз пиши. Не будет никаких циклов.
Если прилетает структура какая-то, массив или ещё что, там и бери в цикле.
---
Список - это некий контейнер, который можно обходить в цикле.
---
Подскажите мне такой контейнер с 4 параметрами,
---
```1c
    МояСтруктура = Новый Структура("Имя, Тип, Ширина", Имя, Тип, Ширина);
```
---
30 колонок, 30 структур ? может проще как Вы писали к процедуре СоздатьКолонку ?
---
Структуру тоже можно в Цикле создать. Главное понять где храняться Исходные данные и в каком виде
---
Где у Вас храняться Имена колонок, тип и размер?
---
ДА НИГДЕ! Он же сказал уже.
---
в коде руками прописываем
---
Продолжай тогда. Ты это уже умеешь, а об остальном даже думать не хочешь.
Храни в коде.
И потом при необходимости добавить еще одну колонку - будешь изменять код и перезаписывать конфигурацию с остановкой работы всего предприятия.

Вперед!
---
Тогда Вам проще таблицу создать с исходными данными и потом из нее работать
---
Да, так проще будет.Спасибо.
---
Ну тогда отметьте мой ответ Верным, буду благодарна!
---
Еще тогда вопрс: Раз Вы их знаете заранее и прописываете в коде, почему бы сразу их не прописывать в таблицу формы?
---
с кодом как то проще, там их около 30, а может и больше. А в таблице видимость группами переключаю.
---
Можно и 30 строк в Таблице значений. Можно 30 строк в регистре сведений. Можно тридцать элементов Справочника...

Или эти данные с потолка сами возьмутся?
---
Структура...
Массив из структур....
Таблица значений....
Список списков... (в 1С 7.5 не было таблиц значений)
---
+ Строка таблицы значений. + Соответствие.
---
Я знаю как в структуру 2 значения, а 4 как ?
---
Я знаю как в структуру 2 значения, а 4 как ? Так же как и 16.
---
(75)
---
Спасибо всем за критику и ответы!