Переход на новые релизы платформы 1С часто сопровождается не только появлением новых возможностей, но и возникновением специфических визуальных артефактов, особенно в конфигурациях, использующих обычные формы (V8.2 style), таких как Управление производственным предприятием 1.3 или Зарплата и управление персоналом 2.5. Одной из наиболее известных проблем ветки 8.3.12.1685 стал баг «схлопывания» окон, когда форма справочника Сотрудники открывается в сильно уменьшенном виде, и стандартные манипуляции мышкой не позволяют зафиксировать ее размер.
В этой статье мы подробно разберем, почему это происходит, и рассмотрим несколько способов решения задачи: от простой очистки кэша до внесения правок в программный код конфигурации.
Проанализируем ситуацию с технической стороны. В платформе 8.3.12 разработчики внесли существенные изменения в механизм работы графической подсистемы и поддержку масштабирования (DPI). Это привело к тому, что при использовании разделителей (сплиттеров) и сворачиваемых панелей на обычных формах платформа некорректно рассчитывает геометрию окна. Система ошибочно записывает в настройки пользователя (в системное хранилище) нулевую высоту элементов или минимальное состояние разделителя.
Особенно часто это проявляется, если в Windows установлено масштабирование экрана (например, 125% или 150%). Платформа «запутывается» в координатах, и при каждом открытии форма пытается восстановить «битые» настройки из кэша, что делает окно маленьким.
Прежде чем приступать к программированию, рассмотрим самый быстрый способ — принудительную очистку временных файлов. Поскольку настройки положения окон хранятся локально, очистка серверного кэша может не дать результата.
%AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8. Именно в каталоге Local хранятся данные о состоянии списков и форм (файлы с расширением .tst).1C:Enterprise 8.3 Server Agent и очистить папку snccntx в каталоге сервера приложений.Если очистка кэша помогает лишь временно или не помогает вовсе, разберем программный метод. Мы можем заставить платформу пересчитать размеры элементов формы принудительно. Рассмотрим пример кода, который нужно внедрить в модуль формы списка справочника СотрудникиОрганизаций.
Опытным путем выяснено, что «передергивание» свойства Свертка у панелей заставляет графический движок 1С перерисовать окно корректно. Посмотрим на пример реализации в процедуре ОбновлениеОтображения:
Процедура ОбновлениеОтображения()
// Принудительно разворачиваем и сворачиваем панель для сброса бага отрисовки
ЭлементыФормы.ПанельДополнительныеСведения.Свертка = РежимСверткиЭлементаУправления.Нет;
ЭлементыФормы.ПанельДополнительныеСведения.Свертка = РежимСверткиЭлементаУправления.Низ;
КонецПроцедуры
Важный нюанс: почему именно ОбновлениеОтображения, а не ПриОткрытии? Дело в том, что при открытии формы платформа еще не успевает применить пользовательские настройки из кэша, которые и вызывают баг. Вызов кода в ОбновлениеОтображения происходит чуть позже, что позволяет «перебить» некорректные значения размеров, установленные платформой автоматически.
Рассмотрим ситуацию, когда проблема вызвана конкретной записью в системном хранилище настроек. Мы можем программно очистить настройки формы для текущего пользователя. Это можно сделать, добавив в процедуру ПриОткрытии следующий код:
Процедура ПриОткрытии()
// Сбрасываем сохраненное положение окна, если ширина формы аномально мала
Если ЭтаФорма.Ширина < 100 Тогда
ЭтаФорма.УстановитьСтандартныеНастройки();
КонецЕсли;
КонецПроцедуры
Использование метода УстановитьСтандартныеНастройки() возвращает форму к виду, заданному разработчиком в Конфигураторе, игнорируя «сломанный» кэш платформы 8.3.12.
Иногда после обновления платформы пользователи замечают не только проблемы с размером окон, но и странное поведение динамических списков: например, начинают отображаться уволенные сотрудники, хотя фильтр установлен. Это связано с тем, что 8.3.12 изменила логику работы с индексами временных таблиц в запросах обычных приложений.
В этом случае проанализируем настройки отбора. Помогает полное пересоздание настройки списка:
КлючСохраненияПоложенияОкна в конфигураторе. Иногда его изменение на произвольную строку заставляет платформу создать новый чистый кэш для этой формы.Подводя итог, стоит отметить, что ветка 8.3.12 признана специалистами одной из самых проблемных для работы с конфигурациями на обычных формах. Если производственная необходимость требует использования функционала 8.3 (например, для сдачи отчетности в ПФР или работы с ЭДО), рекомендуется выполнить одно из следующих действий:
8.3.14.1779 или выше. В этих релизах большинство ошибок отрисовки обычных форм были исправлены.8.2.13).Применяя описанные выше методы, мы сможем вернуть комфортную работу пользователям УПП и ЗУП, минимизировав негативные последствия от багов платформы.