Универсальный шаблонизатор HTML

19.09.16

Разработка - Инструментарий разработчика

Генерация HTML кода, на основе шаблонов в стиле шаблонизаторов AngularJS / Twig и подобных. Поддержка Windows / Linux

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

Наименование Файл Версия Размер
Шаблонизатор HTML
.epf 9,90Kb
85
.epf 1.0.0 9,90Kb 85 Скачать

Кто сталкивался с созданием HTML из 1С, знают, какая это боль. Но если обратиться к веб программированию, то там схожую проблему решили созданиям шаблонизаторов, которые с легкостью позволяют выдавать HTML код, на основе красивых, человекочитаемых шаблонов. Помимо 1С я очень много работаю с JS и в частности с фронтенд фреймворками (Angular например), после которых задача создания HTML в 1С заставила меня плакать от того, как здесь все плохо. Вдохновившись и погуглив я нашел решение //infostart.ru/public/352812/ , но все же это не то, что я хотел, и в итоге родилась эта обработка, которая с лекостью генерирует HTML, особо не заморачиваясь с созданием шаблонов для генерации.

Разработка пригодится тем, кто генерирует любой html из 1Ски, будь то красиво оформленные почтовые сообщения или вывод страницы через http сервис, границы применения ее очень широки. Ее же я использую для создания оформленных в корпоративном стиле pdf документов, т.е. сначала получаем html, а потом конвертируем в pdf и отправляем клиенту.

Вывод данных.

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

<h1> Добрый день! Сегодня, {{ ТекущаяДата() }} <h1>

Что приведет к 

<h1> Добрый день! Сегодня, 19.08.2016 14:52:32 <h1>

Так можно выводить абсолютно любую информацию, любые глобальные переменные и тд, а для сосбтвенных переменных нужно в функцию - компилятор шаблона передать структуру параметров, например

Параметры = Новый Структура("МояПеременная", 1);

Теперь если создать шаблон

У меня {{ МояПеременная }} яблоко.

На выходе будет

У меня 1 яблоко.

Циклы

{% Для й = 0 ПО 2 Цикл %}

Итерация №{{й}}

{% КонецЦикла; %}

Выведет

Итерация №0

Итерация №1

Итерация №2

Условия

{% Если Истина Тогда %}

<h1> Истина </h1>

{% Иначе %}

<h1> Ложь</h1>

{% КонецЕсли; %}

Выведет

<h1> Истина </h1>

В целом, между тегами {% %} можно исполнять любой код будь-то присвоение переменной или еще что-нибуть, например

{% a = 1; %}

{{a}}

Выведет

1

Обработка HTML Шаблонизаторы

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 руб.

02.09.2020    119974    656    389    

701

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7020    20    6    

37

Infostart УДиФ: Управление данными и формами

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

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

10000 руб.

10.11.2023    3256    10    1    

31

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177360    1071    0    

846

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99208    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

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

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    17922    6    8    

38

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    27951    3    10    

14

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23494    15    15    

31
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. json 3294 19.09.16 23:45 Сейчас в теме
Согласен, шаблонизаторы в вебе - штука крутая. Побольше бы таких статей с интересными практиками из других языков.
Я сталкивался с шаблонизатором Blade в Laravel. Тоже был впечатлен его возможностями. В этом, наверное, тоже есть еще много всего хорошего, типа вывода одного шаблона внутри другого и т.д.
Очень полезно было бы еще описать сферу применения этой технологии в 1С, т.к. не всем читателям она сразу понятна.
2. Fragster 1137 20.09.16 10:35 Сейчас в теме
Я сделал целиком на основе XML, чтобы уже на этапе сохранения можно было проверить структурную правильность http://infostart.ru/public/352812/ . Этот попроще для использования, и подходит не только для XML/HTML, а для любых строк. Но в данном случае получается смесь кода и данных, что не очень хорошо.
3. dj_serega 390 20.09.16 11:03 Сейчас в теме
(2) Fragster, Но никто не оценил :(
4. Fragster 1137 20.09.16 11:24 Сейчас в теме
(3) dj_serega, Ну почему, автор оценил (см. вступление). Наверное. Только среди скачавших его нет :)
5. ArchLord42 83 20.09.16 12:37 Сейчас в теме
(4) Fragster

