В процессе разработки часто возникает задача выделить в печатной форме или отчете определенный текст цветом, жирностью или другим шрифтом. Для этого в 1С существует удобный объект ФорматированнаяСтрока. Однако можно столкнуться с ситуацией, когда один и тот же код прекрасно работает в одной конфигурации, а в другой на той же версии платформы напрочь отказывается форматировать текст в табличном документе. Разберем, почему так происходит и как это исправить.
Проанализируем типичный случай: разработчик пытается вывести в ячейку табличного документа форматированный текст. В самописной конфигурации все цвета и шрифты применяются, а в типовой (например, "Управление торговлей") — выводится обычный черный текст. При этом платформа везде одинаковая — 8.3.24 или новее.
Рассмотрим тестовый код, который демонстрирует проблему:
&НаСервере
Функция ПечатнаяФормаНаСервере()
Обработка = РеквизитФормыВЗначение("Объект");
Макет = Обработка.ПолучитьМакет("Макет");
ТабличныйДокумент = Новый ТабличныйДокумент;
ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");
// Создаем форматированную строку с использованием стилей конфигурации
ФормСтрока = Новый ФорматированнаяСтрока(
"Тест",
ШрифтыСтиля.ОченьКрупныйШрифтТекста,
ЦветаСтиля.ЦветОсобогоТекста
);
ОбластьМакетаШапка.Параметры.ИзмененныйТекст = ФормСтрока;
ТабличныйДокумент.Вывести(ОбластьМакетаШапка);
Возврат ТабличныйДокумент;
КонецФункции
Несмотря на кажущуюся простоту, именно здесь и кроется загадка. Давайте разберем по шагам, как найти причину такого поведения.
Первая мысль, которая приходит в голову, — в конфигурациях используются разные стили. Вполне логично предположить, что в типовой конфигурации просто нет стиля с именем ОченьКрупныйШрифтТекста или ЦветОсобогоТекста. Это распространенная ситуация при переносе кода между разными базами.
Однако эта гипотеза легко проверяется. Если вывести ту же форматированную строку через системное сообщение, например, с помощью функции Предупреждение(), то форматирование сработает в обеих конфигурациях. Это говорит о том, что стили существуют, и платформа в целом умеет с ними работать. Проблема локализована именно в объекте ТабличныйДокумент.
Вторая гипотеза: может быть, дело в самих стилях, и нужно задать параметры шрифта и цвета вручную, чтобы не зависеть от настроек конфигурации. Попробуем изменить код:
// Задаем параметры форматирования вручную
ОсобыйШрифт = Новый Шрифт(, 10, Истина); // Шрифт по умолчанию, размер 10, жирный
ОсобыйЦвет = Новый Цвет(255, 0, 0); // Красный цвет
ФормСтрока = Новый ФорматированнаяСтрока("Тест", ОсобыйШрифт, ОсобыйЦвет);
ОбластьМакетаШапка.Параметры.ИзмененныйТекст = ФормСтрока;
Если после этого в типовой конфигурации текст по-прежнему выводится без форматирования, значит, проблема глубже и не связана со способами задания оформления. Мы исключили стили и ручные настройки, но результат тот же. Это подводит нас к главной причине.
Когда одинаковый код на одной и той же версии платформы ведет себя по-разному в разных конфигурациях, следует проверить их ключевое различие — режим совместимости.
Важный момент: возможность выводить объект ФорматированнаяСтрока в ячейку табличного документа появилась только в платформе версии 8.3.24. Это новая функциональность.
Что такое режим совместимости? Это свойство конфигурации, которое "указывает" платформе, как ей себя вести — как новая версия или как одна из предыдущих. Типовые конфигурации часто поставляются с режимом совместимости, установленным на более ранние версии (например, 8.3.17). Это делается для сохранения стабильности и обратной совместимости с кодом, написанным под старые версии платформы. Установка такого режима фактически "отключает" некоторые новые возможности платформы внутри этой конфигурации.
В нашем случае происходит следующее:
ФорматированнаяСтрока в ТабличныйДокумент.Именно поэтому системная функция Предупреждение() работает корректно везде. Ее поведение в меньшей степени зависит от режима совместимости конфигурации, так как она относится к базовому интерфейсу платформы, а не к объектам конфигурации.
Теперь, когда причина ясна, решение становится очевидным. Чтобы включить поддержку форматированных строк в табличном документе, необходимо изменить режим совместимости конфигурации.
Пошаговая инструкция:
После этих действий ваш изначальный код заработает, и текст в табличном документе будет отображаться с заданным форматированием.
Смена режима совместимости — это серьезный шаг, особенно для типовых конфигураций.
Перед тем как менять эту настройку, нужно четко понимать последствия:
Таким образом, если вы столкнулись с проблемой отображения форматированной строки, первым делом проверьте режим совместимости. Скорее всего, причина именно в нем. Это знание поможет сэкономить время и избежать поиска ошибок там, где их нет.