Разработка интерфейсов на «обычных формах» 1С:Предприятие 8 часто преподносит сюрпризы, связанные с визуальным отображением элементов. Один из самых частых вопросов начинающих и даже опытных разработчиков: почему ширина колонки, установленная в конфигураторе, в режиме «Предприятие» выглядит совершенно иначе? Рассмотрим ситуацию, когда в конфигураторе задано значение 240, а в пользовательском режиме система показывает 35, при этом заголовки предательски обрезаются, хотя в редакторе форм все выглядело идеально. В этой статье мы подробно разберем природу этих «попугаев» и выясним, как победить непредсказуемое поведение табличного поля.
Для начала проанализируем, в чем именно 1С измеряет ширину. В отличие от веб-разработки, где господствуют пиксели, или верстки документов с их миллиметрами, «обычные формы» используют свою специфическую метрику. Ширина колонки в табличном поле измеряется в 1/8 части среднего символа шрифта, установленного для данной формы. По умолчанию в системе используется шрифт Tahoma или MS Sans Serif размером 8 пунктов.
Давайте проведем несложный расчет, чтобы понять разницу между цифрами в конфигураторе и коде:
240) — это те самые «восьмушки».240 на 8, то получим 30.30 — это количество средних символов, которые должны поместиться в колонку.Именно поэтому возникает путаница: свойства в палитре конфигуратора оперируют мелкими единицами для более точного позиционирования, а программные методы и некоторые диалоги в режиме «Предприятие» показывают значение в целых символах. Если в режиме «Предприятие» вы видите ширину 35, значит, в конфигураторе ей соответствует значение 280 (35 * 8).
Проанализируем еще одну причину, по которой «попугаи» ведут себя нестабильно. Обычные формы проектировались в эпоху, когда стандартным разрешением монитора было 1024x768, а системный масштаб Windows всегда составлял 100%. На современных 4K-мониторах пользователи часто выставляют масштаб 125% или 150%.
В этом случае происходит следующее:
Выясним причины, по которым визуальный контроль в конфигураторе нас обманывает. Даже если вы рассчитали ширину правильно, заголовок может обрезаться по нескольким техническим причинам:
КартинкиСтрок.Автомасштабирование, система будет пытаться «впихнуть» форму в экран, пропорционально сжимая все элементы, включая колонки табличного поля.Рассмотрим по шагам, как добиться того, чтобы колонки выглядели именно так, как задумано разработчиком.
Если вам нужно, чтобы колонка всегда имела строго заданную ширину и не «гуляла» при изменении размеров окна, воспользуйтесь свойством ИзменятьРазмер (Resizable). Установите его в значение Ложь в палитре свойств колонки. Это заблокирует автоматическую подстройку ширины этой конкретной колонки. Однако помните, что если все колонки будут фиксированными, при растягивании формы справа у табличного поля может образоваться пустое серое пространство.
Проанализируем поведение табличного поля в целом. Если у вашего элемента ТабличноеПоле настроены привязки (горизонтальные — «Лево и Право»), то при растягивании формы оно будет увеличиваться. По умолчанию 1С распределяет добавленное пространство между колонками. Чтобы контролировать этот процесс, можно оставить одну колонку (например, «Наименование») растягиваемой, а для остальных (коды, артикулы, даты) жестко задать ширину и запретить изменение размера.
Иногда настройки в конфигураторе просто недостаточно. В таких случаях мы используем программную установку параметров при открытии формы. Обратите внимание, что в коде ширина задается в «целых символах».
Рассмотрим пример кода в обработчике ПриОткрытии:
Процедура ПриОткрытии()
// Устанавливаем ширину колонки "Номенклатура" в 40 символов
ЭлементыФормы.ТабличноеПоле1.Колонки.Номенклатура.Ширина = 40;
// Запрещаем пользователю менять ширину служебной колонки
ЭлементыФормы.ТабличноеПоле1.Колонки.Статус.ИзменятьРазмер = Ложь;
КонецПроцедуры
Посмотрим на полезную функцию конфигуратора, упомянутую опытными разработчиками. В редакторе форм есть кнопка «Проверить форму» (или клавиши Ctrl + R). Она позволяет увидеть форму в режиме эмуляции предприятия. Если заголовок обрезается там — он гарантированно обрежется и у пользователя.
Также разберем работу с сеткой. По умолчанию шаг сетки в конфигураторе помогает выравнивать элементы, но иногда он мешает установить точный размер колонки (граница «перепрыгивает» нужный пиксель). Вы можете:
Для того чтобы интерфейс обычных форм был предсказуемым, придерживайтесь следующих правил:
Ctrl + R при разном разрешении экрана.