Программное создание расширения

Публикация № 1418255

Разработка - Практика программирования

Расширение программное создание динамическое расширений

Создание нового расширения "на лету", только штатными средствами 1С.

Как известно, расширение может быть выгружено в файлы и собрано из файлов. Значит, можно подготовить файлы, из которых расширение будет собрано, даже если раньше его не существовало. Файлы эти должны соответствовать некоторым требованиям, но легко могут быть созданы программно штатными средствами. Что, собственно, и было выполнено для самых основных объектов. Сразу предупреждаю: работы с формами, общими макетами, общими картинками и собственными прикладными объектами тут нет. По формам и макетам уже достаточно публикаций. Данная работа просто иллюстрирует имеющуюся возможность и может быть превращена в полноценное решение.

Можно создать новое расширение. Можно модифицировать имеющееся. Инструментарий для чтения хмл-файлов, ввиду их невеликих размеров, может быть любой из предложенного в платформе. Я некоторое время раздумывал, а не вытащить ли xsd из платформы для полноценного xdto, но всё-таки остановился на классическом DOM, его в случае изменений платформы проще допиливать, да он и прозрачнее.

Для объектов принята единая нотация. Самое главное - идентификаторы. В приведённом примере они генерируются в коде, и если такой код запускать каждый раз, то, очевидно, "УникальныйИдентификатор" каждый раз будет возвращать новые значения. Поэтому для практического применения рекомендуется единожды эти ID создать, где-то зафиксировать, и передавать и при первом создании, и при программных обновлениях/изменениях. Свойства объектов максимально приближены к описанным в метаданных, задействованы системные перечисления из свойств метаданных.

 
 Служебные вспомогательные механизмы

 

 
 Сериализация объектов расширения

 

 
 Запись в файлы

 

 
 Основная функция

 

И собственно вызов, с указанием каталога, в котором будут созданы файлы расширения:

Успешность=СозданиеФайловРасширения(ПутьПостроения);

 

Далее можно загрузить эти файлы в расширение конкретной или пустой базы. Можно, например, организовать отдельную пустую базу для программной сборки расширений, не имеющих прикладных объектов. Разумеется, для подписок на события наличие прикладных тоже может быть критично.

Далее можно вручную или программно "собрать" расширение.
Напомню, программно это пакетная команда запуска конфигуратора, командная строка, где следует указать /LoadConfigFromFiles
и путь построения (каталог, где находятся файлы), и ключ -format Hierarchical
Сам не делал, желающие могут попробовать. Также, не знаю, как себя ведёт платформа при ключе -AllExtensions.

После загрузки задача сведётся к работе с объектом "РасширениеКонфигурации" и манипуляциям с его данными и свойствами.
Например, из cfe-файла можно создать новое расширение:

ДвоичДанные=Новый ДвоичныеДанные(<ИмяФайлаРасширения>);
НовоеРасширение=РасширенияКонфигурации.Создать();
НовоеРасширение.Записать(ДвоичДанные);

и далее настроить его свойства.

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

Чисто теоретически, можно попробовать сделать прямо в Предприятии свой маленький Конфигуратор для расширений.

Пакетные действия реализованы, например, в Vanessa-runner.

Кому пригодится, будет хорошо.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Darklight 27 06.04.21 14:44 Сейчас в теме
Хорошая статья, как раз имею проекты обработки таких xml конфигураций. Может пригодится
2. artbear 1294 06.04.21 14:45 Сейчас в теме
(0) Интересно.

Дополню:
Сборка расширений из исходников, установка расширений в ИБ (в 2х режимах - через Конфигуратор и через Предприятие) реализована в инструменте vanessa-runner.

Два вида установки потребовались, т.к. пакетная загрузка через Конфигуратор не дает управлять безопасным режимом и защитой от опасных действий.
3. Yashazz 3726 06.04.21 17:35 Сейчас в теме
(2) Да, безопасный режим в этом вопросе слегка мешает.

Собственно, потому я и не стал подробно останавливаться на вопросе самой сборки и/или установки, что решения уже есть. Артур, укажи ссылку на Ванессу, если не сложно - я её в статью вставлю.
4. user953800 07.04.21 09:51 Сейчас в теме
5. Yashazz 3726 07.04.21 17:12 Сейчас в теме
(4) Спасибо. Вставил в публикацию.
6. JohnyDeath 299 09.04.21 17:53 Сейчас в теме
А вот так потом можно перегнать расширение (cfe) в конфигурацию (cf) https://github.com/best-tech/cfe2cf
7. Yashazz 3726 11.04.21 08:52 Сейчас в теме
Оставьте свое сообщение

См. также

Публикаций не найдено

Попробуйте расширить область поиска, проверьте поисковый запрос и повторите попытку.

Или закажите индивидуальную разработку вашего решения.

Создать заказ на разработку