Многие технические специалисты, работающие с решениями на базе обычных форм (например, 1С:УПП или 1С:КА 1.1), сталкиваются с неприятным визуальным багом. При открытии документа или обработки окно разворачивается на весь экран, но элементы управления (кнопки, табличные части, поля ввода) остаются «сбитыми» в кучу в левом верхнем углу или не растягиваются вслед за границами формы. Ситуация часто исправляется временным нажатием кнопки «Восстановить положение окна», но при следующем открытии проблема повторяется вновь.
В этой статье мы подробно разберем причины такого поведения платформы 1С и проанализируем методы решения — от простых административных манипуляций до программного исправления логики работы формы.
Обычные формы 1С (ОФ) используют старый графический движок, тесно связанный с библиотеками GDI+ операционной системы Windows. В отличие от современных Управляемых форм (УФ), где интерфейс строится декларативно и адаптивно, в ОФ за растягивание элементов отвечают так называемые «привязки» (anchors). Если привязки настроены некорректно или механизм их расчета сбивается, платформа не может правильно вычислить новые координаты элементов при изменении размера окна.
Проанализируем основные факторы, провоцирующие проблему:
Первое, что мы должны сделать — это очистить не только основной кэш конфигурации, но и настройки отображения окон. Многие забывают, что за положение окон отвечает не только стандартный кэш, но и данные в папке AppData. Рассмотрим процесс по шагам:
%AppData%\1C\1cv8\ (обычно это путь вида C:\Users\ИмяПользователя\AppData\Roaming\1C\1cv8\).wndcfg.xml. Этот файл хранит настройки размеров и положений окон. Удалите его.LocalSettings (или LocalAppData), где хранится временный кэш форм.Важный нюанс: Если удаление кэша помогает только до следующего перезапуска, значит, проблема кроется глубже — в самой конфигурации или параметрах запуска платформы.
Если проблема наблюдается во всех пользователях на конкретном объекте (например, только в «Платежном поручении»), вероятно, объект был сохранен в Конфигураторе на компьютере с нестандартным масштабом экрана. Выясним, как это исправить:
Откройте Конфигуратор на мониторе с установленным масштабом Windows ровно 100%. Найдите проблемную форму, внесите в нее незначительное изменение (например, немного сдвиньте элемент и верните назад) и сохраните объект. После этого обновите конфигурацию базы данных. Это принудительно пересчитает внутренние координаты привязок для стандартного разрешения.
Современные версии платформы 8.3 пытаются задействовать ресурсы видеокарты для отрисовки интерфейса. В случае с Обычными формами это иногда дает обратный эффект. Попробуем запустить 1С с параметром, отключающим этот функционал.
В настройках списка информационных баз, в поле «Дополнительные параметры запуска», впишите следующую команду:
/NoGraphicsHardwareAcceleration
Это заставит 1С использовать программный рендеринг, что часто решает проблему «залипших» элементов при максимизации окна.
Если системный масштаб все же отличается от 100%, мы можем заставить Windows передать управление масштабированием самой программе 1С. Рассмотрим, как это настроить:
C:\Program Files\1cv8\номер_релиза\bin\1cv8.exe).Это решение позволяет избежать ситуации, когда операционная система «растягивает» растровую картинку окна, не уведомляя об этом движок привязок 1С.
Если административные меры не помогают, мы можем прибегнуть к программному решению. Проанализируем ситуацию: иногда форме нужно «помочь» пересчитать свои привязки в момент открытия. Для этого в модуле формы можно использовать свойство СостояниеОкна или принудительно изменять его программно.
В типовых конфигурациях (например, УПП) иногда помогает установка свойства формы «Состояние окна» в значение Свободное вместо Обычное. Однако более надежным методом является небольшой «пинок» графической оболочки через обработчик ожидания.
Рассмотрим пример кода в модуле формы:
Процедура ПриОткрытии()
// Используем обработчик ожидания, чтобы дать форме отрисоваться
ПодключитьОбработчикОжидания("ОбновитьОтображениеПривязок", 0.1, Истина);
КонецПроцедуры
Процедура ОбновитьОтображениеПривязок() Экспорт
Если ЭтаФорма.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное Тогда
// Принудительно обновляем состояние, если оно уже развернуто
ЭтаФорма.ПанельИнструментов.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Такой подход заставляет графический контекст перерисовать элементы формы уже после того, как ОС передала окончательные размеры рабочего стола.
Проблема с «кривыми» окнами в 1С на обычных формах — это комплексный баг, возникающий на стыке старых технологий отрисовки и новых графических стандартов Windows. Для решения проблемы мы рекомендуем придерживаться следующего алгоритма: сначала очистить пользовательский файл wndcfg.xml, затем проверить масштаб экрана разработчика и, в крайнем случае, использовать ключ запуска /NoGraphicsHardwareAcceleration. Если эти действия выполнены, работа с интерфейсом в 1С:УПП снова станет комфортной.