При обновлении технологической платформы 1С:Предприятие до ветки 8.3.12 (например, до релиза 8.3.12.1529) специалисты часто сталкиваются с неприятным визуальным багом в конфигурациях на «обычных» формах, таких как Комплексная автоматизация 1.1, Управление производственным предприятием 1.3 или Управление торговлей 10.3. Суть проблемы заключается в том, что элементы формы, в частности табличные поля, перестают корректно отрабатывать установленные «привязки». Если под таблицей находятся элементы, видимость которых управляется программно (например, в зависимости от ролей пользователя), то после их скрытия табличное поле не растягивается на освободившееся место, оставляя пустую область.
В этой статье мы подробно разберем причины такого поведения платформы и рассмотрим все доступные способы решения — от простых манипуляций в конфигураторе до программных обходов.
Проанализируем ситуацию с технической точки зрения. Платформа 8.3.12 стала своего рода «переходным этапом», на котором компания 1С существенно переработала графическую подсистему для поддержки мониторов с высоким разрешением (High DPI). Эти изменения затронули механизмы GDI/GDI+, которые используются для отрисовки старых «обычных» форм.
Выясним основные факторы, приводящие к «залипанию» интерфейса:
8.3.12 был зафиксирован баг, при котором программное изменение свойства Видимость для элементов не инициирует принудительный пересчет координат соседних элементов, даже если у них жестко настроены привязки к границам формы или соседним объектам.8.2. Именно в этом режиме на платформе 8.3.12 механизм привязок работает наиболее нестабильно.Иногда привязки в метаданных формы «залипают» при переходе между версиями платформы. Рассмотрим алгоритм действий, который позволяет «встряхнуть» графический движок конфигуратора и обновить описание привязок в файле конфигурации.
Выполним следующие шаги в конфигураторе:
Сотрудники).Этот метод помогает, если проблема вызвана некорректной интерпретацией старых координат в новом формате платформы.
Если статические настройки привязок не помогают, проанализируем возможность программного воздействия на форму в момент её открытия. Нам нужно заставить платформу перерисовать содержимое после того, как отработала логика скрытия полей по ролям.
Посмотрим на пример кода, который можно добавить в процедуру ПриОткрытии() или в конец процедуры, где настраивается видимость элементов:
Процедура ПриОткрытии()
// Ваша логика управления видимостью
ЭлементыФормы.НадписьСпецДанные.Видимость = Ложь;
ЭлементыФормы.ПолеСпецДанные.Видимость = Ложь;
// Попытка форсировать пересчет привязок
ЭтаФорма.АвтоматическоеСохранениеДанныхВНастройках = Истина; // Иногда триггерит обновление
// "Трюк" с изменением размера
ТекущаяВысота = ЭтаФорма.Высота;
ЭтаФорма.Высота = ТекущаяВысота + 1;
ЭтаФорма.Высота = ТекущаяВысота;
// Активизируем форму для обновления графического контекста
ЭтаФорма.Активизировать();
КонецПроцедуры
Важный момент: изменение высоты формы на 1 пиксель и возврат обратно программно инициирует событие перерисовки всех дочерних объектов. Это часто помогает «разбудить» механизм привязок, который проигнорировал скрытие элементов.
Опыт эксплуатации платформы 8.3.12 показывает, что она гораздо стабильнее обрабатывает привязки элементов, находящихся внутри объекта Панель. Разберем, как перестроить форму для повышения стабильности:
Панель без рамок и заголовков.Платформа изолирует расчет координат внутри панели, что часто предотвращает влияние внешних скрытых элементов на поведение таблицы.
Проанализируем свойства элементов управления. Хотя большинство этих свойств относится к управляемым формам, в режиме совместимости с 8.3 некоторые механизмы начинают влиять и на обычные формы.
Проверьте следующие параметры в палитре свойств табличного поля:
Истина.Если вышеперечисленные методы не приносят результата, стоит признать, что версия 8.3.12 является одной из самых неудачных для работы с устаревшими интерфейсами. В профессиональной среде администраторов 1С данная ветка часто считается «необязательной к установке» для систем на обычных формах.
Рассмотрим варианты управления версиями:
8.3.11.3034 (упомянутая в обсуждении) является крайне стабильной для КА 1.1 и УПП 1.3. Если в новом функционале платформы 8.3.12 нет критической необходимости, использование 8.3.11 решит проблему без правки кода.8.3.14, 8.3.16 или более современные версии. В них многие ошибки отрисовки 8.3.12 были исправлены.Для реализации принудительного запуска под конкретной версией без удаления новой платформы, воспользуемся параметром строки запуска в 1С:Стартере. В поле «Версия платформы» для конкретной информационной базы укажем 8.3.11. Это заставит систему игнорировать установленную 8.3.12 и использовать стабильный движок для этой конкретной базы.
Проблема с привязками в 8.3.12 — это известная особенность данной версии. Мы рекомендуем в первую очередь попробовать «трюк с изменением размера на 1 пиксель» в коде, так как это наименее трудозатратный способ. Если же интерфейсных багов становится слишком много, оптимальным решением будет фиксация версии платформы на уровне 8.3.11 для пользователей старых конфигураций.