Рендеринг нестандартных интерфейсов на стороне сервера: «Элемент» в качестве бекенда для HTMX

29.01.25

Разработка - Работа с интерфейсом

Как быстро реализовать на 1С:Элемент любой нестандартный интерфейс, используя инструмент HTMX и серверный рендеринг.

Рендеринг нестандартных интерфейсов на стороне сервера: «Элемент» в качестве бекенда для HTMX

 

«1С:Предприятие.Элемент» предоставляет широкий спектр возможностей для создания приложений различных форматов. Приложения на Технологии по умолчанию поддерживают множество пользовательских сценариев, работу с разных типов устройств, работают в разных браузерах и на разных размерах экранов. Такая универсальность по умолчанию подразумевает ряд определенных вендором правил и рекомендаций по проектированию пользовательских интерфейсов.

 

Рисунок 1 – Пример интерфейса приложения на «1С:Элемент»

 

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

Забегая вперед, наиболее удачным для «мира 1С» оказалось совместное использования Элемента с JavaScript библиотекой HTMX. При наиболее используемом подходе к разработке веб-сайтов клиент получает данные в формате JSON и должен самостоятельно управлять их отображением на странице. После получения JSON контента разработчику нужно вручную преобразовать эти данные в конечный HTML. При всей гибкости и удобства современных инструментов фронтенд разработки, написания клиентского кода в таком случае потребует дополнительных затрат и, в большинстве случаев, разработка ведется на отличной от серверной части технологии.

 

Какой подход предлагает HTMX?

Вместо того чтобы получать данные в формате JSON и затем преобразовывать их в HTML, сервер возвращает уже готовые HTML-фрагменты.  За счет того, что возвращается не весь контент, а только отдельный компонент, получается привычное современным пользователям одностраничное приложение. На клиенте нужно только указать три свойства:

  1. При каком событии делать запрос
  2. По какому адресу обращаться за HTML фрагментом
  3. В каком месте DOM дерева разместить ответ

Эту задачу и решает HTMX, который с помощью лаконичного синтаксиса позволяет управлять этими свойствами напрямую из HTML разметки.

 

 

Рисунок 2 – Пример ответа сервера при работе с HTMX

 

HTMX – это современная легковесная JavaScript библиотека, которая позволяет управлять поведением AJAX через атрибуты у узлов HTML.

hx-get – Выполняет GET запрос по указанному адресу, по умолчанию заменяет телом ответа содержимое тега, из которого вызывался

hx-target – Назначает элемент, у которого произойдет замена, может быть как классом так и идентификатором

hx-swap – «Режим» замены, заменяет только содержимое тега или тег целиком

Только с помощью перечисленных атрибутов можно реализовать уже множество элементов для взаимодействия с веб-страницей. Использование такого подхода решает главную проблему SSR (Рендеринг на стороне сервера) приложений – малая динамичность и необходимость перерисовывать всё содержимое HTML при взаимодействии. Такие приложения могут быть более производительными, поскольку не требуют дополнительных вычислений на стороне клиента, и ощущаются отзывчивыми.

 

Рисунок 3 – Пример тега с атрибутом HTMX

 

 

Почему Элемент отлично сочетается с HTMX

 

Рисунок 4 – Пример формирования компонента интерфейса в «Элементе»

 

  1. Необходимые нам http методы поднимаются в «1 клик» средствами сервера Элемента
  2. Встроенные механизмы авторизации и аутентификации работают из коробки
  3. Синтаксис языка, в частности для работы со строками, очень удобен для работы с HTMX
  4. Возможность определения нескольких «интерфейсов» как объекта 1 проекта.

 

Рисунок 5 – Пример альтернативного интерфейс главного экрана, реализован с помощью HTMX

 

Рисунок 6 – Альтернативный интерфейс работы с табличной частью объекта «Заявка на мастер класс»

 

 

Триггеры запросов

Атрибут hx-trigger в HTMX позволяет разработчикам определять, какие события на стороне клиента будут инициировать ответы от сервера.

Помимо привычных событий, например, click или load, HTMX позволяет отправлять с сервера произвольные события.

Для того чтобы вызвать событие на клиенте, нужно при формировании ответа указать идентификатор события в заголовке «Hx-Trigger»

 

Рисунок 7 -Пример ответа от сервера с триггером «updateTable» в заголовке

 

Это означает что мы можем привязать любой запрос на наше событие «updateTable». Это позволяет создавать сложные взаимодействия между компонентами, где выполнение 1 действия влияет сразу на несколько компонентов.

Например, при выборе продукции, обновляется не только кнопка «добавить», но и актуализируется список выбранной продукции:

 

 

Рисунок 8 – Пример взаимодействия между разными частями DOM дерева

 

 

Минимальное взаимодействие с JavaScript

JavaScript это очень мощный инструмент, совместное использование которого с другими технологиями является частью множества успешных продуктов. Однако, если речь идёт о создании нового приложения, не всегда стоит расширять список используемых технологий только ради использования новых технологий – это может потребовать дополнительных компетенций внутри команды и, как следствие, затрат на реализацию приложения.

