Почему не работает форматированная строка в ячейках макета 1С и как это исправить?

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

С выходом платформы 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), то при генерации печатной формы на стороне сервера стили (жирность, наклон) могут игнорироваться.

Посмотрим на рекомендации по настройке:

  1. Убедитесь, что используемые в макете шрифты являются стандартными (это критично, когда выполняется экспорт печатных форм в изображения) и присутствуют на машинах клиентов и сервере приложений.
  2. Для веб-клиента старайтесь не использовать слишком сложные сочетания стилей внутри одной ячейки, так как разные браузеры могут по-разному интерпретировать теги форматирования 1С.
  3. Если вы экспортируете результат в Excel, помните: до последних патчей 8.3.25 трансляция FormattedString в формат XLSX могла приводить к потере стилей внутри ячейки (оставался только чистый текст).

Итоговый алгоритм действий

Подведем итог и составим план действий для исправления работы форматированных ячеек:

  1. Обновите платформу до актуального релиза (не ниже 8.3.25.1374).
  2. Установите режим совместимости конфигурации 8.3.24 или выше.
  3. В макете для ячейки установите Тип значения — Форматированная строка.
  4. Если используется параметр, передавайте в него объект Новый ФорматированнаяСтрока(...), а не простое строковое значение (в отчетах для этого может пригодиться СКДБилдер).
  5. Если оформление все равно «слетает», попробуйте пересоздать область макета «с нуля», избегая копирования из старых объектов.

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

← На главную