При разработке объемных диалоговых форм в платформе 1С:Предприятие 7.7 разработчики нередко сталкиваются с неприятным поведением интерфейса: пока реквизиты располагаются на одном экране или на простой длинной форме, полоса вертикальной прокрутки работает штатно, однако стоит добавить слои и закладки, как скроллер либо исчезает вовсе, либо прокручивает диалог лишь частично, отрезая нижние элементы управления.
Проанализируем технические причины этой проблемы и подробно разберем несколько проверенных способов ее решения и обхода.
Поведение диалогового окна связано с внутренними ограничениями графического движка платформы 1С 7.7:
Dialogs. Если окно однажды сохранилось с некорректным размером, полоса прокрутки может не появляться даже после исправления метаданных.Самое надежное решение, подтвержденное практикой, заключается в отказе от использования стандартного элемента закладок диалога. Вместо него переключение слоев реализуется с помощью обычных кнопок на форме.
Разберем по шагам реализацию этого подхода:
Форма.ИспользоватьСлой().Посмотрим на пример кода в модуле формы обработки:
Процедура ПоказатьОсновной()
Форма.ИспользоватьСлой("Основной", 1);
КонецПроцедуры
Процедура ПоказатьНастройки()
// Делаем видимым слой с дополнительными параметрами
Форма.ИспользоватьСлой("Настройка", 1);
КонецПроцедуры
При таком подходе встроенный обработчик закладок не вмешивается в расчет клиентской области окна, и вертикальная прокрутка длинного диалога работает корректно.
Если разделение элементов по слоям необходимо сохранить, но прокрутка прекращает работать или доходит только до середины формы, применим метод «якоря».
Разберем по шагам, как принудительно заставить платформу рассчитать правильную высоту окна:
Так как платформа 1С 7.7 инициализирует скроллер по границам слоя Основной, наличие нижнего якорного элемента заставляет платформу создать полосу прокрутки на всю фактическую высоту обработки.
Если форма перегружена реквизитами, вертикальная прокрутка ухудшает эргономику интерфейса. Эффективной альтернативой является открытие дополнительных параметров в отдельном компактном диалоге.
Рассмотрим реализацию вызова настроек с передачей параметров через повторное модальное открытие обработки:
// В модуле формы при нажатии кнопки "Настройки"
Процедура ОткрытьОкноНастроек()
ОткрытьФормуМодально("Обработка.МояОбработка", "РежимНастройки");
КонецПроцедуры
// В процедуре ПриОткрытии той же обработки
Процедура ПриОткрытии()
Если Форма.Параметр = "РежимНастройки" Тогда
Форма.Заголовок("Настройки обработки");
Форма.ИспользоватьСлой("Настройка", 1);
Иначе
Форма.ИспользоватьСлой("Основной", 1);
КонецЕсли;
КонецПроцедуры
Такая архитектура исключает необходимость вертикального скроллинга основного окна и полностью решает конфликт переключения интерфейсных слоев.
Если изменения в Конфигураторе внесены, но в режиме «1С:Предприятие» полоса прокрутки по-прежнему не появляется, проанализируем настройки конкретного пользователя в операционной системе.
regedit).Dialogs соответствующей информационной базы).