Алхимический подход интеграции HTML редакторов в поле HTML документа базы 1С

17.12.25

Интеграция - WEB-интеграция

В статье описаны критерии WYSIWYG HTML редакторов и общая картина интеграции с платформенными механизмами. На момент платформы 1С 8.3 и возможно для будущих релизов описание будет скорее всего актуально. Апробировано на 1С 8.3.20 и 8.2.12, а также на мобильной платформе 8.3.19.59.

Написать настоящее руководство меня сподвигли 2 вещи: 

  1. Комментарии пользователей к моей публикации Использование HTML Редактора NicEdit в 1С 8.2 и 1С 8.3 платформах.
  2. Просмотр публикаций Inforstart.

В результате анализа публикаций выяснилось, что они содержат в большинстве своем 2 проблемы: 

  1. Использование узких приемов. В частности, метод eval или запуск приложений. Этот метод не работает для ВебКлиента (можно создать экплоит), и не очень для мобильного приложения.
  2. Для ВебКлиента и мобильного приложения (что редко) используется вариант создания каталога на Сервере и настройка к каталогу редактора пути. 

Если резюмировать, то все публикации рассматривают 2 метода доработки HTML поля и форм (за редким исключением): 

  1. Разработка собственного редактора HTML на платформе. Подход ограничивается самой платформой - переход с 8.2 на 8.3 сопровождается проблемами с преобразования синхронных вызовов в асинхронные.
  2. Использование готового редактора HTML, написанного на Javascript. Этот подход достаточно гибкий, и дает много бонусов, однако есть некоторые особенности использования подхода. 

Про первый подход можно сказать следующее: он пагубный по той простой причине, что внедрение изменений в 1С синтаксис может привести к необходимости в тяжелых случаях писать редактор с нуля. Достаточно отметить, что переход с 8.1 на 8.2 - это головная боль, поскольку формат обработки 8.1 и 8.2 различны и это создавало ранее определенные трудности. Тем не менее, редактор, который будет работать на экране смартфона придется писать именно таким путем, так как размеры HTML поля сведут на нет все достижения визуальных редакторов - по крайней мере командную панель точно придется делать самописной.

Теперь рассмотрим про типологию визуальных редакторов HTML. 

 

Микро и Макро редакторы HTML. 

Под этими понятиями, можно сказать следующее: эти редакторы различаются только по одному единственному признаку - степенью разбросанности кода по файлам. 

Поясню на примере. Редактор TinyMCE даже старых версий имеет в своем составе очень много скриптов, которые связаны между собой и не всегда связи однозначные (модули используются в разных JS файлах):

 

 

И ещё не очень понятно, как эти плагины разложены в главном файле - надо смотреть. Скорее всего, проще будет сделать корневую папку, и привязать к нему путь в Конфигурации или Обработке. Такие редакторы, я называю макроредакторами. 

А что же тогда под микроредакторами? Это редакторы, дистрибутивы которых крайне малы по количеству файлов. Например, каталоги редакторов NicEditor, CleEditor, Ckeeditor.

 

   

Иногда редактор можно обрезать по размерам (убрать старый функционал) - пример whizzywig. Очень здоровая корневая папка, минимальный размер выглядит так: 

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

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

Прежде чем перейти к изложению структуры методики надо оговориться: 

  1. Данный поход получает максимальную эффективность на управляемых формах, и в первую очередь в режиме ВебКлиента. На обычных формах в виду обильных средств платформы способ можно не использовать.
  2. Данный подход можно использовать на любом клиенте и на любых формах

Структура подхода. 

Данный подход основан на 2-х приемах: 

  1. Структура работы с изображениями, которые лежат во временном хранилище на управляемых формах. Или во временном каталоге для обычных форм.
  2. Методика Генерации файлов редактора по данным макета и хранение во временном хранилище. 

Как уже было описано - основа это временное хранилище. 

Картинка во временном хранилище или каталоге

ДЛЯ УПРАВЛЯЕМЫХ ФОРМ. 

При помещении картинки во временное хранилище на сервере формируется её адрес. Основным достоинством этого адреса при передачи состоит в том, что он не меняется как на Сервере, так и на Клиенте. А значит, для управляемого приложение использовать временное хранилище можно вполне как директорию сервера (что и делается во многих приемах интерфейса). 

Тем не менее для картинок рекомендуется использовать следующую формулу пути: 

ПолучитьНавигационнуюСсылкуИнформационнойБазы()+"/"+ПоместитьВоВременноеХранилище(ДвоичныеДанные,новый УникальныйИдентификатор)

Такая ссылка на серверное расположение прекрасно работает на Клиенте (1С это спокойно подгружает сама). 

ДЛЯ ОБЫЧНЫХ ФОРМ. 

Там работает следующий способ: 

  1. Создаем временный файл с расширением как у картинки.
  2. Заполняем временный файл двоичными данными. 
  3. В полученном пути меняем "/" на "\". 

Пример кода: 

