А1Э_Механизмы - паттерн publisher/subscriber, расширение расширений, БСП без головной боли и прочие вкусности

0. 232 06.04.21 22:49 Сейчас в теме
Вы хотели бы иметь возможность разработать функциональный блок, а потом подключать его к документам одной строкой кода, без многочисленных вставок в модули и формы? А как насчет возможности доработки расширений другими расширениями? Как насчет возможности создавать механизмы с хуками, на которые смогут подписаться другие разработчики и дополнить их?

В нормальных ЯП одним из способов реализации всего этого является паттерн "Издатель/подписчик" (publisher/subscriber, pub/sub). В этой статье мы поговорим о том, как сделать это в 1С.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. milkers 2509 07.04.21 12:37 Сейчас в теме
Ставлю плюс за проделанную работу. Но прежде всего хочу напомнить коллегам о безопасности кода. Перед внедрением подобных механизмов придется потратить кучу времени на проверку кода на вредоносные вкрапления. Тем более, что часть кода может подгружаться из внешних источников.
Shmell; Rustig; infosoft-v; +3 Ответить
2. Enigma 232 07.04.21 12:57 Сейчас в теме
(1) На всякий случай сразу уточняю, что все, что скачивается, выложено на githib под открытой лицензией MIT. Можно посмотреть там, или же скачать и открыть в конфигураторе (есть отдельная кнопка).
9. pparshin 337 14.04.21 12:32 Сейчас в теме
(1) Согласен по поводу безопасности. Считаю, что в тексте публикации должны быть предупреждения по поводу загрузки стороннего кода. А на github может быть выложено что угодно. К тому код не "может подгружаться", а подгружается в обязательном порядке в пункте 2.
10. Enigma 232 14.04.21 13:11 Сейчас в теме
(9) Согласен, отредактирую статью с уточнением.
3. noprogrammer 207 12.04.21 09:48 Сейчас в теме
Работа конечно продела очень большая, но, что бы во всем этом разобраться........

Общий модуль "А1Э_Перечисления", внутри модуль:

#Если НЕ Клиент Тогда
Функция ИмяЗначения(ПеречислениеСсылка) Экспорт
ИмяПеречисления = ПеречислениеСсылка.Метаданные().Имя;
ИндексЗначения = Перечисления[ИмяПеречисления].Индекс(ПеречислениеСсылка);
ИмяЗначения = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначения].Имя;
Возврат ИмяЗначения;
КонецФункции
#КонецЕсли



Весь модуль заменяется одной строчкой кода
#Если НЕ Клиент Тогда
Функция ИмяЗначения(ПеречислениеСсылка) Экспорт
Возврат xmlСтрока(ПеречислениеСсылка);
КонецФункции
#КонецЕсли
Alex17; portwein; mozz; lolipoka; Enigma; NoRazum; +6 Ответить
4. NoRazum 28 12.04.21 10:29 Сейчас в теме
(3)
xmlСтрока


Всегда пользовался первым вариантом.
Благодарю.
Век живи век учись
6. Enigma 232 12.04.21 10:45 Сейчас в теме
(3) Замечу, что приведенный выше код был взят с сайта ИТС. Но я согласен, что Ваш вариант лучше. Исправлю в ближайшей версии.
5. Ambakollajder 12.04.21 10:35 Сейчас в теме
"Все нужное просто, все сложное не нужно." - простым и нужным такое может сделать только платформа 1С, вычислить выполнить, запустить в фоне конфигуратор - все это сложно.
7. itoptimum 18 13.04.21 14:02 Сейчас в теме
На самом деле, данная идея может оказаться полезной для оБСПечевания конфигурации на обычных формах как раз за счет отсутствия многих фишек УФ. Прикручивая последние БСП к обычным формам, приходит в голову подобная мысль.)
8. Enigma 232 13.04.21 15:23 Сейчас в теме
(7) К сожалению, весь существующий код завязан на УФ. Я даже не знаю, возможна ли выгрузка обычных форм в XML, чтобы их можно было программно редактировать.
Оставьте свое сообщение
Вопросы с вознаграждением