При разработке печатных форм, ценников и этикеток часто возникает задача жестко зафиксировать их физический размер (например, строго 100х70 мм под пластиковый держатель). Начинающие разработчики часто сталкиваются с ситуацией, когда при задании размеров строк и колонок ценник на бумаге распечатывается некорректно — размеры «плывут», а область печати вылезает за пределы листа или сжимается. Рассмотрим подробнее особенности работы с физическими размерами в платформе 1С и разберем способы решения этой проблемы.
Выясним, почему стандартное изменение ширины и высоты ячеек в редакторе макета не всегда дает ожидаемый результат в миллиметрах:
ВысотаСтроки задается в типографских пунктах (1 мм равен примерно 2.835 pt), а свойство ШиринаКолонки — в условных символах (зависит от системного шрифта). Попытка ввести в свойства ширины число 100 приведет к установке ширины в 100 символов, а не миллиметров.ТабличныйДокумент по умолчанию включены поля (обычно по 10 мм) и активирован режим АвтоМасштаб = Истина. В этом случае платформа автоматически масштабирует документ, чтобы уместить его на стандартном листе А4, что искажает реальные пропорции ценника.Проанализируем базовый подход к формированию печатной формы с фиксированными параметрами. Нам потребуется обнулить печатные поля, зафиксировать масштаб и явно указать выводимую область печати через свойство ОбластьПечати.
Рассмотрим пример кода для подготовки табличного документа:
// Создаем или получаем табличный документ
ТабДок = Новый ТабличныйДокумент;
// Убираем внешние поля, чтобы печатная область начиналась от края
ТабДок.ПолеСлева = 0;
ТабДок.ПолеСправа = 0;
ТабДок.ПолеСверху = 0;
ТабДок.ПолеСнизу = 0;
// Отключаем автоматическое сжатие и устанавливаем точный масштаб
ТабДок.АвтоМасштаб = Ложь;
ТабДок.МасштабПечати = 100;
// Выводим нужную область из макета
ОбластьМакета = Макет.ПолучитьОбласть("Строка|ШапкаВверх");
ТабДок.Вывести(ОбластьМакета);
// Указываем явную область печати для табличного документа
ТабДок.ОбластьПечати = ТабДок.Область("R1C1:R10C5");
// При необходимости печати на принтере этикеток задаем пользовательский размер страницы в мм
ТабДок.РазмерСтраницы = "Custom";
ТабДок.ШиринаСтраницы = 100; // 100 мм
ТабДок.ВысотаСтраницы = 70; // 70 мм
Если требуется предельная точность до миллиметра, работу с сеткой ячеек можно заменить или дополнить использованием графических рисунков. Объекты коллекции Рисунки табличного документа (тип РисунокТабличногоДокумента) поддерживают прямое позиционирование и задание размеров в миллиметрах.
Для создания рамки ценника точного размера разберем следующий вариант кода:
// Добавляем прямоугольник или рамку в табличный документ
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Прямоугольник);
// Физические размеры задаются напрямую в миллиметрах
Рисунок.Верх = 0;
Рисунок.Лево = 0;
Рисунок.Ширина = 100; // мм
Рисунок.Высота = 70; // мм
Рисунок.Линия = Новый Линия(ТипЛинииТабличногоДокумента.Сплошная, 1);
Если макет создается полностью на ячейках, то подгонку размеров ценника (например, 100x70 мм) можно сделать комбинированным путем:
ВысотаСтроки = 70 * 2.835.
ПолеТаб = ЭлементыФормы.ПолеТабличногоДокумента;
ТекущаяОбласть = ПолеТаб.ТекущаяОбласть;
Для НомерСтроки = ТекущаяОбласть.Верх По ТекущаяОбласть.Низ Цикл
Для НомерКолонки = ТекущаяОбласть.Лево По ТекущаяОбласть.Право Цикл
ИмяЯчейки = "R" + Строка(НомерСтроки) + "C" + Строка(НомерКолонки);
ТекущаяЯчейка = ПолеТаб.Область(ИмяЯчейки);
// Проверяем или меняем свойства ячейки
КонецЦикла;
КонецЦикла;
В большинства типовых конфигурациях 1С (таких как «Управление торговлей», «Розница», «ERP» и «Комплексная автоматизация») встроен специальный механизм работы с ценниками и этикетками. В редакторе шаблонов этикеток размеры ценника (ширина, высота в мм, количество ценников на строке листа А4) настраиваются интерактивно. По возможности рекомендуем использовать этот штатный механизм вместо ручной верстки сетки макета, чтобы избежать проблем с драйверами принтеров.