Как передать реквизит типа ФорматированныйДокумент между формами 1С с сохранением оформления?

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

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

Почему возникает проблема передачи?

Когда мы пытаемся передать ФорматированныйДокумент через ПараметрыФормы, платформа при попытке сериализации значения в клиентском контексте приводит объект к его строковому представлению. В итоге, на принимающей стороне мы получаем не объект с оформлением, а просто строку «ФорматированныйДокумент». Также важно помнить, что метод ПолучитьТекст() в данном случае бесполезен, так как он извлекает только «чистые» символы без информации о жирном шрифте, цветах или стилях.

Способ 1: Использование HTML-представления

Наиболее универсальным и надежным способом передачи форматированного текста является конвертация содержимого в HTML-код. Этот метод позволяет сохранить все стили оформления, так как почтовые клиенты и формы 1С отлично работают с данным форматом.

Шаг 1: Подготовка данных в отправляющей форме

В форме, откуда открывается окно отправки сообщения, необходимо получить строковое представление документа в формате HTML. Сделаем это с помощью метода ПолучитьHTML():


// В обработке перед открытием формы
ТекстВHTML = СопроводительноеПисьмоПриказа.ПолучитьHTML();
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТекстHTML", ТекстВHTML);
ОткрытьФорму("ОбщаяФорма.ОтправкаСообщения", ПараметрыФормы);

Шаг 2: Восстановление данных в принимающей форме

В общей форме ОтправкаСообщения (в событии ПриСозданииНаСервере) мы должны считать переданную строку и загрузить её обратно в объект ФорматированныйДокумент с помощью метода УстановитьHTML():


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("ТекстHTML") Тогда
        ЭтотОбъект.Текст.УстановитьHTML(Параметры.ТекстHTML);
    КонецЕсли;
КонецПроцедуры

Способ 2: Использование временного хранилища

Если содержимое документа слишком объемное или конвертация в HTML по каким-то причинам нежелательна, воспользуемся механизмом ВременноеХранилище. Это позволяет передать объект «как есть».

  1. Помещение во временное хранилище: Используем метод ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификаторФормы). Это создаст адрес, который можно передать в параметры.
  2. Передача адреса: Вместо самого объекта передаем в структуру параметров полученную строку-адрес.
  3. Получение на стороне приемника: В принимающей форме используем метод ПолучитьИзВременногоХранилища(Адрес) для восстановления объекта ФорматированныйДокумент.

Важные рекомендации по работе с объектами

При работе с типом ФорматированныйДокумент стоит учитывать следующие особенности:

Таким образом, мы выяснили, что прямая передача объекта в параметры невозможна из-за ограничений сериализации. Использование ПолучитьHTML() и УстановитьHTML() — это рекомендуемый промышленный стандарт в разработке на 1С для таких задач, обеспечивающий максимальную совместимость и сохранение визуального стиля ваших писем и сообщений.

← На главную