Почему в обычных формах на платформе 8.3.12 не растягивается табличное поле и как это исправить

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

При обновлении технологической платформы 1С:Предприятие до ветки 8.3.12 (например, до релиза 8.3.12.1529) специалисты часто сталкиваются с неприятным визуальным багом в конфигурациях на «обычных» формах, таких как Комплексная автоматизация 1.1, Управление производственным предприятием 1.3 или Управление торговлей 10.3. Суть проблемы заключается в том, что элементы формы, в частности табличные поля, перестают корректно отрабатывать установленные «привязки». Если под таблицей находятся элементы, видимость которых управляется программно (например, в зависимости от ролей пользователя), то после их скрытия табличное поле не растягивается на освободившееся место, оставляя пустую область.

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

Разберем причины возникновения проблемы

Проанализируем ситуацию с технической точки зрения. Платформа 8.3.12 стала своего рода «переходным этапом», на котором компания 1С существенно переработала графическую подсистему для поддержки мониторов с высоким разрешением (High DPI). Эти изменения затронули механизмы GDI/GDI+, которые используются для отрисовки старых «обычных» форм.

Выясним основные факторы, приводящие к «залипанию» интерфейса:

  1. Нарушение алгоритма пересчета геометрии: В версии 8.3.12 был зафиксирован баг, при котором программное изменение свойства Видимость для элементов не инициирует принудительный пересчет координат соседних элементов, даже если у них жестко настроены привязки к границам формы или соседним объектам.
  2. Масштабирование Windows: Если у пользователя установлен масштаб экрана отличный от 100%, математические расчеты координат в обычных формах начинают выдавать ошибки в несколько пикселей, что блокирует автоматическое растягивание.
  3. Режим совместимости: Конфигурации на обычных формах обычно работают в режиме совместимости с версией 8.2. Именно в этом режиме на платформе 8.3.12 механизм привязок работает наиболее нестабильно.

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

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

Выполним следующие шаги в конфигураторе:

  1. Откроем проблемную форму (например, форму списка справочника Сотрудники).
  2. Выделим саму форму и немного изменим её размер, потянув за край.
  3. Затем вернем размер формы в исходное состояние.
  4. Проделаем то же самое с табличным полем: немного сместим его границы и вернем их на место.
  5. Проверим окно настройки привязок (правой кнопкой мыши по элементу — Установить привязки). Убедимся, что для табличного поля установлена привязка «Право» к «Право формы» и «Низ» к «Низ формы» (или к верхнему краю элементов, расположенных ниже).
  6. Сохраним изменения и обновим конфигурацию базы данных.

Этот метод помогает, если проблема вызвана некорректной интерпретацией старых координат в новом формате платформы.

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

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

Посмотрим на пример кода, который можно добавить в процедуру ПриОткрытии() или в конец процедуры, где настраивается видимость элементов:


Процедура ПриОткрытии()
    // Ваша логика управления видимостью
    ЭлементыФормы.НадписьСпецДанные.Видимость = Ложь;
    ЭлементыФормы.ПолеСпецДанные.Видимость = Ложь;
    
    // Попытка форсировать пересчет привязок
    ЭтаФорма.АвтоматическоеСохранениеДанныхВНастройках = Истина; // Иногда триггерит обновление
    
    // "Трюк" с изменением размера
    ТекущаяВысота = ЭтаФорма.Высота;
    ЭтаФорма.Высота = ТекущаяВысота + 1;
    ЭтаФорма.Высота = ТекущаяВысота;
    
    // Активизируем форму для обновления графического контекста
    ЭтаФорма.Активизировать();
КонецПроцедуры

Важный момент: изменение высоты формы на 1 пиксель и возврат обратно программно инициирует событие перерисовки всех дочерних объектов. Это часто помогает «разбудить» механизм привязок, который проигнорировал скрытие элементов.

Решение 3: Использование контейнеров (Панелей)

Опыт эксплуатации платформы 8.3.12 показывает, что она гораздо стабильнее обрабатывает привязки элементов, находящихся внутри объекта Панель. Разберем, как перестроить форму для повышения стабильности:

  1. Разместим на форме элемент управления Панель без рамок и заголовков.
  2. Перенесем табличное поле внутрь этой панели.
  3. Настроим привязки самой панели к границам формы, а привязки табличного поля — к границам панели.

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

Решение 4: Свойства «АвтоМаксимальнаяВысота» и «Растягивать»

Проанализируем свойства элементов управления. Хотя большинство этих свойств относится к управляемым формам, в режиме совместимости с 8.3 некоторые механизмы начинают влиять и на обычные формы.

Проверьте следующие параметры в палитре свойств табличного поля:

Решение 5: Управление версией платформы (Откат)

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

Рассмотрим варианты управления версиями:

  1. Откат на ветку 8.3.11: Версия 8.3.11.3034 (упомянутая в обсуждении) является крайне стабильной для КА 1.1 и УПП 1.3. Если в новом функционале платформы 8.3.12 нет критической необходимости, использование 8.3.11 решит проблему без правки кода.
  2. Переход на ветку 8.3.14 и выше: Если обновление необходимо (например, для требований законодательства или новых механизмов работы с СУБД), лучше переходить сразу на 8.3.14, 8.3.16 или более современные версии. В них многие ошибки отрисовки 8.3.12 были исправлены.

Для реализации принудительного запуска под конкретной версией без удаления новой платформы, воспользуемся параметром строки запуска в 1С:Стартере. В поле «Версия платформы» для конкретной информационной базы укажем 8.3.11. Это заставит систему игнорировать установленную 8.3.12 и использовать стабильный движок для этой конкретной базы.

Заключение

Проблема с привязками в 8.3.12 — это известная особенность данной версии. Мы рекомендуем в первую очередь попробовать «трюк с изменением размера на 1 пиксель» в коде, так как это наименее трудозатратный способ. Если же интерфейсных багов становится слишком много, оптимальным решением будет фиксация версии платформы на уровне 8.3.11 для пользователей старых конфигураций.

← На главную