Рассмотрим частую и довольно неприятную ситуацию, с которой сталкиваются пользователи базовых и типовых конфигураций 1С, таких как Управление Торговлей. Возникает необходимость распечатать ценники или этикетки на обычной самоклеящейся бумаге формата А4, которая уже порезана на определенные прямоугольники (например, популярная бумага Lomond, имеющая 65 этикеток на листе с размером ячейки 38х21,2 мм). Отсутствие специализированного термопринтера вынуждает использовать обычный офисный принтер.
Проблема кроется в том, что в визуальном редакторе макетов 1С минимальный шаг сетки и настройки размера ячейки составляет 1 мм. Невозможность указать десятые доли миллиметра (например, ровно 21,2 мм) приводит к возникновению "накопленной ошибки". Первая этикетка ложится идеально, но начиная со второго и третьего ряда текст неумолимо съезжает за границы наклейки. Разберем по шагам, выясним причину этого явления и проанализируем доступные методы решения.
Выясним причину такого поведения системы. Дело в том, что внутренняя базовая единица измерения в объекте ТабличныйДокумент 1С — это не миллиметры, а типографские пункты (примерно равные 0,35 мм). Интерфейс программы пересчитывает эти пункты в миллиметры для удобства пользователя, однако при использовании мыши и визуальных границ происходит прилипание к целым значениям.
Помимо самого макета, на смещение колоссальное влияние оказывает драйвер офисного принтера. Большинство принтеров имеют так называемую "непечатаемую область" (обычно 4-5 мм по краям листа). Принтер автоматически сжимает макет 1С, чтобы уместить его в доступную зону печати, что искажает наши тщательно выверенные миллиметры. Посмотрим на практические способы преодоления этих ограничений.
Попробуем решить задачу без изменения самого макета ячеек, компенсировав смещение настройками вывода на печать.
ПараметрыСтраницы.Рассмотрим кустарный, но исключительно надежный метод для типовых конфигураций, где у нас нет возможности писать сложный программный код. Если этикетка имеет высоту 21,2 мм, это означает, что каждые 5 этикеток дадут нам ровно 1 лишний миллиметр высоты (0,2 мм * 5 = 1 мм).
Проанализируем ситуацию: мы можем обмануть визуальную сетку. Настроим наш шаблон ценника так, чтобы первые 4 строки в листе имели высоту 21 мм, а каждая пятая строка (именно строка между этикетками, или сама этикетка) имела высоту 22 мм. В сумме блок из пяти этикеток займет ровно 106 миллиметров, что идеально совпадет с физической разметкой листа бумаги Lomond. Данный метод полностью избавляет от накопительной ошибки на листе А4.
Если у вас есть возможность немного доработать внешнюю печатную форму или обработку, применим программный подход. Через код 1С мы можем задавать высоту и ширину не в целых миллиметрах, а в пунктах, что дает потрясающую точность. Посмотрим на пример кода:
// Получаем область ячейки из табличного документа
ОбластьЭтикетки = ТабличныйДокумент.Область("R1C1:R1C2");
// Устанавливаем высоту строки в пунктах (1 пункт ≈ 0.353 мм)
// Для получения 21.2 мм требуется примерно 60.1 пунктов
ОбластьЭтикетки.ВысотаСтроки = 60.1;
Такой подход игнорирует ограничения визуального редактора и заставляет 1С формировать ячейки с точностью до десятых долей миллиметра.
Разберем еще один продвинутый метод работы внутри самой 1С. Ограничение на размеры в 1 мм касается только строк и колонок табличного документа. Однако, если мы используем объект Рисунок (например, рисунок типа Текст или Штрихкод), мы можем настраивать его размеры и положение намного точнее.
Сделайте сетку таблицы немного больше или меньше нужного, а сам ценник (рамку, текст, цену) сгруппируйте и разместите поверх ячеек как рисунок. Настройки свойств графических объектов позволяют задавать координаты и размеры с микронной точностью, и графические элементы не "съезжают" при размножении копий по листу.
Если возможности 1С (особенно базовых версий) полностью исчерпаны, а этикетки нужны срочно, проанализируем варианты обхода через сторонние редакторы.
Резюме: Мы разобрали основные пути решения проблемы со съезжающими этикетками. В большинстве случаев комбинация обнуления полей в меню ПараметрыСтраницы и использование "компенсирующей" строки позволяет идеально вписать макет в фабричную разметку самоклеящейся бумаги, не прибегая к покупке дорогостоящего оборудования.