Часто при разработке управляемых форм в 1С возникает неприятная ситуация: динамический список не желает растягиваться на всё доступное пространство или, наоборот, заставляет всю форму «уезжать» вниз, создавая двойную полосу прокрутки. Это портит эргономику интерфейса и затрудняет работу пользователя. В этой статье мы подробно разберем механизмы управления высотой элементов и выясним, как настроить список так, чтобы платформа 1С корректно рассчитывала адаптивный интерфейс.
Прежде всего, проанализируем ситуацию, когда у динамического списка появляется собственная прокрутка, а рядом — еще одна прокрутка самой формы. Это происходит из-за конфликта настроек контейнеров. Для того чтобы список «тянулся», необходимо соблюдение правила непрерывной цепочки, что является основой для построения эффективных интерфейсов. Разберем это по шагам:
Рассмотрим каждый элемент в дереве формы, начиная от самого списка и заканчивая корнем (самой формой). У каждого родительского контейнера (группы, страницы, группы страниц) должно быть установлено свойство РастягиватьПоВертикали в значение Да (или Авто, если платформа верно определяет контекст). Если хотя бы один промежуточный элемент в этой иерархии имеет жесткое ограничение по высоте или настройку «не растягивать», цепочка передачи свободного пространства обрывается, и динамический список сжимается до своей минимальной высоты.
Одним из самых эффективных и профессиональных приемов настройки является установка заведомо малого значения высоты. Посмотрим, как это работает на практике, используя штатные инструменты или редактор форм в режиме предприятия:
Высота.РастягиватьПоВертикали установлено в значение Да.Выясним причину, почему это помогает. Когда мы указываем высоту 10, платформа резервирует место под 10 строк. Если экран пользователя мал, эти 10 строк могут не влезть, и появится общий скролл формы. Если же мы указываем 1, платформа понимает, что списку нужно минимум места, но за счет разрешенного растягивания она отдает ему все оставшееся свободное пространство в окне. Таким образом, список всегда будет занимать максимум места, не выталкивая другие элементы за границы экрана.
Проанализируем ситуацию, упомянутую в обсуждении: список находится на одной из вкладок ГруппыСтраниц. Это самый коварный случай. Дело в том, что высота всей группы страниц часто определяется по самой высокой вкладке. Рассмотрим алгоритм поиска проблемы:
Если на «Вкладке №1» у вас расположен динамический список, а на «Вкладке №2» — огромное количество реквизитов, надписей и кнопок, которые не помещаются на экран, то платформа увеличит высоту всей ГруппыСтраниц под размер второй вкладки. В итоге на первой вкладке список растянется до этой же огромной высоты, и у всей формы появится полоса прокрутки.
Чтобы найти «виновного», воспользуемся методикой исключения, в чем может значительно помочь конструктор управляемых форм для быстрого анализа структуры:
Разберем типичную ошибку начинающих разработчиков — использование свойства АвтоМаксимальнаяВысота. Многие полагают, что это свойство заставляет список расти. На самом деле, всё наоборот. Это ограничитель. Если оно включено, платформа не позволит списку стать выше определенного порога, даже если на мониторе 4K есть свободное место. Для создания по-настоящему адаптивного интерфейса установите АвтоМаксимальнаяВысота в значение Нет.
Также обратим внимание на свойства самой формы:
ВертикальнаяПрокрутка. Попробуйте установить значение Не использовать. Это заставит платформу жестко вписывать содержимое в размер окна. Если при этом элементы настроены правильно, динамический список заберет себе всё пространство, а общий скролл формы исчезнет.СпособИнициализацииРазделения. Проверьте, не заданы ли фиксированные значения для разделяемых областей, которые могут ограничивать рост контейнера со списком.Посмотрим на примеры элементов, которые могут мешать растягиванию. Если динамический список помещен в группу вместе с командной панелью, проверьте свойства этой группы. Командная панель должна иметь фиксированную высоту (обычно это происходит автоматически), а вот сам список внутри группы должен иметь приоритет на растягивание.
Если вы используете декорации (надписи-подсказки) над списком, убедитесь, что у них выключено свойство РастягиватьПоВертикали. В противном случае платформа может поделить доступное пространство между списком и декоративной надписью, что приведет к нерациональному использованию экрана.
Резюмируя вышесказанное: идеальная настройка для адаптивного динамического списка — это сочетание минимальной заданной высоты (Высота = 1), включенного вертикального растягивания у самого списка и всех его родителей. А чтобы еще больше прокачать список, добавив в него новую информацию, или реализовать флажки в динамическом списке, следуйте принципам чистого и функционального интерфейса.