ВременныйФайл=ПолучитьИмяВременногоФайла("png");	
Макет.Записать(ВременныйФайл);	
ПутьПравильногоВременногоФайла=СтрЗаменить(ВременныйФайл,"\","/");

Таким образом картинка (панель управления редакторов) у нас подгружена. Однако, встает вопрос - а как можно включить редактор в работу? 

 

Способ простой сборки микроредакторов для отображения на обычном и управляемом интерфейсах. 

Сначала отметим, что макеты редакторов формируются таким образом: 

  1. Макет панели управления. Это картинка, и она всегда хранится в двоичных данных. Как с ней работать описал выше. 
  2. Макет документа. Поскольку редакторы, которые подключают написаны на JS, то лучший способ это сделать с минимальной кровью заключается в добавлении в HTML заготовку такой конструкции: 
<script type="text/javascript">
	scripttext
</script>

Текст scripttext нужен только для замены уже готового редактора, который будет вставлен в HTML шаблон. HTML шаблон можно сделать из примеров с дистрибутивов, так как он же подготовлен разработчиком.

А вот сборка самого редактора такая: 

  1. Все макеты сохраняем одинаковыми с загрузкой. Это позволит обновить редактор максимально быстро. 
  2. Сборка состоит из: 
    1. Чтение макетов (текст или двоичнка с конвертацией в текст для мобильного приложения).
    2. Если файл не один - собираем в один модуль весь функционал.
    3. По выбору выражений сцепляем языковой пакет, если предусмотрен.
    4. Итоговый редактор сцепляем с HTML выводом.

Собранный редактор вытаскиваем в HTML:

  1. Для УФ: 
    1. Код вставляем в поле формы на сервере
    2. Для всех кроме веба на клиенте - полученный код из поля перезаписываем во временный файл. Меняем код на ссылку на временный файл. Это защищает от ошибок работы 1С.
  2. Для ОБ: 
    1. Код во временный файл.

И последнее - написать обработчики со стороны 1С : чтение и запись кода HTML в редактор - строковая операция на сервере по шаблону для занесения

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

Способ вытаскивания результата из HTML поля. (обновление от 17.03.2023) 

В результате анализа поведения поля HTML на платформах 8.2.9 и 8.3.20 на различных типах клиента (тонкий, толстый, веб, мобильный под андроид) было установлено, что лучшим способом организации возврата является создание специальной функции-обертки, которая помещается внутрь макета. Например, для редактора whizzywig из публикации используется следующий код на js:

function EditorIdShowHTML() { 
     whizzywig.makeSo("html");
     return document.getElementById("sixth").value; 
    }
    
    function EditorIdShowDesign() { 
     whizzywig.showDesign();
     return document.getElementById("sixth").value;
}

После добавления этих функций в макет пишем функцию возврата на 1С, которую надо вызывать в событии перед записью на Обычных и Управляемых формах.

&НаКлиенте
Функция ВернутьHTMLИзРедактора(ОписаниеЗадачиHTML) экспорт
    
    ДокументПервогоБраузера = ОписаниеЗадачиHTML.Документ;
    ОкноПервогоБраузера     = ДокументПервогоБраузера.parentWindow; // IE
    Если ОкноПервогоБраузера = Неопределено Тогда
        ОкноПервогоБраузера = ДокументПервогоБраузера.defaultView; // Прочие браузеры
    КонецЕсли;
    
    Текст=СокрЛП(ОкноПервогоБраузера.EditorIdShowHTML()); //непосредственный возврат.
    ОкноПервогоБраузера.EditorIdShowDesign();

    возврат Текст;    
    
КонецФункции 

Указанная функция принимает на вход поле HTML документа.

Заключение:

В данной статье постарался детальнее описать, как в целом интегрировать HTML редакторы, написанные на JS, чтобы их можно было использовать полноценно.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

42700 руб.

03.08.2020    23791    36    24    

28

WEB-интеграция Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Расширение для автоматизации передачи данных между сервисом Vetmanager с 1С: Бухгалтерия 3.0. Решение позволяет загружать документы и справочники из Ветменеджер в 1С:Бухгалтерию, сокращая время на ручной ввод данных и минимизируя ошибки.

24000 руб.

02.02.2021    22514    67    52    

42

WEB-интеграция Загрузка и выгрузка в Excel Программист Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Расширение освободит вас от необходимости вручную обновлять товары в группах ВКонтакте. Достаточно задать правила один раз, и система автоматически синхронизирует ваш каталог. Вы сможете легко выбирать, какие товары публиковать, создавая гибкие критерии отбора. Например, можно добавить важные для покупателей параметры: цвет, размер или другие характеристики.

12200 руб.

29.08.2025    2283    7    6    

9

WEB-интеграция Программист Бизнес-аналитик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17568 руб.

20.12.2024    5799    25    4    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Antonov.AV 16.03.23 13:40 Сейчас в теме
как получить данные обратно из html объекта?
2. Dima1205 154 17.03.23 10:13 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация