Удобное хранение форматированного текста

15.04.14

Разработка - Работа с интерфейсом

Как сохранить форматирование с картинками в строковом поле 1С

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Демонстрационная конфигурация
.cf 9,17Kb
134
134
1 SM
Скачать Купить за 1 850 руб.

Введение

Данная статья описывает хранение форматированного текста с картинками в обычном текстовом поле.

1С учетная система построенная на таблицах, в которых удобно хранить текст и числа, но не очень удобно хранить форматированное описание.

Мы для учета задач реализовали удобное хранение описания в 1С в формате HTML. В платформе есть объект Форматированный документ, но хранить его можно только в поле хранилище значений. Также мы внедрим картинки в HTML. Для внедрения картинок воспользуемся кодированием данных в base64 и внедрением их в текст HTML http://ru.wikipedia.org/wiki/Data:_URL

Дальнейшее описание актуально для управляемых форм.

Создаем структуру данных.

В базе для хранения описания добавляем текстовое поле неограниченной длины.В нём описание в формате HTML. Для примера назовём его ОписаниеHTML.

Настраиваем форму

  1. На форме добавляем реквизит ФорматированныйДокумент с типом ФорматированныйДокумент. Хотя хранение и подразумевается в формате HTML, но редактировать удобнее в специализированной форме.

  2. У реквизита ФорматированныйДокумент устанавиваем флаг “Сохраняемые данные” - чтобы платформа при закрытии предлагала сохранить изменения.

  3. Добавляем элемент формы связанный с реквизитом ФорматированныйДокумент

  4. Добавляем командную панель и связываем её с ФорматированнымДокументом

Пишем код

Для ФорматированногоДокумента пропишем процедуру “ПриИзменении” - нам нужно сохранить все изменения в текстовое поле. Кроме того - нам нужно встроить картинки в HTML.

