При работе с макетами и табличными документами в 1С:Предприятие разработчики часто сталкиваются с неочевидностью единиц измерения. В отличие от стандартных метрических систем, здесь используются абстрактные величины, такие как «символы» и «пункты». Это создает сложности, когда требуется высокая точность, например, при формировании этикеток, ценников или строгих регламентированных форм. Рассмотрим подробно, как устроена эта система координат и как научиться переводить эти «попугаи» в реальные миллиметры.
Согласно справочной информации и технической документации, ширина колонки в табличном документе 1С задается в символах. Однако важно понимать, что это не просто количество любых знаков. Проанализируем, что именно скрывается за этим определением:
Tahoma или Arial размером 8 или 10 пунктов).Выясним причину, по которой макет может «разъезжаться» на разных компьютерах. Ширина колонок жестко привязана к экранному разрешению (DPI). При стандартном значении 96 DPI одна единица ширины примерно соответствует 8 пикселям. Если у пользователя установлен масштаб 125% или 150%, количество пикселей в одной «единице» пропорционально увеличивается, что может изменить визуальное представление документа.
В отличие от ширины, высота строки измеряется в пунктах (pt). Это стандартная единица измерения в типографии, которая более предсказуема. Напомним основные соотношения:
При настройке высоты строк в конфигураторе или программно мы оперируем именно этими значениями. Если вам нужно установить высоту строки ровно в 1 сантиметр, необходимо выполнить расчет: 10 мм / 0,3528 ≈ 28,34 пункта.
Рассмотрим ситуацию, когда нам нужна аптечная точность (например, для печати на липких этикетках, где отклонение в 1 мм критично). Использовать средние коэффициенты в коде — плохая практика, так как результат будет зависеть от настроек принтера и драйверов. Проанализируем более надежный метод, который применяется в Библиотеке стандартных подсистем (БСП).
Суть метода заключается в использовании специального макета-эталона. Мы создаем в макете графический объект (рисунок) с заранее известным размером в пикселях и программно считываем его размер, который 1С возвращает уже в миллиметрах в зависимости от текущего контекста вывода.
Посмотрим на пример программной реализации получения коэффициента пересчета:
// Получаем макет, в котором заранее создан рисунок (квадрат) размером 100х100 пикселей
Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
// 1С возвращает Высоту рисунка в миллиметрах для текущего устройства вывода
// Делим это значение на количество пикселей (100), чтобы получить вес одного пикселя в мм
КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
// Теперь, зная сколько мм в одном пикселе, мы можем вычислить точную ширину колонки
// с учетом системных коэффициентов пересчета
Этот подход позволяет динамически подстраиваться под любое разрешение экрана или параметры печати конкретного принтера.
Если нам необходимо программно изменить ширину колонки, мы используем свойство ШиринаКолонки. Разберем по шагам, как это работает:
Область.ШиринаКолонки = 15.5;.АвтоМаксимальнаяШирина. Однако помните, что этот метод эффективен только до вывода документа на экран или в файл.ШиринаКолонки и параметры объектов РисунокТабличногоДокумента.Проанализируем ситуацию, когда в макете 1С все выглядит идеально, а после сохранения в PDF или Excel границы «плывут». Это происходит из-за внутренней конвертации единиц 1С в форматы сторонних приложений. Алгоритмы расчета межсимвольных интервалов в 1С и, например, в Adobe PDF различаются на несколько процентов.
Практический совет: При разработке строгих печатных форм (счетов-фактур, накладных, ТОРГ-12) всегда закладывайте небольшой «запас» по ширине колонок (примерно 2-5%). Это гарантирует, что при конвертации текст не будет обрезан или перенесен на следующую строку из-за разницы в округлении единиц измерения.
Подведем итог нашему исследованию:
Ширина колонки: измеряется в условных символах (зависит от шрифта и DPI). 1 единица ≈ 8 пикселей при 96 DPI.
Высота строки: измеряется в пунктах. 1 пункт ≈ 0,35 мм. Это более стабильная величина.
Точный расчет: для получения идеальных размеров в миллиметрах используйте метод «Эталона» из БСП, измеряя физический размер графического объекта с фиксированным пиксельным размером.
Используя эти знания, мы можем создавать макеты любой сложности, которые будут корректно отображаться и печататься вне зависимости от настроек монитора пользователя или модели принтера.