Как настроить Динамический список, чтобы не съезжала полоса прокрутки при переключении вкладок?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке управляемых интерфейсов в среде «1С:Предприятие 8.3» программисты часто сталкиваются со специфическим поведением верстки. Один из самых назойливых визуальных багов — самопроизвольный сдвиг, «прыжки» или полное «съезжание» вертикальной полосы прокрутки динамического списка при переключении между закладками (страницами) формы. Пользователи жалуются на то, что интерфейс дергается, а фокус ввода смещается в непредсказуемые места.

В этой статье мы подробно разберем природу этого явления, проанализируем особенности генератора управляемых форм 1С и рассмотрим по шагам комплекс методов, которые помогут навсегда победить эту проблему.

Выясним причину: почему прыгает полоса прокрутки?

Для начала проанализируем особенности работы платформы с динамическими списками. В отличие от обычных таблиц значений, динамический список (ДинамическийСписок) не загружает все данные из базы данных одновременно. Платформа считывает информацию порциями — обычно по 45 элементов при первоначальном открытии формы и далее пакетами при прокрутке. По этой причине клиентское приложение изначально не знает точного количества строк в базе и относительного положения бегунка скроллинга.

Когда динамический список размещается внутри элемента Группа - Страницы (закладки), в игру вступают механизмы автоматического расчета размеров и управления фокусом платформы 1С. Выделим три основные причины «съезжания» интерфейса:

  1. Автофокусировка на элементах при смене страниц. При переходе пользователя на другую вкладку платформа пытается автоматически установить фокус на первый доступный элемент. Если на этой вкладке расположен динамический список, фокус падает на его строки. Платформа принудительно прокручивает страницу вниз или вверх, чтобы показать выделенную строку по центру, из-за чего вся форма визуально «подпрыгивает».
  2. Конфликт динамического расчета высоты. Если на разных вкладках формы размещено несколько таблиц или списков, у которых свойство Высота установлено в значение 0 (автоматически), либо включено свойство Автовысота, генератор формы начинает бесконечно пересчитывать высоту клиентского окна при каждом переключении закладок. Это приводит к дублированию или хаотичному сдвигу полос прокрутки.
  3. Свойства растягивания элементов. При одновременном присутствии на форме нескольких элементов с установленным флагом РастягиватьПоВертикали в значении Да, платформа не может однозначно распределить свободное пространство формы, что вызывает деформацию скроллбара.

Перейдем к практическим методам устранения этой проблемы. Рекомендуется применять их последовательно, контролируя поведение интерфейса на каждом этапе.

Метод 1: Шаманство с высотой таблиц и свойством «Автовысота»

Как показывает практика практикующих разработчиков, в большинстве случаев скроллбары «сходят с ума» именно из-за неконтролируемого автоматического расчета высоты таблиц. Проанализируем настройки свойств всех табличных частей и динамических списков на форме.

Рассмотрим пошаговый алгоритм настройки свойств в конфигураторе:

  1. Откройте форму документа или справочника в конфигураторе.
  2. Найдите ваш основной динамический список (таблицу формы) и откройте его палитру свойств.
  3. Найдите свойство Высота. Если там указано значение 0, это означает автовысоту. Нам необходимо принудительно задать фиксированную высоту в строках. Установите значение в диапазоне от 10 до 15 (в зависимости от плотности вашего интерфейса).
  4. Снимите флаг у свойства Автовысота, если он установлен.
  5. Повторите эту операцию для всех таблиц и динамических списков, расположенных на соседних вкладках этой группы страниц. Крайне важно убрать автоматический расчет высоты со всех параллельных элементов, так как они косвенно влияют на общую высоту формы даже в скрытом состоянии.

За счет явного указания высоты генератор формы получит жесткие координаты для отрисовки интерфейса и перестанет перестраивать сетку при переключении закладок.

Метод 2: Программное управление фокусом при смене страниц

Если фиксация высоты не помогла в полной мере, значит, виновником является механизм автофокусировки платформы. Разберем метод принудительного управления фокусом при смене активной вкладки.

