Так как с самого начала хотел реализовать всё локально, то искал что-то на JavaScript, чтобы прикрутить к «ПолеHTMLДокумента». После недолгих раздумий и короткого теста в блокноте выбор пал на «Mustache». Один файл JS — для первых проб годится.
Сохранил скрипт в текстовый макет, динамически формируем html-документ и отдаём его на съедение в ПолеHTMLДокумента, всё работает, всё отображается, но как-то это всё скучно. И тут я вспомнил про облачные функции Яндекс!
Всё настроил, далее короткая инструкция, исходя из того, что регистрация выполнена и мы находимся в «Cloud Functions»:
- Создаём новую функцию, даём имя и выбираем среду «node.js».
- Из редактора всё удаляем и копируем туда исходник нашего шаблонизатора, удаляем последнюю строчку «
export default mustache;». - Далее пишем вызов нашей функции:
module.exports.handler = async function (event, context) {
return {
statusCode: 200,
body: mustache.render(event.template, event.param),
};
};
- Нажимаем «Создать версию». Готово, идём тестировать!
- На закладке «Тестирование» пишем:
{
"template": "{{name}} eat {{fruit}}",
"param": {"name": "John", "fruit": "apple"}
}
- Видим, что всё работает внутри Яндекса.
- Делаем функцию публичной, чтобы на время теста было проще обращаться.
На этом настройка облачной функции закончена и начнём пользоваться ей из 1С.
- На форме нам необходимо: команда («Шаблонизировать»), строка для вставки шаблона («Шаблон») и таблица значений («ПараметрыШаблона») для указания параметров шаблона. Колонка «Значение» имеет составной тип (Строка, Число, Булево).
- Вызываем функцию с передачей в неё шаблона и параметров, упакованных в строку JSON.
- Получаем ответ и наслаждаемся результатом)
Вот весь код обработки:
&НаКлиенте
Процедура Шаблонизировать(Команда)
// Необходимо указать идентификатор своей функции
ИдентификаторФункции = "";
Соединение = Новый HTTPСоединение("functions.yandexcloud.net",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/" + ИдентификаторФункции + "?integration=raw");
Запрос.УстановитьТелоИзСтроки(СформироватьJSON());
Результат = Соединение.ОтправитьДляОбработки(Запрос);
ВыводРезультата = Результат.ПолучитьТелоКакСтроку();
КонецПроцедуры
&НаКлиенте
Функция СформироватьJSON()
Данные = Новый Структура();
Данные.Вставить("template", Шаблон);
Данные.Вставить("view", ПолучитьСтруктуру());
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
Возврат ЗаписьJSON.Закрыть();
КонецФункции
&НаСервере
Функция ПолучитьСтруктуру()
НоваяТаблица = ПараметрыШаблона.Выгрузить();
ВыходнаяСтруктура = Новый Структура;
Для Каждого СтрокаТЗ Из НоваяТаблица Цикл
ВыходнаяСтруктура.Вставить(СтрокаТЗ.Имя, СтрокаТЗ.Значение);
КонецЦикла;
Возврат ВыходнаяСтруктура;
КонецФункции
Остаётся добавить ссылки на источники:
1. Serverless (Faas) в 1С — большая статья про serverless от Яндекс и источник кода вызова облачной функции. Спасибо автору!
2. Mustache на GitHub — исходник брать здесь.
Протестировано на версии платформы 8.3.17.1549.
P.S.
Статья написана с целью поделится опытом. В планах развивать этот инструмент в выбранном направлении. В прикреплённом файле ничего интересного нет, весь код представлен в тексте статьи.