"Но в данном случае получается смесь кода и данных, что не очень хорошо"

Почему это не хорошо?)
Бизнес логика туда не пихается, только код, отвечающий за вывод данных, можно считать, что это VIEW из паттерна MVC.

Ваша разработка очень напоминает шаблонизацию на основе XSLT, которую еще не так давно можно было часто встретить в мире веб программирования, но ее минус в том, что порог вхождения для написания шаблонов немного выше получается, а на больших объемов это превращается в очень нечитабельную структуру, конечно проверки и некоторая строгость это хорошо, но на практике не всем она нужна, в итоге появились Twig \ Blade и прочие, если говорить по PHP. А вообще это как форматы XML и JSON у каждого свое назначение.

Ну, а если вернуться к проверкам то их легко можно осуществить {{ ?(Пользователь = Неопределено, "Гость", Пользователь) }}

6. andy23 467 20.09.16 13:35 Сейчас в теме
Нужная штука! Только AngularJS это вроде как бы не шаблонизатор, фреймворк с MVC
7. ArchLord42 83 20.09.16 13:50 Сейчас в теме
(6) andy23, имеется ввиду, шаблонизация которая присутствует в ангуляре, собственного названия у нее нет.
8. vandalsvq 1535 21.09.16 14:06 Сейчас в теме
(7) обычно это называют просто биндинг данных., Строго говоря названия, другого кроме "связывания", и не выдумаешь.
Практического применения не так много, ну по крайней мере при одноразовом связывании. Неплохо было бы если бы шаблон работал действительно как ангулар, не перегружая страницу полностью. А отслеживая изменения и внося их точечно. Но увы, в 1С изменение переменной не отследить, если только не делать принудительную проверку (собственную функцию проверяющую изменения, вроде $apply в angular). Вот тогда применение можно сделать широким, вплоть до создания собственных html форм внутри 1С (а вот тут применение каждый сам пусть думает). Но это никак не побуждение к действию )))) это скорее размышления о возможности применения.
9. ArchLord42 83 21.09.16 19:58 Сейчас в теме
(8) vandalsvq, Вы не так поняли идею моей разработки :) В этом я виноват, что вообще упоминул ангуляр тут, потому, что кроме схожего синтаксиса тут с ним нет ничего общего

Биндингом это назвать нельзя, т.к. связываения тут попросту не происходит, бразуер \ поле HTML дока, попросту получает сразу же готовые данные, они без понятия что между тегами <h1> </h1> было какое то выражение типа {{userName}}. При использовании ангуляра же браузер получает <h1> {{userName }} </h1> и потом, после загрузки скриптов когда начинает работать JS он (JS) связывает userName с переменной, userName текущего скоупа или вышестоящего скоупа и рендерит значение этой переменной в браузер.

Моя разработка имеет общее с бекенд языками PHP \ Ruby \ Python , т.е. шаблонизаторами, реализованными их средставми, там нет понятия биндинг ибо его просто там нет, зато есть понятие рендер, вот оно подходит к данной теме.
RozalievAndrey; +1 Ответить
11. andy23 467 22.09.16 07:59 Сейчас в теме
(7) я понял, кстати если нужен не просто вывод, а интерактивная работа с html в 1С без слез, то это тоже можно организовать. Ангуляр не взлетит, а knockout.js взлетит. Вот например как здесь Получается эдакое одностраничное приложение внутри 1С, там есть и биндинг и др. полюшки.
10. Evil Beaver 8100 21.09.16 23:43 Сейчас в теме
Я вот тут как раз подбираю шаблонизатор для 1Script и тут вы, такой прямо в тему! :)

