Как определить и настроить точный размер макета этикетки в 1С

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

При разработке системы печати этикеток в конфигурациях, где отсутствуют типовые механизмы (например, Библиотека стандартных подсистем или готовые примеры внешних печатных форм), разработчики часто сталкиваются с проблемой: в редакторе макетов 1С отсутствует привычная линейка в миллиметрах или сантиметрах — для этого подойдёт настройка макетов и генерация кодов в пользовательском режиме 1С. Размеры колонок и строк измеряются во внутренних единицах платформы, что затрудняет создание этикетки под конкретный физический размер ленты (например, 58х40 мм или 40х30 мм).

В этой статье мы подробно разберем, как перевести внутренние единицы 1С в миллиметры, рассмотрим профессиональные методы калибровки макетов и выясним, как правильно настроить программный вывод этикетки на печать.

Метод 1: Использование математических коэффициентов пересчета

Рассмотрим первый и самый быстрый способ — расчет размеров через коэффициенты. В системе 1С:Предприятие 8 размеры ячеек определяются следующим образом: ширина колонки измеряется в средних символах шрифта, а высота строки — в пунктах (pt). Экспериментальным путем и на основе документации определены средние значения для стандартного шрифта Arial размером 8 пунктов.

Проанализируем базовые формулы:

  1. Ширина: 1 единица ширины колонки в макете примерно равна 1.875 мм. Чтобы получить ширину этикетки 40 мм, нам нужно 40 разделить на 1.875. Получаем примерно 21.33 единицы.
  2. Высота: 1 пункт (единица высоты строки) равен 0.3528 мм. Для этикетки высотой 30 мм расчет будет следующим: 30 / 0.3528, что дает нам примерно 85 единиц высоты.

Посмотрим на пример установки размеров программно, если вы создаете макет динамически:


// Пример установки размеров для этикетки 40х30 мм
Область = Макет.ПолучитьОбласть("Этикетка");
// Устанавливаем ширину колонки (40 мм / 1.875)
Область.Область(1, 1).ШиринаКолонки = 21.33; 
// Устанавливаем высоту строки (30 мм / 0.3528)
Область.Область(1, 1).ВысотаСтроки = 85; 

Метод 2: Технология «Эталонного квадрата»

Выясним, как сделать макет максимально точным, если коэффициенты дают погрешность из-за настроек конкретного принтера или операционной системы. Этот метод, учитывающий особенности объектной модели печатной формы, считается стандартом при разработке в среде 1С. Суть заключается в создании «калибровочного» макета.

Разберем этот процесс по шагам:

  1. Создадим в конфигураторе новый макет типа «Табличный документ».
  2. Нарисуем в нем квадрат, объединив ячейки, и установим им фиксированные размеры, например, 100 единиц ширины и 100 единиц высоты.
  3. Распечатаем этот макет на целевом принтере этикеток.
  4. Возьмем обычную физическую линейку и измерим полученный квадрат на бумаге.

Если на бумаге 100 единиц ширины превратились в 188 мм, значит, ваш индивидуальный коэффициент для данной системы: 188 / 100 = 1.88 мм за единицу. Используя этот коэффициент и универсальную форму отладки, вы сможете идеально подогнать макет под любую ленту. В типовых конфигурациях часто встречается макет с именем Эталон, который служит именно для этих целей.

Метод 3: Настройка параметров страницы и автомасштабирование

Иногда не обязательно высчитывать размеры до пикселя в самом макете. Современные драйверы принтеров этикеток умеют самостоятельно масштабировать документ, что особенно актуально при печати на мобильных принтерах по bluetooth. Однако, чтобы это работало корректно, мы должны правильно настроить объект ТабличныйДокумент в коде 1С.

Рассмотрим ключевые свойства, которые необходимо установить перед выводом на печать:


ТабДок = Новый ТабличныйДокумент;
// Имя принтера и настройки страницы
ТабДок.ИмяПринтера = "Zebra_GC420t"; // Укажите имя вашего принтера
ТабДок.АвтоМасштаб = Истина; // Позволяет вписать макет в границы этикетки
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;

// Установка полей в 0 — критически важно для термопринтеров!
ТабДок.ПолеСверху = 0;
ТабДок.ПолеСнизу = 0;
ТабДок.ПолеСлева = 0;
ТабДок.ПолеСправа = 0;

// Вывод макета
ТабДок.Вывести(ОбластьЭтикетки);
ТабДок.Напечатать(РежимИспользованияПринтера.ПечатьБезПросмотра);

Важный момент: если вы используете АвтоМасштаб = Истина, 1С попытается растянуть или сжать макет так, чтобы он заполнил всю область печати, заданную в драйвере принтера. Если ваш макет в 1С будет иметь формат листа А4, а печатать вы будете на этикетку 30х20 мм, мелкие элементы (например, текст штрихкода) могут стать нечитаемыми. Поэтому старайтесь максимально приблизить пропорции макета в 1С к реальным пропорциям этикетки.

Метод 4: Работа со штрихкодом внутри макета

Проанализируем ситуацию, когда в макет нужно добавить штрихкод. Поскольку мы работаем в конфигурации без готовых библиотек, у нас есть два пути:

  1. Использование компоненты «1С:Печать штрихкодов»: В макет вставляется объект типа «Рисунок», в свойствах которого выбирается тип Штрихкод — есть готовая обработка для добавления штрихкодов в печатные формы 1С. В этом случае размер штрихкода в миллиметрах будет жестко привязан к размеру этого рисунка в макете.
  2. Векторные шрифты (EAN13, Code39): Если установить в систему специальный шрифт штрихкода, то значение штрихкода можно просто вывести в обычную ячейку, установив для нее этот шрифт — для этого есть расширение для печати штрихкодов GTIN на этикетках. В этом случае размер штрихкода регулируется обычным кеглем (размером шрифта).

Для предотвращения проблем со сканированием, мы рекомендуем при использовании рисунков устанавливать свойство РазмерКартинки в значение Пропорционально или Реальный размер. Избегайте растягивания (Растянуть), так как это может исказить толщину линий штрихкода, и сканер не сможет его распознать.

Практические советы по оформлению

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

Таким образом, даже при отсутствии специализированных инструментов, используя метод эталонного квадрата и правильные коэффициенты пересчета, можно добиться идеальной точности печати этикеток в любой конфигурации 1С.

← На главную