Как программно установить форматированную строку в ячейку табличного документа

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

С выходом новых версий платформы «1С:Предприятие» (начиная с 8.3.24) у разработчиков появилась долгожданная возможность использовать объект ФорматированнаяСтрока непосредственно в ячейках табличного документа. Чтобы лучше понять возможности этого инструмента, полезно вспомнить, что такое форматированный документ и как он упрощает работу с текстом. Это позволяет создавать сложные текстовые описания, где разные части одного предложения могут иметь разный цвет, шрифт или даже являться гиперссылками, без необходимости разбивать текст по разным ячейкам или использовать сложные обходные пути.

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

Выясним причину: почему форматирование может пропадать

Прежде чем переходить к написанию кода, проанализируем фундаментальное требование для работы данного функционала. Даже если вы используете последнюю версию платформы (например, 8.3.25), механизм форматированных строк в табличном документе не будет работать, если в вашей конфигурации установлен старый Режим совместимости.

Важное правило: для того чтобы свойство Текст объекта ОбластьЯчеекТабличногоДокумента могло принимать и сохранять тип ФорматированнаяСтрока, режим совместимости конфигурации должен быть установлен в значение «8.3.24» или выше (либо «Не использовать»). Если режим совместимости ниже, платформа принудительно преобразует любой объект типа ФорматированнаяСтрока в обычную строку String, удаляя все теги оформления.

Рассмотрим программную установку форматированной строки

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

Проанализируем пример кода, который позволяет сформировать сложную строку и вывести её в конкретную ячейку табличного документа — для этой задачи есть обработка автоматического вывода печатей и подписей:


// Создаем массив для составных частей форматированной строки
ЧастиСтроки = Новый Массив();

// Добавляем обычный текст
ЧастиСтроки.Добавить("Внимание! ");

// Добавляем выделенный текст с использованием шрифта и цвета
ШрифтВыделения = Новый Шрифт(,, Истина); // Жирный шрифт
ЦветВыделения = WebЦвета.Красный;
ВыделенныйТекст = Новый ФорматированнаяСтрока("Это критически важная информация", ШрифтВыделения, ЦветВыделения);

ЧастиСтроки.Добавить(ВыделенныйТекст);
ЧастиСтроки.Добавить(", которую необходимо проверить.");

// Собираем итоговую форматированную строку
ИтоговаяСтрока = Новый ФорматированнаяСтрока(ЧастиСтроки);

// Выводим в табличный документ
ТабДок = Новый ТабличныйДокумент;
Область = ТабДок.Область("R1C1");
Область.Текст = ИтоговаяСтрока;

В данном примере мы используем свойство Текст. Обратите внимание, что до версии 8.3.24 это свойство принимало строго тип Строка. Теперь же оно имеет составной тип. Если вы работаете с макетом, алгоритм будет схожим — для этой задачи есть инструмент визуального редактирования макетов 1С. Подобные методики часто дополняют приемы построения эффективных интерфейсов, позволяя делать отчеты более читаемыми.

Работа с макетами и параметрами

Часто задача усложняется тем, что текст нужно вывести не в пустую ячейку, а в параметр макета. Рассмотрим особенности работы с областями макета:

  1. Если в ячейке макета указано Заполнение: Текст, мы просто обращаемся к ТекущаяОбласть.Текст и присваиваем форматированную строку.
  2. Если в ячейке указано Заполнение: Параметр, то до версии 8.3.27 могли возникать сложности с прямой передачей форматированной строки в параметр. В таких случаях рекомендуется сначала получить область, а затем программно переопределить свойство Текст нужной ячейки.

Посмотрим на пример работы с областью макета:


Макет = ПолучитьМакет("МойМакет");
Область = Макет.ПолучитьОбласть("Заголовок");

// Создаем сложную форматированную строку
ТекстЗаголовка = Новый ФорматированнаяСтрока(
    "Отчет сформирован для: ", 
    Новый ФорматированнаяСтрока("Администратора", Новый Шрифт(,,Истина), WebЦвета.КрасноФиолетовый)
);

// Устанавливаем текст напрямую в ячейку полученной области
Область.ТекущаяОбласть.Текст = ТекстЗаголовка;

ТабДок.Вывести(Область);

Интерактивность и гиперссылки в ячейках

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

Чтобы добавить ссылку, используйте соответствующий конструктор ФорматированнаяСтрока. Например:


СсылкаНаДокумент = "e1cib/data/Документ.РеализацияТоваровУслуг?ref=828300505697394111eb23899981f440";
ТекстСсылкой = Новый ФорматированнаяСтрока("Открыть документ",,,,, СсылкаНаДокумент);
Область.Текст = ТекстСсылкой;

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

  1. Разместите ПолеТабличногоДокумента на управляемой форме.
  2. В свойствах элемента найдите событие ОбработкаНавигационнойСсылки и создайте обработчик на клиенте.
  3. Внутри обработчика проанализируйте параметр НавигационнаяСсылка и выполните нужное действие (открытие формы, переход по URL и т.д.).

Особенности экспорта и ограничения

При использовании нового механизма важно помнить об ограничениях экспорта, которые зависят от формата конечного файла:

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

← На главную