1с растянуть макет по вертикали
Всем привет. На УФ есть поле ввода. Значение в него устанавливается пограммно через реквизит формы. Надо сделать, чтобы в поле был всегда видет весь текст, т.е. поле растягивалось по высоте. Перепробовал уже много чего. Многострочный режим = Да не помогает. Вместо растяжения просто повляется прокрутка, а высота все равно в одну строку.
(1) А как мне эту высоту вычислить-то? Она можнеть быть разная в каждом отдельном случае.
а если интерактивно вводить, высота увеличивается сама?
тогда может помогут методы, имитирующие интерактивный ввод?
Подниму тему, вопрос интересный.
Положим, шрифт для поля ввода задан моноширинный, ширина поля фиксирована, перенос по целым словам, артефакты типа табуляции считаем недопустимыми - т.е. по содержимому можно определить высоту в строках плюс-минус лапоть.
Как сделать автоматическое управление высотой поля ввода при вводе очередного символа? Использование обработчиков событий ИзменениеТекстаРедактирования и ОкончаниеВводаТекста приводит к довольно неожиданным результатам. Танцы вокруг однократного обработчика ожидания, запускаемого из этих обработчиков, тоже успеха не имеют.
(4) Что это - "имитация интерактивного ввода"?
(5) На самом деле, у меня задача даже проще. Мне просто при подготовке формы надо показать эти поля, заполнить текстом и все. Потом они редактировать не будут пользователей и обрабатывать события изменения даже не надо.
Также рассмотрю другие элементы управления, которые позволят выделить текст и скопировать в буфер.
(4) В том-то и дело, что пытался найти правильную настройку параметром печатанием в поле вручную. Поле в зависимости от содержимого не растягивается. Если задашь высоту, например 3, то три строки показывает - все остальное прячет под прокрутку
(5) Интересный вопрос решается интересно.
Я делала так:
1. вычислить высоту одной строки (как удобно - в см, пикселях). Для стандартного (определенного) шрифта. Считаешь, сколько строк (таких) помещается на листе.
2. вычислить ширину строки (столбца) в символах. Тут - как фишка ляжет. Я делала примерно - поровну широких символов (Ш) и узких. Мне было вилы заморачиваться по ширине символа (например, широкий символ - это 1,5 узких).
3. делишь выводимую строку по ширине строки (столбца). Тут опять мне было вилы (вернее, в силу специфики) заморачиваться по переносу. Я тупо резала (посередине слова).
4. считаешь, сколько строк получилось и выводишь соответственно (на одном листе, перенос).
В общем, интересно.
+ (9) Очень хочется глянуть алгоритм мелкомягких в ворде.
(10) На самом деле, все это уже реализовано в 1С (я имею в виду перенос слов). Если сделать поле высотой, например, 3, то перенос отлично работает. И пре переходе на 4-ю строку это событие отлично отлавливается и добавляется прокрутка. Вопрос лишь в том, как сделать, чтобы не прокрутка добавлялась, а просто увеличивалась высота поля, вместо того, чтобы рассчитывать его высоту самостоятельно.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
Мы реализовали новый режим отображения таблицы, когда её высота определяется содержимым. Этот режим реализован для всех таблиц, которые не связаны с динамическими списками. Это, например, табличные части, таблицы значений и деревья значений.
Раньше таблица выглядела следующим образом. Вы могли задать либо фиксированную высоту таблицы, либо включить для неё растягивание по вертикали. В результате пустая таблица всегда занимала всё отведённое ей пространство. А если в таблице было лишь несколько строк, то после последней строки оставалась значительная неиспользуемая область.
Теперь пустая таблица занимает всего лишь 3 строки, а при её заполнении тремя и более строками, пустого пространства внизу таблицы не остаётся.
Мы видим два основных сценария использования нового режима отображения таблицы.
Самый простой сценарий, когда вы заведомо знаете, что в таблице не будет много строк, и все они поместятся на экране. Тогда вы можете отключить растягивание таблицы по вертикали, а свойство ВариантУправленияВысотой установить в значение ПоСодержимому. В этом случае пустая таблица будет занимать три строки, а при добавлении каждой следующей строки таблица будет раздвигаться вниз.
Более сложный сценарий, когда обычно в таблице строк не много, но иногда их может быть значительное количество. В этом случае, в дополнение к первому варианту, вам понадобится ограничить максимальную высоту раздвижения таблицы, чтобы она не портила форму. Для этого вы отключаете автоматическую максимальную выстоту в строках таблицы, а в свойстве МаксимальнаяВысотаВСтрокахТаблицы устанавливаете то значение, до которого позволительно раздвигать таблицу. Тогда, после достижения этого значения, таблица перестанет раздвигаться по высоте и начнёт прокручиваться. На следующем видео максимальная высота таблицы 7 строк.
По нашим оценкам такой режим отображения полезен и удобен, но мы пока не меняли стандартное поведение таблицы. Автоматически, при конструировании формы, новый режим не используется. Если в какой-то форме он вам нужен, необходимо включить его самостоятельно.
Это связано с тем, что мы хотим проанализировать ваши отзывы и опыт работы пользователей. На основании этого мы будем решать, в каких случаях устанавливать этот режим стандартно, по умолчанию.
Чтобы было понятно, о чём идёт речь в этой статье, необходимо сделать небольшое пояснение.
Особенностью управляемых форм является то, что разработчик не формирует внешний вид формы непосредственно. Разработчик только создаёт описание формы с помощью некоторых логических правил. Исходя из этих правил, платформа самостоятельно генерирует визуальное представление формы. Причём это визуальное представление зависит от размеров окна, в котором отображается форма. Одна и та же форма, показанная в узком окне или в окне, раскрытом на весь экран, будет иметь разное визуальное представление.
Так вот, та часть платформы, которая формирует визуальное представление формы, называется механизмом размещения элементов в форме.
Почему понадобился новый механизм?
Во-первых, прежний механизм, к сожалению, имел недостатки. Наиболее значительный из них заключался в том, что многие изменения свойств элементов формы, выполняемые на клиенте, требовали обязательного обращения к серверу. А любое обращение к серверу ведёт к замедлению работы.
Во-вторых, мы оценивали опыт использования управляемых форм и обнаружили ряд критичных потребностей, которые необходимо было реализовать.
И, в-третьих, мы хотели заложить в новый механизм возможности будущего развития.
Основные изменения
Схематично представить работу прежнего механизма можно следующим образом:
Разработчик в конфигураторе создаёт дерево элементов формы и задаёт свойства элементов. В тот момент, когда прикладное решение должно показать форму пользователю, происходит следующее. Сначала на сервере платформа создаёт описание визуальной формы. Потом это описание передаётся на клиента. А на клиенте визуализатор формирует то изображение, которое увидит пользователь.
Основное действие, которое выполнялось на сервере при создании описания визуальной формы, это расчет длин строк. Имеются в виду всевозможные заголовки, надписи и так далее. Зная длины строк можно уже просчитать расположение элементов в форме.
Так как эта операция выполнялась на сервере, присутствовали два негативных момента. Во-первых, для расчёта использовались не те шрифты, которые будут использованы на клиенте, а те, которые установлены на сервере. А они могут отличаться, особенно если речь идёт о разных платформах (Windows, Linux). Или даже нужные шрифты могут быть совсем не установлены на сервере. Во-вторых, для расчёта длин использовался тот «движок» растеризации шрифтов, который есть на сервере. А он может работать не совсем так, как механизм рендеринга текстовых строк, существующий на клиенте в интернет-браузере, например. В результате могли появляться формы либо с «обрезанными» текстами, либо, наоборот, с чересчур широкими надписями.
Другая проблема заключалась в том, что отсутствовала какая-либо адаптация к размеру окна, в котором форма будет показана у клиента. Фактически на сервере описание формы создавалось исходя из минимально возможного размера окна, и дальнейший успех её отображения зависел уже от того, насколько хорошо она «умеет» растягиваться.
В новом механизме генерацию описания визуальной формы, которая раньше целиком выполнялась на сервере, мы разделили на две части, серверную и клиентскую:
Серверная часть стала существенно меньше. В ней не выполняется никаких расчётов. На сервере создаётся только «заготовка» описания, которая не содержит точных длин текстовых полей, и в ней не разрешены элементы адаптивности. На сервере обрабатывается видимость элементов, но только та, которая определяется функциональными опциями, и та, которая установлена пользователем. Но тут и нельзя иначе, потому что сами функциональные опции доступны только на сервере. А интерактивное изменение настроек пользователем в любом случае приведёт к серверному вызову.
В результате получается некий «полуфабрикат» визуального представления формы, который передаётся на клиента.
На клиенте производится необходимая доработка описания визуальной формы. Рассчитываются длины строк, рассчитываются элементы адаптивности, связанные с размерами клиентского дисплея, и отрабатывается видимость. После этого, как и раньше, начинает работать визуализатор, который и создаёт окончательную форму, которую видит клиент.
Благодаря тому, что расчёт длин строк производится на клиенте, удалось избавиться от ненужных и неаккуратных «щелей» между элементами. А отработка видимости на клиенте без обращения к серверу позволила ускорить работу форм. Потому что включение/выключение видимости элементов формы это одна из наиболее частых операций.
Некоторые новые возможности
Элементы адаптивного интерфейса
Новый механизм размещения элементов в форме не только улучшает те возможности, которые имелись ранее, но и добавляет новые возможности. Например, он адаптирует внешний вид формы к размерам клиентского дисплея. Для этого используются несколько путей.
Во-первых, выполняется автоматический перенос строк с подстройкой высоты заголовков и декораций. Как это работает, можно посмотреть на рисунке:
Если в форме есть длинные строки, которые можно разбить на отдельные слова, то такие строки переносятся, если в этом есть необходимость. Соответственно высота формы увеличивается, потому что нижняя её часть «отъезжает» вниз. В результате форма будет выглядеть нормально даже на узких экранах. Более того, этот механизм работает динамически, а значит, вы можете сжимать форму в реальном режиме времени, и вместе с этим будут переноситься длинные строки.
Автоматический перенос работает для заголовков элементов, заголовков групп, текстовых декораций и текста в кнопках, имеющих вид Гиперссылка.
Вторым элементом адаптивности является изменение ориентации групп. У групп и у формы в целом появился новый вариант ориентации - «Горизонтально, если возможно». В этом варианте, если клиентский дисплей позволяет расположить элементы горизонтально, они располагаются горизонтально. Если нет, то они располагаются вертикально.
Третий элемент адаптивности, это автоматическое определение количества колонок у переключателя или тумблера. Раньше, если не было специальных указаний, количество колонок устанавливалось максимальным, и он выводился в одну строку. Теперь, в той же ситуации, анализируется ширина формы, и устанавливается такое количество колонок, при котором переключатель/тумблер будет выглядеть на экране хорошо.
Горизонтальное и вертикальное выравнивание
Раньше такая возможность отсутствовала, и для реализации нестандартного выравнивания приходилось выдумывать разные «хитрости». Теперь форме и группе можно указать, каким образом должны выравниваться её элементы по вертикали и по горизонтали. Например, на рисунке ниже, группа кнопок показывает три возможных варианта выравнивания: Лево, Центр и Право:
На этом рисунке кнопки размещены в обычной группе, которая растягивается по горизонтали. Расположение кнопок внутри группы управляется свойством группы ГоризонтальноеПоложениеПодчиненных.
Управление внешним выравниванием
Например, у вас есть форма, в которой расположены поле Подразделение, группы Адрес и Телефон. Прежний механизм выравнивал поля этих групп так, как показано на левом рисунке. Поля в форме выравнивались между собой, и поля в каждой группе выравнивались между собой.
Теперь у вас есть возможность устанавливать группам сквозное выравнивание, в результате чего, например, все поля формы будут выровнены одинаково. Этот вариант показан на правом рисунке.
Более того, вы можете управлять сквозным выравниванием для каждой группы отдельно. Поэтому можете, например, отключить сквозное выравнивание для группы Телефон, и тогда форма будет выглядеть так, как показано на правом рисунке.
Выравнивание элементов и заголовков
Ещё одна новая возможность, которая появилась, это возможность управлять взаимным расположением элементов и заголовков. Как во всей форме, так и в отдельных группах. Например, заголовки и элементы вы можете «растянуть» к разным краям формы, или наоборот, «стянуть» их друг к другу, выровняв заголовки вправо, а элементы - влево.
Ограничение максимальной ширины элементов
Раньше, если вы указывали элементу, что он должен растягиваться, то элемент растягивался до тех пор, пока это возможно. Например, на весь экран. Для одних элементов это было хорошо (например, поле HTML), а для других элементов это могло быть и не очень хорошо. Например, для числовых полей. Потому что числовые данные, или кнопки, управляющие полем, оказывались где-то далеко справа.
Теперь у элементов появились булевы свойства, с помощью которых можно установить режим автоматического растягивания по ширине или высоте. В этом режиме платформа самостоятельно определяет, до каких границ можно растягивать поле. Если автоматический режим отключить, тогда платформа будет вести себя так же, как и раньше. Если вы указываете конкретную ширину/высоту поля, будет использоваться она. А если вы указываете значение 0, то элемент будет растягиваться до тех пор, пока это возможно.
Управление расстоянием между элементами
Также появилась возможность управлять горизонтальным и вертикальным интервалами между элементами. Например, на следующем рисунке у левой группы вертикальный интервал увеличен, а у правой - уменьшен.
Отключение растягивания формы
Мы реализовали ещё один, новый режим работы формы, который отключает растягивание её элементов по вертикали. Этот режим будет полезен для форм, содержащих небольшое количество элементов.
Отключение прокрутки у страниц
Для форм, содержащих большое количество элементов, мы тоже несколько изменили поведение. Теперь вертикальная прокрутка у страниц не появляется. Вертикальная прокрутка теперь может быть у самой формы или внутри элементов формы, таких, как таблица, табличный документ и так далее. А страница формы всегда будет иметь полную высоту. Это должно облегчить работу пользователей, потому что большое количество скроллеров в форме часто смущает и сбивает с толку.
Резюме
В этой обзорной статье мы перечислили лишь основные возможности, которые даёт новый механизм размещения элементов в форме. Но не менее важно на наш взгляд и то, что в этом механизме заложен существенный запас для будущего развития.
(9) Можно. ВертикальныйИнтервал = Нет, РастягиватьПоВертикали = Нет, АвтоМаксимальнаяВысота - выкл. Кнопки тоже не надо растягивать.
Еще немного поджал.
Спасибо (10), (14), (19)
Начал проверять и заметил такую фигню.
Моя обработка, которая прикреплена в шапке, у клиента отображается так, как показано на 2-м скриншоте (скриншот и сделан у клиента).
Эта же самая обработка у меня отображается нормально - декорация "Баланс", "К списанию", кнопка "Дисконтная карта" не растягиваются.
Блин, да что не так? Платформа у клиента "8.3.10.2505", работаю по RDP, моя платформа "8.3.10.2580".
Скорее всего у вас скачанная тестовая обработка уже отображалась не так, как на 2-м скриншоте.
Позже у себя открыл обработку в 2-х разных конфигурациях и получил различный результат, см. скриншоты. Так же открывал на 8.2 в УТ 10.3, на 8.3 в УТ 10.3 (более старой версией, чем из скриншота) - везде, блин, по разному отображается форма. Пока пришел к выводу, что форма корректно отображается в конфигурациях, написанных по УФ, под обычными формами все "скачет".
Я так понимаю, хрен я что-то сделаю. Возможно это связано с режимом запуска, совместимость, фазой луны, пр.
п.с.пока дорисовываю.
пришлось, у Вас не оч.удобно в группы все было разложено. Вот что получилось,см.рис.,там же готовая обработка
п.с.Если в третьем блоке уменьшить размер шрифта - как показано на оригинальной картинке автора, то вообще будет похоже, но мне кажется,что не нужно измельчать текст для удобства пользователей. Позже у себя открыл обработку в 2-х разных конфигурациях и получил различный результат
Потому что у Вас с группами в Вашей обработке не айс гуд.
Вот для проверки: открыла свою обработку под обычными формами и даже под толстым клиентом (см.скрин1). Все четко - работает, форму держит, потому что там у каждой группы идет очень жесткая группировка,так же выставлен вертикальный интервал=нет на вторые два сложных блока, и еще скрыты заголовки групп - они так же много место съедают, а для еще более симметричного выравнивания - применяется конкретная ширина декораций,
здесь,кстати важно,- Вы когда будите ваши декорации заменять на расчетные поля,то такие же им выставьте параметры.
Вот еще выравнила в третьем блоке кнопки друг над другом:
(25) Данная форма пилится под УТ 10.3 на 8.3.10. Мой косяк, что не описал версию конфигурации и платформы.
Попробуйте у себя отрыть в УТ 10.3 на 8.3.10, сразу увидите косяки.
Еще раз прошу прощения у всех за непредоставленную инфу.
Попробуйте у себя отрыть в УТ 10.3 на 8.3.10, сразу увидите косякип.с.попробую сейчас что-нибудь придумать
Вот,подправила для 10-ки
п.с.мою обработку откывайте не как внешнюю,а в конфигуратор встройте - не пойму почему через внешние десятка эту обработку не видит.
Секрет оказался прост - 10-ка в режиме "упр+обыч формы" - не автоматизирует и не тянет элементы формы как под чистым режимом упр.форм. поэтому пришлось немного искрутиться,чтобы красиво выравнить блоки. Прежде всего это касается третьего блока - пришлось почти во всех его группах снять - "отображение" групп. А в первом блоке вообще смешная хитрость - чтобы подравнять на толинку с остальными - пришлось вложить в первый блок невидимую декорацию с 6 шрифтом))).
п.с.здесь или переходите на ут11 - со всем ее готовым контекстом и упр.формами, или вот так придется изголяться на двух стульях сразу - и на обыч.и на упр.формах.
Читайте также: