При разработке конфигураций на платформе 1С:Предприятие 8.3 часто возникает задача передачи сложных данных между формами. Одной из наиболее частых проблем является передача реквизита типа ФорматированныйДокумент. Разберем, почему прямая передача через параметры формы не работает и какие существуют эффективные способы решения этой задачи.
Когда мы пытаемся передать ФорматированныйДокумент через ПараметрыФормы, платформа при попытке сериализации значения в клиентском контексте приводит объект к его строковому представлению. В итоге, на принимающей стороне мы получаем не объект с оформлением, а просто строку «ФорматированныйДокумент». Также важно помнить, что метод ПолучитьТекст() в данном случае бесполезен, так как он извлекает только «чистые» символы без информации о жирном шрифте, цветах или стилях.
Наиболее универсальным и надежным способом передачи форматированного текста является конвертация содержимого в HTML-код. Этот метод позволяет сохранить все стили оформления, так как почтовые клиенты и формы 1С отлично работают с данным форматом.
Шаг 1: Подготовка данных в отправляющей форме
В форме, откуда открывается окно отправки сообщения, необходимо получить строковое представление документа в формате HTML. Сделаем это с помощью метода ПолучитьHTML():
// В обработке перед открытием формы
ТекстВHTML = СопроводительноеПисьмоПриказа.ПолучитьHTML();
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТекстHTML", ТекстВHTML);
ОткрытьФорму("ОбщаяФорма.ОтправкаСообщения", ПараметрыФормы);
Шаг 2: Восстановление данных в принимающей форме
В общей форме ОтправкаСообщения (в событии ПриСозданииНаСервере) мы должны считать переданную строку и загрузить её обратно в объект ФорматированныйДокумент с помощью метода УстановитьHTML():
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ТекстHTML") Тогда
ЭтотОбъект.Текст.УстановитьHTML(Параметры.ТекстHTML);
КонецЕсли;
КонецПроцедуры
Если содержимое документа слишком объемное или конвертация в HTML по каким-то причинам нежелательна, воспользуемся механизмом ВременноеХранилище. Это позволяет передать объект «как есть».
ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификаторФормы). Это создаст адрес, который можно передать в параметры.ПолучитьИзВременногоХранилища(Адрес) для восстановления объекта ФорматированныйДокумент.При работе с типом ФорматированныйДокумент стоит учитывать следующие особенности:
ХранилищеЗначения. Сам по себе ФорматированныйДокумент не может быть типом реквизита объекта в базе.ФорматированныйДокумент лучше всего выполнять на сервере, однако учтите, что при отрисовке на клиенте в управляемой форме 1С берет на себя все заботы по отображению структуры, если она была корректно передана через HTML или хранилище.Таким образом, мы выяснили, что прямая передача объекта в параметры невозможна из-за ограничений сериализации. Использование ПолучитьHTML() и УстановитьHTML() — это рекомендуемый промышленный стандарт в разработке на 1С для таких задач, обеспечивающий максимальную совместимость и сохранение визуального стиля ваших писем и сообщений.