Имя: Пароль:
1C
1С v8
Текст с форматированием (разметка, теги) - как работать?
,
0 Dmitriy_
Kolesnikov
 
25.10.17
17:17
У меня в текстовом реквизите есть вот такой текст, например:

<p class="MsoListParagraph" style="text-align:justify"><span style="font-size:
12.0pt;line-height:107%;font-family:&quot;Segoe UI&quot;,sans-serif;background:honeydew">В РФ аналогов планируемого центра нет. Лидером в мире является Центр
персонализированной медицины клиники Мэйо&nbsp;&nbsp;
(http://mayoresearch.mayo.edu/mayo/research/center-for-individualized-medicine/individualized-medicine-clinic.asp).</span></p><p class="MsoListParagraph" style="text-align:justify"><span style="font-size:
12.0pt;line-height:107%;font-family:&quot;Segoe UI&quot;,sans-serif;background:honeydew"></span></p><p class="MsoNormal" style="text-align:justify"><span style="font-size:12.0pt;
line-height:107%">Планируемый центр генетического прогнозирования, профилактики
и персонализированной медицины уникальный для РФ и будет соответствовать
мировым лидерам в этой области.</span><span style="font-size:12.0pt;line-height:
107%;font-family:&quot;Times New Roman&quot;,serif;color:red"><o:p></o:p></span></p><p class="MsoNormal" style="text-align:justify"><span style="font-size:12.0pt;
line-height:107%"></span></p><p class="MsoNormal"><br></p>

Вопрос:
1. Как мне ЭТО вывести на управляемую форму?
2. Как мне это редактировать на управляемой форме?
3. Как мне это вывести в табличный документ?
4. Как мне это преобразовать в простой текст?

Хотя бы намек дайте, дальше я сам разберусь.
1 dezss
 
25.10.17
17:19
Вид реквизита Поле html документа.
А вот что с этим делать дальше, надо копать)))
2 Ц_У
 
25.10.17
17:20
что то там было body innertext если мне не изменяет память
3 mehfk
 
25.10.17
17:21
Поле HTML документа
4 Dmitriy_
Kolesnikov
 
25.10.17
17:46
Благодарю.
А по вопросам 3 и 4: вывод в табличный документ и преобразование в plain text?
5 mistеr
 
25.10.17
17:46
(0) Встречный вопрос: а зачем вам ЭТО в реквизите в таком виде? 1С вроде научилась очищать текст от форматирования. ДО по крайней мере, умеет.
6 Dmitriy_
Kolesnikov
 
25.10.17
18:37
Потому что там в текстовых полях используются, в частности, подстрочные и надстрочные символы. Специфический медицинский текст. Поэтому надо не только сохранять форматирование, но и редактировать rich text в форме документа.
7 Dmitriy_
Kolesnikov
 
25.10.17
23:02
Короче, для хранения удобно использовать объект ФорматированныйДокумент. Засовывать его в ХранилищеЗначения. Поле HTML документа не подходит, т. к. его невозможно редактировать.

Я уперся в вывод в табличный документ.
У меня есть макет таблицы.
Как мне в какую-то ячейку таблицы вставить текст с форматированием (он у меня будет в объекте ФорматированныйДокумент)?
То есть несколько абзацев форматированного текста из ФорматированныйДокумент вставить в ячейку табличного документа?
8 Dmitriy_
Kolesnikov
 
26.10.17
13:49
Господа, неужели никто не знает, как вставить форматированный текст в ячейку табличного документа?
9 DrShad
 
26.10.17
13:57
Поле HTML документа не подходит, т. к. его невозможно редактировать.

это еще почему невозможно?
10 Tatitutu
 