При подходе, который мы рассматриваем сегодня, прикладной разработчик продолжает писать весь код на встроенном языке «1С:Предприятие.Элемент». Мы любим синтаксис языка Элемента, поэтому если решаемая задача позволяет ограничиться только его использованием при прочих равных – HTMX позволит не прибегать к использованию JavaScript вовсе. Однако и не ограничивает проект технически – если специфический JavaScript код всё-таки понадобится, его можно также встроить в проект.

Это позволяет работать с интерфейсом, например, с помощью такого синтаксиса:

 

Рисунок 9 – Алгоритм маршрутизации на Элементе

 

Рисунок 10 – Метод обработки добавления продукции в заявку

 

Рисунок 11 – Метод отображения доступных желаемых дат

 

Взаимодействия пользователя со страницей на HTMX используют сервисы, которые предполагают тарификацию в облаке 1cmycloud, этот фактор стоит учитывать при использовании таких инструментов. Согласно предварительным условиям, тарификация сервиса будет начисляться по времени активного использования сервиса, что также можно учесть в архитектуре приложения чтобы сократить время выполнения http сервисов (Например, выполнять популярные и долгие операции с помощью механизма запланированных заданий заранее)

Мы получаем стек, который сочетает в себе всю мощь и скорость разработки от ORM модели «1С:Предприятие» (Справочники, Документы, Регистры, Запросы), удобный, современный язык «Элемента»: функциональные типы, контрактное программирование, гибкость современных веб приложений и, самое главное, свободу выбора: разработчик сможет сочетать формы с HTMX вместе с «родными» формами.

1C:Элемент Пользовательский интерфейс Личный кабинет

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55695    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    64086    45    60    

83

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    20021    28    6    

44

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    24029    mrXoxot    44    

130

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    12374    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    18482    1230    elcoan    53    

127

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    12963    167    acces969    31    

126

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    8207    kalyaka    6    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. NoRazum 29 30.01.25 09:05 Сейчас в теме
@ВПроекте

что это такое?

подход интересный
2. deplatoon 8 30.01.25 11:29 Сейчас в теме
(1) в языке Элемента есть модификаторы видимости, по умолчанию объект и методы не видны из других подсистем/модулей.

Такую аннотацию можно задать как объекту, так и каждому модулю - такой некий аналог "Экспорт" из платформы
@ВПодсистеме - метод видно за пределами объекта, но только в рамках подсистемы
@ВПроекте - метод видно из других подсистем
@Глобально - метод/объект видно везде, даже за пределами проекта. Зачем? Потому что в Элементе существуют библиотеки и межпроектное взаимодействие поэтому это вот туда
3. leonvlas 31.01.25 08:57 Сейчас в теме
Концепцию не понял.
Вы бы описали на какой версии это делаете. От технологи к технологии там много что меняется.
В каком месте перехватывать генерацию страницы или вы желаете весь фронт заменить на https://htmx.org/?
5. deplatoon 8 31.01.25 10:35 Сейчас в теме
(3) В статье использовалась 6.1, на пятерке всё то же самое.
Конкретно этот проект устроен так:
1. Приложение для клиента содержит только лишь контейнер html где внутри рулит всем htmx, вызывает веб сервисы этого же приложения. Все красивое, с анимациями, без лишних кнопок
2. Приложение - бек офис. На нативных формах элемента, где можно работать с данными в более привычном бизнесу виде.
3. Заточенное под мобильные экраны приложение с упрощенной формой конкретную роль сотрудника. Тоже на родных формах элемента, но очень упрощен, только для создания документов одного типа

