В общем такая дилемма, программно рисую колонки у таблицы значений на форме. Сама таблица размещена на форме в конфигураторе, без колонок. Все хорошо выводится, но есть один нюанс, не могу принудительно установить ширину колонок, то есть задаю НовыйЭлементФормы.Ширина = 5; но ширина устанавливается таким образом, чтобы отображался почти весь заголовок колонки, он в общем-то не всегда нужен, чтобы весь отображался, если надо, пользователи раздвинут ширину, но если текст заголовка сделать меньше, то ширина тоже уменьшается.
В связи с этим вопрос, как задать фиксированную ширину колонки Таблицы формы?

Управляемые формы, платформа 8.3.8.2197

Вывожу колонки на форму таким образом, у самой колонки тип значения - число

```1c
    ЭлементТЗ = Элементы[ИмяТаблицы];
    Для Каждого Колонка ИЗ ТаблицаРезультат.Колонки Цикл
    НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
    Тип("ПолеФормы"), ЭлементТЗ);
    НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлементФормы.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;

    Если Лев(Колонка.Имя, 3) = "ТМЦ" Тогда
    НовыйЭлементФормы.ТолькоПросмотр = Истина;
    //НовыйЭлементФормы.МаксимальнаяШирина = 10;
    НовыйЭлементФормы.Ширина = 5;
    //НовыйЭлементФормы.АвтоМаксимальнаяШирина = Ложь;
    //НовыйЭлементФормы.РастягиватьПоГоризонтали = истина;
    КонецЕсли;
    КонецЦикла;
```

Игрался с параметрами АвтоМаксимальнаяШирина, МаксимальнаяШирина, РастягиватьПоГоризонтали - результата не достиг
---
(22)
Попробуй вот так.

```1c
    ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
    ГруппаКолонок = ";
    Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл

    ГруппаКолонок=Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
    ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
    ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
    ГруппаКолонок.ОтображатьВШапке = Истина;
    ГруппаКолонок.Заголовок = Колонка.Заголовок;

    ЭлементРеквизита=Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
    ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
    ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
    ЭлементРеквизита.ОтображатьВШапке = Ложь;
    ЭлементРеквизита.Ширина = 5;

    КонецЦикла;
```
---
сокращай название колонок, тогда будет более управляемо.

бяка в том, что... УФ принудительно умещает заголовок поля.
---
сокращай название колонок, тогда будет более управляемо.
Вот тогда точно не будет понятно что в колонке, с полным заголовком хотя бы можно раздвинуть, да посмотреть

(3) Программно никак imho
А если не программно? Сдается мне, что программно, что нет, оно пляшет от заголовка
---
Сделай просто - выводи краткие названия колонок, а когда пользователь раздвигает колонки, то выводи сразу же более полное название колонок - чем шире колонку сделает пользователь, тем больше символов выводи в название колонки.
---
А в каком событии это делать? На изменение размера колонки платформа ничего вроде не генерирует

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

```1c
    ГруппаКолонок=Элементы.Добавить("ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ЭлементТЗ);
    ГруппаКолонок.Вид= ВидГруппыФормы.ГруппаКолонок;
    //ГруппаКолонок.ОтображатьВШапке = Истина;
    ГруппаКолонок.Ширина = 3;
    ГруппаКолонок.РастягиватьПоГоризонтали = Ложь;

    НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
    Тип("ПолеФормы"), ГруппаКолонок);
    НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлементФормы.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
```

(13) С подпиской не понятно, какое событие должно быть?
Можно сделать обработчик ожидания, но это будет дико тормозить
---
```1c
    ГруппаКолонок=Элементы.Добавить("ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ЭлементТЗ);
    ГруппаКолонок.Вид= ВидГруппыФормы.ГруппаКолонок;
    //ГруппаКолонок.ОтображатьВШапке = Истина;
    ГруппаКолонок.Заголовок = "Текст шапки ";
    ГруппаКолонок.РастягиватьПоГоризонтали = Ложь;

    НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
    Тип("ПолеФормы"), ГруппаКолонок);
    НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлементФормы.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
    НовыйЭлементФормы.Ширина = 3;
    НовыйЭлементФормы.ОтображатьВШапке = Ложь;
```

Вот так попробуй
---
Короче конечно стало, но только из-за того, что заголовок идет в 2 строки, также можно было и высоту шапки таблицы формы увеличить. Ширину по-прежнему менять не получается
---
Рабочий код

