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

27.05.15

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

Учитывая то, что в 1с появились http сервисы, которые позволяют сделать из 1с своего рода CMS, возникает необходимость формирования большого количества различных html документов из этого самого 1с. Можно формировать их с помощью конкатенации строк или с помощью объекта ДокументDOM или HTML, но это очень трудоемко и превращает код непонятно во что.

Для решения этой проблемы я сделал обработку, которая на основе исходного "шаблона" и данных формирует выходной XML, который может быть и HTML'ем запросто :).

Также эта обработка решает проблему формирования отчетов в html, например для рассылки их по почте.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ШаблонизаторXPath.002.epf
.epf 11,28Kb
33 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

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

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

На вход к шаблону подается структура с данными. Данные хранятся в полях структуры. Данные могут содержать таблицы значений и массивы - тогда с помощью языка шаблонов можно вывести в HTML список или таблицу.

Язык шаблонов описан в самой обработке, но на всякий случай пробегусь по нему.

Описание языка шаблонов версии 002. Относительно версии 001 появилась возможность указывать области, которые не выводятся, если в структуре нет переменной.

Вывод переменной

<var name="ИмяПеременной"/>

Тег var заменяется на XML представление этой переменной. Таким образом на месте ссылок выводится уникальтный идентификатор, если надо выводить предстваление, сделует об этом позаботится в блоке заполенния даных. Если ИмяПеременной отсутствует в данных, или оно равно Неопределено, то тег просто вырежется.

Опциональный вывод области

<area name="ИмяПеременной">Содержимое области, в т.ч. поля, списки, другие области</area>

Если ИмяПеременной отсутствует в данных, или оно равно Неопределено, то тег просто вырежется, в остальгных случаях содержимое тега будет заполнено ву соответствии с шаблоном.

Вывод коллекции

<list name="ИмяПеременной">

Произвольный кусок шаблона, в т.ч. включающий другий списки, области, переменные

<repeat>часть шаблона, которая будет повторена и заполнена в контексте элемента коллекции <var name="ИмяПоляКоллекции"/>, тут также могут быть выведены списки, области, поля</repeat>

Произвольный кусок шаблона, в т.ч. включающий другий списки, области, переменные

</list>

Вывод коллекции (массива структур или таблицы значений) осуществляется на месте тега list. В случае пустой коллекции - тег будет просто вырезан. Часть шаблона <repeat>...<repeat> будет заполнена по правилам шаблона, но доступны будут не только поля более верхних уровней структуры, но и поля конкретного элементв коллекции. Для массива структур - это поля структур-элементов массива, для таблицы значений - колонки таблицы значений.

Вывод вложенной структуры

<struct name="ИмяПеременной">

Произвольный кусок шаблона, в т.ч. включающий другий списки, области, переменные, в т.ч. в контексте структуры ИмяПеременной

</struct>

Вывод вложенной структуры похож на вывод списка. Также если структура пустая - тег будет просто вырезан, также внутри структуры доступны все поля самой структуры, а также все поля верхних уровней структуры данных, из которой заполняется шаблон.

 

Обработка заполнения поддерживает произвольную вложенность шаблонов друг в друга, т.е. может быть структура с массивом структур, у которой в полях другие структуры или таблицы значений. Единственное, с чем нужно быть осторожным - это с именами полей - если они повторяются внутри иерархии (т.е. на верхнем уровене есть поле "Номенклатура" и внутри одной из вложенных структур также есть поле "номенклатура") то нет гарантии, что в нужное место выведется поле с того уровня иерархии, который создатель шаблона имеет ввиду. Так происходит из-за того, что обход идет без предварительной сортировки по глубине вложенности. Для того, чтобы быть уверенным в результате - полям лучше давать имена, уникальные по всей структуре вложенности.

Обработка содержит в себе функции для заполнения шаблона, а также интерфейс для генерации данных для шаблона, самого шаблона и просмотра результата заполнения шаблона на основе сформированных данных.

Также по кнопке "Установить шаблон и модуль из макетов" шаблон и модуль для генерации данных будут заполены примером, поясняющим все варианты использования языка шаблона.

Вступайте в нашу телеграмм-группу Инфостарт

HTML XML XPath Шаблонизатор

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    69560    364    170    

316

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    260165    1447    421    

1169

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    38580    107    46    

122

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    56491    113    31    

125

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    25537    93    46    

102

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

6000 руб.

25.02.2026    3967    13    1    

18

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    53268    185    63    

217

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

В крупных внедрениях 1С типовая почти всегда дополнена расширениями, а конфигуратор показывает их раздельно. «Поиск ссылок на объект» в ERP — минуты ожидания, и даже после него неясно: типовое поведение, дополнение из расширения или переопределённый обработчик. Analyzer 1C — веб-инструмент, который парсит выгрузку (основную плюс все расширения) и собирает единый граф знаний в ArangoDB. Любой межсущностный запрос — за доли секунды. Внутри: — Сквозные пометки «Доб.» / «Заимств.» / переопределения во всём UI — Импакт-анализ через подписки, регламентные задания и переопределения — Анализ запросов BSL: кто читает и пишет объект — модули, формы, СКД — Роли: матрица «роль × объект × право», RLS, программные РольДоступна, PRIV — Конструктор профилей, граф функций, обработчики обновления, XDTO, функциональные опции — Мгновенный поиск по конфигурации Разворачивается за минуту через Docker, без интернета. Любая 1С:Предприятие 8.3+.

12200 руб.

17.04.2026    6479    27    28    

41
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. acsent 1207 07.05.26 11:13 Сейчас в теме
Если добавить в функцию "ЗаполнитьБлокРекурсивно" то имена у структур и таблиц могут пересекаться
Иначе
	
	Если КлючИЗначение.Значение = Неопределено Тогда Продолжить; КонецЕсли;
	
	// все теги <var>, с атрибутом-именем переменной 
	Если ВнутриДругогоУзла Тогда
		xpath = СтрШаблон(".//var[@name='%1']",КлючИЗначение.Ключ);
	Иначе	
		xpath = СтрШаблон(".//var[@name='%1' and not(ancestor::list or ancestor::struct)]",КлючИЗначение.Ключ);
	КонецЕсли;	
	Результат = Документ.ВычислитьВыражениеXPath(xpath, ТекущийЭлементДокумента, Разыменователь, ТипРезультатаDOMXPath.НеупорядоченныйИтераторУзлов);
	Пока Истина Цикл
		Узел = Результат.ПолучитьСледующий();
		Если Узел = Неопределено Тогда Прервать; КонецЕсли;
		
		РодительскийУзел = Узел.РодительскийУзел;
		Подстановка = Документ.СоздатьТекстовыйУзел(XMLСтрока(КлючИЗначение.Значение));
		РодительскийУзел.ЗаменитьДочерний(Подстановка, Узел);
	КонецЦикла;
Показать
Для отправки сообщения требуется регистрация/авторизация