У пользователей старых конфигураций 1С, таких как «Управление торговлей 10.3», «Управление производственным предприятием 1.3» или «Бухгалтерия предприятия 2.0», при переходе на новые версии платформы 1С:Предприятие 8.3 часто возникает неприятный визуальный баг. При первом запуске базы и первом открытии документа или справочника форма отображается корректно. Однако при повторном создании этого же документа или при открытии другого аналогичного объекта окно формы «схлопывается» — сжимается до минимальных размеров, уходит в левый верхний угол, а снизу и справа остается пустое неиспользуемое пространство.
Очистка кэша в такой ситуации помогает ровно на один раз. Выясним причину этого поведения и подробно рассмотрим по шагам все возможные способы решения данной проблемы — от простых пользовательских манипуляций до изменения настроек масштабирования Windows и внесения исправлений в конфигурацию.
Проанализируем ситуацию изнутри. Когда мы очищаем кэш (путем удаления файлов из папок Local и Roaming), платформа 1С полностью стирает сохраненные индивидуальные настройки интерфейса пользователя.
При первом открытии формы платформа берет «чистый» шаблон из конфигурации и отрисовывает его на экране в соответствии со стандартными размерами. Но как только пользователь закрывает форму или саму программу, 1С пытается сохранить новые координаты, размеры и состояние окна в локальный файл настроек пользователя. Из-за внутренней ошибки платформы (особенно часто это проявляется на релизах 8.3.9, 8.3.10 и выше при работе с обычными формами) или некорректных привязок элементов эти координаты рассчитываются неверно. При втором открытии платформа считывает уже поврежденные файлы настроек из кэша, из-за чего форма мгновенно искажается.
Если проблему нужно устранить «здесь и сейчас» на рабочем месте пользователя без внесения изменений в конфигурацию, рассмотрим самый простой ручной метод:
После этого действия форма мгновенно примет нормальный вид, растянувшись до стандартных размеров. Однако помните, что этот метод является временным — при последующих открытиях баг может проявиться снова, поэтому рассмотрим более надежные системные решения.
Часто первопричиной сбоя являются некорректно настроенные или конфликтующие привязки элементов управления внутри самой формы. Платформа 1С 8.3 предъявляет более жесткие требования к геометрии обычных форм, чем старая 8.2. Разберем, как исправить привязки:
Ctrl + R) для запуска режима тестирования формы. Попробуйте вручную растянуть и сжать тестовое окно. Если при изменении размеров какой-то элемент управления начинает вести себя неадекватно или на нем отображается красный перечеркнутый квадрат, значит, привязки этого элемента повреждены.Ctrl + A, нажмите правой кнопкой мыши и выберите пункт «Установить привязки...» (или найдите свойства привязок на панели свойств).Искажение обычных форм практически всегда связано с некорректной работой алгоритма масштабирования платформы 1С при нестандартных настройках экрана Windows. Особенно остро проблема стоит на ноутбуках с высоким разрешением (FullHD, 2K, 4K) или при работе через удаленный рабочий стол (RDP).
Выясним, как настроить операционную систему и ярлык запуска:
1cv8.exe (обычно он находится в папке C:\Program Files\1cv8\номер_платформы\bin\).1cv8.exe правой кнопкой мыши и выберите «Свойства».В некоторых случаях структура хранения метаданных конкретной формы в самой базе данных повреждается. Чтобы принудительно обновить и очистить эти структуры, выполните следующие действия в Конфигураторе:
.cf аналогичной версии), выбрав для обновления только эту конкретную форму. Это поможет перезаписать структуру метаданных «с чистого листа».Если базу нельзя монопольно обновлять, а пользователи постоянно жалуются на сжатые формы, можно применить элегантный программный обходной путь. Поскольку принудительное восстановление положения окна помогает решить проблему на один сеанс, мы можем заставить систему выполнять это действие автоматически при каждом открытии формы.
Для этого откройте модуль проблемной формы в Конфигураторе и добавьте в предопределенную процедуру ПриОткрытии() вызов специального скрипта, который имитирует нажатие горячих клавиш восстановления окна (Alt + Shift + R) через COM-объект операционной системы Windows:
Процедура ПриОткрытии()
Попытка
// Создаем COM-объект для работы со сценариями Windows
Шелл = Новый COMОбъект("WScript.Shell");
// Отправляем комбинацию клавиш Alt (%) + Shift (+) + R
Шелл.SendKeys("%+R");
Исключение
// Исключаем аварийное завершение, если запуск происходит в среде, где COM недоступен
ЗаписьЖурналаРегистрации("ОшибкаИнтерфейса", УровеньЖурналаРегистрации.Предупреждение,,,
"Не удалось восстановить размер окна программно: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Этот код будет срабатывать незаметно для глаза пользователя в момент инициализации окна, принудительно возвращая форме ее правильные пропорции и штатные размеры границ.