26.10.17
14:13
В РФ аналогов планируемого центра нет. Лидером в мире является Центр персонализированной медицины клиники Мэйо   (http://mayoresearch.mayo.edu/mayo/research/center-for-individualized-medicine/individualized-medicine-clinic.asp).


Планируемый центр генетического прогнозирования, профилактики и персонализированной медицины уникальный для РФ и будет соответствовать мировым лидерам в этой области.
11 Tatitutu
 
26.10.17
14:16
(0)

если просто НА ПОСМОТРЕТЬ

у любого объекта (Обработка, Отчет)
действия - справочная информация
- три вкладки
Редактирование
Текст
Просмотр

в Текст - копируешь из (0)
и смотришь в Просмотр как в (10)

Можешь не благодарить!
12 Dmitriy_
Kolesnikov
 
26.10.17
14:19
(9) Поле ввода формы с видом "Поле HTML документа" - это фрейм интернет эксплорера, встроенный в форму, в котором отображается форматированный текст. Никакой возможности редактирования у веб-страницы разумеется нет.
Зато у объекта типа "ФорматированныйДокумент" нет таких ограничений, более того, можно прицепить панель форматирования.
13 Dmitriy_
Kolesnikov
 
26.10.17
14:40
(10)
Вы меня не поняли.
В случае с простым текстом вывод в табличный документ делается так:

ТабДок = новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("ОбластьШапка");
ОбластьШапка.Параметры.ДатаВыдачиПлан = ЭтотОбъект.ДатаИсполнения;
ТабДок.Вывести(ОбластьШапка);

Теперь представим, что в этом примере ДатаИсполнения - это не просто строка или число или что-то ещё примитивное, а, например, ФорматированныйДокумент. Или просто строка, но в которой содержится HTML-разметка.
Задача - вывести этот отформатированный документ в параметр области табличного документа.
14 lodger
 
26.10.17
15:19
(13) Максим Радченко говорит можно так:
ФД = Ссылка[0].Текст.Получить();
ТекстФД = ФД.ПолучитьТекст();
15 lodger
 
26.10.17
15:21
(14) извращенцы придумали такой вариант
&НаКлиенте
Процедура ВыгрузитьHTML(Команда)
   Перем html_string;                    // переменная для помещения в неё HTML-составляющих форматированного документа
   attach = Новый Структура;        // сюда попадут вложенные рисунки, если они есть в документе
   ФорматДокумент.ПолучитьHTML(html_string,attach);
   ТекстДок = Новый ТекстовыйДокумент;                   // с его помощью запишем строку в файл на диске
   ТекстДок.ДобавитьСтроку(html_string);                  
   ТекстДок.Записать("e:\temp\test.html");
КонецПроцедуры

http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=598510&print=1
16 Dmitriy_
Kolesnikov
 
26.10.17
15:36
(14) так мы получим текст с потерей всего форматирования!
А задача в том, чтобы форматирование в ячейке сохранить...

(15) Там документ на 33 страницы, в котором много обычных параметров, включая таблицы, а куски форматированного текста составляют лишь небольшую часть. Плюс колонтитулы, разделители страниц, картинки. Если я буду сам руками формировать этот документ в HTML, то, как минимум, не смогу  контролировать колонтитулы и разделители страниц. Поэтому идеальным вариантом будет использование ТабличныйДокумент.
17 MrStomak
 
26.10.17
15:41
(12)
"Никакой возможности редактирования у веб-страницы разумеется нет."

И как же ты, позволь поинтересоваться, разместил это сообщение, если ты не можешь редактировать формы браузера?
18 lodger
 
26.10.17
15:45
(16) на мисте была такая же тема. там все заглохло без решения. последний вариант на-пофиг был: создать хтмл документ. распечатать его в картинку. вставить картинку в табдок.
19 Лодырь
 
26.10.17
15:45
(7) TinyMCE нио чем не говорит?

Форматированный документ забудь как страшный сон. Настойчиво не рекомендую его использовать.
20 lodger
 
26.10.17
15:46
(19) а вот и герой той темы.
21 Сти
 
26.10.17
15:51
(17) Редактируются поля ввода на странице, а не сама страница. Веб-страница не изменяется, то есть её HTML, скрипты и все такое остаются такими как были. А автору надо править страницу.

ПолеHTMLДокумента в обычном приложении имело свойство "Режим", где можно было установить режим редактирования. Этим я успешно пользовался еще лет 5 назад.

В управляемых формах случился облом, и поле HTML документа, увы, не редактируется.
22 Сти
 
26.10.17
15:58
(12) Строго говоря, возможность редактирования содержимого страницы или какой-то заданной ее части в окне почти любого браузера есть - если в тегах body, div, span и так далее, то есть в нужном месте, указать contenteditable="true". Вот только здесь это мало чем поможет.
23 AlvlSpb
 
26.10.17
16:23
(0) А просто чтение HTML не подойдет? Что-то типа:
ЧтениеHTML = Новый ЧтениеHTML;
                                  
ЧтениеHTML.УстановитьСтроку(ВашаСтрока.ПолучитьТелоКакСтроку());
    ПостроительDOM = Новый ПостроительDOM;
    ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);

А потом вытаскивайте любые данные через перебор элементов по имени или обращение к дочерним узлам
  Или я не понял задачу?
24 Лодырь
 
26.10.17
16:27
(23) посмотри пункт 3. И подумай. Как придумаешь - напиши )
25 Dmitriy_
Kolesnikov
 