&НаКлиенте
Процедура ФорматированныйДокументПриИзменении(Элемент)
 
 лкТекстHTML = "";
 лкВложения = Новый Структура;
 
 ФорматированныйДокумент.ПолучитьHTML(лкТекстHTML, лкВложения);
 Для каждого лкВложение Из лкВложения Цикл
 
 лкТекстHTML = СтрЗаменить(лкТекстHTML, "
 "
 
 КонецЦикла;
 
 Объект.ОписаниеHTML = лкТекстHTML;
 
КонецПроцедуры

Для загрузки в форматированный документ данных при открытии из HTML напишем процедуру

&НаСервере
Процедура УстановитьHTMLвФорматированныйДокумент(Знач пТекстHTML)

лкВложения = Новый Структура;
 лкПрефикс = "

 
 Пока Найти(пТекстHTML, лкПрефикс) > 0 Цикл
 
 лкНачалоКартинки = Найти(пТекстHTML, лкПрефикс) + СтрДлина(лкПрефикс);
 лкBase64ДанныеКартинки = Сред(пТекстHTML, лкНачалоКартинки);
 лкBase64ДанныеКартинки = Лев(лкBase64ДанныеКартинки, Найти(лкBase64ДанныеКартинки, "'") - 1);
 
 лкКодСоответствия = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
 лкКартинка = Новый Картинка(Base64Значение(лкBase64ДанныеКартинки));
 лкВложения.Вставить(лкКодСоответствия, лкКартинка);
 
 пТекстHTML = СтрЗаменить(пТекстHTML, лкПрефикс + лкBase64ДанныеКартинки + "'",
 "

 
 КонецЦикла;
 
 ФорматированныйДокумент.УстановитьHTML(пТекстHTML, лкВложения);

КонецПроцедуры

 

И вызов процедуры ПриСозданииНаСервере

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 УстановитьHTMLвФорматированныйДокумент(Объект.ОписаниеHTML);
КонецПроцедуры

 

Известные баги

  1. Вывод в поле HTML документа в windows осуществляется через Internet Explorer, который официально не поддерживает вставку изображений более 80 кб. По факту работает.

  2. Метод ПолучитьHTML добавляет в стили overflow:hidden. Что приводит к невозможности прокрутить данные в поле HTML документа. Лечится просто - СтрЗаменить(ОписаниеHTML,”overflow:hidden”, “”). В 8.3 это исправлено.

  3. Таблиц нет.

  4. Оформление вложенных списков ломается при вызове УстановитьHTML

  5. Картинки из буфера обмена не вставляются.

Вопросы производительности

В нашей базе данный механизм используется для хранения задач и загрузки писем из почты по техподдержке. Форма с 20 скриншотами работает быстро. Можно дополнительно обсуждать вопрос занимаемого места, но при нашем количестве данных перенос вложенных изображений в отдельное хранилище не имеет смысла.

Итак, что у нас получилось

В поле ОписаниеHTML у нас хранится как форматированное описание, так и картинка, при этом если нам нужен только просмотр - нам даже нет необходимости загружать данные в форматированный документ - достаточно просто для поля ОписаниеHTML на управляемой форме указать вид - Поле HTML документа. Также при необходимости можно легко сохранить данные в HTML и передать в другую систему.

Что можно сделать ещё

Ещё к этому можно добавить систему комментирования с отображением комментариев единым списком.

А ещё можно сделать вставки JavaScript в 1С.

 

Форматированный документ HTML

См. также

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    17678    24    6    

38

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    5467    smielka    37    

96

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    12512    789    elcoan    47    

110

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    10697    158    acces969    31    

120

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4630    kalyaka    6    

32

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9388    1    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Kalugin_AA 110 31.03.15 09:39 Сейчас в теме
А как бы Вы организовали поиск по этим текстам большой длинны? :)
2. CepeLLlka 71 26.05.15 09:06 Сейчас в теме
Вроде в описании написано - "Данная статья описывает хранение форматированного текста с картинками в обычном текстовом поле."

Хранится не в поле наверное.. Поле на форме.. А хранится в реквизите..


А если в тексте будут просто кавычки использоваться? Мы всё что после них будем пытаться перекодировать в двоичные данные из Base64?

А вообще спасибо.. Мне помогло и пригодилось. Ставлю лайк.
3. Pashkaa 16 13.08.15 08:11 Сейчас в теме
У меня у одного в браузере приведенные для примера процедуры отображаются не полностью.

Например не понятно чему равен лкПрефикс

лкВложения = Новый Структура;
лкПрефикс = "

Пока Найти(пТекстHTML, лкПрефикс) > 0 Цикл
Dimka74; ленокленокленок; ghostaz; +3 Ответить
4. Tavalik 3392 07.10.15 12:47 Сейчас в теме
Спасибо, все работает.

Только у вас в описаниях процедур всё связанное с тегами img потерялось. Видать из-за особенностей движка сайта.

Из-за этого пришлось конфигурацию качать, чтобы посмотреть полный текст процедур.
5. orfos 216 05.08.16 10:39 Сейчас в теме
6. sj530 26.06.17 14:51 Сейчас в теме
Добрый день. Не работает в 1C 8.3.10. Картинка не отображается. Подскажите, с чем это может быть связано
7. ghostaz 143 28.06.17 14:51 Сейчас в теме
(6) Там походу в новое версии 1С добавила атрибуты в тег IMG, плюс одинарные ковычки на двойные поменяли. Я с той же проблемой столкнулся подправил, вроде работает. Посмотрите https://yadi.sk/d/ynkL5dIJ3KZjAH
user598488_gennsy; Wrols; adminov-admin1@rambler.ru; sj530; +4 Ответить
8. sj530 29.06.17 09:20 Сейчас в теме
(7) Огромное спасибо!
user598488_gennsy; +1 Ответить
9. sj530 30.06.17 16:38 Сейчас в теме
Подскажите, пожалуйста, почему локально всё работает, а в клиент-серверном варианте картинок нет
10. victor_k 95 20.05.18 11:09 Сейчас в теме
Пример хороший, рабочий, плюсанул... Только зачем каждый раз при изменении документа корректировать строку, достаточно один раз перед записью...
11. fotov 314 22.05.18 14:41 Сейчас в теме
(10) У нас на форме редактирование реализовано через форматированный документ, а просмотр - через поле HTML документа. Обновление нужно, если переключаешь режим. Для данного примера - можно перед записью. Только надо у поля форматированный документ установить флаг "изменяет данные", иначе будет закрытие документа без сохранения изменений.
12. CodeMaker.K 12.08.19 12:20 Сейчас в теме
Добрый день!
Можно вопрос, а если понадобится выгрузить форматированный текст из 1С на сайт, например, в 1С это будет описание товара, а на сайт в карточку товара должен выгрузиться текст в том же формате, что он записан в 1С.
В этом случае, при выгрузке на сайт форматирование текста сохранится, т.е. весь текст размеченный в метатегах (H1-H6), размер шрифта, абзацы (<p></p>), это всё сохранится?
Спасибо!
13. fotov 314 15.08.19 17:08 Сейчас в теме
(12)
Я бы не стал полагаться на конвертацию форматированного текста в формат HTML.
В вашем случае - я бы смотрел в сторону формата markdown и автоматическую конвертацию markdown -> html
14. Dimka74 30.12.21 13:55 Сейчас в теме
В том виде, как сейчас представлено не работает(не сохраняет картинки). Прикрепил скриншоти и листинг, чтобы ничего не пропало.
Прикрепленные файлы:
код.txt
Serge_ASB; k9260130000; bbbsss; +3 Ответить
15. Dimka74 30.12.21 14:01 Сейчас в теме
По таблицам никаких идей? Как можно добавлять?
Вот бы с таблицами решить вопрос, получился бы полноценный WYSIWYG редактор.
16. webresurs 222 10.03.22 11:26 Сейчас в теме
- автор походу спецом выложил не полный код , чтобы качали демку
17. MaCCapAkIII 15.11.22 11:54 Сейчас в теме
Есть вопрос. почему при формировании нового форматированного документа в него не переносятся картинки из старого? Я сначала получаю HTML из старого ФД, потом набираю свой текст и устанавливаю HTML для нового ФД с новым текстом и структурой вложений из старого ФД. Так вот при таком методе структура вложений (конкретно картинок) у нового ФД оказывается пустой... Почему - непонятно. У нас не реализовано хранение картинок в ФД через Base64, сделали обычным добавлением в ФД значения типа КартинкаФорматированногоДокумента...
18. Serge_ASB 26.04.24 12:52 Сейчас в теме
Да, с таблицами, помещаемыми в форматированный текст - немного беда: просто, вырезал их "Ножницами" и вставлял . Возможности потом скопировать/изменить нет, конечно.
Возможно, в ожидаемых релизах платформы что-то в части форматированного текста/табличных документов/html доделают?
Оставьте свое сообщение