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

06.04.21

Разработка - Механизмы платформы 1С

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

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

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

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

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

 

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

 

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

 

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

 

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

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

 

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

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

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

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

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

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

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

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

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

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

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    2548    dsdred    16    

57

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    5865    dsdred    53    

82

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    5835    YA_418728146    25    

68

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6948    dsdred    36    

113

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    19033    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12743    human_new    27    

76

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9367    YA_418728146    6    

143

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

20.08.2023    6518    sebekerga    54    

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

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

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

Собственно, потому я и не стал подробно останавливаться на вопросе самой сборки и/или установки, что решения уже есть. Артур, укажи ссылку на Ванессу, если не сложно - я её в статью вставлю.
artbear; +1
4. user953800 07.04.21 09:51 Сейчас в теме
5. Yashazz 4722 07.04.21 17:12 Сейчас в теме
(4) Спасибо. Вставил в публикацию.
+
6. JohnyDeath 301 09.04.21 17:53 Сейчас в теме
А вот так потом можно перегнать расширение (cfe) в конфигурацию (cf) https://github.com/best-tech/cfe2cf
dour-dead; brr; Yashazz; +3
7. Yashazz 4722 11.04.21 08:52 Сейчас в теме
(6) Да) Спасибо за ссылку!
+
17. e.kogan 1892 06.12.23 13:04 Сейчас в теме
(6) а обратного нигде не появилось?.. очччень нннада
+
18. JohnyDeath 301 06.12.23 13:11 Сейчас в теме
(17) обратного нет и вряд ли будет. Там слишком много пустот и нюансов.
+
8. Yashazz 4722 12.04.21 16:34 Сейчас в теме
Минутку, я не понял... Почему тот, кто всегда минусует мои публикации, этого тут ещё не сделал?) Что-то не так?))
+
9. triviumfan 93 12.04.21 20:52 Сейчас в теме
(8) наверное, он просто не понимает, зачем минусовать то, что итак мало кому интересно :)
Честное слово, зачем лепить расширение программно?
+
10. Isonic 235 27.05.21 13:02 Сейчас в теме
(9) Тоже хотел задать такой вопрос =) имхо, не вижу практического смысла в этом.
+
11. Yashazz 4722 27.05.21 15:02 Сейчас в теме
(10) Запущена система. Некий механизм создаёт расширение, которое собирается на пустой базе (если нет расширяемых объектов), или на копии с нужными метаданными (если есть); компилирует в cfe, динамически подключает к себе.
Если вам неясно, зачем может быть нужна самодополняющаяся и саморазвивающаяся система, то мне становится вас жаль - у вас слишком узкий круг скучных задач. Также напомню, что внешние обработки по нынешним временам подключать сложнее (доступ, все дела), чем расширения, особенно если их оформить как патчи. Кстати, самоисправляющаяся система - тоже ценная вещь.

Напрягите фантазию, коллеги)) Лепить расширения программно - возможность очень даже нужная)
e.kogan; brr; 33lab; Aphanas; +4 3
15. Nikola23 698 27.09.22 16:44 Сейчас в теме
(11) жаль ваше ЧСВ. Коллега задал вопрос о практическом применении разработки.
Вы вместо ответа - поглумились над "скучной" работой коллеги.
+
12. Yashazz 4722 11.06.21 09:02 Сейчас в теме
Коллеги, внимание, для релиза 8.3.19 изменение, цитирую: "версия формата выгрузки конфигурации в XML-файлы стала равной 2.12"
+
14. ZhokhovM 727 12.05.22 15:25 Сейчас в теме
(12)на всякий для релизов 8.3.20 и 8.3.21 версия формата стала 2.13 и 2.14 соответственно.
+
13. Yashazz 4722 22.07.21 11:31 Сейчас в теме
Помимо прочего, это ещё и способ изменить свойства расширения, которые в штатном встроенном языке "Только чтение". Например, назначение расширения можно поменять (напомню, при программном создании по умолчанию ставится "Адаптация", а нормального способа изменить это нету).
+
16. Serg2000mr 317 21.03.23 04:02 Сейчас в теме
(0) Нельзя без предупреждения все подчистую удалять в папке назначения. Все, что нажито непосильным трудом... ((
afk; +1
Оставьте свое сообщение