При переходе на платформу версии 8.3.15.1830 и другие сборки этой ветки многие разработчики столкнулись с неприятным визуальным эффектом: управляемые формы начинают «разъезжаться» вправо или вниз, а в окне появляются неисчезающие полосы прокрутки. Даже если на форме остается много свободного пространства, платформа упорно считает, что элементы не помещаются в границы окна. Рассмотрим подробно природу этой проблемы и разберем по шагам все доступные способы ее решения.
Проанализируем ситуацию: начиная с версии 8.3.15, разработчики 1С внедрили значительные изменения в механизм отрисовки интерфейса «Такси». Основная цель изменений заключалась в поддержке компактного режима и оптимизации отступов между элементами. Однако на практике новый алгоритм расчета геометрии формы стал конфликтовать со старыми настройками элементов, созданными в предыдущих версиях платформы.
Выделим основные технические причины возникновения бага:
Видимость установлено в значение Ложь, в некоторых сборках 8.3.15 продолжают занимать место в макете формы, хотя физически не отображаются.Разберем первый и самый простой способ исправления — изменение системных свойств самой формы. В ветке 8.3.15 поведение свойства Автомасштабирование было пересмотрено.
Попробуем выполнить следующие действия в конфигураторе:
Автомасштабирование. Попробуем переключить его из значения Авто в Выключено.ВариантУправленияВысотой и ВариантУправленияШириной. Установка их в значение ИспользоватьМинимальныйРазмер часто помогает форме «схлопнуться» до реальных границ элементов.Рассмотрим подробнее структуру элементов. Часто лишние полосы прокрутки возникают из-за того, что слишком много групп имеют установленное свойство «Растягивать». Проанализируем иерархию элементов:
Нам необходимо добиться того, чтобы на форме был только один «центр растяжения». Выполним следующие шаги:
РастягиватьПоГоризонтали и РастягиватьПоВертикали в значение Нет.Ширина и Высота у декораций и надписей. В 8.3.15 они могут начать влиять на общую ширину формы более агрессивно, чем раньше.Посмотрим на ситуацию со стороны системных настроек. Если форма «раздувается» только на определенных релизах 8.3.15, это явный признак несоответствия режима совместимости конфигурации и версии платформы.
Существует два пути:
В некоторых случаях, как было замечено в обсуждении, форма выглядит корректно в модальном режиме или после ручного изменения размера окна пользователем. Это означает, что первичный расчет при открытии прошел с ошибкой. Попробуем «подтолкнуть» форму к перерисовке программно.
Разберем пример кода, который можно добавить в модуль формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Выполняем стандартные действия
// ...
// Принудительно обновляем отображение для пересчета геометрии
ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры
Хотя ОбновитьОтображениеДанных() чаще используется для обновления значений, в ряде случаев этот метод инициирует пересчет связанных элементов интерфейса, что может убрать лишние полосы.
Если ваша конфигурация — 1С:Управление торговлей + CRM, стоит обратить внимание на динамические панели. Часто в таких решениях при открытии формы программно создаются группы для дополнительных реквизитов или навигационных ссылок.
В версии 8.3.15 механизм ИзменитьФорму() или программное создание элементов через ЭтаФорма.Элементы.Добавить() может вызвать баг, при котором размер формы устанавливается до того, как все элементы будут окончательно размещены. Выясним, нет ли в модуле формы или в общих модулях кода, который принудительно устанавливает ширину элементов в пикселях. В новой платформе лучше доверять автоматическому расчету или использовать Ширина в символах.
Проанализируем техническую документацию 1С. Описанная проблема была признана разработчиками как критическая ошибка отображения (баг №10214815). Данная ошибка исправлена в последующих версиях платформы.
Если вышеперечисленные методы настройки элементов не помогают, единственным надежным способом будет переход на более стабильные релизы:
В этих версиях алгоритм «Такси» был стабилизирован, и проблема с «разлетающимися» элементами и фантомными полосами прокрутки была полностью устранена.
Подводя итог, можно сказать, что появление полос прокрутки в 8.3.15 — это результат перехода платформы на новые стандарты визуализации. Для исправления ситуации мы рекомендуем сначала поиграть со свойствами Автомасштабирование и ВариантУправленияВысотой. Если это не дает результата, проверьте, не установлены ли фиксированные размеры для групп, и постарайтесь минимизировать количество растягивающихся элементов. Однако лучшим решением в долгосрочной перспективе остается обновление платформы до актуальных, исправленных релизов.