Методика интеграции HTML редакторов в поле HTML документа базы 1С

17.03.23

Интеграция - 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С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

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

36000 руб.

03.08.2020    17799    19    22    

17

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19880    13    17    

17

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14435    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1198    1    0    

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