Чтобы форма не скроллилась автоматически вниз к первой строчке динамического списка, мы можем перехватить событие смены страницы и принудительно передать фокус на декоративный элемент или поле ввода, расположенное в самом верху страницы. Например, на поле быстрого отбора или надпись.

Посмотрим на пример реализации этого обхода. Для этого создадим обработчик события ПриСменеСтраницы для нашей группы страниц:


&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
    
    // Проверяем, на какую страницу перешел пользователь
    Если ТекущаяСтраница = Элементы.СтраницаСДинамическимСписком Тогда
        
        // Принудительно устанавливаем фокус на верхний элемент (например, поле поиска или декорацию)
        // Это предотвратит скачок формы к строкам списка
        Попытка
            ТекущийЭлемент = Элементы.ГруппаБыстрыйОтбор;
        Исключение
            // Обработка исключения на случай, если элемент недоступен
        КонецПопытки;
        
    КонецЕсли;
    
КонецПроцедуры

Благодаря этому нехитрому приему фокус гарантированно закрепится в верхней части экрана, и полоса прокрутки останется в исходном стабильном положении.

Метод 3: Диагностика и локализация «токсичного» элемента формы

Бывают ситуации, когда на форме находится сложная иерархия групп, и визуально определить виновника сдвига не получается. В таком случае применим метод поэтапного исключения:

  1. В режиме конфигуратора временно отключите видимость (свойство Видимость = Ложь) для таблиц на всех остальных страницах формы, кроме той, где расположен проблемный динамический список.
  2. Запустите сеанс в режиме предприятия и проверьте, прыгает ли полоса прокрутки теперь.
  3. Если скроллбар ведет себя стабильно, значит проблема действительно кроется в скрытых таблицах. Поочередно включайте видимость отключенных таблиц обратно, пока не обнаружите элемент-«вредитель», после включения которого полоса прокрутки снова начнет съезжать.
  4. Как только проблемный элемент найден, примените к нему Метод 1 (настройка фиксированной высоты и отключение растягивания по вертикали).

Метод 4: Тонкая настройка свойств растягивания по вертикали

Еще одна частая ошибка проектирования — попытка растянуть все элементы формы по вертикали. Разберем, как правильно управлять этим свойством.

На управляемой форме только один крупный элемент (в пределах одной ветки иерархии) должен отвечать за вертикальное растягивание формы. Если у вас на одной вкладке растягивается динамический список, а на второй — другая таблица, убедитесь, что они находятся в независимых контейнерах, либо их родительские группы имеют четкие настройки.

Попробуйте установить для родительской группы страниц свойство РастягиватьПоВертикали в значение Да, а для вложенных динамических списков внутри страниц установите свойство РастягиватьПоВертикали в значение Авто или Нет. В таком случае размеры списков будут жестко подчиняться размерам родительской вкладки, что исключит взаимное влияние элементов друг на друга.

Метод 5: Жесткое управление полосами прокрутки формы

Если авторасчет платформы упорно выводит лишние полосы прокрутки, мы можем переопределить настройки отображения скроллбаров вручную на уровне свойств элементов.

Рассмотрим доступные параметры динамического списка:

Метод 6: Очистка кэша настроек пользователя

Иногда сдвиг интерфейса возникает только у определенных пользователей. Платформа 1С сохраняет персональные настройки расположения окон, колонок и размеров элементов в системных таблицах базы данных. При обновлении конфигурации или платформы этот кэш может конфликтовать с новой версткой.

Проанализируем шаги по очистке кэша:

  1. Откройте информационную базу под учетной записью администратора.
  2. Перейдите в раздел Администрирование — Настройки пользователей и прав.
  3. Найдите ссылку Очистка настроек (или Настройки пользователей).
  4. Выберите проблемного пользователя и очистите его настройки отображения конкретной формы, на которой прыгает список.

После очистки форма примет первоначальный вид, заложенный разработчиком в конфигураторе, и все баги отображения пропадут.

Подводя итог, отметим, что залог стабильной верстки управляемой формы в 1С — это предсказуемость размеров. Избегайте бесконтрольного использования автовысоты и всегда контролируйте фокус ввода при работе с группами страниц. Применяя эти правила, вы сможете сделать работу ваших пользователей максимально комфортной и быстрой!

← На главную