Ширина колонок ТаблицыФормы

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

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

Вывожу колонки на форму таким образом, у самой колонки тип значения - число
ЭлементТЗ = Элементы[ИмяТаблицы];
    Для Каждого Колонка ИЗ ТаблицаРезультат.Колонки Цикл
        НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
                                                Тип("ПолеФормы"), ЭлементТЗ);
        НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлементФормы.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
		
		Если Лев(Колонка.Имя, 3) = "ТМЦ" Тогда
			НовыйЭлементФормы.ТолькоПросмотр = Истина;
			//НовыйЭлементФормы.МаксимальнаяШирина = 10;
			НовыйЭлементФормы.Ширина = 5;
			//НовыйЭлементФормы.АвтоМаксимальнаяШирина = Ложь;
			//НовыйЭлементФормы.РастягиватьПоГоризонтали = истина;
		КонецЕсли;
	КонецЦикла;
Показать


Игрался с параметрами АвтоМаксимальнаяШирина, МаксимальнаяШирина, РастягиватьПоГоризонтали - результата не достиг
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
23. Абушев 135 28.09.17 10:47 Сейчас в теме +1 $m
(22)
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
КолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл

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

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

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

КолКол = КолКол + 1;
КонецЦикла;
Показать

(22)
Попробуй вот так.
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
	
	ГруппаКолонок=Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
	ГруппаКолонок.Вид				= ВидГруппыФормы.ГруппаКолонок;
	ГруппаКолонок.Группировка		= ГруппировкаКолонок.Горизонтальная;
	ГруппаКолонок.ОтображатьВШапке	= Истина;
	ГруппаКолонок.Заголовок			= Колонка.Заголовок;
	
	ЭлементРеквизита=Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
	ЭлементРеквизита.ПутьКДанным		= ИмяТаблицы + "." + Колонка.Имя;
	ЭлементРеквизита.Вид				= ВидПоляФормы.ПолеВвода;
	ЭлементРеквизита.ОтображатьВШапке	= Ложь;
	ЭлементРеквизита.Ширина = 5;
	
КонецЦикла;
Показать
adhocprog; Deryni; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. корум 288 27.09.17 16:43 Сейчас в теме
(1) сокращай название колонок, тогда будет более управляемо.

бяка в том, что... УФ принудительно умещает заголовок поля.
alex-l19041; +1 Ответить
5. Dream_kz 129 27.09.17 17:04 Сейчас в теме
(4)
сокращай название колонок, тогда будет более управляемо.

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

(3)
Программно никак imho

А если не программно? Сдается мне, что программно, что нет, оно пляшет от заголовка
7. protexprotex 116 27.09.17 17:32 Сейчас в теме
(1) Сделай просто - выводи краткие названия колонок, а когда пользователь раздвигает колонки, то выводи сразу же более полное название колонок - чем шире колонку сделает пользователь, тем больше символов выводи в название колонки.
12. Dream_kz 129 27.09.17 18:10 Сейчас в теме
(7) А в каком событии это делать? На изменение размера колонки платформа ничего вроде не генерирует

(6) Как вариант конечно, но это дикий костыль, если б можно было управлять шириной, то можно было бы программно (по отдельной кнопке) поставить ширину колонок больше, и сразу все видно, а тут на каждую колонку наводить, чтобы узнать что за товар
13. protexprotex 116 27.09.17 18:17 Сейчас в теме
(12) Просто оформить подписку на событие для формы с малой периодичностью - и анализировать элемент на котором стоит текущий фокус. И если это Ваша таблица, то анализировать факт изменения ширины колонок (например, запоминать предыдущие значения и сверять с текущими). Ну и далее изменяем (при надобности) названия колонок.
10. uri1978 137 27.09.17 17:54 Сейчас в теме
(1) "Неуправляемые формы"
Сам с этим боролся безрезультатно.
14. Абушев 135 27.09.17 18:18 Сейчас в теме
(1)
ЭлементТЗ

(1) Попробуй с начало добавить Группу Колонок и в нее добавить колонку и задать там ширину, должно помочь
ГруппаКолонок=Элементы.Добавить("ГруппыКолонок"+Ном,Тип("ГруппаФормы"),ЭлементТЗ);
ГруппаКолонок.Вид= ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.ОтображатьВШапке = Истина;
15. Dream_kz 129 27.09.17 18:37 Сейчас в теме
(14) Не получается, верхний код изменил частично на этот

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


