Почему в обработке 1С 7.7 пропадает вертикальная полоса прокрутки и как это исправить?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

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

В чем причина сбоя вертикальной прокрутки в 1С 7.7

Поведение диалогового окна связано с внутренними ограничениями графического движка платформы 1С 7.7:

  1. Конфликт встроенной панели закладок и клиентской области окна. Штатные закладки диалога в 1С 7.7 жестко привязываются к границам клиентского окна. При наличии элемента закладок перерасчет системных стилей окна и параметров полосы прокрутки дает сбой: область прокручиваемого содержимого перекрывается или скроллинг блокируется платформенным обработчиком отрисовки.
  2. Расчет виртуального размера по слою «Основной». В момент открытия формы платформа вычисляет габариты диалога преимущественно по координатам элементов, расположенных на слое Основной, либо по границам холста в Конфигураторе. Если элементы выходят далеко вниз только на дополнительных слоях, динамический пересчет высоты формы при переключении слоев платформой не выполняется.
  3. Свойство формы «Изменять размер». При включенной опции изменения размеров окна поведение полосы прокрутки на экранах с элементами, выходящими за видимую область, становится нестабильным.
  4. Кэширование координат окна в системном реестре. Платформа сохраняет размеры и позицию окон индивидуально для каждого пользователя в ветке реестра Windows Dialogs. Если окно однажды сохранилось с некорректным размером, полоса прокрутки может не появляться даже после исправления метаданных.

Способ 1. Отказ от встроенных закладок и переключение слоев через кнопки

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

Разберем по шагам реализацию этого подхода:

  1. Откроем форму обработки в Конфигураторе и удалим штатный элемент управления закладками.
  2. В свойствах формы снимем флажок Изменять размер, чтобы зафиксировать габариты окна.
  3. Разместим в верхней части формы кнопки для переключения разделов (например, кнопку Настройка или Основные параметры).
  4. В модуле формы опишем обработку нажатия этих кнопок с использованием метода Форма.ИспользоватьСлой().

Посмотрим на пример кода в модуле формы обработки:


Процедура ПоказатьОсновной()
    Форма.ИспользоватьСлой("Основной", 1);
КонецПроцедуры

Процедура ПоказатьНастройки()
    // Делаем видимым слой с дополнительными параметрами
    Форма.ИспользоватьСлой("Настройка", 1);
КонецПроцедуры

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

Способ 2. Размещение якорного элемента на основном слое

Если разделение элементов по слоям необходимо сохранить, но прокрутка прекращает работать или доходит только до середины формы, применим метод «якоря».

Разберем по шагам, как принудительно заставить платформу рассчитать правильную высоту окна:

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

Так как платформа 1С 7.7 инициализирует скроллер по границам слоя Основной, наличие нижнего якорного элемента заставляет платформу создать полосу прокрутки на всю фактическую высоту обработки.

Способ 3. Вызов параметров в отдельном модальном окне

Если форма перегружена реквизитами, вертикальная прокрутка ухудшает эргономику интерфейса. Эффективной альтернативой является открытие дополнительных параметров в отдельном компактном диалоге.

Рассмотрим реализацию вызова настроек с передачей параметров через повторное модальное открытие обработки:


// В модуле формы при нажатии кнопки "Настройки"
Процедура ОткрытьОкноНастроек()
    ОткрытьФормуМодально("Обработка.МояОбработка", "РежимНастройки");
КонецПроцедуры

// В процедуре ПриОткрытии той же обработки
Процедура ПриОткрытии()
    Если Форма.Параметр = "РежимНастройки" Тогда
        Форма.Заголовок("Настройки обработки");
        Форма.ИспользоватьСлой("Настройка", 1);
    Иначе
        Форма.ИспользоватьСлой("Основной", 1);
    КонецЕсли;
КонецПроцедуры

Такая архитектура исключает необходимость вертикального скроллинга основного окна и полностью решает конфликт переключения интерфейсных слоев.

Способ 4. Сброс кэшированных размеров окна в реестре

Если изменения в Конфигураторе внесены, но в режиме «1С:Предприятие» полоса прокрутки по-прежнему не появляется, проанализируем настройки конкретного пользователя в операционной системе.

  1. Закроем режим «1С:Предприятие 7.7».
  2. Откроем редактор реестра Windows (regedit).
  3. Перейдем в ветку текущего пользователя по пути настроек диалогов баз 1С 7.7 (раздел Dialogs соответствующей информационной базы).
  4. Удалим сохраненные ключи координат и размеров для проблемной обработки.
  5. Повторно запустим базу: окно откроется с размерами по умолчанию, рассчитанными Конфигуратором, и полоса прокрутки восстановится.
← На главную