Почему обычная форма в 1С открывается в сжатом виде на нескольких мониторах и как это исправить?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия
← На главную

При работе с базами данных на платформе 1С:Предприятие 8, особенно использующими обычные формы (например, в редакции 2.0 конфигурации «Бухгалтерия предприятия КОРП»), разработчики и системные администраторы часто сталкиваются с неприятным визуальным багом. После изменения формы документа (добавления новых реквизитов, изменения привязок) у части пользователей форма отображается корректно, а у другой части — элементы управления остаются сжатыми, «сбиваются в кучу» в левом верхнем углу, а сама форма отказывается разворачиваться на весь экран. При этом стандартная чистка кэша платформы не приносит долгосрочного результата.

В этой статье мы подробно проанализируем причины возникновения этой проблемы, связанные с особенностями масштабирования операционной системы Windows (DPI) и работой на нескольких мониторах, а также разберем по шагам все возможные способы её окончательного устранения.

---

Почему возникает этот сбой: разбираем физику процесса

Чтобы понять, как решить проблему, давайте выясним её первопричину. Обычные формы в 1С позиционируют свои элементы по жестким координатам (в пикселях). Масштабирование и поведение элементов при изменении размеров окна задается с помощью механизма привязок. Этот механизм крайне чувствителен к системным настройкам экрана.

Выделим три главные причины сжатия формы:

  1. Разработка формы при масштабе экрана отличном от 100%: Если разработчик вносил изменения в форму на мониторе или ноутбуке с масштабированием Windows 125% или 150%, платформа некорректно рассчитывает внутреннюю сетку координат. При сохранении такой формы координаты элементов записываются со смещением. В результате у пользователей со стандартным масштабом 100% форма ломается.
  2. Конфликт разрешений на двух мониторах (ноутбук + монитор): Это самый частый сценарий. Пользователь работает на ноутбуке (где по умолчанию стоит масштаб 125% или 150%) и внешнем мониторе (с масштабом 100%). При переносе окна 1С между экранами или при открытии базы на дополнительном мониторе платформа не успевает динамически пересчитать координаты привязок. Окно растягивается, а элементы внутри него остаются сжатыми.
  3. Зацикливание настроек в кэше пользователя: При закрытии формы 1С автоматически сохраняет её последние геометрические параметры в системные файлы профиля пользователя (например, в файл v8sp.lst). Если форма один раз открылась некорректно из-за сбоя DPI, эти «сломанные» координаты намертво записываются в настройки. Функция «Восстановить положение окна» помогает только до первого закрытия формы, так как при последующем выходе 1С снова перезаписывает кэш некорректными данными.

---

Решение 1. Корректировка формы в Конфигураторе при 96 DPI (100% масштаб)

Это базовое и самое правильное решение, которое должен выполнить разработчик. Нам необходимо пересохранить форму в «чистой» графической среде.

Рассмотрим этот процесс по шагам:

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

Важное примечание: Если привязки формы были серьезно повреждены предыдущими сохранениями в некорректном масштабе, проще всего восстановить форму до типового состояния (путем сравнения и объединения с конфигурацией поставщика), а затем заново аккуратно добавить ваш реквизит, строго соблюдая масштаб разработчика 100%.

---

Решение 2. Настройка совместимости DPI для платформы 1С на компьютерах пользователей

Если у пользователей установлены мониторы с высоким разрешением (например, 4K или FullHD на небольшой диагонали), работать при масштабе 100% им будет некомфортно из-за слишком мелкого текста. В таком случае мы можем заставить операционную систему Windows самостоятельно и корректно масштабировать интерфейс 1С без искажения привязок.

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

  1. Кликните правой кнопкой мыши по ярлыку, через который запускается 1С (или непосредственно по исполняемому файлу 1cv8.exe в папке bin установленной платформы).
  2. Выберите пункт меню «Свойства» и перейдите на вкладку «Совместимость».
  3. Нажмите на кнопку «Изменить параметры высокого DPI» (в старых версиях Windows эта настройка может находиться непосредственно на вкладке).
  4. Установите флажок напротив опции «Переопределите режим масштабирования высокого разрешения».
  5. В выпадающем списке под этой опцией выберите значение «Приложение» (Application). Если этот режим не решит проблему полностью, протестируйте вариант «Система (улучшенная)».
  6. Нажмите «ОК» и примените изменения.

Этот способ заставляет Windows масштабировать окно 1С как единый растровый объект, предотвращая внутренний сбой расчета координат привязок в коде самой платформы.

---

Решение 3. Изменение свойства формы «Состояние окна» в Конфигураторе

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

Давайте изменим это свойство:

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

Свободные окна обрабатываются операционной системой более независимо. Они стабильно сохраняют свои пропорции и корректно разворачиваются на весь экран независимо от того, на каком из мониторов они были открыты.

---

Решение 4. Полный сброс сохраненных настроек отображения формы

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

Выполните следующие действия в режиме «1С:Предприятие»:

  1. Зайдите в базу под учетной записью администратора.
  2. Перейдите в меню Сервис -> Настройки пользователей и прав -> Очистка настроек (в зависимости от интерфейса путь может немного отличаться, также можно использовать обработку «Управление настройками пользователей»).
  3. Выберите проблемного пользователя.
  4. В списке сохраненных настроек найдите настройки окон (они обычно содержат в названии имя формы документа, например, ФормаДокументаПоступлениеТоваровУслуг).
  5. Удалите эти строки настроек.
  6. Дополнительно на компьютере пользователя очистите локальный кэш, удалив папки из каталогов %localappdata%\1C\1Cv8 и %appdata%\1C\1Cv8.

---

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

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

Для этого в модуле формы документа найдите предопределенную процедуру ПриОткрытии и добавьте в ее конец следующий код:


Процедура ПриОткрытии()
    // [Ваш существующий код процедуры]
    
    #Если Клиент Тогда
    Попытка
        // Создаем COM-объект для работы с операционной системой
        Шелл = Новый COMОбъект("WScript.Shell");
        // Отправляем системную комбинацию клавиш Alt + Shift + R (Восстановить положение окна)
        Шелл.SendKeys("%+R");
    Исключение
        // Игнорируем ошибку, если объект не смог создаться в терминальном сеансе
    КонецПопытки;
    #КонецЕсли
КонецПроцедуры

Данный код сработает незаметно для пользователя: в момент открытия документа форма мгновенно сбросит некорректные сохраненные координаты геометрии и примет нормальный, развернутый вид.

---

Резюме и рекомендации

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

← На главную