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

По теме из базы знаний
Найденные решения
(22)
(22)
Попробуй вот так.
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
КолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
Если КолКол%2=0 или КолКол = 0 Тогда
ГруппаКолонок = Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
НомерКолонок = НомерКолонок + 1;
КонецЕсли;
ЭлементРеквизита = Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
//ЭлементРеквизита.ОтображатьВШапке = Ложь;
Если Найти(Колонка.Имя,"ТМЦ") Тогда
ЭлементРеквизита.Ширина = 5;
Иначе
ЭлементРеквизита.Ширина = 5;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
КонецЕсли;
КолКол = КолКол + 1;
КонецЦикла;
ПоказатьКолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
Если КолКол%2=0 или КолКол = 0 Тогда
ГруппаКолонок = Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
НомерКолонок = НомерКолонок + 1;
КонецЕсли;
ЭлементРеквизита = Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
//ЭлементРеквизита.ОтображатьВШапке = Ложь;
Если Найти(Колонка.Имя,"ТМЦ") Тогда
ЭлементРеквизита.Ширина = 5;
Иначе
ЭлементРеквизита.Ширина = 5;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
КонецЕсли;
КолКол = КолКол + 1;
КонецЦикла;
(22)
Попробуй вот так.
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
ГруппаКолонок=Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
ЭлементРеквизита=Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
ЭлементРеквизита.ОтображатьВШапке = Ложь;
ЭлементРеквизита.Ширина = 5;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(7) А в каком событии это делать? На изменение размера колонки платформа ничего вроде не генерирует
(6) Как вариант конечно, но это дикий костыль, если б можно было управлять шириной, то можно было бы программно (по отдельной кнопке) поставить ширину колонок больше, и сразу все видно, а тут на каждую колонку наводить, чтобы узнать что за товар
(6) Как вариант конечно, но это дикий костыль, если б можно было управлять шириной, то можно было бы программно (по отдельной кнопке) поставить ширину колонок больше, и сразу все видно, а тут на каждую колонку наводить, чтобы узнать что за товар
(12) Просто оформить подписку на событие для формы с малой периодичностью - и анализировать элемент на котором стоит текущий фокус. И если это Ваша таблица, то анализировать факт изменения ширины колонок (например, запоминать предыдущие значения и сверять с текущими). Ну и далее изменяем (при надобности) названия колонок.
(14) Не получается, верхний код изменил частично на этот
(13) С подпиской не понятно, какое событие должно быть?
Можно сделать обработчик ожидания, но это будет дико тормозить
ГруппаКолонок=Элементы.Добавить("ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ЭлементТЗ);
ГруппаКолонок.Вид= ВидГруппыФормы.ГруппаКолонок;
//ГруппаКолонок.ОтображатьВШапке = Истина;
ГруппаКолонок.Ширина = 3;
ГруппаКолонок.РастягиватьПоГоризонтали = Ложь;
НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
Тип("ПолеФормы"), ГруппаКолонок);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
Показать(13) С подпиской не понятно, какое событие должно быть?
Можно сделать обработчик ожидания, но это будет дико тормозить
(15)
Вот так попробуй
ГруппаКолонок=Элементы.Добавить("ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ЭлементТЗ);
ГруппаКолонок.Вид= ВидГруппыФормы.ГруппаКолонок;
//ГруппаКолонок.ОтображатьВШапке = Истина;
ГруппаКолонок.Заголовок = "Текст шапки ";
ГруппаКолонок.РастягиватьПоГоризонтали = Ложь;
НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
Тип("ПолеФормы"), ГруппаКолонок);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
НовыйЭлементФормы.Ширина = 3;
НовыйЭлементФормы.ОтображатьВШапке = Ложь;
ПоказатьВот так попробуй
(18)Рабочий код
Только тут вывод двух колонок в одну группу, и ширина устанавливается.
Что-бы не было две строки необходим
НовыйЭлементФормы.ОтображатьВШапке = Ложь; - Тогда останется группа в шапке
ТаблицаЭлементРеквизита = Элементы[ИмяПоляТаблицыФормы];
КолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Если КолКол%2=0 или КолКол = 0 Тогда
ГруппаКолонок = Элементы.Добавить(ИмяПоляТаблицыФормы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
НомерКолонок = НомерКолонок + 1;
КонецЕсли;
ЭлементРеквизита = Элементы.Добавить(ИмяПоляТаблицыФормы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяРеквизитаДанныеФормыКоллекция + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
ЭлементРеквизита.ОтображатьВШапке = Ложь;
Если Найти(Колонка.Имя,"_Знак") Тогда
ЭлементРеквизита.Ширина = 6;
Иначе
ЭлементРеквизита.Ширина = 10;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
КонецЕсли;
КолКол = КолКол + 1;
КонецЦикла;
ПоказатьТолько тут вывод двух колонок в одну группу, и ширина устанавливается.
Что-бы не было две строки необходим
НовыйЭлементФормы.ОтображатьВШапке = Ложь; - Тогда останется группа в шапке
(21) Мне в любом случае нужен заголовок каждой колонки, если выводить только заголовок группы, то это не пойдет, там ведь две колонки
Я видимо, что-то делаю не так:
Я видимо, что-то делаю не так:
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
КолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
Если КолКол%2=0 или КолКол = 0 Тогда
ГруппаКолонок = Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
НомерКолонок = НомерКолонок + 1;
КонецЕсли;
ЭлементРеквизита = Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
//ЭлементРеквизита.ОтображатьВШапке = Ложь;
Если Найти(Колонка.Имя,"ТМЦ") Тогда
ЭлементРеквизита.Ширина = 5;
Иначе
ЭлементРеквизита.Ширина = 5;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
КонецЕсли;
КолКол = КолКол + 1;
КонецЦикла;
ПоказатьПрикрепленные файлы:

(22)
(22)
Попробуй вот так.
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
КолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
Если КолКол%2=0 или КолКол = 0 Тогда
ГруппаКолонок = Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
НомерКолонок = НомерКолонок + 1;
КонецЕсли;
ЭлементРеквизита = Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
//ЭлементРеквизита.ОтображатьВШапке = Ложь;
Если Найти(Колонка.Имя,"ТМЦ") Тогда
ЭлементРеквизита.Ширина = 5;
Иначе
ЭлементРеквизита.Ширина = 5;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
КонецЕсли;
КолКол = КолКол + 1;
КонецЦикла;
ПоказатьКолКол = 0; НомерКолонок = 1;
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
Если КолКол%2=0 или КолКол = 0 Тогда
ГруппаКолонок = Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+НомерКолонок,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
НомерКолонок = НомерКолонок + 1;
КонецЕсли;
ЭлементРеквизита = Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
//ЭлементРеквизита.ОтображатьВШапке = Ложь;
Если Найти(Колонка.Имя,"ТМЦ") Тогда
ЭлементРеквизита.Ширина = 5;
Иначе
ЭлементРеквизита.Ширина = 5;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
КонецЕсли;
КолКол = КолКол + 1;
КонецЦикла;
(22)
Попробуй вот так.
ТаблицаЭлементРеквизита = Элементы[ИмяТаблицы];
ГруппаКолонок = "";
Для каждого Колонка Из ТаблицаРезультат.Колонки Цикл
ГруппаКолонок=Элементы.Добавить(ИмяТаблицы +"ГруппыКолонок"+Колонка.Имя,Тип("ГруппаФормы"),ТаблицаЭлементРеквизита);
ГруппаКолонок.Вид = ВидГруппыФормы.ГруппаКолонок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
ГруппаКолонок.Заголовок = Колонка.Заголовок;
ЭлементРеквизита=Элементы.Добавить(ИмяТаблицы + Колонка.Имя, Тип("ПолеФормы"), ГруппаКолонок);
ЭлементРеквизита.ПутьКДанным = ИмяТаблицы + "." + Колонка.Имя;
ЭлементРеквизита.Вид = ВидПоляФормы.ПолеВвода;
ЭлементРеквизита.ОтображатьВШапке = Ложь;
ЭлементРеквизита.Ширина = 5;
КонецЦикла;
Показать
(23) А вот это уже ближе к истине, правда минимальная ширина все равно не выставится меньше определенного минимума (вручную сделать меньше можно, но программно не ставится).
Общую идею понял, так как у колонки будет пустой заголовок, то шириной управлять можно, а сам заголовок будет отображаться в группе (видимо он и мешает сделать ширину меньше). Интересная идея
Общую идею понял, так как у колонки будет пустой заголовок, то шириной управлять можно, а сам заголовок будет отображаться в группе (видимо он и мешает сделать ширину меньше). Интересная идея
Прикрепленные файлы:

(15) Ну да, обработчик ожидания - просто на C++ builder сейчас пишу параллельно :-)
А по поводу тормозить - так можно ведь сделать два обработчика - первый раз в три секунды - проверяет какой сейчас активный элемент на форме, и когда Ваша таблица - включает другой обработчик с очень маленьким периодом ожидания. А когда не Ваша таблица, то отключает второй обработчик.
А по поводу тормозить - так можно ведь сделать два обработчика - первый раз в три секунды - проверяет какой сейчас активный элемент на форме, и когда Ваша таблица - включает другой обработчик с очень маленьким периодом ожидания. А когда не Ваша таблица, то отключает второй обработчик.
Немного некропостну рабочий способ. Меняю свойство "Ширина" поля (колонки таб. части). Ширину колонки в том числе программно при создании не удастся изменить если у этой колонки ширину увеличивали/уменьшали мышкой. Чтобы сбросить запомненную в пользовательском режиме ширину, необходимо нажать Ещё - Изменить форму - Ещё - Установить стандартные настройки. И вуаля, ширина становится такая какую мы установили.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот