С выходом платформы 1С:Предприятие 8.3.24 разработчики получили долгожданную возможность: устанавливать тип значения Форматированная строка непосредственно для ячеек макета (текста и шаблонов). Однако на практике многие столкнулись с тем, что заданное в конфигураторе оформление «слетает» при выводе на печать или ведет себя непредсказуемо. Проанализируем причины этой проблемы и разберем по шагам, как заставить этот механизм работать стабильно.
Первое, на что нам необходимо обратить внимание — это режим совместимости вашей базы. Несмотря на то что физически вы можете запустить конфигуратор версии 8.3.24 и выше, функционал форматированных строк в макетах жестко привязан к версии метаданных. Если в свойствах конфигурации установлен режим совместимости ниже 8.3.24, платформа может отображать новые свойства в конфигураторе, но игнорировать их в процессе исполнения (Runtime).
Выясним причину: в старых режимах совместимости движок табличного документа работает по «старым рельсам», где ячейка может содержать только обычную строку или число. Для корректной работы убедимся, что режим совместимости установлен в значение 8.3.24, 8.3.25 или Не использовать. Если переход на новый режим совместимости сейчас невозможен, использование форматированных строк в макете штатными средствами визуального редактора будет недоступно или крайне нестабильно.
Рассмотрим ситуацию, когда в макете ячейка определена как Параметр или Шаблон. Часто разработчики совершают ошибку, используя программное изменение форм и пытаясь передать в такую ячейку обычный текст, ожидая, что она «подхватит» оформление из свойств макета. Проанализируем, почему это не работает.
Если ячейка макета имеет тип ФорматированнаяСтрока, но вы заполняете её программно следующим образом:
Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.ТекстЗаголовка = "Жирный текст из кода"; // Ошибка: форматирование может потеряться
ТабДок.Вывести(Область);
В этом случае платформа заменяет весь объект форматированной строки на обычную строку, и всё визуальное оформление (цвет, шрифт, жирность), заданное в конфигураторе, исчезает. Чтобы сохранить стилизацию, в параметр необходимо передавать именно объект типа ФорматированнаяСтрока.
Посмотрим на пример правильного заполнения:
// Создаем части строки с разным оформлением
МассивЧастей = Новый Массив;
МассивЧастей.Добавить("Обычный текст ");
МассивЧастей.Добавить(Новый ФорматированнаяСтрока("Жирный текст", Новый Шрифт(,,Истина)));
// Формируем итоговый объект
ОбъектФормСтрока = Новый ФорматированнаяСтрока(МассивЧастей);
// Присваиваем параметру области
Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.ТекстЗаголовка = ОбъектФормСтрока;
ТабДок.Вывести(Область);
Только в таком случае вы гарантированно получите нужный результат при выводе печатной формы.
Разберем специфический баг, замеченный в первых релизах ветки 8.3.24. У некоторых разработчиков форматирование работает в старых макетах, но ломается при попытке добавить новые области или при копировании макета. Если вы столкнулись с ситуацией, когда после Ctrl+C / Ctrl+V макет временно «оживает», а затем снова теряет свойства — это признак нестабильности текущей сборки платформы.
Проанализируем ситуацию: в ранних версиях 8.3.24 механизм сериализации табличного документа в метаданных имел дефекты. При сохранении макета свойства форматированной строки могли просто не записываться в XML-структуру конфигурации. Решением здесь является обновление платформы. Как показывает практика, в версиях 8.3.25.1374 и выше большинство этих критических ошибок было исправлено.
Отдельного внимания заслуживает использование гиперссылок в форматированных строках макета. Посмотрим на нюанс, актуальный для версии 8.3.25.1394: иногда при сохранении макета гиперссылка, «зашитая» под текст, превращается в обычный текст.
Если интерактивная настройка в конфигураторе не сохраняется, рассмотрим обходной путь через программную установку гиперссылки. Мы можем обратиться к конкретной ячейке уже выведенного табличного документа:
// Допустим, мы уже вывели область в итоговый табличный документ
ТекущаяЯчейка = ТабДок.Область("R5C2"); // Находим нужную ячейку по координатам
ТекущаяЯчейка.Гиперссылка = Истина;
ТекущаяЯчейка.Текст = "Перейти на сайт";
// Дополнительно можно настроить расшифровку для имитации перехода
ТекущаяЯчейка.ПараметрРасшифровки = "https://example.com";
Также важно помнить: если табличный документ защищен (ТабДок.Защита = Истина), гиперссылки будут работать только в том случае, если у конкретной ячейки снят флаг Только просмотр или разрешено выделение текста.
Выясним причину, по которой форматирование может не отображаться у пользователей, работающих через браузер или на ОС Linux. Форматированная строка в макете 1С опирается на шрифты, установленные в системе. Если на сервере (в случае Linux) не установлены стандартные шрифты (например, пакет ttf-mscorefonts-installer), то при генерации печатной формы на стороне сервера стили (жирность, наклон) могут игнорироваться.
Посмотрим на рекомендации по настройке:
FormattedString в формат XLSX могла приводить к потере стилей внутри ячейки (оставался только чистый текст).Подведем итог и составим план действий для исправления работы форматированных ячеек:
Новый ФорматированнаяСтрока(...), а не простое строковое значение (в отчетах для этого может пригодиться СКДБилдер).Следуя этим правилам, вы сможете полноценно использовать возможности современного оформления печатных форм без необходимости сложной ручной манипуляции с каждой ячейкой в коде.