(13) С подпиской не понятно, какое событие должно быть?
Можно сделать обработчик ожидания, но это будет дико тормозить
16. Абушев 135 27.09.17 18:41 Сейчас в теме
(15)
ГруппаКолонок=Элементы.Добавить("ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ЭлементТЗ); 
        ГруппаКолонок.Вид= ВидГруппыФормы.ГруппаКолонок; 
        //ГруппаКолонок.ОтображатьВШапке    = Истина;
         ГруппаКолонок.Заголовок = "Текст шапки  ";
        ГруппаКолонок.РастягиватьПоГоризонтали = Ложь;
        
        НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
                                                Тип("ПолеФормы"), ГруппаКолонок);
        НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлементФормы.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
        НовыйЭлементФормы.Ширина = 3;
      НовыйЭлементФормы.ОтображатьВШапке	= Ложь;
Показать

Вот так попробуй
18. Dream_kz 129 27.09.17 19:07 Сейчас в теме
(16) Короче конечно стало, но только из-за того, что заголовок идет в 2 строки, также можно было и высоту шапки таблицы формы увеличить. Ширину по-прежнему менять не получается
Прикрепленные файлы:
21. Абушев 135 27.09.17 21:26 Сейчас в теме
(18)Рабочий код
ТаблицаЭлементРеквизита = Элементы[ИмяПоляТаблицыФормы];
	КолКол = 0; НомерКолонок = 1;
	ГруппаКолонок = "";
	Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
		
		Если КолКол%2=0 или КолКол = 0 Тогда
			  ГруппаКолонок						= Элементы.Добавить(ИмяПоляТаблицыФормы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
			  ГруппаКолонок.Вид					= ВидГруппыФормы.ГруппаКолонок;
			  ГруппаКолонок.Группировка			= ГруппировкаКолонок.Горизонтальная;
			  ГруппаКолонок.ОтображатьВШапке	= Истина;
			  НомерКолонок 						= НомерКолонок + 1;
		КонецЕсли;
		
        ЭлементРеквизита					= Элементы.Добавить(ИмяПоляТаблицыФормы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
        ЭлементРеквизита.ПутьКДанным		= ИмяРеквизитаДанныеФормыКоллекция + "." + Колонка.Имя;
        ЭлементРеквизита.Вид				= ВидПоляФормы.ПолеВвода;
		ЭлементРеквизита.ОтображатьВШапке	= Ложь;
		
		Если Найти(Колонка.Имя,"_Знак") Тогда
			ЭлементРеквизита.Ширина = 6;
		Иначе
			ЭлементРеквизита.Ширина = 10;
			ГруппаКолонок.Заголовок			= Колонка.Заголовок;
		КонецЕсли;
		
		КолКол = КолКол + 1;
    КонецЦикла;
Показать

Только тут вывод двух колонок в одну группу, и ширина устанавливается.
Что-бы не было две строки необходим
НовыйЭлементФормы.ОтображатьВШапке = Ложь; - Тогда останется группа в шапке
22. Dream_kz 129 28.09.17 07:04 Сейчас в теме
(21) Мне в любом случае нужен заголовок каждой колонки, если выводить только заголовок группы, то это не пойдет, там ведь две колонки
Я видимо, что-то делаю не так:
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
    КолКол = 0; НомерКолонок = 1;
    ГруппаКолонок = "";
    Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
        
        Если КолКол%2=0 или КолКол = 0 Тогда
              ГруппаКолонок                        = Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
              ГруппаКолонок.Вид                    = ВидГруппыФормы.ГруппаКолонок;
              ГруппаКолонок.Группировка            = ГруппировкаКолонок.Горизонтальная;
			  ГруппаКолонок.ОтображатьВШапке    = Истина;
              НомерКолонок                         = НомерКолонок + 1;
        КонецЕсли;
        
        ЭлементРеквизита                    = Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
        ЭлементРеквизита.ПутьКДанным        = ИмяТаблицы + "." + Колонка.Имя;
        ЭлементРеквизита.Вид                = ВидПоляФормы.ПолеВвода;
		//ЭлементРеквизита.ОтображатьВШапке    = Ложь;
        
        Если Найти(Колонка.Имя,"ТМЦ") Тогда
            ЭлементРеквизита.Ширина = 5;
        Иначе
            ЭлементРеквизита.Ширина = 5;
			ГруппаКолонок.Заголовок = Колонка.Заголовок;
        КонецЕсли;
        
        КолКол = КолКол + 1;
    КонецЦикла;
Показать
Прикрепленные файлы:
23. Абушев 135 28.09.17 10:47 Сейчас в теме +1 $m
(22)
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
КолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл

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

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

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

КолКол = КолКол + 1;
КонецЦикла;
Показать

(22)
Попробуй вот так.
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
	
	ГруппаКолонок=Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
	ГруппаКолонок.Вид				= ВидГруппыФормы.ГруппаКолонок;
	ГруппаКолонок.Группировка		= ГруппировкаКолонок.Горизонтальная;
	ГруппаКолонок.ОтображатьВШапке	= Истина;
	ГруппаКолонок.Заголовок			= Колонка.Заголовок;
	
	ЭлементРеквизита=Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
	ЭлементРеквизита.ПутьКДанным		= ИмяТаблицы + "." + Колонка.Имя;
	ЭлементРеквизита.Вид				= ВидПоляФормы.ПолеВвода;
	ЭлементРеквизита.ОтображатьВШапке	= Ложь;
	ЭлементРеквизита.Ширина = 5;
	
КонецЦикла;
Показать
adhocprog; Deryni; +2 Ответить
24. Dream_kz 129 28.09.17 11:27 Сейчас в теме
(23) А вот это уже ближе к истине, правда минимальная ширина все равно не выставится меньше определенного минимума (вручную сделать меньше можно, но программно не ставится).

Общую идею понял, так как у колонки будет пустой заголовок, то шириной управлять можно, а сам заголовок будет отображаться в группе (видимо он и мешает сделать ширину меньше). Интересная идея
Прикрепленные файлы:
25. Абушев 135 28.09.17 11:36 Сейчас в теме
(24)Можно попробовать создать пустую колонку в конце и не устанавливать ширину чтобы она забрала остаток ширины таблицы тогда может и еще меньше станут колонки за счет того что им не придется подгонять размеры.
26. Dream_kz 129 28.09.17 11:57 Сейчас в теме
17. protexprotex 116 27.09.17 18:42 Сейчас в теме
(15) Ну да, обработчик ожидания - просто на C++ builder сейчас пишу параллельно :-)
А по поводу тормозить - так можно ведь сделать два обработчика - первый раз в три секунды - проверяет какой сейчас активный элемент на форме, и когда Ваша таблица - включает другой обработчик с очень маленьким периодом ожидания. А когда не Ваша таблица, то отключает второй обработчик.
19. Dream_kz 129 27.09.17 19:10 Сейчас в теме
(17) Нет, это дикий костыль вешать подобные обработчики на клиентскую форму
20. protexprotex 116 27.09.17 19:38 Сейчас в теме
(19) Нуууу - за неимением лучшего пользуемся тем что есть.
2. Dream_kz 129 27.09.17 16:20 Сейчас в теме
3. roman77 332 27.09.17 16:37 Сейчас в теме
(2)
как задать фиксированную ширину колонки Таблицы формы?


Программно никак imho
6. KapasMordorov 428 27.09.17 17:29 Сейчас в теме
Краткий заголовок.
Полный в подсказку поля занести.
корум; +1 Ответить
8. roman77 332 27.09.17 17:42 Сейчас в теме
(6) он не может сокращать, они программно заполняются названиями номенклатуры
9. корум 288 27.09.17 17:51 Сейчас в теме
(8)
они программно заполняются названиями

... и можно наверно программно заполнять кратким названием, а полное в подсказку пихать...
11. roman77 332 27.09.17 17:57 Сейчас в теме
(9) так у него небось и так кратким заполнено.
27. user717534 11 18.09.23 13:56 Сейчас в теме
Немного некропостну рабочий способ. Меняю свойство "Ширина" поля (колонки таб. части). Ширину колонки в том числе программно при создании не удастся изменить если у этой колонки ширину увеличивали/уменьшали мышкой. Чтобы сбросить запомненную в пользовательском режиме ширину, необходимо нажать Ещё - Изменить форму - Ещё - Установить стандартные настройки. И вуаля, ширина становится такая какую мы установили.
paybaseme; vx_gas; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот