1с управляемые формы растянуть по горизонтали
Чтобы было понятно, о чём идёт речь в этой статье, необходимо сделать небольшое пояснение.
Особенностью управляемых форм является то, что разработчик не формирует внешний вид формы непосредственно. Разработчик только создаёт описание формы с помощью некоторых логических правил. Исходя из этих правил, платформа самостоятельно генерирует визуальное представление формы. Причём это визуальное представление зависит от размеров окна, в котором отображается форма. Одна и та же форма, показанная в узком окне или в окне, раскрытом на весь экран, будет иметь разное визуальное представление.
Так вот, та часть платформы, которая формирует визуальное представление формы, называется механизмом размещения элементов в форме.
Почему понадобился новый механизм?
Во-первых, прежний механизм, к сожалению, имел недостатки. Наиболее значительный из них заключался в том, что многие изменения свойств элементов формы, выполняемые на клиенте, требовали обязательного обращения к серверу. А любое обращение к серверу ведёт к замедлению работы.
Во-вторых, мы оценивали опыт использования управляемых форм и обнаружили ряд критичных потребностей, которые необходимо было реализовать.
И, в-третьих, мы хотели заложить в новый механизм возможности будущего развития.
Основные изменения
Схематично представить работу прежнего механизма можно следующим образом:
Разработчик в конфигураторе создаёт дерево элементов формы и задаёт свойства элементов. В тот момент, когда прикладное решение должно показать форму пользователю, происходит следующее. Сначала на сервере платформа создаёт описание визуальной формы. Потом это описание передаётся на клиента. А на клиенте визуализатор формирует то изображение, которое увидит пользователь.
Основное действие, которое выполнялось на сервере при создании описания визуальной формы, это расчет длин строк. Имеются в виду всевозможные заголовки, надписи и так далее. Зная длины строк можно уже просчитать расположение элементов в форме.
Так как эта операция выполнялась на сервере, присутствовали два негативных момента. Во-первых, для расчёта использовались не те шрифты, которые будут использованы на клиенте, а те, которые установлены на сервере. А они могут отличаться, особенно если речь идёт о разных платформах (Windows, Linux). Или даже нужные шрифты могут быть совсем не установлены на сервере. Во-вторых, для расчёта длин использовался тот «движок» растеризации шрифтов, который есть на сервере. А он может работать не совсем так, как механизм рендеринга текстовых строк, существующий на клиенте в интернет-браузере, например. В результате могли появляться формы либо с «обрезанными» текстами, либо, наоборот, с чересчур широкими надписями.
Другая проблема заключалась в том, что отсутствовала какая-либо адаптация к размеру окна, в котором форма будет показана у клиента. Фактически на сервере описание формы создавалось исходя из минимально возможного размера окна, и дальнейший успех её отображения зависел уже от того, насколько хорошо она «умеет» растягиваться.
В новом механизме генерацию описания визуальной формы, которая раньше целиком выполнялась на сервере, мы разделили на две части, серверную и клиентскую:
Серверная часть стала существенно меньше. В ней не выполняется никаких расчётов. На сервере создаётся только «заготовка» описания, которая не содержит точных длин текстовых полей, и в ней не разрешены элементы адаптивности. На сервере обрабатывается видимость элементов, но только та, которая определяется функциональными опциями, и та, которая установлена пользователем. Но тут и нельзя иначе, потому что сами функциональные опции доступны только на сервере. А интерактивное изменение настроек пользователем в любом случае приведёт к серверному вызову.
В результате получается некий «полуфабрикат» визуального представления формы, который передаётся на клиента.
На клиенте производится необходимая доработка описания визуальной формы. Рассчитываются длины строк, рассчитываются элементы адаптивности, связанные с размерами клиентского дисплея, и отрабатывается видимость. После этого, как и раньше, начинает работать визуализатор, который и создаёт окончательную форму, которую видит клиент.
Благодаря тому, что расчёт длин строк производится на клиенте, удалось избавиться от ненужных и неаккуратных «щелей» между элементами. А отработка видимости на клиенте без обращения к серверу позволила ускорить работу форм. Потому что включение/выключение видимости элементов формы это одна из наиболее частых операций.
Некоторые новые возможности
Элементы адаптивного интерфейса
Новый механизм размещения элементов в форме не только улучшает те возможности, которые имелись ранее, но и добавляет новые возможности. Например, он адаптирует внешний вид формы к размерам клиентского дисплея. Для этого используются несколько путей.
Во-первых, выполняется автоматический перенос строк с подстройкой высоты заголовков и декораций. Как это работает, можно посмотреть на рисунке:
Если в форме есть длинные строки, которые можно разбить на отдельные слова, то такие строки переносятся, если в этом есть необходимость. Соответственно высота формы увеличивается, потому что нижняя её часть «отъезжает» вниз. В результате форма будет выглядеть нормально даже на узких экранах. Более того, этот механизм работает динамически, а значит, вы можете сжимать форму в реальном режиме времени, и вместе с этим будут переноситься длинные строки.
Автоматический перенос работает для заголовков элементов, заголовков групп, текстовых декораций и текста в кнопках, имеющих вид Гиперссылка.
Вторым элементом адаптивности является изменение ориентации групп. У групп и у формы в целом появился новый вариант ориентации - «Горизонтально, если возможно». В этом варианте, если клиентский дисплей позволяет расположить элементы горизонтально, они располагаются горизонтально. Если нет, то они располагаются вертикально.
Третий элемент адаптивности, это автоматическое определение количества колонок у переключателя или тумблера. Раньше, если не было специальных указаний, количество колонок устанавливалось максимальным, и он выводился в одну строку. Теперь, в той же ситуации, анализируется ширина формы, и устанавливается такое количество колонок, при котором переключатель/тумблер будет выглядеть на экране хорошо.
Горизонтальное и вертикальное выравнивание
Раньше такая возможность отсутствовала, и для реализации нестандартного выравнивания приходилось выдумывать разные «хитрости». Теперь форме и группе можно указать, каким образом должны выравниваться её элементы по вертикали и по горизонтали. Например, на рисунке ниже, группа кнопок показывает три возможных варианта выравнивания: Лево, Центр и Право:
На этом рисунке кнопки размещены в обычной группе, которая растягивается по горизонтали. Расположение кнопок внутри группы управляется свойством группы ГоризонтальноеПоложениеПодчиненных.
Управление внешним выравниванием
Например, у вас есть форма, в которой расположены поле Подразделение, группы Адрес и Телефон. Прежний механизм выравнивал поля этих групп так, как показано на левом рисунке. Поля в форме выравнивались между собой, и поля в каждой группе выравнивались между собой.
Теперь у вас есть возможность устанавливать группам сквозное выравнивание, в результате чего, например, все поля формы будут выровнены одинаково. Этот вариант показан на правом рисунке.
Более того, вы можете управлять сквозным выравниванием для каждой группы отдельно. Поэтому можете, например, отключить сквозное выравнивание для группы Телефон, и тогда форма будет выглядеть так, как показано на правом рисунке.
Выравнивание элементов и заголовков
Ещё одна новая возможность, которая появилась, это возможность управлять взаимным расположением элементов и заголовков. Как во всей форме, так и в отдельных группах. Например, заголовки и элементы вы можете «растянуть» к разным краям формы, или наоборот, «стянуть» их друг к другу, выровняв заголовки вправо, а элементы - влево.
Ограничение максимальной ширины элементов
Раньше, если вы указывали элементу, что он должен растягиваться, то элемент растягивался до тех пор, пока это возможно. Например, на весь экран. Для одних элементов это было хорошо (например, поле HTML), а для других элементов это могло быть и не очень хорошо. Например, для числовых полей. Потому что числовые данные, или кнопки, управляющие полем, оказывались где-то далеко справа.
Теперь у элементов появились булевы свойства, с помощью которых можно установить режим автоматического растягивания по ширине или высоте. В этом режиме платформа самостоятельно определяет, до каких границ можно растягивать поле. Если автоматический режим отключить, тогда платформа будет вести себя так же, как и раньше. Если вы указываете конкретную ширину/высоту поля, будет использоваться она. А если вы указываете значение 0, то элемент будет растягиваться до тех пор, пока это возможно.
Управление расстоянием между элементами
Также появилась возможность управлять горизонтальным и вертикальным интервалами между элементами. Например, на следующем рисунке у левой группы вертикальный интервал увеличен, а у правой - уменьшен.
Отключение растягивания формы
Мы реализовали ещё один, новый режим работы формы, который отключает растягивание её элементов по вертикали. Этот режим будет полезен для форм, содержащих небольшое количество элементов.
Отключение прокрутки у страниц
Для форм, содержащих большое количество элементов, мы тоже несколько изменили поведение. Теперь вертикальная прокрутка у страниц не появляется. Вертикальная прокрутка теперь может быть у самой формы или внутри элементов формы, таких, как таблица, табличный документ и так далее. А страница формы всегда будет иметь полную высоту. Это должно облегчить работу пользователей, потому что большое количество скроллеров в форме часто смущает и сбивает с толку.
Резюме
В этой обзорной статье мы перечислили лишь основные возможности, которые даёт новый механизм размещения элементов в форме. Но не менее важно на наш взгляд и то, что в этом механизме заложен существенный запас для будущего развития.
Здравствуйте, встретился с такой проблемой, кнопки на форме не масштабируются при масштабировании формы.
Перерыл весь интернет, решение проблемы не нашел.
На РИС.1 видно проблему, подскажите как решить кто знает?
Ширина кнопок у всех стоит 14, что равняется второй кнопке на РИС.1, хотя визуально они отображатся разного размера.
Кнопки после компиляции отображаются точно такого же размера как и в конфигураторе, а ширина формы в конфигураторе не отображается шире чем 115, хотя визуально размер формы занимает процентов 80 (РИС.2) экрана. Причем ограничение размера формы в конфигураторе существует для всех форм (и для новых, абсолютно пустых).
У меня форма управляемая и привязок на ней нет.
Подскажите, как решить проблему масштабирования кнопок?
Мил человек, расскажи как эти картинки нормально рассмотреть можно. Тогда может что и присоветую.
ЗЫ. Приложите скрины файлами.
(4) AnryMc, Ширина подчиненных элементов для группы 1 (в ней кнопки расположены) стоит Авто . Для общей группы тоже стоит авто. Из первого скрина видно что сама группа в которой лежат кнопки растягивается, а кнопки почему-то нет.
(7) babenko_da, Дляя неё определяющей является "общая вертикадтная" - что у неё со свойством "Ширина подчиненных элементов"? Растягивать?
PS Если для "общая вертикадтная" - авто. Смотреть формв.
(8) AnryMc, для "общая вертикальная" - авто. Думаю "общая вертикальная" группа здесь непричем т.к. в ней лежит "Группа1" которая успешно меняет свой размер, но не меняют размер сами кнопки, которые лежат в "Группа1". Причем если в "Группа1" добавить компонент "Декорация-Надпись" и поставить ему свойство растягивать по ширине то он успешно растягивается. Думаю тут проблема с обновлением разчера кнопок. Может при изменении размеров формы размер кнопок обновлять как-то вручную?
(13) babenko_da, да, управляемые формы они такие не управляемые :(
Для начала всем кнопкам запретить менять размер (строго "нет"), и только для одной оставь данное разрешение (именно "да", а не "авто").
Что получится? Можно попробовать для разных кнопок, для нескольких, но обязательно через одну.
между каждой кнопки добавь декорацию - будет тогда промежуток между кнопками растягивать. или самим кнопкам авто.
У меня получилось. Выставил у всех нерастягивающихся элементов свойство "Растягивать по-горизонтали" в "Да" (было "Авто") и заработало. Видимо "Авто" пытается как-то подстроится под размеры предыдущих элементов.
19.05.2015 Новый механизм размещения элементов в форме
Реализовано в версии 8.3.7.1759.
Ограничение максимальной ширины элементов
Раньше, если вы указывали элементу, что он должен растягиваться, то элемент растягивался до тех пор, пока это возможно. Например, на весь экран. Для одних элементов это было хорошо (например, поле HTML), а для других элементов это могло быть и не очень хорошо. Например, для числовых полей. Потому что числовые данные, или кнопки, управляющие полем, оказывались где-то далеко справа.
Теперь у элементов появились булевы свойства, с помощью которых можно установить режим автоматического растягивания по ширине или высоте. В этом режиме платформа самостоятельно определяет, до каких границ можно растягивать поле. Если автоматический режим отключить, тогда платформа будет вести себя так же, как и раньше. Если вы указываете конкретную ширину/высоту поля, будет использоваться она. А если вы указываете значение 0, то элемент будет растягиваться до тех пор, пока это возможно.
Реквизиты элемента формы: "АвтоМаксимальнаяШирина" И "АвтоМаксимальнаяВысота" - если значение истина то система сама решает надо растягивать или нет,
чтобы было как раньше - снимите галку.
Была такая ошибка в одном документе (УФ). Огромное количество групп и полей. Не понятно было, в чем причина, что поля не масшабируются при растягивании формы.
Стал в копии удалять по группам и смотреть после этого - растягиваются поля или нет (запуск формы в конфигураторе Ctrl-R).
В результате, нашел поле после удаления которого форма стала растягиваться. У него значение "РастягиватьПоГоризонтали" было выставлено в "Да". Поставил "Авто" и все заработало как надо.
(35) alex_sh2008, так если будет добавлена колонка без "ПутьКДанным", то она отображаться не будет. Или я что-то не так понял?
(1) Eugeneer, попробуй так:
1. задай всем колонкам в таблице ширину
2. свойства растягивать по горизонтали и растягивать по вертикали у всех колонок установи "Авто"
(1)Для избавления от растягивания в табличной части необходима каждый элемент прижать вправо. И определится с размером элементов и табличной части в се будет ХОРОШО!!
(1)
(1)у меня есть таблица с заполненными данными как же сузить колонки? хоть в ворде или
в микрософтворде
(4) Eugeneer, по поводу переноса заголовка. У таблицы есть свойство ВысотаШапки. Если для него задать значение например 2, тогда заголовок переносится.
(2) Решение 8.3
1. Создал группу. 2 В нее переместил все колонки и группы таблицы. 3. Группировку выбираем горизонтальную.
4. "Фиксация В Таблице" выбираем "Лево"
(5) Eugeneer, нашли возможность обойти баг? У меня та-же проблема, плюс съезжает периодически ширина программно-создаваемых колонок в программно-создаваемой таблице формы.
(7) Eugeneer, это уже нашёл, методом тыка-и-мата ) А про неоднородность поведения сохранения и восстановления ширины колонок ничего не известно случаем? ) Т.е. теже самые программно-создаваемые колонки когда создаются растягиваются как хотят, иногда после закрытия обработки и переформирования таблицы формы - восстанавливаются, иногда -- нет. Может кто-то про это тоже чего-нибудь слышал?
Вроде как в 8.3.3 с колонками лучше стало. Под 8.3.3 так и не смог заставить ширину колонок скакать случайным образом (в том числе и под интерфейсом 8.2), как это было на 8.2.
. Уже все перепробовал. ширина вообще не работает если заголовок у колонки допустим 3 слова. меньше чем эти три слова не делается.
Увеличьте высоту шапки, напишите наименование колонки в свойстве "Заголовок", Shift+Enter для переноса слов.
(12) sannt, многострочный режим в заголовках не айс. В методичке по разработке управляемого интерфейса 1С настоятельно рекомендует этого не делать. Лучше сделать короткий заголовок колонки, а полное название вывести в подсказку
(13) kser87, Очень интересно. Нет, к сожалению, методички. И как же они объясняют свою настоятельность?
(15) kser87, Понятно. Просто сами пишут рекомендации, сами же их игнорируют. Например, не писать запросы в цикле.
(16) sannt, Не путайте божий дар с яичницей. Это рекомендации, а не жесткие требования. Есть моменты, когда от этого не уйти.
(20) sannt, у вас отличный подход к делу:
а, это рекомендация 1С. Можно не читать, они запросы в цикле делают. Могу делать что хочу
(21) kser87, Да не. )) Я не собирался принижать достоинств разработчиков 1С. Просто не понятна Ваша антипатия на использование многострочных заголовков. Я же не призываю везде и вся это делать. Ваши же слова
многострочный режим в заголовках не айс. В методичке по разработке управляемого интерфейса 1С настоятельно рекомендует этого не делать.
Вот что мне помогло:
1) Всем колонкам назначить короткий заголовок без пробелов, т.к. платформа задает ширину по имени конки, если нет заголовка (например вместо НоменклатураКРезервуЦенаСоСкидкой - дать ЦенаСоСк - уменьшается в три раза)
2)задать размер всех колонок жестко и без "растягивать по горизонтали", кроме одной колонки, которая возьмет все "растягивание" на себя
3) сбросить настройки формы в пользовательском режиме
+ Заметил, что форма запоминает ширину элементов от самого большого монитора, на котором открывалась.
Мучался с этой проблемой минут 20 :) Помогло вот что - Заходим в свойства "табличного поля" и указываем в свойстве "Фиксация слева" количество колонок, которое не хотим растягивать. Надеюсь, кому то окажется полезным :)
(25) спасибо помогло!
и более того: убрал фиксацию и теперь нормально отображает! :) ура-а-а, глюк победил!
(28) забей, там всё-равно слетает :( то ли модуль откорректируешь и сохранишь, форма снова меняется и вылазит. мучал долго, сейчас не помню уже, но плюнул.
более того, даже видимость колонок если программно меняется, последняя колонка не вылезает теперь за пределы, меняет колонку ту, у которой ширина авто - одну всё-таки лучше выставлять авто :)
при фиксации был глюк, что расположил последнюю колонку к крайней левой границе, но активировав другую строку, которая отображала больше колонок всё вылезло за границы снова.
но проблема исправилась!
Аналогично траблы с шириной колонок.
Причем если вид: поле флажка или поле картинки - вообще непонятно какую ширину выдает, и поле задания ширины прячется из свойств! И даже если заголовок сделать в 1 символ - все равно ширина поля флажка равна 5-10
Только что удалось добиться чего-то приличного, покопавшись в настройках формы в пользовательском режиме.
Люди, а кто подскажет как отлаженную обработку загрузки в "Универсальном обмене данными в формате XML" запускать впредь автоматически? Делала выгрузку из ТИС 979 в БП 2.0, исправила ошибки загрузки в отладчике, создала вн.обработку, все сработало. А на следующий раз надо все повторять сначала, хотя обработка уже есть. Как ее применять в следующие разы?
Ни у кого не было такой ситуации, что сначала форма работает хорошо, а после определённых манипуляций пользователя все поля в табличной части документа начинают жить своей жизнью. Где, например, в "Рознице 8.3" хранятся настройки полей табличной части поступления? Может они как-то ломаются.
(39) zemskov, В настройках пользователя, если через "Все действия" - "Изменить форму. " (в Такси "Ещё" - "Изменить форму. ") можно скрыть, добавить (не всегда, но для ссылочных типов можно) элементы формы и изменить их порядок итд. Там же можно вернуть настройки по умолчанию. Ну или сделать чтоб "забылись" все настройки можно почитсить кеш.
Спасибо за ответ. Вернуть настройки по умолчанию не помогает. А вот насчёт кэша попробую. Где это только?
Бух 8.3. Такси. Просмотр движения регистров документа. Под одним пользователем колонки не помещались по ширине на экран и ни в какую не менялась ширина колонок и еще не было видно разделителей колонок. Еще. Изменить форму. не помогло. Баг 8.3, короче. Помогло следующее: Администрирование -> Настройки пользователей и прав -> Очистка настроек. Выбираем все или только нужные. Я выбрал все. Перезашел под этим пользователем, зашел в просмотр движений.
А там все ОК :) Все колоночки на экране.
Также помогает если в свойствах списка изменить "Отображение списка" с Иерархический список на просто Список.
Здравствуйте! Кто-нибудь знает как получить текущую длину/ширину элемента управления?
Отладчик показывает только заданные значения в конфигураторе.
проблема решается следующим образом: устанавливаете свойство растягивать по горизонтали в значение нет, задаете ширину колонки, применяете изменения, в режиме 1С предприятие заходите в меню изменить форму и жмете кнопку установить стандартные настройки
(58) alexskiff, Ваш предложенный способ работает. Но каждый раз при открытии формы платформа (8.3.6.2100) все-равно приказывает колонкам "плясать". Все сбивается нафиг
Частично решил проблему следующим образом, об этом уже немного говорили. У меня в дереве все колонки создаются программно. Если нужно сделать то, что делаю я, только на форме - нужно просто найти эти свойства у колонок.
У всех колонок, кроме последней (пустой) делаю так:
КолонкаМагазина.Ширина = НужнаяШирина;
КолонкаМагазина.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
КолонкаМагазина.РастягиватьПоГоризонтали = Ложь;
У последней, пустой колонки, делаю так:
КолонкаМагазина.Ширина = НужнаяШирина;
КолонкаМагазина.ФиксацияВТаблице = ФиксацияВТаблице.Лево;
КолонкаМагазина.РастягиватьПоГоризонтали = Истина;
Т.о. отличие только в одном значении.
Довольно неплохо помог такой способ. Колонки немного съезжают, но вполне терпимо. Намного лучше, чем было.
Если вдруг еще актуально для кого-то:
Видимые колонки неадекватно растягиваются в тех случаях, когда мы условным оформлением или еще чем скрыли часть колонок, установив видимость в Ложь, но при этом оставили Отображение = Истина. Убираем вместе с видимостью Отображение, и ширина становится нормальной.
Чтобы было понятно, о чём идёт речь в этой статье, необходимо сделать небольшое пояснение.
Особенностью управляемых форм является то, что разработчик не формирует внешний вид формы непосредственно. Разработчик только создаёт описание формы с помощью некоторых логических правил. Исходя из этих правил, платформа самостоятельно генерирует визуальное представление формы. Причём это визуальное представление зависит от размеров окна, в котором отображается форма. Одна и та же форма, показанная в узком окне или в окне, раскрытом на весь экран, будет иметь разное визуальное представление.
Так вот, та часть платформы, которая формирует визуальное представление формы, называется механизмом размещения элементов в форме.
Почему понадобился новый механизм?
Во-первых, прежний механизм, к сожалению, имел недостатки. Наиболее значительный из них заключался в том, что многие изменения свойств элементов формы, выполняемые на клиенте, требовали обязательного обращения к серверу. А любое обращение к серверу ведёт к замедлению работы.
Во-вторых, мы оценивали опыт использования управляемых форм и обнаружили ряд критичных потребностей, которые необходимо было реализовать.
И, в-третьих, мы хотели заложить в новый механизм возможности будущего развития.
Основные изменения
Схематично представить работу прежнего механизма можно следующим образом:
Разработчик в конфигураторе создаёт дерево элементов формы и задаёт свойства элементов. В тот момент, когда прикладное решение должно показать форму пользователю, происходит следующее. Сначала на сервере платформа создаёт описание визуальной формы. Потом это описание передаётся на клиента. А на клиенте визуализатор формирует то изображение, которое увидит пользователь.
Основное действие, которое выполнялось на сервере при создании описания визуальной формы, это расчет длин строк. Имеются в виду всевозможные заголовки, надписи и так далее. Зная длины строк можно уже просчитать расположение элементов в форме.
Так как эта операция выполнялась на сервере, присутствовали два негативных момента. Во-первых, для расчёта использовались не те шрифты, которые будут использованы на клиенте, а те, которые установлены на сервере. А они могут отличаться, особенно если речь идёт о разных платформах (Windows, Linux). Или даже нужные шрифты могут быть совсем не установлены на сервере. Во-вторых, для расчёта длин использовался тот «движок» растеризации шрифтов, который есть на сервере. А он может работать не совсем так, как механизм рендеринга текстовых строк, существующий на клиенте в интернет-браузере, например. В результате могли появляться формы либо с «обрезанными» текстами, либо, наоборот, с чересчур широкими надписями.
Другая проблема заключалась в том, что отсутствовала какая-либо адаптация к размеру окна, в котором форма будет показана у клиента. Фактически на сервере описание формы создавалось исходя из минимально возможного размера окна, и дальнейший успех её отображения зависел уже от того, насколько хорошо она «умеет» растягиваться.
В новом механизме генерацию описания визуальной формы, которая раньше целиком выполнялась на сервере, мы разделили на две части, серверную и клиентскую:
Серверная часть стала существенно меньше. В ней не выполняется никаких расчётов. На сервере создаётся только «заготовка» описания, которая не содержит точных длин текстовых полей, и в ней не разрешены элементы адаптивности. На сервере обрабатывается видимость элементов, но только та, которая определяется функциональными опциями, и та, которая установлена пользователем. Но тут и нельзя иначе, потому что сами функциональные опции доступны только на сервере. А интерактивное изменение настроек пользователем в любом случае приведёт к серверному вызову.
В результате получается некий «полуфабрикат» визуального представления формы, который передаётся на клиента.
На клиенте производится необходимая доработка описания визуальной формы. Рассчитываются длины строк, рассчитываются элементы адаптивности, связанные с размерами клиентского дисплея, и отрабатывается видимость. После этого, как и раньше, начинает работать визуализатор, который и создаёт окончательную форму, которую видит клиент.
Благодаря тому, что расчёт длин строк производится на клиенте, удалось избавиться от ненужных и неаккуратных «щелей» между элементами. А отработка видимости на клиенте без обращения к серверу позволила ускорить работу форм. Потому что включение/выключение видимости элементов формы это одна из наиболее частых операций.
Некоторые новые возможности
Элементы адаптивного интерфейса
Новый механизм размещения элементов в форме не только улучшает те возможности, которые имелись ранее, но и добавляет новые возможности. Например, он адаптирует внешний вид формы к размерам клиентского дисплея. Для этого используются несколько путей.
Во-первых, выполняется автоматический перенос строк с подстройкой высоты заголовков и декораций. Как это работает, можно посмотреть на рисунке:
Если в форме есть длинные строки, которые можно разбить на отдельные слова, то такие строки переносятся, если в этом есть необходимость. Соответственно высота формы увеличивается, потому что нижняя её часть «отъезжает» вниз. В результате форма будет выглядеть нормально даже на узких экранах. Более того, этот механизм работает динамически, а значит, вы можете сжимать форму в реальном режиме времени, и вместе с этим будут переноситься длинные строки.
Автоматический перенос работает для заголовков элементов, заголовков групп, текстовых декораций и текста в кнопках, имеющих вид Гиперссылка.
Вторым элементом адаптивности является изменение ориентации групп. У групп и у формы в целом появился новый вариант ориентации - «Горизонтально, если возможно». В этом варианте, если клиентский дисплей позволяет расположить элементы горизонтально, они располагаются горизонтально. Если нет, то они располагаются вертикально.
Третий элемент адаптивности, это автоматическое определение количества колонок у переключателя или тумблера. Раньше, если не было специальных указаний, количество колонок устанавливалось максимальным, и он выводился в одну строку. Теперь, в той же ситуации, анализируется ширина формы, и устанавливается такое количество колонок, при котором переключатель/тумблер будет выглядеть на экране хорошо.
Горизонтальное и вертикальное выравнивание
Раньше такая возможность отсутствовала, и для реализации нестандартного выравнивания приходилось выдумывать разные «хитрости». Теперь форме и группе можно указать, каким образом должны выравниваться её элементы по вертикали и по горизонтали. Например, на рисунке ниже, группа кнопок показывает три возможных варианта выравнивания: Лево, Центр и Право:
На этом рисунке кнопки размещены в обычной группе, которая растягивается по горизонтали. Расположение кнопок внутри группы управляется свойством группы ГоризонтальноеПоложениеПодчиненных.
Управление внешним выравниванием
Например, у вас есть форма, в которой расположены поле Подразделение, группы Адрес и Телефон. Прежний механизм выравнивал поля этих групп так, как показано на левом рисунке. Поля в форме выравнивались между собой, и поля в каждой группе выравнивались между собой.
Теперь у вас есть возможность устанавливать группам сквозное выравнивание, в результате чего, например, все поля формы будут выровнены одинаково. Этот вариант показан на правом рисунке.
Более того, вы можете управлять сквозным выравниванием для каждой группы отдельно. Поэтому можете, например, отключить сквозное выравнивание для группы Телефон, и тогда форма будет выглядеть так, как показано на правом рисунке.
Выравнивание элементов и заголовков
Ещё одна новая возможность, которая появилась, это возможность управлять взаимным расположением элементов и заголовков. Как во всей форме, так и в отдельных группах. Например, заголовки и элементы вы можете «растянуть» к разным краям формы, или наоборот, «стянуть» их друг к другу, выровняв заголовки вправо, а элементы - влево.
Ограничение максимальной ширины элементов
Раньше, если вы указывали элементу, что он должен растягиваться, то элемент растягивался до тех пор, пока это возможно. Например, на весь экран. Для одних элементов это было хорошо (например, поле HTML), а для других элементов это могло быть и не очень хорошо. Например, для числовых полей. Потому что числовые данные, или кнопки, управляющие полем, оказывались где-то далеко справа.
Теперь у элементов появились булевы свойства, с помощью которых можно установить режим автоматического растягивания по ширине или высоте. В этом режиме платформа самостоятельно определяет, до каких границ можно растягивать поле. Если автоматический режим отключить, тогда платформа будет вести себя так же, как и раньше. Если вы указываете конкретную ширину/высоту поля, будет использоваться она. А если вы указываете значение 0, то элемент будет растягиваться до тех пор, пока это возможно.
Управление расстоянием между элементами
Также появилась возможность управлять горизонтальным и вертикальным интервалами между элементами. Например, на следующем рисунке у левой группы вертикальный интервал увеличен, а у правой - уменьшен.
Отключение растягивания формы
Мы реализовали ещё один, новый режим работы формы, который отключает растягивание её элементов по вертикали. Этот режим будет полезен для форм, содержащих небольшое количество элементов.
Отключение прокрутки у страниц
Для форм, содержащих большое количество элементов, мы тоже несколько изменили поведение. Теперь вертикальная прокрутка у страниц не появляется. Вертикальная прокрутка теперь может быть у самой формы или внутри элементов формы, таких, как таблица, табличный документ и так далее. А страница формы всегда будет иметь полную высоту. Это должно облегчить работу пользователей, потому что большое количество скроллеров в форме часто смущает и сбивает с толку.
Резюме
В этой обзорной статье мы перечислили лишь основные возможности, которые даёт новый механизм размещения элементов в форме. Но не менее важно на наш взгляд и то, что в этом механизме заложен существенный запас для будущего развития.
Описание ошибки:
После выполнения доработок в базе с обычными формами конфигурации 1С: Управление торговлей 8 ред. 10.3 на одном из рабочих мест форма документа одного типа стала неправильно растягиваться. При этом на других рабочих местах данная проблема не вопроизводилась.
Проблема явно возникла после обновления платформы 1С: Предприятие 8 с 8.2 на 8.3.9. До этого проблем с формами не наблюдалось. Как уже было замечено при этом на остальных рабочих местах пробелма не воспроизводилась. Однозначно было ясно, что проблема рабочего места. Сначала было выдвинуто предположение о том, что возможно несовместимость новой платформы с железом ПК, главным образом со встроенной видеокартой Intel. Но попытки решить проблему не были оставлены. И вот что оказалось. Форма все-таки могла приобрести "правильный" вид, но нужно было использовать команду "Восстановить положение окна" контекстного меню формы.
Но использование штатной функции не только понижало эргономику работы, но и действия восстановления хватало лишь на текущую форму. Поэтому проблему привязок элементов формы (востановления положение окна) нужно было решать.
Уже было решено доработать форму для конкретного пользователя, чтобы при открытии инициировалось выполнение операции "восстановления положения окна". В поисках возможно существующего решения подобной задачи было найдено обсуждение на форуме infostart.ru, которое почти подтолкнуло к действию. Но параллельно найденное обсуждение на другом профессиональном форуме forum.mista.ru освежило воспоминание о том, что подобные проблемы с привязками формы могут возникать на отдельных рабоих местах, если у пользователя в Windows используется увеличенный шрифт. При этом вспомнилось, что другое рабочее место, на котором велось конфигурирование вместе с работами по обновлению как раз страдало ошибкой "Разработку форм рекомендуется выполнять в разрешении 96 DPI". На "проблемном" рабочем месте настройка размера шрифтов была установлена по умолчанию.
Доступ в Windows 7 и 8 к настройке размера шрифтов осуществляется через пункт меню рабочего стола "Разрешение экрана". На рабочем месте, где велось конфигурирование было установлено значение "Средний - 125%"
По данным информации из последнего найденного обсуждения, необходимо было после установки значения "Мелкий - 100%" перезагрузить компьютер. Далее в конфигураторе было выполнено незначительное изменение "проблемной" формы, чтобы можно было выполнить сохранение изменений конфигурации с новой настройкой размера шрифта. После перезапуска 1С на рабочем месте, где возникала проблема, ошибка себя перестала проявлять.
Читайте также: