Как задать точные ширину и высоту области печати в 1С?

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

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

Причины искажения размеров при печати

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

  1. Разные единицы измерения: В платформах 1С свойство ячейки ВысотаСтроки задается в типографских пунктах (1 мм равен примерно 2.835 pt), а свойство ШиринаКолонки — в условных символах (зависит от системного шрифта). Попытка ввести в свойства ширины число 100 приведет к установке ширины в 100 символов, а не миллиметров.
  2. Параметры печатной страницы по умолчанию: В объекте ТабличныйДокумент по умолчанию включены поля (обычно по 10 мм) и активирован режим АвтоМасштаб = Истина. В этом случае платформа автоматически масштабирует документ, чтобы уместить его на стандартном листе А4, что искажает реальные пропорции ценника.
  3. Ограничения принтеров: Если печать идет на специальный принтер этикеток, важно передавать верные настройки формата бумаги, иначе драйвер принтера применит собственные шаблоны.

Способ 1. Программная настройка параметров страницы и области печати

Проанализируем базовый подход к формированию печатной формы с фиксированными параметрами. Нам потребуется обнулить печатные поля, зафиксировать масштаб и явно указать выводимую область печати через свойство ОбластьПечати.

Рассмотрим пример кода для подготовки табличного документа:


// Создаем или получаем табличный документ
ТабДок = Новый ТабличныйДокумент;

// Убираем внешние поля, чтобы печатная область начиналась от края
ТабДок.ПолеСлева = 0;
ТабДок.ПолеСправа = 0;
ТабДок.ПолеСверху = 0;
ТабДок.ПолеСнизу = 0;

// Отключаем автоматическое сжатие и устанавливаем точный масштаб
ТабДок.АвтоМасштаб = Ложь;
ТабДок.МасштабПечати = 100;

// Выводим нужную область из макета
ОбластьМакета = Макет.ПолучитьОбласть("Строка|ШапкаВверх");
ТабДок.Вывести(ОбластьМакета);

// Указываем явную область печати для табличного документа
ТабДок.ОбластьПечати = ТабДок.Область("R1C1:R10C5");

// При необходимости печати на принтере этикеток задаем пользовательский размер страницы в мм
ТабДок.РазмерСтраницы = "Custom";
ТабДок.ШиринаСтраницы = 100; // 100 мм
ТабДок.ВысотаСтраницы = 70;  // 70 мм

Способ 2. Использование графических рисунков для точных физических размеров

Если требуется предельная точность до миллиметра, работу с сеткой ячеек можно заменить или дополнить использованием графических рисунков. Объекты коллекции Рисунки табличного документа (тип РисунокТабличногоДокумента) поддерживают прямое позиционирование и задание размеров в миллиметрах.

Для создания рамки ценника точного размера разберем следующий вариант кода:


// Добавляем прямоугольник или рамку в табличный документ
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Прямоугольник);

// Физические размеры задаются напрямую в миллиметрах
Рисунок.Верх = 0;
Рисунок.Лево = 0;
Рисунок.Ширина = 100; // мм
Рисунок.Высота = 70;  // мм
Рисунок.Линия = Новый Линия(ТипЛинииТабличногоДокумента.Сплошная, 1);

Способ 3. Пересчет высоты строк и подгонка макета

Если макет создается полностью на ячейках, то подгонку размеров ценника (например, 100x70 мм) можно сделать комбинированным путем:

  1. Для программного вычисления высоты строки переводим миллиметры в пункты. Если целевая высота строки должна быть 70 мм, то в коде задаем: ВысотаСтроки = 70 * 2.835.
  2. В конфигураторе при изменении ширины и высоты выделенных ячеек обратите внимание на всплывающие подсказки и статусную строку платформы — там отображается ориентировочный размер выделения в миллиметрах.
  3. Для анализа выделенной области и проверки параметров ячеек можно применить программный обход строк и колонок выделенной области:

ПолеТаб = ЭлементыФормы.ПолеТабличногоДокумента;
ТекущаяОбласть = ПолеТаб.ТекущаяОбласть;

Для НомерСтроки = ТекущаяОбласть.Верх По ТекущаяОбласть.Низ Цикл
    Для НомерКолонки = ТекущаяОбласть.Лево По ТекущаяОбласть.Право Цикл
        ИмяЯчейки = "R" + Строка(НомерСтроки) + "C" + Строка(НомерКолонки);
        ТекущаяЯчейка = ПолеТаб.Область(ИмяЯчейки);
        // Проверяем или меняем свойства ячейки
    КонецЦикла;
КонецЦикла;

Способ 4. Использование встроенных подсистем печати ценников

В большинства типовых конфигурациях 1С (таких как «Управление торговлей», «Розница», «ERP» и «Комплексная автоматизация») встроен специальный механизм работы с ценниками и этикетками. В редакторе шаблонов этикеток размеры ценника (ширина, высота в мм, количество ценников на строке листа А4) настраиваются интерактивно. По возможности рекомендуем использовать этот штатный механизм вместо ручной верстки сетки макета, чтобы избежать проблем с драйверами принтеров.

← На главную