```1c
    ТаблицаЭлементРеквизита = Элементы[ИмяПоляТаблицыФормы];
    КолКол = 0; НомерКолонок = 1;
    ГруппаКолонок = ";
    Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл

    Если КолКол%2=0 или КолКол = 0 Тогда
    ГруппаКолонок = Элементы.Добавить(ИмяПоляТаблицыФормы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
    ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
    ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
    ГруппаКолонок.ОтображатьВШапке = Истина;
    НомерКолонок = НомерКолонок + 1;
    КонецЕсли;

    ЭлементРеквизита = Элементы.Добавить(ИмяПоляТаблицыФормы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
    ЭлементРеквизита.ПутьКДанным = ИмяРеквизитаДанныеФормыКоллекция + "." + Колонка.Имя;
    ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
    ЭлементРеквизита.ОтображатьВШапке = Ложь;

    Если Найти(Колонка.Имя,"_Знак") Тогда
    ЭлементРеквизита.Ширина = 6;
    Иначе
    ЭлементРеквизита.Ширина = 10;
    ГруппаКолонок.Заголовок = Колонка.Заголовок;
    КонецЕсли;

    КолКол = КолКол + 1;
    КонецЦикла;
```

Только тут вывод двух колонок в одну группу, и ширина устанавливается.
Что-бы не было две строки необходим
НовыйЭлементФормы.ОтображатьВШапке = Ложь; - Тогда останется группа в шапке
---
Мне в любом случае нужен заголовок каждой колонки, если выводить только заголовок группы, то это не пойдет, там ведь две колонки
Я видимо, что-то делаю не так:

```1c
    ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
    КолКол = 0; НомерКолонок = 1;
    ГруппаКолонок = ";
    Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл

    Если КолКол%2=0 или КолКол = 0 Тогда
    ГруппаКолонок = Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
    ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
    ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
    ГруппаКолонок.ОтображатьВШапке = Истина;
    НомерКолонок = НомерКолонок + 1;
    КонецЕсли;

    ЭлементРеквизита = Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
    ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
    ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
    //ЭлементРеквизита.ОтображатьВШапке = Ложь;

    Если Найти(Колонка.Имя,"ТМЦ") Тогда
    ЭлементРеквизита.Ширина = 5;
    Иначе
    ЭлементРеквизита.Ширина = 5;
    ГруппаКолонок.Заголовок = Колонка.Заголовок;
    КонецЕсли;

    КолКол = КолКол + 1;
    КонецЦикла;
```
---
(22)
Попробуй вот так.

```1c
    ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
    ГруппаКолонок = ";
    Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл

    ГруппаКолонок=Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
    ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
    ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
    ГруппаКолонок.ОтображатьВШапке = Истина;
    ГруппаКолонок.Заголовок = Колонка.Заголовок;

    ЭлементРеквизита=Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
    ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
    ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
    ЭлементРеквизита.ОтображатьВШапке = Ложь;
    ЭлементРеквизита.Ширина = 5;

    КонецЦикла;
```
---
А вот это уже ближе к истине, правда минимальная ширина все равно не выставится меньше определенного минимума (вручную сделать меньше можно, но программно не ставится).

Общую идею понял, так как у колонки будет пустой заголовок, то шириной управлять можно, а сам заголовок будет отображаться в группе (видимо он и мешает сделать ширину меньше). Интересная идея
---
Можно попробовать создать пустую колонку в конце и не устанавливать ширину чтобы она забрала остаток ширины таблицы тогда может и еще меньше станут колонки за счет того что им не придется подгонять размеры.
---
Не, не работает так
---
Ну да, обработчик ожидания - просто на C++ builder сейчас пишу параллельно :-)
А по поводу тормозить - так можно ведь сделать два обработчика - первый раз в три секунды - проверяет какой сейчас активный элемент на форме, и когда Ваша таблица - включает другой обработчик с очень маленьким периодом ожидания. А когда не Ваша таблица, то отключает второй обработчик.
---
Нет, это дикий костыль вешать подобные обработчики на клиентскую форму
---
Нуууу - за неимением лучшего пользуемся тем что есть.
---
Что, никак?
апну
---
как задать фиксированную ширину колонки Таблицы формы?

Программно никак imho
---
Краткий заголовок.
Полный в подсказку поля занести.
---
он не может сокращать, они программно заполняются названиями номенклатуры
---
они программно заполняются названиями
... и можно наверно программно заполнять кратким названием, а полное в подсказку пихать...
---
так у него небось и так кратким заполнено.
---
Немного некропостну рабочий способ. Меняю свойство "Ширина" поля (колонки таб. части). Ширину колонки в том числе программно при создании не удастся изменить если у этой колонки ширину увеличивали/уменьшали мышкой. Чтобы сбросить запомненную в пользовательском режиме ширину, необходимо нажать Ещё - Изменить форму - Ещё - Установить стандартные настройки. И вуаля, ширина становится такая какую мы установили.