В каких единицах («попугаях») измеряется ширина колонок в табличном поле 1С и почему она не совпадает с конфигуратором?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Разработка интерфейсов на «обычных формах» 1С:Предприятие 8 часто преподносит сюрпризы, связанные с визуальным отображением элементов. Один из самых частых вопросов начинающих и даже опытных разработчиков: почему ширина колонки, установленная в конфигураторе, в режиме «Предприятие» выглядит совершенно иначе? Рассмотрим ситуацию, когда в конфигураторе задано значение 240, а в пользовательском режиме система показывает 35, при этом заголовки предательски обрезаются, хотя в редакторе форм все выглядело идеально. В этой статье мы подробно разберем природу этих «попугаев» и выясним, как победить непредсказуемое поведение табличного поля.

Разбираемся в единицах измерения: магия «восьмушек»

Для начала проанализируем, в чем именно 1С измеряет ширину. В отличие от веб-разработки, где господствуют пиксели, или верстки документов с их миллиметрами, «обычные формы» используют свою специфическую метрику. Ширина колонки в табличном поле измеряется в 1/8 части среднего символа шрифта, установленного для данной формы. По умолчанию в системе используется шрифт Tahoma или MS Sans Serif размером 8 пунктов.

Давайте проведем несложный расчет, чтобы понять разницу между цифрами в конфигураторе и коде:

  1. Значение в конфигураторе (например, 240) — это те самые «восьмушки».
  2. Если мы разделим 240 на 8, то получим 30.
  3. Число 30 — это количество средних символов, которые должны поместиться в колонку.

Именно поэтому возникает путаница: свойства в палитре конфигуратора оперируют мелкими единицами для более точного позиционирования, а программные методы и некоторые диалоги в режиме «Предприятие» показывают значение в целых символах. Если в режиме «Предприятие» вы видите ширину 35, значит, в конфигураторе ей соответствует значение 280 (35 * 8).

Влияние системного масштабирования (DPI)

Проанализируем еще одну причину, по которой «попугаи» ведут себя нестабильно. Обычные формы проектировались в эпоху, когда стандартным разрешением монитора было 1024x768, а системный масштаб Windows всегда составлял 100%. На современных 4K-мониторах пользователи часто выставляют масштаб 125% или 150%.

В этом случае происходит следующее:

Почему заголовок не помещается в колонку?

Выясним причины, по которым визуальный контроль в конфигураторе нас обманывает. Даже если вы рассчитали ширину правильно, заголовок может обрезаться по нескольким техническим причинам:

  1. Жирный шрифт (Bold): Если для заголовков колонок установлен жирный шрифт, каждый символ занимает больше места. Однако система продолжает рассчитывать ширину по «среднему символу» стандартного начертания.
  2. Пиктограммы и сортировка: Если в колонке включена возможность сортировки, 1С резервирует место под стрелочку (маркер сортировки). Также место отнимают картинки, если используется свойство КартинкиСтрок.
  3. Свойство «Автомасштабирование»: Если у формы включено Автомасштабирование, система будет пытаться «впихнуть» форму в экран, пропорционально сжимая все элементы, включая колонки табличного поля.

Методы решения проблемы

Рассмотрим по шагам, как добиться того, чтобы колонки выглядели именно так, как задумано разработчиком.

Способ 1: Управление изменением размера

Если вам нужно, чтобы колонка всегда имела строго заданную ширину и не «гуляла» при изменении размеров окна, воспользуйтесь свойством ИзменятьРазмер (Resizable). Установите его в значение Ложь в палитре свойств колонки. Это заблокирует автоматическую подстройку ширины этой конкретной колонки. Однако помните, что если все колонки будут фиксированными, при растягивании формы справа у табличного поля может образоваться пустое серое пространство.

Способ 2: Настройка привязок

Проанализируем поведение табличного поля в целом. Если у вашего элемента ТабличноеПоле настроены привязки (горизонтальные — «Лево и Право»), то при растягивании формы оно будет увеличиваться. По умолчанию 1С распределяет добавленное пространство между колонками. Чтобы контролировать этот процесс, можно оставить одну колонку (например, «Наименование») растягиваемой, а для остальных (коды, артикулы, даты) жестко задать ширину и запретить изменение размера.

Способ 3: Программная установка ширины

Иногда настройки в конфигураторе просто недостаточно. В таких случаях мы используем программную установку параметров при открытии формы. Обратите внимание, что в коде ширина задается в «целых символах».

Рассмотрим пример кода в обработчике ПриОткрытии:


Процедура ПриОткрытии()
    // Устанавливаем ширину колонки "Номенклатура" в 40 символов
    ЭлементыФормы.ТабличноеПоле1.Колонки.Номенклатура.Ширина = 40;
    
    // Запрещаем пользователю менять ширину служебной колонки
    ЭлементыФормы.ТабличноеПоле1.Колонки.Статус.ИзменятьРазмер = Ложь;
КонецПроцедуры

Работа с сеткой и визуальным редактором

Посмотрим на полезную функцию конфигуратора, упомянутую опытными разработчиками. В редакторе форм есть кнопка «Проверить форму» (или клавиши Ctrl + R). Она позволяет увидеть форму в режиме эмуляции предприятия. Если заголовок обрезается там — он гарантированно обрежется и у пользователя.

Также разберем работу с сеткой. По умолчанию шаг сетки в конфигураторе помогает выравнивать элементы, но иногда он мешает установить точный размер колонки (граница «перепрыгивает» нужный пиксель). Вы можете:

Резюме

Для того чтобы интерфейс обычных форм был предсказуемым, придерживайтесь следующих правил:

  1. Помните про коэффициент 8: Значение в конфигураторе = Желаемое число символов * 8.
  2. Всегда закладывайте запас в 2-3 символа для заголовков, чтобы учесть возможные маркеры сортировки и особенности шрифтов.
  3. Проверяйте форму через Ctrl + R при разном разрешении экрана.
  4. Используйте сочетание фиксированных колонок и одной «растягиваемой», чтобы табличное поле выглядело аккуратно при любом размере окна.
← На главную