Каждый разработчик 1С рано или поздно сталкивается с ситуацией, когда управляемая форма в режиме конфигуратора выглядит идеально, но при запуске в режиме «1С:Предприятие» превращается в хаотичный набор элементов. Поля ввода непредсказуемо растягиваются на весь экран, заголовки пропадают, а важные реквизиты (например, номер документа или статус) сжимаются до неузнаваемости — вплоть до одной буквы «Н» или «П». При этом простое увеличение формы или попытка развернуть окно на весь экран не приносят желаемого результата.
Давайте подробно разберем, почему возникает такое неадекватное поведение интерфейса, проанализируем скрытые механизмы платформы «1С:Предприятие 8.3» и выработаем пошаговую инструкцию по устранению подобных дефектов верстки.
Начиная с версии платформы 8.3.7, фирма «1С» кардинально переработала механизм размещения элементов на управляемой форме. Рассмотрим, в чем заключается разница:
Если ваша конфигурация запущена на современной платформе (например, 8.3.12 или выше), но в свойствах конфигурации установлен старый режим совместимости (например, 8.2.16), платформа активирует режим эмуляции. Движок пытается наложить новые правила динамической клиентской верстки на устаревшие серверные алгоритмы позиционирования. Из-за этого расчета геометрических параметров часто происходит программный сбой: элементы сжимаются до минимально допустимого размера или полностью исчезают с экрана.
Решение проблемы:
Для исправления этой проблемы на уровне конфигурации необходимо отказаться от устаревшего режима совместимости или поднять его значение как минимум до версии 8.3.10. Это позволит платформе использовать современный адаптивный интерфейс «Такси» и корректно рассчитывать ширину полей ввода.
Исторически формы в 1С проектируются под стандартную плотность экрана 96 DPI (масштаб 100%). Однако на современных мониторах с высоким разрешением (FullHD на небольших ноутбуках, 2K или 4K мониторы) пользователи часто устанавливают системный масштаб Windows 125%, 150% или даже 200%.
В режиме совместимости с устаревшими версиями платформа «1С:Предприятие» не умеет корректно масштабировать контейнеры (группы элементов) вслед за увеличившимся системным шрифтом. Текст внутри поля ввода или заголовка становится физически больше, перестает помещаться в рамки контейнера, и движок верстки принимает решение экстренно сжать соседние элементы, чтобы уместить увеличенный шрифт. В результате поле номера документа превращается в сиротливую букву «Н».
Решение проблемы на стороне операционной системы (без изменения кода):
Если работа ведется в терминальном режиме (через RDP), убедимся, что масштаб экрана на локальном компьютере пользователя и на удаленном сервере совпадает (желательно установить значение 100%).
По умолчанию для управляемых форм и групп включено свойство «Сквозное выравнивание». Движок верстки 1С пытается автоматически выровнять элементы по невидимой вертикальной сетке (колонкам) по всей высоте формы.
Представим ситуацию: в верхней части формы расположена группа с очень широким полем (например, длинное наименование или адрес). В нижней части формы, в этой же вертикальной «виртуальной» колонке, находятся поля «Номер» и «Исполнитель». Платформа автоматически растянет всю колонку под самый широкий элемент формы. В результате соседние реквизиты в горизонтальной группе будут безжалостно сжаты, чтобы освободить место под гигантского «соседа» сверху.
Решение проблемы в конфигураторе:
Ширина и МаксимальнаяШирина (например, для номера документа достаточно ширины 10–12 символов).Платформа 1С запоминает индивидуальные настройки окон и элементов управления, которые пользователь изменял интерактивно (перетаскивал границы колонок, менял размер полей). Эти настройки сохраняются в локальном кэше на компьютере пользователя.
Если разработчик изменил структуру формы в конфигураторе, старые кэшированные настройки пользователя могут наложиться на новую верстку, вызвав визуальные искажения интерфейса у конкретного сотрудника.
Решение проблемы в режиме «1С:Предприятие»:
В некоторых случаях нам может потребоваться динамически управлять размерами элементов формы при ее создании, чтобы гарантировать корректное отображение независимо от настроек пользователя. Рассмотрим пример кода, который решает эту задачу при инициализации формы.
Проанализируем следующий программный код, размещенный в модуле управляемой формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Принудительно устанавливаем свойства для предотвращения сжатия элементов
ЭлементНомер = Элементы.НомерДокумента;
ЭлементНомер.Ширина = 12;
ЭлементНомер.АвтоМаксимальнаяШирина = Ложь;
ЭлементНомер.МаксимальнаяШирина = 15;
// Задаем параметры для поля "Исполнитель", чтобы оно не пропадало
ЭлементИсполнитель = Элементы.Исполнитель;
ЭлементИсполнитель.АвтоМаксимальнаяШирина = Истина;
ЭлементИсполнитель.РастягиватьПоГоризонтали = Истина;
// Отключаем групповое сквозное выравнивание для родительской группы
ГруппаРеквизитовШапки = Элементы.ГруппаРеквизитыШапки;
ГруппаРеквизитовШапки.Объединенная = Ложь;
КонецПроцедуры
Использование свойства АвтоМаксимальнаяШирина = Ложь в сочетании с явным заполнением свойства МаксимальнаяШирина позволяет жестко зафиксировать рамки элемента на форме, не позволяя платформе сжимать его до размеров одной буквы при изменении системного масштаба шрифтов.
Подводя итог, выделим основные правила создания стабильного и масштабируемого интерфейса в «1С:Предприятии 8.3»:
Объединенная у вложенных контейнеров.