Хотел бы поделиться опытом работы с объектом ФорматированныйДокумент, потому что решение искал довольно долго (несколько часов), а в инете не нашел ничего, кроме описания самой проблемы (http://release.8c1.ru/bugs/341004/8.3.3.658 пост "#### 10124322"). Может кому то будет полезно.
Небольшое предисловие.
Специфика выполняемой задачи предполагала использование объекта который бы хранил в себе форматированный текст с картинками и предоставлял пользователю инструменты для правки. Мои сомнения насчет стандартных возможностей 1С 8.2.11 (с этой версии начинается история "ФорматированногоДокумента") развеяла статья //infostart.ru/public/74958/. Вдохновленный ею я принялся за работу и вскоре наткнулся на проблему. Мне необходимо было программно соединять и построчно вклеивать друг в друга два форматированных документа, написал необходимые функции, в которых я использовал метод ПолучитьHTML(), менял HTML-код и записывал обратно в объект, используя метод УстановитьHTML(). Но почему то форматирование некоторых блоков терялось. Я решил все проверить, и понял что форматирование теряется, даже если просто ПолучитьHTML() и тут же УстановитьHTML() никак не меняя HTML-код. И я понял что это ошибка платформы... (если бы это было видео, я бы даже вставил здесь какую-нибудь эпичную музыку, потому что шире вселенной было горе мое). Отказываться от использования этого объекта я не хотел и начал искать способ решения данной проблемы.
Решение проблемы
Как оказалось проблема в следующем: если в свойстве style='некое css форматирование' блока параграфа, который ФорматированныйОбъект использует для хранения текста, последнее css свойство не закрыто символом ";" то метод УстновитьHTML() игнорирует все форматирование. При этом либо метод ПолучитьHTML() иногда читает html не закрывая последнее свойство css точкой с запятой, либо объект ФорматированныйДокумент странным, непонятным образом хранит html-форматирование. Получается, что при вызове метода ПрочитатьHTML и за ним УстановитьHTML, даже никак не меняя текст HTML, можно потерять форматирование некоторых блоков (я проверял).
Например:
Такой код, после применения метода УстановитьHTML(), не будет размещать текст в центре, потому что css-свойство "text-align" блока не было закрыто символом ";":
p style='line-height: 1.15; text-align: center'
Если же добавить символ ";", то метод УстановитьHTML() отработает корректно, и текст будет размещен в центре:
p style='line-height: 1.15; text-align: center;'
Для меня важно было сохранить выравнивание текста, поэтому я применил следующий код:
ТекстХТМЛ=СтрЗаменить (ТекстХТМЛ, "center'", "center;'");
ТекстХТМЛ=СтрЗаменить (ТекстХТМЛ, "right'", "right;'");
ТекстХТМЛ=СтрЗаменить (ТекстХТМЛ, "justify'", "justify;'");
Вы же конечно можете использовать более универсальные конструкции, зная в чем проблема работы метода.
Приложение
Хотел приложить две функции для работы с объектами ФорматированныйДокумент, учитывающие описанные в этой статье особенности (назовем этот баг так). Но как ни пытался экранировать html-теги - все равно неадекватно отображается на странице. Если кому то будет необходимо - можете написать мне на realturik@mail.ru - вышлю текстом.
Функция "СклеитьДокументы (Документ1, Документ2)" возвращает ФорматированныйДокумент содержащий оба документа, следующие друг за другом.
Функция "ВклеитьДокумент (Документ1, Документ2)" возвращает ФорматированныйДокумент содержащий оба документа, соединенные построчно (к каждой строке Документа1 приписывается соответстующая строка Документа2, и дописывается остаток текста болльшего из них).
Спасибо за внимание!