А как у него с производительностью?
12. ArchLord42 83 22.09.16 08:51 Сейчас в теме
(10) Evil Beaver, честно говоря не замерял, т.к. даже на больших тестовых шаблонах, "на глаз" задержки было не видать.

А так скорость зависит от производительности функций Найти()\СтрЗаменить()\Сред() , которые используются при парсинге.

Ну а рендер готового HTML по скорости должен быть близок к нативному коду, но сильно зависит от написанного шаблона, т.е.
такие конструкции примерно как :
{% Для СтрокаТЗ ИЗ ТЗ Цикл %}
{{ СтрокаТЗ.Заказ.Автор.Сотрудник.Контрагент.Наименование }}
{% КонецЦикла; %}
скорости работы явно не прибавят.
13. JohnyDeath 301 22.09.16 08:55 Сейчас в теме
(12) Evil Beaver намекает на то, чтобы перевезти этот проект на 1Script вот сюда: https://github.com/oscript-library (или сразу сюда: https://github.com/oscript-library)
;)
14. maxx 991 14.10.16 20:35 Сейчас в теме
(12) вопросы
1.) Как будет выглядеть конструкции для создания таблиц с определенным кол- вом колонок и строк
2.) Как весь этот подход вписать в страницы уже работающего сайта на CMS , т.е. чтобы стиль, шрифты и т.п. вписались нормально в дизайн
15. ArchLord42 83 15.10.16 08:22 Сейчас в теме
Простейший пример вывода таблицы
<div class="table">
  
  <div class="row header">
    <div class="col">Артикул</div>
    <div class="col">Наименование</div>
    <div class="col">Количество</div>
  </div>
  
  {% Для Каждого СтрокаТЗ ИЗ Таблица %}
  <div class="row">
    <div class="col">{{СтрокаТЗ.Артикул}}</div>
    <div class="col">{{СтрокаТЗ.Наименование}}</div>
    <div class="col">{{СтрокаТЗ.Количество}}</div>
  </div>
  {% КонецЦикла; %}
  
</div>
Показать


2). Подключить CSS с сайта и оформить таблицу в том виде, в котором это было предусмотрено на сайте.
16. vec435 15 26.10.16 11:26 Сейчас в теме
для неинтерактиной обработки - RegExp
17. fuxic 297 29.10.16 21:36 Сейчас в теме
велосипед красивый, но...
есть стандарт XSLT для HTML/XML)) зачем усложнять своим синтаксисом? шаблонизатор ангулара/кендо пихать в 1с? ножом по сердцу
более того есть стандартные библиотеки скриптов конверсии и красивые стили, которые потянет даже встроенный в 1с хтмлбраузер
18. ArchLord42 83 30.10.16 05:52 Сейчас в теме
(17) fuxic, комменты выше читали?
Я уже писал, что XSLT объективно не далеко самый удобный стандарт, генерация даже простого шаблона XSLT, потребует гораздо больше усилий, чем использования шаблонизаторов + плохая читабельность больших шаблонов.
Да и это не мой синтаксис, взят он, как вы уже заметили из веб ориентированных ЯП
XSLT кстати, если судить по вашему комментарию тоже велосипед и усложняет все своим синтаксисом, потому что пришел он от туда же, просто в данный момент поддерживается нативно 1Ской.
Несколько лет назад в вебе было модно юзать XSLT, но потом он умер(в году так 2010) из-за причин, которые я уже описал и начали появились велосипеды со своим синтаксисом, которые в итоге своего развития так усложняли все, что начинающему программисту было проще выучить 3 разных синтаксиса различных шаблонизаторов, чем XSLT.
А что вы думаете о JSON?) Придумали тут костыль, со своим синтаксисом, когда есть XML?)))
RozalievAndrey; chemezov; +2 Ответить
19. пользователь 23.12.17 15:55
Сообщение было скрыто модератором.
...
20. nbeliaev 826 29.10.20 09:38 Сейчас в теме
Автор, спасибо большое!
Оставьте свое сообщение