Какой элемент управления использовать в 1С для создания редактора текста и изображений?

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

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

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

Решение 1: Элемент "Форматированный документ"

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

Как это работает?

Элемент ФорматированныйДокумент позволяет пользователю редактировать текст, применяя к нему стили (жирный, курсив, подчеркнутый), создавать списки, выравнивать абзацы и, что самое важное, вставлять картинки прямо в текст. Изображения при этом кодируются в формат Base64 и становятся частью HTML-представления документа.

Разберем по шагам реализацию:

  1. Создайте в нужном объекте (например, в справочнике «Статьи») реквизит для хранения данных, например, СтатьяHTML с типом «ХранилищеЗначения» или «Строка» неограниченной длины. ХранилищеЗначения предпочтительнее для больших объемов данных.
  2. В форме объекта добавьте новый реквизит формы (не реквизит объекта!) с типом ФорматированныйДокумент. Назовем его, например, РедакторСтатьи.
  3. Перетащите этот реквизит на форму. Платформа автоматически создаст поле вида «Поле форматированного документа».
  4. Теперь нужно связать наше поле на форме с реквизитом объекта для сохранения данных. Это делается программно.

Посмотрим на пример кода для загрузки и сохранения данных:

Для загрузки данных из базы в редактор при открытии формы используем обработчик ПриСозданииНаСервере.


Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Проверяем, что это не новая запись и данные есть
    Если НЕ Объект.ЭтоНовый() И ЗначениеЗаполнено(Объект.СтатьяHTML) Тогда
        // Получаем HTML-строку из хранилища
        HTMLПредставление = Объект.СтатьяHTML.Получить();
        
        Если HTMLПредставление <> Неопределено Тогда
            // Загружаем HTML в наш реквизит формы
            ЭтаФорма.РедакторСтатьи.УстановитьHTML(HTMLПредставление);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Для сохранения данных из редактора в базу данных используем обработчик ПередЗаписьюНаСервере.


Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    // Получаем содержимое редактора в виде HTML-строки
    HTMLПредставление = ЭтаФорма.РедакторСтатьи.ПолучитьHTML();
    
    // Помещаем полученную строку в хранилище значения
    ТекущийОбъект.СтатьяHTML = Новый ХранилищеЗначения(HTMLПредставление);
КонецПроцедуры

Итог: Этот метод является золотым стандартом для данной задачи в современных конфигурациях. Он прост в настройке, не требует внешних компонент и отлично работает как в толстом, так и в тонком клиенте.

Решение 2: Элемент "Поле HTML-документа"

Это еще один хороший вариант, который был популярен до появления ФорматированногоДокумента. Он также позволяет отображать и редактировать HTML-содержимое.

Ключевые особенности:

В отличие от ФорматированногоДокумента, работа с получением и установкой HTML может быть менее очевидной. Чаще всего поле HTML-документа привязывают напрямую к реквизиту формы с типом «Строка», и платформа сама заботится о передаче данных. Но для надежности и контроля лучше использовать программные методы.

Этот способ все еще актуален, но если вы начинаете разработку с нуля на современной платформе, ФорматированныйДокумент будет более удобным выбором.

Решение 3: Элемент "Поле табличного документа"

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

Как было отмечено в обсуждении, при попытке использовать этот элемент возникает проблема с сохранением. Данные из него не сохраняются автоматически, даже если поле связано с реквизитом. Решение — ручное сохранение в ХранилищеЗначения.

Разберем по шагам:

  1. Добавьте в объект реквизит для хранения, например, ДанныеТаблицы с типом ХранилищеЗначения.
  2. В форме создайте реквизит формы ТабличныйДокумент с типом ТабличныйДокумент и разместите его на форме.
  3. В свойствах поля на форме уберите флаг «ТолькоПросмотр», чтобы разрешить редактирование.

Пример кода для загрузки и сохранения:

Загрузка данных при открытии формы:


Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если НЕ Объект.ЭтоНовый() И ТипЗнч(Объект.ДанныеТаблицы) = Тип("ХранилищеЗначения") Тогда
        ПолученныйТабДок = Объект.ДанныеТаблицы.Получить();
        Если ПолученныйТабДок <> Неопределено Тогда
            // Копируем содержимое в наш реквизит формы
            // Прямое присваивание может не сработать, копирование надежнее
            ОбластьТабДок = ПолученныйТабДок.ПолучитьОбласть("R1C1:" + "R" + ПолученныйТабДок.ВысотаТаблицы + "C" + ПолученныйТабДок.ШиринаТаблицы);
            ЭтаФорма.ТабличныйДокумент.ВставитьОбласть(ОбластьТабДок, ЭтаФорма.ТабличныйДокумент.Область("R1C1"));
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Сохранение данных перед записью объекта:


Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    // Помещаем объект табличного документа из реквизита формы в хранилище
    ТекущийОбъект.ДанныеТаблицы = Новый ХранилищеЗначения(ЭтаФорма.ТабличныйДокумент);
КонецПроцедуры

Итог: Этот метод стоит использовать, только если вам нужна строгая табличная структура. Для создания статей он неудобен.

Решение 4: Использование ActiveX "Word.Application"

Это самый мощный, но и самый проблемный метод. Он заключается во встраивании полноценного редактора Microsoft Word прямо в форму 1С.

Преимущества:

Недостатки:

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

Общая рекомендация

Для создания базы знаний или любого другого функционала, где требуется редактирование форматированного текста с картинками, однозначно выбирайте ФорматированныйДокумент. Это современный, поддерживаемый платформой и наиболее простой в реализации способ, который покрывает 99% всех потребностей в этой области.

← На главную