Почему форматированная строка не отображается в табличном документе 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки часто возникает задача выделить в печатной форме или отчете определенный текст цветом, жирностью или другим шрифтом. Для этого в 1С существует удобный объект ФорматированнаяСтрока. Однако можно столкнуться с ситуацией, когда один и тот же код прекрасно работает в одной конфигурации, а в другой на той же версии платформы напрочь отказывается форматировать текст в табличном документе. Разберем, почему так происходит и как это исправить.

Проанализируем типичный случай: разработчик пытается вывести в ячейку табличного документа форматированный текст. В самописной конфигурации все цвета и шрифты применяются, а в типовой (например, "Управление торговлей") — выводится обычный черный текст. При этом платформа везде одинаковая — 8.3.24 или новее.

Рассмотрим тестовый код, который демонстрирует проблему:


&НаСервере
Функция ПечатнаяФормаНаСервере()
	Обработка = РеквизитФормыВЗначение("Объект");
	Макет = Обработка.ПолучитьМакет("Макет"); 
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ОбластьМакетаШапка	= Макет.ПолучитьОбласть("Шапка");	 
	
	// Создаем форматированную строку с использованием стилей конфигурации
	ФормСтрока = Новый ФорматированнаяСтрока(
		"Тест",
		ШрифтыСтиля.ОченьКрупныйШрифтТекста,
		ЦветаСтиля.ЦветОсобогоТекста
	);
	
	ОбластьМакетаШапка.Параметры.ИзмененныйТекст = ФормСтрока;  
	ТабличныйДокумент.Вывести(ОбластьМакетаШапка);
	
	Возврат ТабличныйДокумент;
КонецФункции

Несмотря на кажущуюся простоту, именно здесь и кроется загадка. Давайте разберем по шагам, как найти причину такого поведения.

Этап 1: Анализ первоначальных гипотез

Первая мысль, которая приходит в голову, — в конфигурациях используются разные стили. Вполне логично предположить, что в типовой конфигурации просто нет стиля с именем ОченьКрупныйШрифтТекста или ЦветОсобогоТекста. Это распространенная ситуация при переносе кода между разными базами.

Однако эта гипотеза легко проверяется. Если вывести ту же форматированную строку через системное сообщение, например, с помощью функции Предупреждение(), то форматирование сработает в обеих конфигурациях. Это говорит о том, что стили существуют, и платформа в целом умеет с ними работать. Проблема локализована именно в объекте ТабличныйДокумент.

Вторая гипотеза: может быть, дело в самих стилях, и нужно задать параметры шрифта и цвета вручную, чтобы не зависеть от настроек конфигурации. Попробуем изменить код:


// Задаем параметры форматирования вручную
ОсобыйШрифт = Новый Шрифт(, 10, Истина); // Шрифт по умолчанию, размер 10, жирный
ОсобыйЦвет = Новый Цвет(255, 0, 0); // Красный цвет

ФормСтрока = Новый ФорматированнаяСтрока("Тест", ОсобыйШрифт, ОсобыйЦвет);
ОбластьМакетаШапка.Параметры.ИзмененныйТекст = ФормСтрока;

Если после этого в типовой конфигурации текст по-прежнему выводится без форматирования, значит, проблема глубже и не связана со способами задания оформления. Мы исключили стили и ручные настройки, но результат тот же. Это подводит нас к главной причине.

Этап 2: Ключевой фактор — режим совместимости

Когда одинаковый код на одной и той же версии платформы ведет себя по-разному в разных конфигурациях, следует проверить их ключевое различие — режим совместимости.

Важный момент: возможность выводить объект ФорматированнаяСтрока в ячейку табличного документа появилась только в платформе версии 8.3.24. Это новая функциональность.

Что такое режим совместимости? Это свойство конфигурации, которое "указывает" платформе, как ей себя вести — как новая версия или как одна из предыдущих. Типовые конфигурации часто поставляются с режимом совместимости, установленным на более ранние версии (например, 8.3.17). Это делается для сохранения стабильности и обратной совместимости с кодом, написанным под старые версии платформы. Установка такого режима фактически "отключает" некоторые новые возможности платформы внутри этой конфигурации.

В нашем случае происходит следующее:

  1. Самописная конфигурация: режим совместимости установлен в "Не использовать". Это означает, что платформа работает в своем последнем, "родном" режиме и предоставляет все новые функции, включая отображение ФорматированнаяСтрока в ТабличныйДокумент.
  2. Типовая конфигурация: режим совместимости установлен, например, в "Версия 8.3.17". Платформа 8.3.24, видя эту настройку, эмулирует поведение версии 8.3.17. А в той версии табличный документ не умел работать с форматированными строками, поэтому он просто преобразует объект в обычный текст, игнорируя все настройки шрифта и цвета.

Именно поэтому системная функция Предупреждение() работает корректно везде. Ее поведение в меньшей степени зависит от режима совместимости конфигурации, так как она относится к базовому интерфейсу платформы, а не к объектам конфигурации.

Этап 3: Решение проблемы

Теперь, когда причина ясна, решение становится очевидным. Чтобы включить поддержку форматированных строк в табличном документе, необходимо изменить режим совместимости конфигурации.

Пошаговая инструкция:

  1. Откройте нужную конфигурацию в режиме "Конфигуратор".
  2. Нажмите правой кнопкой мыши на корневой элемент дерева конфигурации (самая верхняя строчка с названием) и выберите "Свойства".
  3. В палитре свойств найдите свойство "Режим совместимости".
  4. Измените его значение на "Не использовать" или на конкретную версию, не ниже 8.3.24.
  5. Сохраните конфигурацию и обновите конфигурацию базы данных (F7).

После этих действий ваш изначальный код заработает, и текст в табличном документе будет отображаться с заданным форматированием.

Важные предостережения

Смена режима совместимости — это серьезный шаг, особенно для типовых конфигураций.

Перед тем как менять эту настройку, нужно четко понимать последствия:

Таким образом, если вы столкнулись с проблемой отображения форматированной строки, первым делом проверьте режим совместимости. Скорее всего, причина именно в нем. Это знание поможет сэкономить время и избежать поиска ошибок там, где их нет.

← На главную