Стандартные инструменты конструирования форм в мобильной платформе 1С иногда накладывают ограничения на визуализацию и интерактивность приложения. Когда перед разработчиком стоит задача создать сложный интерфейс (например, панель заказов для планшета с иерархией слева, списком товаров в центре и корзиной справа), штатных элементов управления может быть недостаточно. В таких случаях на помощь приходит Поле HTML-документа. Рассмотрим подробнее, как превратить мобильное приложение 1С в гибкий инструмент с современным дизайном.
Главная проблема, с которой сталкиваются новички при работе с HTML в 1С, — это попытка обновлять интерфейс путем полной перезаписи строки HTML. Это приводит к неприятному мерцанию экрана и потере фокуса. Разберем правильный подход: использование 1С как «бэкенда», а HTML/JS — как «фронтенда». Мы не перезагружаем страницу, а меняем конкретные элементы DOM (Document Object Model) через JavaScript.
Проанализируем структуру такого решения:
ПолеHTMLДокумента.JSON внутрь HTML-поля, где JS-функция распределяет их по нужным блокам.Чтобы обновить остаток товара или сумму в корзине без перезагрузки всей формы, мы воспользуемся методом выполнения JavaScript из кода 1С. Выясним, как это работает на практике. Допустим, у нас есть функция на языке JavaScript, которая обновляет текст в определенном блоке div.
В HTML-коде (в макете) прописываем функцию:
function updatePrice(elementId, newPrice) {
document.getElementById(elementId).innerText = newPrice + ' руб.';
}
Теперь рассмотрим, как вызвать эту функцию из модуля формы 1С. Для этого используется обращение к свойству Документ.defaultView. Это позволяет управлять страницей «на лету».
&НаКлиенте
Процедура ОбновитьЦенуНаФорме(ИдентификаторТовара, Цена)
Сценарий = СтрШаблон("updatePrice('%1', %2);", ИдентификаторТовара, Формат(Цена, "ЧГ=0"));
Элементы.ПолеHTMLИнтерфейс.Документ.defaultView.eval(Сценарий);
КонецПроцедуры
Важный момент: использование eval() удобно для простых команд, но для передачи больших массивов данных (например, всего списка товаров) лучше вызывать конкретные именованные функции JS, передавая им JSON-строку.
Интерфейс должен быть интерактивным. Когда пользователь нажимает кнопку «Добавить в корзину» в HTML-блоке, мобильная платформа должна об этом узнать. Проанализируем два основных способа реализации обратной связи:
<a href="v8auto://click?id=123">) в 1С срабатывает событие ПриНажатии (или ПриИзменении) поля HTML-документа. В параметрах события мы перехватываем этот URL и обрабатываем действие.window.external.ИмяПроцедуры(Параметр).Чтобы ваше HTML-поле не выглядело «чужим» на мобильном устройстве, важно передать стили платформы в CSS. Выясним, как сделать интерфейс адаптивным. Вместо жестко заданных цветов лучше использовать переменные.
Рассмотрим пример программной передачи цветов шрифта и фона из настроек 1С в стили HTML при загрузке формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЦветФона = Элементы.ПолеHTMLИнтерфейс.ЦветФона;
// Формируем блок стилей с использованием CSS-переменных
ТекстСтилей = "
| :root {
| --main-bg-color: " + ПолучитьЦветВФорматеHex(ЦветФона) + ";
| --main-text-color: #333;
| }
| body { background-color: var(--main-bg-color); color: var(--main-text-color); }
|";
// Далее передаем эти стили в HTML-документ
КонецПроцедуры
Для реализации иерархии товаров (как просил автор темы) не обязательно писать всё с нуля. Разберем, какие библиотеки можно внедрить в мобильное приложение:
Vue.js прямо в макет 1С. Это обеспечит реактивность: как только 1С передаст новый JSON с остатками, Vue сам перерисует нужные части страницы.Работа в мобильной платформе имеет свои особенности, которые мы должны учитывать:
1. Работа с изображениями: Мобильное устройство может не иметь доступа к интернету. Поэтому все картинки товаров лучше передавать в HTML в формате Base64. Это увеличивает объем передаваемых данных, но гарантирует мгновенное отображение картинок из кэша или базы данных 1С.
2. Виртуальный скроллинг: Если в списке товаров тысячи позиций, обычный HTML-список заставит WebView «тормозить». Рекомендуется использовать библиотеки с виртуализацией (отрисовка только видимых элементов), что обеспечит плавность прокрутки на уровне нативных приложений Android или iOS.
3. WebView: Помните, что 1С использует встроенный движок браузера устройства. На старых планшетах Android возможности CSS могут быть ограничены, поэтому старайтесь использовать проверенные временем свойства верстки.
Мы проанализировали ситуацию и выяснили, что создание гибридного приложения (1С + HTML) — это наиболее эффективный способ получить сложный и красивый интерфейс на мобильной платформе. Такой подход позволяет:
Главное — грамотно разделить ответственность: 1С отвечает за бизнес-логику и хранение данных, а HTML/JS — исключительно за их визуальное представление и взаимодействие с пользователем.