Методика интеграции 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, чтобы их можно было использовать полноценно.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

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

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

36000 руб.

03.08.2020    15963    13    18    

13

SALE! 10%

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

28000 25200 руб.

28.05.2015    84930    28    51    

50

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    89062    163    216    

319

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25898    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16502    42    49    

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