Разработчики, которым приходится поддерживать конфигурации на обычных (неуправляемых) формах (такие как «1С:Управление производственным предприятием» или «1С:Управление торговлей 10.3»), регулярно сталкиваются с проблемами верстки интерфейса. Форма может «схлопываться», упрямо отказываться растягиваться по ширине или высоте, а новые добавленные элементы — перекрывать друг друга при изменении размеров окна пользователем.
В этой статье мы подробно разберем, как локализовать проблемы с геометрией интерфейса, настроить автоматическое масштабирование и исправить типичные ошибки при работе с привязками в Конфигураторе 1С.
Выясним причину, по которой форма может вести себя непредсказуемо при изменении ее размеров. Чаще всего это происходит из-за наличия циклических или взаимно блокирующих связей между границами элементов управления. Для их быстрого обнаружения в платформе предусмотрены специальные встроенные инструменты.
Разберем по шагам процесс быстрой диагностики формы:
Помимо интерактивного теста, мы можем включить постоянный визуальный контроль связей. Для этого перейдем в меню Конфигуратора «Форма» -> «Показать привязки». После этого на макете формы отобразятся цветные стрелки-векторы, указывающие направление зависимостей:
Проанализируем ситуацию, описанную в обсуждении: у автора форма справочника «Номенклатура» зависала на половине экрана из-за рамки группы. Проблема решилась бы без удаления рамки, если бы для нее были правильно выставлены привязки к границам формы (например, правая граница рамки должна быть привязана к правой границе формы со смещением, а не оставаться жестко зафиксированной относительно левого края).
Часто программист настраивает привязки в Конфигураторе абсолютно верно, проверяет форму через Ctrl + R, и всё работает идеально. Однако при запуске в режиме Предприятия у конкретного пользователя форма по-прежнему выглядит «сломанной». Это связано с тем, что платформа 1С сохраняет индивидуальные настройки размеров и положения окон для каждого пользователя локально. Для просмотра и централизованного сброса таких данных можно использовать обработку для управления хранилищем настроек пользователей.
Чтобы сбросить эти настройки и проверить реальную работу интерфейса, выполним следующие действия:
Полезный совет: На этапе активной разработки и тестирования рекомендуется временно отключать свойство формы Сохранять положение окна в палитре свойств Конфигуратора. Это позволит избежать постоянной ручной очистки кэша при каждом изменении верстки.
Чтобы форма выглядела профессионально на мониторах с любым разрешением, важно соблюдать официальные стандарты проектирования интерфейсов 1С:
Элементы, которые НЕ должны менять свои размеры по горизонтали:
Элементы, которые ОБЯЗАТЕЛЬНО должны растягиваться по горизонтали:
Особое внимание уделим правилу вложенности. Это ключевой источник ошибок верстки в обычных формах. Если элемент управления визуально находится внутри рамки группы или расположен на закладке панели, его границы необходимо привязывать к границам этой панели или рамки группы, но ни в коем случае не напрямую к границам самой формы! Если нарушить это правило, то при растягивании формы внутреннее поле ввода «вылезет» за пределы своей группы, визуально сломав структуру интерфейса.
В сложных динамических интерфейсах, где состав полей или их видимость меняются в зависимости от опций, интерактивной настройки в Конфигураторе бывает недостаточно. В таких случаях мы используем программное управление привязками с помощью встроенного языка 1С.
Посмотрим на синтаксис метода УстановитьПривязку(), который доступен у элементов управления обычной формы:
ЭлементУправления.УстановитьПривязку(<Граница>, <Первый элемент>, <Граница первого элемента>, <Второй элемент>, <Граница второго элемента>)
Рассмотрим подробнее параметры этого метода:
ГраницаЭлементаУправления: Лево, Право, Верх, Низ).Неопределено).Разберем по шагам пример программной привязки поля ввода к границам панели, на которой оно расположено. Напишем код, который необходимо размещать строго в процедуре ПриОткрытии(), так как на этапе ПередОткрытием() геометрия формы еще не инициализирована до конца:
Процедура ПриОткрытии()
// Привязываем правую границу поля ввода к правой границе панели-контейнера
ЭлементыФормы.ПолеКомментарий.УстановитьПривязку(
ГраницаЭлементаУправления.Право,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Право
);
// Привязываем нижнюю границу поля ввода к нижней границе панели
ЭлементыФормы.ПолеКомментарий.УстановитьПривязку(
ГраницаЭлементаУправления.Низ,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Низ
);
КонецПроцедуры
Если нам требуется полностью сбросить программно установленные привязки элемента к их дефолтному состоянию, мы можем вызвать метод без параметров:
// Сброс всех привязок для элемента управления
ЭлементыФормы.ПолеКомментарий.УстановитьПривязку();
В интерактивном окне настройки привязок (доступном через свойства элемента «Расположение» -> «Привязка границ» -> «Установить правила») разработчику доступны две вкладки:
Для реализации такой схемы в окне сложных привязок мы задаем настройки через процентное соотношение:
Правильно настроенные привязки гарантируют, что интерфейс вашего прикладного решения будет выглядеть аккуратно, читаемо и профессионально на любых мониторах пользователей.