При работе в среде 1С:Предприятие 8.3 на обычных формах пользователи нередко сталкиваются с досадной проблемой: окно конкретного документа (например, НакладнаяНаСборку или любого другого) открывается в сильно уменьшенном виде — занимает треть экрана или вовсе сворачивается в крошечный прямоугольник. При этом у других сотрудников всё отображается корректно. Обычные попытки растянуть форму или стандартная команда "Восстановить положение окна" помогают лишь временно: при следующем запуске базы или открытии этого же документа окно снова "схлопывается".
В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем ситуацию с технической точки зрения и рассмотрим все возможные методы решения проблемы — от простых пользовательских настроек до программных доработок в Конфигураторе.
В основе этого бага лежит механизм платформы 1С по сохранению персональных настроек отображения. Когда пользователь закрывает форму, система пытается записать её последние геометрические координаты (высоту, ширину, положение на экране) в локальный кэш на компьютере. Однако в этот процесс часто вмешиваются внешние факторы:
Рассмотрим подробнее по шагам, как исправить эту проблему разными способами в зависимости от вашего уровня прав доступа к системе.
---
Если у вас нет доступа к Конфигуратору, решить проблему можно локально на компьютере конкретного пользователя.
Шаг 1. Настройка масштабирования высокого разрешения (DPI) в Windows
Поскольку некорректный масштаб экрана Windows является наиболее частой причиной сжатия окон, отрегулируем параметры совместимости пускового файла 1С:
Шаг 2. Очистка кэша настроек пользователя
Самый быстрый способ сбросить "залипшие" некорректные координаты для базы данных — удалить её из списка запуска и прописать заново. При этом 1С автоматически создаст новый каталог для хранения локальных настроек. Если этот способ не сработал, произведем очистку вручную:
%userprofile%\AppData\Local\1C\1Cv8%userprofile%\AppData\Roaming\1C\1Cv8Шаг 3. Очистка сохраненных настроек внутри информационной базы
В некоторых конфигурациях настройки отображения форм записываются непосредственно в базу данных в специальный регистр сведений. Чтобы очистить их:
НакладнаяНаСборку) и удалите эту запись.---
Если вы являетесь администратором или программистом 1С и имеете доступ к изменению метаданных конфигурации, проблему можно решить раз и навсегда для всех пользователей программным путем.
Метод 1. Проверка интерактивных привязок элементов формы
Давайте проверим форму документа на предмет внутренних конфликтов привязок, которые при изменении разрешения экрана могут сжимать форму до минимальных размеров:
Метод 2. Изменение свойств отображения окна формы
Иногда обмануть баг платформы помогает изменение базовых свойств отображения самой формы:
Обычное.Метод 3. Программный сброс параметров сохранения геометрии
Чтобы платформа не пыталась считывать старые "битые" координаты окна из кэша, мы можем принудительно запретить сохранение положения окна для этой конкретной формы либо сделать его уникальным при каждом открытии.
Для этого в модуле формы документа в обработчике события ПередОткрытием() или ПриОткрытии() проанализируем и изменим свойство формы ИмяСохраненияПоложенияОкна:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Очищаем имя сохранения, чтобы система каждый раз открывала форму в стандартном виде
ЭтаФорма.ИмяСохраненияПоложенияОкна = "";
КонецПроцедуры
Если очистка имени сохранения не помогает, мы можем принудительно заставить форму открываться в максимизированном состоянии (на весь экран):
Процедура ПриОткрытии()
// Принудительно разворачиваем окно формы на весь экран
ЭтаФорма.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;
КонецПроцедуры
Метод 4. Автоматическое восстановление положения окна через эмуляцию нажатия клавиш
Существует также нестандартный, но крайне эффективный "костыль", который используют разработчики для борьбы с залипанием окон на уровне операционной системы. Метод имитирует нажатие комбинации клавиш Alt + Shift + R (стандартное сочетание в 1С для восстановления положения текущего окна) с помощью COM-объекта Windows Script Host:
Процедура ПриОткрытии()
Попытка
// Создаем COM-объект для работы с системными командами Windows
Шелл = Новый COMОбъект("WScript.Shell");
// Имитируем нажатие горячих клавиш Alt + Shift + R
Шелл.SendKeys("%+R");
Исключение
// Игнорируем ошибку, если у пользователя заблокирован запуск скриптов WScript
КонецПопытки;
КонецПроцедуры
Проанализировав все указанные методы, мы видим, что наиболее надежным и быстрым решением без вмешательства в код конфигурации является настройка параметров DPI ярлыка 1С совместно с очисткой папок кэша пользователя. Если же проблема носит массовый характер, то разработчику рекомендуется применить программный сброс свойства ИмяСохраненияПоложенияОкна непосредственно в Конфигураторе.