Решил поделиться решением.
Задача: есть форматированный документ его необходимо вывести в табличный документ.
Процедуры не полностью универсальные, содержат ряд условностей, но для начала, как пища для размышлений, подойдет.
Проблемы которые пока не получилось сделать лучше:
1.Нумерованный список в нумерованном списке в нумер.... и т.д..
2.Маркированный список в маркированном списке в марки... и т.д..
3.После применения форматирования оригинальная область приходит в негодность и ее надо восстановить для дальнейшего использования
4. Выделение цветного текста происходит по последнему условному оформлению "параграфа" (беда 1с, что в табличном документе в рамках одной ячейки нельзя устанавливать разное оформление: шрифт, цвет и т.д..)
Если есть подсказки, идеи, фиксы ошибок: готов выслушать.
Кстати, тема очень актуальная, т.к. объект "Форматированный документ" - очень перспективен, но загвоздка в том, что вывести и полноценно распечатать его является проблемой, что очень сильно ограничивает область применения.
// Описание
// Устанавливает свойства ячеек области в зависимости от элемента форматированного документа
// Параметры
// Область - ОбластьЯчеекТабличногоДокумента - область которую следует изменить
// ЭлементФорматированногоДокумента - ТекстФорматированногоДокумента - элемент по которому следует изменить область
Процедура УстановитьУсловноеФорматированиеОбласти(Область,ЭлементФорматированногоДокумента) Экспорт
Если НЕ ТипЗнч(ЭлементФорматированногоДокумента) = Тип("ТекстФорматированногоДокумента") Тогда
Возврат
КонецЕсли;
ЗаполнитьЗначенияСвойств(Область.Области[0],ЭлементФорматированногоДокумента,,"Текст");
Если ЗначениеЗаполнено(ЭлементФорматированногоДокумента.НавигационнаяСсылка) Тогда
Область.Области[0].Гиперссылка = Истина;
Область.Области[0].ЦветТекста = WebЦвета.СинеСерый;
Область.Области[0].Шрифт = Новый Шрифт(,,,,Истина);
КонецЕсли;
КонецПроцедуры //установитьУсловноеФорматированиеОбласти
// Описание
// Добавляет в табличный документ оббласть с форматированным текстом (переносит форматирование на ячейку области)
// Параметры
// ТабличныйДокумент - ТабличныйДокумент - Табличный документ в который следует вставить область
// Область - ОбластьЯчеекТабличногоДокумента - область которую следует изменить
// ЭлементФорматированногоДокумента - ТекстФорматированногоДокумента - элемент по которому следует изменить область
Процедура ВывестиФорматированныйТекстВТабличныйДокумент(ТабличныйДокумент,Область,ЭлементФорматированногоДокумента) Экспорт
УстановитьУсловноеФорматированиеОбласти(Область,ЭлементФорматированногоДокумента);
ТабличныйДокумент.Вывести(Область);
// к сожалению, после применения форматирования оригинальная область приходит в негодность
// и ее надо восстановить для дальнейшего использования
// //ЗаполнитьЗначенияСвойств(Область.Области[0],ОбластьТекстПоУмолчанию.Области[0],,"Текст,Шрифт,Заполнение,");
//
// Область.Области[0].Шрифт = Новый Шрифт;
// Область.Области[0].ЦветРамки = Новый Цвет;
// Область.Области[0].ЦветТекста = Новый Цвет;
// Область.Области[0].ЦветУзора = Новый Цвет;
// Область.Области[0].ЦветФона = Новый Цвет;
//
КонецПроцедуры //ВывестиФорматированныйТекстВТабличныйДокумент
// Описание
// Выводит в табличный документ форматированный документ
// Параметры
// Макет - Макет - Макет
// ОписаниеФорматированныйДокумент - ФорматированныйДокумент - форматированный документ который следует вывести
// ТабличныйДокумент - ТабличныйДокумент - Табличный документ в который следует вывести форматированный документ
Процедура ВывестиФорматиованныйДокументВТабличныйДокумент(Макет,ОписаниеФорматированныйДокумент,ТабличныйДокумент,ТолькоТекстКлиента,
ИмяОбластиОписание = "ОбластьОписание",ИмяОбластиКартинка = "ОбластьОписаниеКартинка") Экспорт
РазмерПикселя = 0.264583333333334;//размер пикселя в миллиметрах, кто бы знал!
ОбластьТекст = Макет.ПолучитьОбласть(ИмяОбластиОписание);
ОбластьКартинка = Макет.ПолучитьОбласть(ИмяОбластиКартинка);
ДокументПолучатель = Новый ФорматированныйДокумент;
НомерцияПараграфа = 0;
Для Каждого Параграф Из ОписаниеФорматированныйДокумент.Элементы Цикл
ЭтоМаркСписок = Параграф.ТипПараграфа = ТипПараграфа.МаркированныйСписок;
ЭтоНумСписок = Параграф.ТипПараграфа = ТипПараграфа.НумерованныйСписок;
ЭтоОбычныйСписок = Параграф.ТипПараграфа = ТипПараграфа.Обычный;
ПриставкаПараграфа = "";
Если ЭтоМаркСписок Тогда
ПриставкаПараграфа = " • ";
НомерцияПараграфа = 0;
ИначеЕсли ЭтоНумСписок Тогда
НомерцияПараграфа = НомерцияПараграфа + 1;
Иначе
НомерцияПараграфа = 0;
КонецЕсли;
//Накапливаем текст / данные
ТекущийТипПараграфа = Неопределено;
Описание = ПриставкаПараграфа;
ЭлементПараграфаДляОформленияОбласти = Неопределено;
Для Каждого ЭлементПараграфа Из Параграф.Элементы Цикл
ТекущийТипПараграфа = ?(ТекущийТипПараграфа = Неопределено,Тип(ЭлементПараграфа),ТекущийТипПараграфа);
Если Тип(ЭлементПараграфа) = Тип("ТекстФорматированногоДокумента") Тогда
Если ЭтоНумСписок Тогда
ПриставкаПараграфа = Лев(" " + Формат(НомерцияПараграфа,"ЧЦ=3; ЧДЦ=") + ". ",4);//ограничем 99
Описание = ПриставкаПараграфа + Описание + ЭлементПараграфа.Текст;
Иначе
Описание = Описание + ЭлементПараграфа.Текст;
КонецЕсли;
ЭлементПараграфаДляОформленияОбласти = ЭлементПараграфа;
ТекущийТипПараграфа = Тип("ТекстФорматированногоДокумента");
ИначеЕсли Тип(ЭлементПараграфа) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда
Если ТекущийТипПараграфа = Тип("ТекстФорматированногоДокумента") Тогда
ТекущийТипПараграфа = Тип("ПереводСтрокиФорматированногоДокумента");
Если ТолькоТекстКлиента Тогда
ШаблоныЗаполнения.ВернутьШаблонБезТегов(Описание);
КонецЕсли;
ОбластьТекст.Параметры.Описание = Описание;
ВывестиФорматированныйТекстВТабличныйДокумент(ТабличныйДокумент,ОбластьТекст,ЭлементПараграфаДляОформленияОбласти);
ОбластьТекст = Макет.ПолучитьОбласть("ОбластьОписание");
Описание = ПриставкаПараграфа;
КонецЕсли;
ОбластьТекст.Параметры.Описание = "";
ТабличныйДокумент.Вывести(ОбластьТекст);
ИначеЕсли Тип(ЭлементПараграфа) = Тип("КартинкаФорматированногоДокумента") Тогда
Если ТекущийТипПараграфа = Тип("ТекстФорматированногоДокумента") Тогда
ТекущийТипПараграфа = Тип("КартинкаФорматированногоДокумента");
ОбластьТекст.Параметры.Описание = Описание;
ТабличныйДокумент.Вывести(ОбластьТекст);
Описание = ПриставкаПараграфа;
КонецЕсли;
СтрокаURL = ЭлементПараграфа.Картинка;
//Преобразовываем в полноценный base64
ИмяHeader = "base64,";
НомерСимволаКонца = СтрНайти(СтрокаURL,ИмяHeader) + СтрДлина(ИмяHeader) - 1;
ДлинаСтроки = СтрДлина(СтрокаURL);
СтрокаBase64 = Прав(СтрокаURL,ДлинаСтроки - НомерСимволаКонца);
ДанныеКартинки = Base64Значение(СтрокаBase64);
//Определим тип файла / картинки
ТипФайла = Сред(СтрокаURL,СтрНайти(СтрокаURL,";") -3,3);
ПутьКВременномуФайлу = ПолучитьИмяВременногоФайла(ТипФайла);
ДанныеКартинки.Записать(ПутьКВременномуФайлу);
Картинка = Новый Картинка(ПутьКВременномуФайлу);
//Динамический вывод картинки в табличный документ
КартинкаПечатьОрганизации = ОбластьКартинка.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
КартинкаПечатьОрганизации.Картинка = Картинка;
КартинкаПечатьОрганизации.Верх = 0;
КартинкаПечатьОрганизации.Высота = ЭлементПараграфа.Высота * РазмерПикселя;
КартинкаПечатьОрганизации.Ширина = ЭлементПараграфа.Ширина * РазмерПикселя;
КартинкаПечатьОрганизации.Лево = 25;
КартинкаПечатьОрганизации.ГраницаСверху = Ложь;
КартинкаПечатьОрганизации.ГраницаСлева = Ложь;
КартинкаПечатьОрганизации.ГраницаСправа = Ложь;
КартинкаПечатьОрганизации.ГраницаСнизу = Ложь;
КартинкаПечатьОрганизации.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
ТабличныйДокумент.Вывести(ОбластьКартинка);
КонецЕсли;
КонецЦикла;
Если НЕ Описание = ПриставкаПараграфа Тогда
Если ТолькоТекстКлиента Тогда
ШаблоныЗаполнения.ВернутьШаблонБезТегов(Описание);
КонецЕсли;
ОбластьТекст.Параметры.Описание = Описание;
ВывестиФорматированныйТекстВТабличныйДокумент(ТабличныйДокумент,ОбластьТекст,ЭлементПараграфаДляОформленияОбласти);
ОбластьТекст = Макет.ПолучитьОбласть("ОбластьОписание");
Описание = ПриставкаПараграфа;
КонецЕсли;
КонецЦикла;
КонецПроцедуры //ВывестиФорматиованныйДокументВТабличныйДокумент
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины