сделать ширину колонки в размер текста в ее заголовке, обычные формы
доброго времени суток, уважаемые коллеги.
есть поехавший клиент с неадекватной хотелкой. так вот, он интересуется — есть ли возможность, обозначенная в сабже в табличном поле на обычной форме? я предполагаю, что нет. а как думаете вы? шрифт заголовка не моноширинный. заранее благодарю за помощь.
сайт avb закрылся . но идея такая: рассчитывать ширину (и высоту) по заранее составленной базе данных ширин и высот символов.
(2) да. тяжелый вариант. а чем измерять ширину в таком случае? в 1С нету метода УстановитьРазмерПоЗаголовкамКолонок?
КолонкаТаблицыЗначений.Ширина (ValueTableColumn.Width)
КолонкаТаблицыЗначений (ValueTableColumn)
Ширина (Width)
Использование:
Чтение и запись.
Описание:
Тип: Число.
Содержит ширину колонки в символах. Используется при визуальном отображении таблицы значений.
В СИМВОЛАХ, КАРЛ. ЧТО ЭТО ЗА ЧЕРТОВЩИНА.
есть еще вариант — создать табличный документ, правда не знаю как там автоматом рассчитать ширину колонок программно. по-моему тоже никак. ну допустим рассчитали ширину, она в пунктах, а теперь, внимание — как пункты перевести в СИМВОЛЫ?
IT IS IMPOSSIBRU!
(6) да, выполнение универсального отчета, это тоже идея. но там как раз считается ширина для табличного документа, а тут дерево значений на форме, да еще и динамически заполняемое, с разным количеством колонок в зависимости от количества заказов покупателей и заказов поставщику.
Колонка.Ширина = СтрДлина(Колонка.Заголовок)
тут есть алгоритм расчета
собственно, продолжаем нераскрытую тему. зазываю знатоков 1С и специалистов по удалению гланд ректально в 1С в эту тему.
Осталось узнать сколько пунктов занимает 1 символ моноширинного шрифта. Как же это сделать новичку в 1с программировании?
Идея такая. Помещаем текст заголовка в ячейку табдока с РазмещениеТекста=Переносить. Меняем ширину ячейки (она задается в символах), определяем момент, когда текст начинает/перестает переноситься. Выставляем эту ширину в колонке.
(20) по-моему ширина ячейки в пунктах в табл. документе. и по-моему если переносится текст, то надо устанавливать свойство строки автовысота, которое не дает узнать точную высоту ячейки в пунктах в данный момент. только если невидимую линию сделать в ячейке, где текст, и при изменении ширины ячейки проверять когда высота или длина линии изменится.
(21) ОбластьЯчеекТабличногоДокумента (SpreadsheetDocumentRange)
ШиринаКолонки (ColumnWidth)
Использование:
Тип: Число. Содержит ширину колонок в области (в так называемых средних символах шрифта).
Определить перенос можно, разместив рисунок по границам ячейки (метод Расположить()), и считав его высоту (в миллиметрах).
(27) я линии использовал, когда надо было в макете высоту определить. рисунок в этом случае подойдет, т. к. макет не на печать выводится.
(29) Неважно, сколько именно. Главное, что это те же «символы», в которых устанавливается ширина колонки.
Но если интересно, можно узнать в миллиметрах через рисунок.
ахахха, ну что знатоки и знатушечки 1С, найдено довольно рукожопное решение:
сделал поле HTML документа, там на JS скрипт, который использует тэг canvas HTML5, а конкретно его функцию measureText() для измерения каждого символа шрифта. это дело я сохранил в соответствие, по которому определяет размер среднего символа конкретного шрифта в пикселях.
затем размер текста надписи посимвольно вычисляется в пикселях по забитому соответствию, полученный результат делится на размер среднего символа и таким образом имеем количество средних символов, которое необходимо для текста надписи. шах и мат, Борис Нуралиев! и главное — оно работает!
работает не так медленно как ожидалось. мы сделаем ход конем, чтобы не покупать большие мониторы манагерам (с) из кодекса нищеброда.
Источник
Ширина колонок в дереве значений
В обработке есть две табличные части. На управляемой форме разместил Панель с двумя страницами. На первой странице отображается Таблица, на второй — реквизит формы с типом ДеревоЗначений.
Для Таблицы в конфигураторе установил фиксированную ширину колонок и РастягиватьПоГоризонтали в значение Ложь. На экране колонки отображаются корректно.
Для страницы с деревом значений те же действия в конфигураторе произвёл, но ширина колонок не зафиксировалась.
Думал, это может быть связано с тем, что я реквизит формы использую вместо ТЧ. Попробовал при создании на сервере программно фиксировать ширину колонок объекта ДЗ:
ДеревоОбъект = РеквизитФормыВЗначение(«ДеревоПК», Тип(«ДеревоЗначений»));
Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл
Колонка.Ширина = 3;
КонецЦикла;
Но на форме всё равно колонки растянуты.
Также пробовал через условное оформление решить проблему:
УО = ЭтаФорма.УсловноеОформление;
ЭлементУО = УО.Элементы.Добавить();
ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоПК.ЭтоГруппа»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементОтбора.Использование = Истина;
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(«ДеревоПК»);
ЭлементУО.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.Лимонный);
ЭлементУО = УО.Элементы.Добавить();
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(«ДеревоПК.Модель»);
ЭлементУО.Оформление.УстановитьЗначениеПараметра(«МаксимальнаяШирина», 3);
Цветом нужные строки выделяются, а вот ширина колонки — не установилась.
Если же на форму вывожу ТЧ объекта и в свойствах указываю в Отображение значение Дерево, то программно не получается работать с данными ТЧ как с данными ДЗ.
По форуму не смог найти решение своей проблемы. Прошу помочь.
Может, проблема в платформе?
Источник
Дерево значений
Пока только нашел вот так найти самую длинную строку в дереве и по ней передавать значение ширины, но это не совсем, то, что я хотел и прейдется еще до создания колонок находить ее, а это дополнительные тормоза
(5) КоллекцияКолонокДереваЗначений (ValueTreeColumnCollection)
Добавить (Add)
Синтаксис:
Добавить(, , , )
Параметры:
(необязательный)
Тип: Строка. Имя колонки.
Значение по умолчанию: Пустая строка
(необязательный)
Тип: ОписаниеТипов. Объект, описывающий допустимые типы значений для колонки. Если параметр не указан, в колонке можно будет хранить значение любого типа.
(необязательный)
Тип: Строка. Заголовок колонки. Используется при визуальном отображении дерева значений.
Значение по умолчанию: Пустая строка
(необязательный)
Тип: Число. Ширина колонки в символах. Используется при визуальном отображении дерева значений.
Значение по умолчанию: 0
Возвращаемое значение:
Тип: КолонкаДереваЗначений.
Описание:
Добавляет колонку в конец коллекции колонок дерева значений.
Может я что то не так сказал но кому надо тот поймет.
(4) «прейдется еще до создания колонок находить ее» — Зачем
Можно после создания колонки.
ЭлементыФормы.ИмяДерева.Колонки.ИмяКолонки.Ширина=
Или в процедуре
ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Элемент.Колонки.ИмяКолонки.Ширина
ps. а определить размер самой длинной строчки в колонке — никаких проблем..
SergeyKVM
Присоеденяюсь с вопросом к Shaytan откуда берутся значения и какой формат у них?
Например можно так:
В запрос через «Выразить» или «Представление» включить строковое значение поля
ЗАтем с помощью построителя запросов сделать запрос к ТЗ и выбрать Максимальное значение по этой колонки. Таким образом ты получишь самое длиное значение. И по нему можно установить ширину колонки.
(10) не понял вопроса «откуда берутся значения и какой формат у них»
Если значения ширины колонки:
Тип: Число. Содержит ширину колонки в символах
если значения самой колонки? — то куча вариантов, как их получить..
Тип данных которые выводятся в колонку.
Откуда всмысле из запроса, или пользователь водит или из ТЗ.
В общем смысл такой, не перебирать все строки в поисках строки с максимальной шириной а выбирать запросом. Или Построителем запроса через ТЗ (если дерево строится на основе ТЗ)
(12) так в чем проблема?
если через запрос, то преобразовывать все к типу Строка, а у ссылок брать представление.. и по ним и смотреть..
а если через ТЗ, то там и так видно тип..
Просто на мой взгляд самый оптимальный спомоб подбора ширины это выборка из реззультата запроса или ТЗ максимального значения, вычисления его длины и установки соответствующей ширины колонки.
Источник