Получается при таком сочетании что каждый тип пользователя получает привычный ему интерфейс, но и от скорости разработки на нативных формах мы не отказываемся. Это три разных "интерфейса" (в терминологии Элемента КлиентскихПриложения") работают в одной базе данных, физически являются одним веб сайтом, просто с разными точками входа. Это очень легко поддерживать и дорабатывать, т.к. это монолит
test.1cmycloud.com/applications/App - Пользователь
test.1cmycloud.com/applications/App/admin - бек офис для сотрудников
test.1cmycloud.com/applications/App/employee - рабочее место сотрудника конкретной роли
4. Feelthis 38 31.01.25 10:02 Сейчас в теме
Почему нужно платить 1сmycloud? Там что код в облаке компилируется \ хостится ?
6. deplatoon 8 31.01.25 10:42 Сейчас в теме
(4) Да, основное применение 1С:Предприятие.Элемент - в облаке. Облако от вендора - 1cmycloud.com содержит уже сервер Элемента, и позволяет в качестве сервиса хранить там свои приложения/разрабатывать/хранить файлы используемые в приложениях. Пока ещё бета - всем всё бесплатно, но после релиза тарификацию включат, предварительные тарифы 1С озвучивали и там прям недорого
7. Feelthis 38 31.01.25 15:28 Сейчас в теме
(6) Интерфейс то у них схож с 8.5 новой платформой. У них есть какие то преимущества по сравнению с 8.5? Я смотрю какой то другой синтаксис у 1С Элемент? Это скорее минус чем плюс. Заново привыкать к новому синтаксису и нюансам.
8. s_vidyakin 68 01.02.25 03:42 Сейчас в теме
(7) Это 8.5 основан на интерфейсе Элемента. Ему уже почти 2 года, и вот 8.5 к нему подтянули
9. deplatoon 8 01.02.25 08:05 Сейчас в теме
(7) Интерфейс общий во многих моментах, новый синтаксис - вкусовщина, многим непривычно, но также у него уже появились и фанаты, которые пишут такие вот статьи.
А про Элемент, кратко то головной боли при разработке меньше:
1. Лицензии позволяют делать публичные сервисы
2. Современный стек под капотом, изначально ориентированный на веб
3. Настоящая модульность
4. 1cmycloud как песочница для разработки и распространения приложений: быстро сделал, быстро внедрил пользователю, обновил всем пользователям приложения одной кнопкой (не только на конкретном абоненте).
5. Ну и очень много новых технических фишек, из за который он пока больше интересен разработчикам, но большое признание ещё впереди
10. ROk_dev 44 01.02.25 13:55 Сейчас в теме
Ждем когда :) "Сбербанк" перейдет на "Элемент".
Согласится ли нормальный клиент хранить проект или что там в облаке 1cmycloud.com..
Пока только не понятные проекты кто то что то где то сделал.
Хотите изменять интерфейс на сервере вот https://divkit.tech/ru/
На этом фрэйме 11 сервисов только яндекса построены
и все мы ими пользуемся.
11. deplatoon 8 01.02.25 14:48 Сейчас в теме
(10) Никто не ждет что Сбербанк перейдет на Элемент. Вы можете привести критерии нормального клиента, обещаю принести в эту ветку кейс внедрения, если найду подходящий.
Наверняка дивкит тоже отличный инструмент, но его отличия от небольшого HTMX кардинальны - он совершенно не лоукод, а статья про лоукод и ликвидацию состояний компонентов на клиенте.
По аналогии не ждете что Apple перейдет на яндексовский дивкит?
Если иметь реалистичные ожидания от инструментов, не придется разочаровываться.

Для данных, которые невозможно по каким либо причинам хранить в облаке существует возможность установки сервера на свою машину, об этом вендор говорит прямо, никто не скрывает
G.Shatrov; dmx; +2 Ответить
12. afk 91 27.02.25 09:02 Сейчас в теме
Выглядит очень круто. Настраиваемый дизайн - это то, чего не хватает Элементу "из коробки".

Правильно понимаю, что точкой входа на страницу с HTMX будет {Адрес приложения}/api/{Сервис} ?

Для 1сников конечно нужен минимальный пример ) как подключить HTMX и получить экран со своим html и одной действующей кнопкой, например счетчиком
13. afk 91 27.02.25 11:56 Сейчас в теме
(12) Принцип: на форме размещаем КонтейнерHTML, в который записываем нашу страницу HTML с подключенной библиотекой HTMX. Создаем HTTP-сервис, который будет возвращать обновленный блок счетчика. Подключаем сервис через атрибуты тегов на нашей странице. Для передачи текущего значения счетчика на сервер используем скрытое поле.

1. Страница HTML
<ht ml lang='ru'>
<head>
   <met a charset='utf-8'>
   <met a name='viewport' content='width=device-width, initial-scale=1.0'>
   <sc ript src="https://unpkg.com/htmx.org@1.9.10"></sc ript>
</head>
<body>

<div id='counter'>
    <div>Счетчик: 0</div>
    <input type='hidden' id='currentCount' name='count' value='0'>
</div>
<button hx-post='/applications/НАШЕ_ПРИЛОЖЕНИЕ/api/counter/increment'
		hx-target='#counter'
		hx-swap='outerHTML'
		hx-include='#currentCount'>
	Увеличить
</button>

</body>
</html>
Показать


2. создаем HTTP-сервис Counter, который выдает обновленный блок с данными счетчика
- корневой URL = counter
- метод POST increment
- Шаблон = /increment
- обработчик
метод УвеличитьPOSTОбработкаЗапроса(Запрос: HttpСервисЗапрос)
    
    знч ТекСчетчик = новый Число(Запрос.Параметры.ПолучитьПервый("count")) + 1
    знч ТелоОтвета = 
"
<div id='counter'>
    <div>Счетчик: %ТекСчетчик</div>
    <input type='hidden' id='currentCount' name='count' value='%ТекСчетчик'>
</div>

"    
    Запрос.Ответ.УстановитьТело(ТелоОтвета)
;	
Показать
deplatoon; +1 Ответить
14. deplatoon 8 01.03.25 03:58 Сейчас в теме
(12) В примере из статьи я взял точкой входа {Адрес}/htmx
Т.е. отдельное произвольное клиентское приложение по адресу htmx, где на всю страницу просто разместил контейнер.
Но конечно можно собирать первоначальную страничку и сервисом, или вообще разместить index.html на левом бесплатном хостинге, оставив api в облаке
Оставьте свое сообщение