При переходе от обычных форм к управляемым формам в конфигурации 1С:Управление торговлей, например, с версии 10.3 на 11.5, разработчики часто сталкиваются с задачей адаптации интерфейса. Одной из таких распространённых проблем является вертикальное расположение элементов, в частности, радиокнопок, и их последующее выравнивание с соответствующими полями ввода. Если в обычных формах мы имели возможность "попиксельного" позиционирования элементов, то в управляемых формах подход существенно изменился. Здесь преобладает декларативное описание структуры, а фактическое размещение элементов выполняется автоматически системой при отображении формы. Тем не менее, у нас есть инструменты для влияния на этот процесс, и мы рассмотрим, как их использовать.
Рассмотрим подробнее подходы к решению этой задачи, начиная от простых настроек до более комплексных архитектурных решений.
Первый и наиболее прямой способ, который часто помогает достичь желаемого вертикального выравнивания, это работа со свойствами групп, в которых расположены наши элементы. В управляемых формах 1С внешний вид формы определяется автоматически, но мы можем тонко настраивать интервалы между элементами внутри групп.
Как это работает?
Система 1С при отображении управляемой формы старается оптимально распределить элементы, учитывая их типы, размеры и свойства групп-контейнеров. Радиокнопки, как правило, занимают меньше вертикального пространства, чем полноценные поля ввода, особенно если поля ввода многострочные или имеют подписи. Чтобы "растянуть" группу радиокнопок по вертикали и совместить её с группой полей, нам необходимо увеличить вертикальное пространство между самими радиокнопками.
ВертикальныйИнтервал: В списке свойств найдите ВертикальныйИнтервал. По умолчанию он может быть установлен в значение "Обычный". Мы можем изменить это значение на "Полуторный" или "Двойной".Возможные значения для ВертикальныйИнтервал:
Обычный: Стандартный интервал, используемый по умолчанию.Полуторный: Увеличивает вертикальный интервал между элементами группы в полтора раза.Двойной: Увеличивает вертикальный интервал между элементами группы в два раза.Пример:
Если после установки ВертикальныйИнтервал = Полуторный выравнивание всё ещё неидеально, попробуйте установить ВертикальныйИнтервал = Двойной. Как показывает опыт пользователей, это часто помогает достичь почти идеального совпадения.
Помимо ВертикальныйИнтервал, в свойствах групп также доступны свойства ГоризонтальныйИнтервал, которые позволяют управлять расстоянием между элементами по горизонтали. Комбинируя эти настройки, мы можем добиться более точного и аккуратного размещения элементов на форме и визуального выделения данных.
Этот подход относительно прост и эффективен для корректировки небольших смещений, но он не всегда является идеальным, особенно если количество полей ввода, связанных с каждой радиокнопкой, сильно различается.
В некоторых случаях, когда требуется более точное "пиксельное" позиционирование, или когда ВертикальныйИнтервал не дает желаемого результата, мы можем применить подход, использующий вложенные группы и элементы типа "Декорация".
Идея этого метода:
Мы создаем дополнительные группы или используем элемент Декорация с пустым содержимым (без текста или картинки), чтобы вставить "пробелы" или "отступы" между элементами. Это позволяет нам вручную контролировать расстояние, так как декорации могут быть настроены по ширине и высоте.
Декорация.Декорация тип "Надпись".Заголовок пустым.АвтоМаксимальнаяШирина, МаксимальнаяШирина, АвтоМаксимальнаяВысота, МаксимальнаяВысота, чтобы контролировать размер этой "пустой" декорации. Например, увеличивая МаксимальнаяВысота, мы можем создать необходимый вертикальный отступ.Этот метод дает более точный контроль над размерами отступов, но может потребовать больше усилий для настройки и поддержки, особенно если структура формы часто меняется.
Наиболее элегантным и соответствующим философии управляемых форм решением, особенно в случае, когда поля ввода зависят от выбранной радиокнопки, является использование элемента ГруппаСтраниц. Этот подход позволяет не только решить проблему выравнивания, но и значительно улучшить юзабилити формы, сделав её более чистой и интуитивно понятной.
В чем суть подхода?
Вместо того чтобы пытаться выровнять все поля ввода, которые отображаются постоянно (даже если они неактуальны для текущего выбора радиокнопки), мы будем показывать только те поля, которые действительно относятся к выбранной опции. Это достигается путём создания отдельных "страниц" для каждой опции радиокнопки, на которых размещаются соответствующие поля ввода.
Преимущества этого решения:
Разберем реализацию по шагам:
ГруппаСтраниц: Добавьте на форму элемент типа ГруппаСтраниц. Это будет контейнер для всех зависимых полей.ГруппеСтраниц.
ГруппаСтраниц в дереве элементов.ГруппыСтраниц только те поля ввода, которые должны отображаться при выборе соответствующей опции радиокнопки.ГруппаСтраниц не занимала лишнего места и не отвлекала пользователя, мы можем отключить отображение её заголовков. В свойствах ГруппыСтраниц найдите свойство ОтображениеЗаголовковСтраниц и установите его значение в "Нет".ПриИзменении для радиокнопки:
Для реквизита формы, с которым связаны радиокнопки, создайте обработчик события ПриИзменении. В этом обработчике мы будем программно устанавливать состав элементов и текущую страницу в ГруппеСтраниц в зависимости от выбранного значения радиокнопки.
&НаКлиенте
Процедура ВариантВыбораПриИзменении(Элемент)
// ВариантВыбора - это реквизит формы, к которому привязаны радиокнопки
// ГруппаПолей - это имя нашей ГруппыСтраниц на форме
Если ВариантВыбора = ВариантВыбораПеречисления.Опция1 Тогда
Элементы.ГруппаПолей.ТекущаяСтраница = Элементы.ГруппаПолейСтраницаОпция1;
ИначеЕсли ВариантВыбора = ВариантВыбораПеречисления.Опция2 Тогда
Элементы.ГруппаПолей.ТекущаяСтраница = Элементы.ГруппаПолейСтраницаОпция2;
ИначеЕсли ВариантВыбора = ВариантВыбораПеречисления.Опция3 Тогда
Элементы.ГруппаПолей.ТекущаяСтраница = Элементы.ГруппаПолейСтраницаОпция3;
КонецЕсли;
КонецПроцедуры
Где:
ВариантВыбора – это имя реквизита формы, к которому привязаны ваши радиокнопки.ВариантВыбораПеречисления – это имя перечисления, если вы используете его для значений радиокнопок. Если вы используете числовые значения (1, 2, 3), то сравнение будет выглядеть как ВариантВыбора = 1.ГруппаПолей – это имя элемента формы типа ГруппаСтраниц.ГруппаПолейСтраницаОпция1, ГруппаПолейСтраницаОпция2 и т.д. – это имена страниц внутри вашей ГруппыСтраниц.Таким образом, при изменении выбранной радиокнопки, система будет автоматически переключать видимую страницу, отображая только актуальные поля. Это не только решает проблему выравнивания, но и делает форму более функциональной и удобной.
Переход на управляемые формы – это не просто смена технологии, это изменение философии построения интерфейса. Попытка полностью дублировать интерфейс обычных форм в управляемых часто приводит к неудовлетворительным результатам, так как управляемые элементы при стандартном масштабе крупнее, и вся форма может выглядеть громоздкой.
Рассмотрим несколько важных аспектов и свойств, которые помогут нам при работе с управляемыми формами:
АвтоМаксимальнаяШирина, МаксимальнаяШирина, АвтоМаксимальнаяВысота, МаксимальнаяВысота.
АвтоМаксимальнаяШирина / АвтоМаксимальнаяВысота: Если установлено в "Истина", система автоматически определяет оптимальную ширину/высоту элемента.МаксимальнаяШирина / МаксимальнаяВысота: Позволяет задать максимальную ширину/высоту элемента в условных единицах (аналог символов). Это полезно, когда мы хотим ограничить рост элемента, чтобы он не растягивался на всю доступную область, или, наоборот, чтобы он занимал определенное пространство для выравнивания.Группа реализовано свойство СквозноеВыравнивание. Это свойство может быть полезно для выравнивания содержимого нескольких групп, если, например, радиокнопки и поля ввода находятся в разных группах, но должны быть выровнены относительно друг друга по горизонтали или вертикали. Оно помогает синхронизировать расположение элементов, находящихся в разных контейнерах.ГоризонтальноеПоложениеВГруппе и ВертикальноеПоложениеВГруппе также доступны для расширений полей управляемой формы. Они позволяют более точно позиционировать отдельные элементы внутри их группы-контейнера относительно горизонтального или вертикального центра, начала или конца. Это может быть полезно для доводки выравнивания, когда другие методы не дают идеального результата.Использование комбинации этих свойств и подходов позволяет достичь желаемого вертикального расположения радиокнопок и выравнивания с соответствующими полями ввода в управляемых формах 1С. Важно помнить, что управляемые формы требуют иного мышления при проектировании интерфейса, и часто более архитектурные решения, такие как использование ГруппыСтраниц, являются предпочтительными по сравнению с попытками точного позиционирования, которое было характерно для обычных форм.