При разработке печатных форм и отчетов в «1С:Предприятии» разработчики часто сталкиваются с жесткими требованиями к оформлению документов. Одним из таких требований может стать использование корпоративного стиля, где точно прописан размер шрифта — например, 10,5 пунктов. Однако при попытке настроить такой размер в макете через палитру свойств Конфигуратора разработчик сталкивается с неприятным ограничением: платформа просто не позволяет ввести запятую или точку в поле размера шрифта.
В этой статье мы подробно разберем, почему возникает это ограничение, и рассмотрим два надежных способа обойти его: программный метод изменения шрифта при выводе отчета и прямое редактирование XML-структуры макета.
Для начала проанализируем ситуацию изнутри. Ограничение на ввод дробных значений в палитре свойств Конфигуратора — это исключительно ограничение интерфейса (маски ввода) самой среды разработки. Разработчики платформы настроили это поле ввода на работу только с целыми числами.
При этом внутренняя объектная модель платформы «1С:Предприятие» и база данных метаданных без проблем поддерживают тип Число с плавающей точкой для хранения размера шрифта. Это означает, что сама платформа умеет отображать, печатать и экспортировать текст с размером шрифта 10.5, нужно лишь правильно передать это значение в обход стандартного интерактивного поля ввода.
Это самый гибкий и «чистый» способ решения проблемы, не требующий выгрузки файлов конфигурации. Мы можем переопределить свойства шрифта непосредственно в момент формирования печатной формы в модуле менеджера или модуле объекта.
Для работы со шрифтами в платформе используется специальный объект Шрифт. Разберем по шагам два сценария его использования.
Если нам не нужно сохранять предыдущие настройки шрифта ячейки (например, курсив или подчеркивание), мы можем инициализировать абсолютно новый шрифт нужного семейства и размера и присвоить его ячейке или области ячеек:
// Получаем область макета, в которой нужно изменить оформление
Макет = ПолучитьМакет("МакетПечати");
Область = Макет.ПолучитьОбласть("Строка");
Ячейка = Область.Область("R1C1");
// Задаем шрифт Arial, дробный размер 10.5, без изменения остальных свойств
Ячейка.Шрифт = Новый Шрифт("Arial", 10.5);
Часто в макете уже настроено сложное форматирование (текст сделан жирным, применен определенный цвет и т.д.). Чтобы не потерять эти настройки, мы можем использовать конструктор нового шрифта на основании уже существующего в ячейке. Для этого передадим текущий шрифт в качестве первого параметра, а новым значением укажем только размер:
// Получаем область макета
Макет = ПолучитьМакет("МакетПечати");
Область = Макет.ПолучитьОбласть("Строка");
Ячейка = Область.Область("R1C2");
// Первым параметром передаем исходный шрифт ячейки, третьим — новый дробный размер
// Остальные свойства (жирность, наклон) унаследуются автоматически
Ячейка.Шрифт = Новый Шрифт(Ячейка.Шрифт, , 10.5);
Этот код сработает безупречно при формировании документа. На печать и экран текст будет выводиться ровно в размере 10.5.
Если вам критически важно, чтобы размер 10.5 был жестко зашит непосредственно в статическом макете внутри Конфигуратора, и вы не хотите писать программный код для постобработки табличного документа, можно отредактировать сам макет «снаружи» через XML. Рассмотрим этот процесс по шагам:
.mxl или описываются в виде XML-структур внутри каталогов отчетов.
<v8ui:font faceName="Arial" height="10" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
height на дробное, используя точку в качестве разделителя:
<v8ui:font faceName="Arial" height="10.5" bold="true" italic="false" underline="false" strikeout="false" kind="Absolute" scale="100"/>
После обратной загрузки платформа корректно считает и сохранит это значение во внутренней структуре метаданных.
При работе с дробными шрифтами следует учитывать несколько важных факторов, связанных с поведением платформы «1С:Предприятие»:
Таким образом, мы рассмотрели все возможные способы реализации дробного шрифта в макетах 1С. Программный метод через создание объекта Новый Шрифт является наиболее предпочтительным, так как он прозрачен для поддержки и не требует манипуляций с файлами выгрузки конфигурации.