Как исправить сжатие и искажение обычных форм при повторном открытии в 1С 8.3

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

У пользователей старых конфигураций 1С, таких как «Управление торговлей 10.3», «Управление производственным предприятием 1.3» или «Бухгалтерия предприятия 2.0», при переходе на новые версии платформы 1С:Предприятие 8.3 часто возникает неприятный визуальный баг. При первом запуске базы и первом открытии документа или справочника форма отображается корректно. Однако при повторном создании этого же документа или при открытии другого аналогичного объекта окно формы «схлопывается» — сжимается до минимальных размеров, уходит в левый верхний угол, а снизу и справа остается пустое неиспользуемое пространство.

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

Почему очистка кэша помогает только при первом открытии?

Проанализируем ситуацию изнутри. Когда мы очищаем кэш (путем удаления файлов из папок Local и Roaming), платформа 1С полностью стирает сохраненные индивидуальные настройки интерфейса пользователя.

При первом открытии формы платформа берет «чистый» шаблон из конфигурации и отрисовывает его на экране в соответствии со стандартными размерами. Но как только пользователь закрывает форму или саму программу, 1С пытается сохранить новые координаты, размеры и состояние окна в локальный файл настроек пользователя. Из-за внутренней ошибки платформы (особенно часто это проявляется на релизах 8.3.9, 8.3.10 и выше при работе с обычными формами) или некорректных привязок элементов эти координаты рассчитываются неверно. При втором открытии платформа считывает уже поврежденные файлы настроек из кэша, из-за чего форма мгновенно искажается.

Решение 1. Ручной сброс настроек окна пользователем (быстрый способ)

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

  1. Откройте проблемную форму документа или справочника (когда она отображается в сжатом или кривом виде).
  2. Нажмите правой кнопкой мыши на любом пустом поле формы (где нет табличных частей или кнопок) или на заголовке окна.
  3. В появившемся контекстном меню выберите пункт «Восстановить положение окна».

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

Решение 2. Корректировка привязок элементов формы в Конфигураторе

Часто первопричиной сбоя являются некорректно настроенные или конфликтующие привязки элементов управления внутри самой формы. Платформа 1С 8.3 предъявляет более жесткие требования к геометрии обычных форм, чем старая 8.2. Разберем, как исправить привязки:

  1. Откройте базу в режиме Конфигуратор.
  2. Найдите проблемный документ (например, «Установка цен номенклатуры» или «Реализация товаров и услуг») и откройте его форму.
  3. Перейдите в меню «Форма» — «Проверить» (или воспользуйтесь горячими клавишами Ctrl + R) для запуска режима тестирования формы. Попробуйте вручную растянуть и сжать тестовое окно. Если при изменении размеров какой-то элемент управления начинает вести себя неадекватно или на нем отображается красный перечеркнутый квадрат, значит, привязки этого элемента повреждены.
  4. Выделите все элементы формы с помощью сочетания клавиш Ctrl + A, нажмите правой кнопкой мыши и выберите пункт «Установить привязки...» (или найдите свойства привязок на панели свойств).
  5. Попробуйте сбросить все привязки к стандартным значениям или установите у самой формы свойство «АвтоПравила» в значение Истина. Это заставит платформу автоматически рассчитывать положение элементов при изменении размеров окна.
  6. Сохраните изменения и обновите конфигурацию базы данных.

Решение 3. Настройка масштабирования Windows и совместимости DPI

Искажение обычных форм практически всегда связано с некорректной работой алгоритма масштабирования платформы 1С при нестандартных настройках экрана Windows. Особенно остро проблема стоит на ноутбуках с высоким разрешением (FullHD, 2K, 4K) или при работе через удаленный рабочий стол (RDP).

Выясним, как настроить операционную систему и ярлык запуска:

  1. Проверьте, чтобы в настройках экрана Windows (меню «Параметры» — «Система» — «Дисплей») масштаб для всех мониторов был установлен строго в значение 100%. Любые значения вроде 125% или 150% гарантированно вызывают проблемы со старыми формами 1С.
  2. Если изменить системный масштаб невозможно (шрифт становится слишком мелким), настройте параметры совместимости исполняемого файла 1С. Найдите файл запуска 1cv8.exe (обычно он находится в папке C:\Program Files\1cv8\номер_платформы\bin\).
  3. Нажмите на файл 1cv8.exe правой кнопкой мыши и выберите «Свойства».
  4. Перейдите на вкладку «Совместимость» и нажмите кнопку «Изменить параметры высокого DPI» (или «Изменить настройки высокого разрешения»).
  5. Установите флажок в поле «Переопределение масштабирования с высоким разрешением» и в выпадающем списке выберите режим «Приложение» или «Система». Поэкспериментируйте с этими режимами — один из них полностью устранит проблему «съезжания» интерфейса.

Решение 4. Перезапись метаданных формы

В некоторых случаях структура хранения метаданных конкретной формы в самой базе данных повреждается. Чтобы принудительно обновить и очистить эти структуры, выполните следующие действия в Конфигураторе:

  1. Снимите проблемную форму с поддержки (если конфигурация находится на поддержке с возможностью изменения).
  2. Внесите любое незначительное изменение в форму (например, добавьте декоративную надпись или слегка сдвиньте границу формы на 1 пиксель вверх-вниз) и сохраните конфигурацию.
  3. Попробуйте выполнить операцию сравнения и объединения с полностью типовым файлом конфигурации (файлом .cf аналогичной версии), выбрав для обновления только эту конкретную форму. Это поможет перезаписать структуру метаданных «с чистого листа».

Решение 5. Программный обход проблемы (автоматический костыль)

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

Для этого откройте модуль проблемной формы в Конфигураторе и добавьте в предопределенную процедуру ПриОткрытии() вызов специального скрипта, который имитирует нажатие горячих клавиш восстановления окна (Alt + Shift + R) через COM-объект операционной системы Windows:


Процедура ПриОткрытии()
    Попытка
        // Создаем COM-объект для работы со сценариями Windows
        Шелл = Новый COMОбъект("WScript.Shell");
        // Отправляем комбинацию клавиш Alt (%) + Shift (+) + R
        Шелл.SendKeys("%+R"); 
    Исключение
        // Исключаем аварийное завершение, если запуск происходит в среде, где COM недоступен
        ЗаписьЖурналаРегистрации("ОшибкаИнтерфейса", УровеньЖурналаРегистрации.Предупреждение,,, 
            "Не удалось восстановить размер окна программно: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Этот код будет срабатывать незаметно для глаза пользователя в момент инициализации окна, принудительно возвращая форме ее правильные пропорции и штатные размеры границ.

← На главную