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

15.04.14

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

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

Скачать файлы

Наименование Файл Версия Размер
Демонстрационная конфигурация
.cf 9,17Kb
132
.cf 9,17Kb 132 Скачать

Введение

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

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 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61795    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54402    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16697    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10736    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9613    151    acces969    31    

118

Модель состояния для MVC

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

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

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

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

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


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

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

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

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

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

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

Из-за этого пришлось конфигурацию качать, чтобы посмотреть полный текст процедур.
5. orfos 215 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 311 22.05.18 14:41 Сейчас в теме
(10) У нас на форме редактирование реализовано через форматированный документ, а просмотр - через поле HTML документа. Обновление нужно, если переключаешь режим. Для данного примера - можно перед записью. Только надо у поля форматированный документ установить флаг "изменяет данные", иначе будет закрытие документа без сохранения изменений.
12. CodeMaker.K 12.08.19 12:20 Сейчас в теме
Добрый день!
Можно вопрос, а если понадобится выгрузить форматированный текст из 1С на сайт, например, в 1С это будет описание товара, а на сайт в карточку товара должен выгрузиться текст в том же формате, что он записан в 1С.
В этом случае, при выгрузке на сайт форматирование текста сохранится, т.е. весь текст размеченный в метатегах (H1-H6), размер шрифта, абзацы (<p></p>), это всё сохранится?
Спасибо!
13. fotov 311 15.08.19 17:08 Сейчас в теме
(12)
Я бы не стал полагаться на конвертацию форматированного текста в формат HTML.
В вашем случае - я бы смотрел в сторону формата markdown и автоматическую конвертацию markdown -> html
14. Dimka74 30.12.21 13:55 Сейчас в теме
В том виде, как сейчас представлено не работает(не сохраняет картинки). Прикрепил скриншоти и листинг, чтобы ничего не пропало.
Прикрепленные файлы:
код.txt
k9260130000; bbbsss; +2 Ответить
15. Dimka74 30.12.21 14:01 Сейчас в теме
По таблицам никаких идей? Как можно добавлять?
Вот бы с таблицами решить вопрос, получился бы полноценный WYSIWYG редактор.
16. webresurs 205 10.03.22 11:26 Сейчас в теме
- автор походу спецом выложил не полный код , чтобы качали демку
17. MaCCapAkIII 15.11.22 11:54 Сейчас в теме
Есть вопрос. почему при формировании нового форматированного документа в него не переносятся картинки из старого? Я сначала получаю HTML из старого ФД, потом набираю свой текст и устанавливаю HTML для нового ФД с новым текстом и структурой вложений из старого ФД. Так вот при таком методе структура вложений (конкретно картинок) у нового ФД оказывается пустой... Почему - непонятно. У нас не реализовано хранение картинок в ФД через Base64, сделали обычным добавлением в ФД значения типа КартинкаФорматированногоДокумента...
Оставьте свое сообщение