26.10.17
16:46
С пунктом 3 всё упирается в органичения табличного документа.
Я не могу в одной ячейке сделать так, чтобы было два слова: "тест1 тест2", при этом тест1 было полужирным, а тест2 - нет.
Всё форматирование всегда применяется целиком к ячейке и никак иначе.

А зная это, вариант с ТабличнымДокументом придётся отставить.

Теперь остается только формировать макет печатного документа в Word через OLE.

Пошел искать, как вставить в Word кусок HTML-текста.

(18) приходила в голову мысль с картинкой. Но это архитектурно неправильное решение, корявое по определению, хотя вполне может быть, что рабочее. Я так делать не буду.
26 Сти
 
26.10.17
17:13
(25) На самом деле, поле HTML документа в управляемых тоже может редактироваться, если сделать как в (22).

Убил пару минут. Картинка: https://drive.google.com/file/d/0B9b0r9pu7axlRzZfN21EZVNrTWM/view

тестовая обработка: https://drive.google.com/open?id=0B9b0r9pu7axla3d6TmF4NkNfazQ

Результат редактирования ловится в Элементы.Реквизит1.Документ.body.innerHTML
Просто преобразованный в обычный текст - в Элементы.Реквизит1.Документ.body.innerText

Вот только полноценный редактор из этого делать - много писать придется.
27 Dmitriy_
Kolesnikov
 
26.10.17
18:08
(26) ну ни фига себе...
И правда редактируется, хотя и нет панели инструментов.
Но!
У меня в форме - абсолютно то же самое, за исключением того, что путь к данным указывает на реквизит документа.
Но - поле ридонли.
Хотя я проверил все свойства табличного поля - они совпадают с вашими.
Полтергейст.

Но это всё уже непринципиально.

Осталась последняя задача - имея строку текста с разметкой (например, <html><body><p>Это <b>форматированный</b> текст</P></body></html> ), через OLE Передать её в Word так, чтобы он вставил её как текст с форматированием.
28 Сти
 
26.10.17
18:15
(27) Не полтергейст ) В <body> "contenteditable" прописан. Эта фича в IE работает еще с 5 версии. В остальных браузерах позже. В вебе ее обычно не применяют - и на сервер вернуть сложно, и в безопасности дырки тяжко закрыть. А тут в общем-то можно.
29 PiotrLoginov
 
26.10.17
18:31
(27) >>Осталась последняя задача - имея строку текста с разметкой (например, <html><body><p>Это <b>форматированный</b> текст</P></body></html> ), через OLE Передать её в Word так, чтобы он вставил её как текст с форматированием

Чтобы представить, о чем речь, достаточно скопировать что-то из html-страницы и вставить это в Word.  Оно, конечно, вставится - и попытается отформатироваться также, как в источнике. Но результат зачастую не самый удобоваримый.

то же самое можно сделать программно. Copy - paste еще никто не отменял.
30 Dmitriy_
Kolesnikov
 
26.10.17
19:14
Вся эта копипаста через буфер обмена с использованием ОЛЕ - жутко тормозная вещь.

Короче, пока думаю делать так.
1. Все форматированные фрагменты через объект ТекстовыйДокумент пишутся во временные файлы, сохраняются с расширением HTML.
2. Основная таблица формируется как обычно через ТабличныйДокумент, затем сохраняется во временный файл в формате ВОРД. В тех местах, куда надо засунуть форматированные фрагменты, ставятся якори или закладки.
3. Через ОЛЕ Ворд открывает шаблон (колонтитулы, титульный лист и тп уже заполнены). Открывает временный файл основной таблицы и через буфер копипастит в шаблон.
4. Через ОЛЕ Ворд открывает всеHTML-файлы форматированных фрагментов. Через буфер копипастит в шаблон в места закладок.

Думаю, так будет быстрее всего.

Потому что формировать в Ворде через ОЛЕ таблицу на 10 страниц будет очень-очень медленно.
31 Dmitriy_
Kolesnikov
 
26.10.17
19:15
P. S. А кто что слышал про новый способ формирования DOCX через XML? Вроде как очень быстро должно быть.
32 Dmitriy_
Kolesnikov
 
27.10.17
15:15
(19) можно попробовать и TinyMCE, но только в том случае, если качество работы ФорматированныйДокумент будет не устраивать. Просто больше телодвижений.

(28) "В <body> contenteditable прописан" - это будет работать для тонкого и толстого клиента. А если веб-клиент + Хром? Взлетит ли?
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.