В платформе 1С:Предприятие 7.7 разработчики часто сталкиваются с досадным ограничением: встроенный редактор таблиц не позволяет установить размер шрифта более 100 пунктов. Если ваша задача — напечатать крупные складские этикетки, логистические указатели или ценники, где требуется шрифт размером 120, 150 или выше, стандартные средства макета могут подвести. Однако существуют проверенные временем методы обхода этого лимита. Проанализируем их подробно.
Это самый простой способ, не требующий установки дополнительных библиотек. Мы можем обмануть принтер, задав меньший шрифт в макете, но увеличив масштаб вывода на печать. Рассмотрим, как это работает на практике.
Допустим, нам нужен шрифт размером 140 пунктов. В макете 1С мы устанавливаем максимально возможный или удобный размер, например, 70 пунктов. Далее, при программном выводе на печать или в параметрах страницы, мы задаем масштаб 200%. Выясним, как настроить это программно:
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Макет");
// Заполняем секции
Таб.ВывестиСекцию("Этикетка");
// Устанавливаем масштаб 200% (второй параметр метода ПараметрыСтраницы)
// Синтаксис: ПараметрыСтраницы(Ориентация, Масштаб, ФлагЧБ, Поля...)
Таб.ПараметрыСтраницы(1, 200, 0, 5, 5, 5, 5, 0, 0);
Таб.Показать();
Важный нюанс: при увеличении масштаба все элементы макета (рамки, отступы, картинки) увеличатся пропорционально. Поэтому макет следует рисовать "в миниатюре", заранее рассчитывая, как он растянется на лист А4 или ленту принтера этикеток. Если текст начинает "вылетать" за границы ячеек, в свойствах ячейки следует выбрать опцию "Забивать" или "Авто" вместо "Переносить".
Если клиенты настаивают на использовании Word, возникает вопрос: как вывести 100 этикеток в один файл, а не открывать 100 отдельных окон? Для этого мы будем использовать COM-соединение и программное управление объектами Word. Разберем по шагам алгоритм создания единого документа.
Основная идея заключается в том, чтобы создать один объект Word.Application, открыть в нем документ и в цикле добавлять данные, вставляя разрыв страницы после каждой этикетки. Посмотрим на пример кода:
Попытка
Ворд = СоздатьОбъект("Word.Application");
Исключение
Предупреждение("Microsoft Word не установлен!");
Возврат;
КонецПопытки;
Док = Ворд.Documents.Add(); // Создаем новый пустой документ
Выборка = СоздатьОбъект("Справочник.Номенклатура");
// Допустим, мы печатаем товары из определенной группы
Выборка.ВыбратьЭлементы();
Пока Выборка.ПолучитьЭлемент() = 1 Цикл
// Работаем с текущей позицией курсора (Selection)
Селекшн = Ворд.Selection;
// Устанавливаем параметры шрифта (здесь ограничений в 100 нет!)
Селекшн.Font.Size = 120;
Селекшн.Font.Bold = 1;
Селекшн.TypeText(Выборка.Наименование);
// Вставляем разрыв страницы (константа wdPageBreak = 7)
// Чтобы этикетки не слипались
Селекшн.InsertBreak(7);
КонецЦикла;
Ворд.Visible = 1; // Показываем результат пользователю
Использование метода InsertBreak(7) позволяет объединить все данные в одном файле. Пользователю останется только нажать кнопку "Печать" один раз для всего пакета документов.
Для профессиональной работы с табличными документами в 1С 7.7 рекомендуется использовать библиотеку Yoksel. Это мощный движок, который заменяет стандартный просмотрщик таблиц 1С и снимает практически все его ограничения, включая размер шрифта.
Проанализируем преимущества этого подхода:
Шрифт.Размер = 120, и Yoksel корректно это отобразит.Пример работы с Yoksel (после регистрации компоненты yoksel.dll):
// Создаем объект табличного документа Yoksel
ТабДок = СоздатьОбъект("ТабличныйДокумент");
// Загружаем макет или заполняем ячейки
Ячейка = ТабДок.Область(1, 1);
Ячейка.Текст = "КРУПНЫЙ ТЕКСТ";
// Устанавливаем размер шрифта напрямую
Ячейка.Шрифт.Размер = 120;
// Показываем в фирменном просмотре
ТабДок.Показать();
Часто проблема не в том, чтобы поставить 120-й шрифт, а в том, чтобы текст гарантированно влез в этикетку. Если наименования товаров имеют разную длину, фиксированный шрифт 120 может обрезать длинные названия. Мы можем реализовать алгоритм "автомасштабирования".
Для этого в цикле проверяется ширина текста, и, если она превышает ширину области, размер шрифта уменьшается. В 1С 7.7 это можно реализовать через проверку количества символов или с использованием метода ШиринаТаблицы(). Рассмотрим логику:
// Примерная логика подбора
Размер = 120;
МаксСимволов = 15; // Эмпирически определенный предел для 120 шрифта
ДлинаНазвания = СтрДлина(НаименованиеТовара);
Если ДлинаНазвания > МаксСимволов Тогда
// Пропорционально уменьшаем шрифт
Размер = Цел(Размер * (МаксСимволов / ДлинаНазвания));
// Ограничим снизу, чтобы не было слишком мелко
Если Размер < 20 Тогда Размер = 20; КонецЕсли;
КонецЕсли;
Если штатные шрифты все же не подходят, можно использовать вставку объектов Microsoft WordArt через OLE. Объекты WordArt внутри таблицы 1С воспринимаются как картинки. Вы можете растягивать их за "ручки" управления в макете до любого размера, и текст внутри будет масштабироваться автоматически, сохраняя высокую четкость при печати.
Для этого в макете выберите меню "Вставить объект" -> "Объект Microsoft WordArt". После создания объекта вы сможете программно обращаться к нему, если это необходимо, хотя чаще такие объекты используются в статических макетах, где меняется только масштаб всей страницы.
Выяснив все технические возможности, подведем итог:
InsertBreak(7).Используя эти методы, вы сможете победить ограничения 1С 7.7 и обеспечить склад качественными и читабельными этикетками любого размера.