Модульная архитектура или пара слов о расширениях. Часть I (мысли, рассуждения)

14.02.22

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

Статья-размышление о том, какое может быть применение технологии расширений 1С и зачем нам, разработчикам/программистам на 1С, знать общепринятые паттерны проектирования приложений. Итак, а что если я вам скажу, что технология расширений 1С - это одно из прекрасных новшеств компании 1С? Пусть эта статья будет хвалебной одой расширениям 1С.

С самого появления расширений мне понравилось работать с расширениями. Да, в том уже теперь далеком 2014 году, идея применения расширений была порой пугающей, мало кто решался на реализацию доработок типовых или разработок своих нетленок с применением расширений, но эта технология мне приглянулась, и до сих пор я уверен, что это классная штука и у технологии расширений светлое, а может даже и великое, будущее. Возможно благодаря экспериментаторам архитектура расширений так значительно улучшилась. Когда я где-то слышу как кто-то ругает расширения, как они не работают или с их применением система глючит, то я всего лишь цитирую Альфа. 

 

 

Перейду, пожалуй, к делу.

Давайте представим, что нам требуется разработать какую-то свою нетленочку, допустим для пункта выдачи посылок курьерской службы «Официальные отрезки».

Нам даны примерно следующие требования:

Оператор пункта выдачи курьерской службы принимает посылки от экспедитора и выдает клиентам службы посылки или конверты, кроме того оператор может принимать посылки или конверты от клиентов. У данной программы имеется интеграция с другой системой, которая расположена на удаленном сервере (а может быть и где-то в облаке) в главном офисе «Официальные отрезки».

 

 Любое совпадение с реальным проектом, ТЗ или чьим-то готовым продуктом прошу считать чистым совпадением.

Давайте сформулируем основные условия нашего проекта:

  1. В программе присутствует возможность выдавать посылку или конверт клиенту
  2. В программе присутствует возможность принимать от экспедитора посылки или конверты
  3. В программе присутствует возможность принимать от клиентов посылки или конверты
  4. В программе присутствует возможность передавать посылки или конверты экспедитору в распределительный центр
  5. У программы имеется интеграция с другой программой

Таким образом мы выделили основные процессы работы оператора с программой. Давайте теперь попробуем детализировать эти процессы путем уточнения требований у нашего заказчика.

  1. Оператору поступает информация в его систему из внешней системы о том, что запланировано поступление посылочек. Данная информация может содержать: дату, время подвоза и контактный номер экспедитора
  2. В момент приема посылок от экспедитора отправляется информация клиенту о том, что посылочка ждет  его в пункте выдачи курьерской службы.
  3. Для передачи посылочек в распределительный центр оператор должен отправить информацию во внешнюю систему

Думаю, для того чтобы заложить некоторый «скелет» или как все сейчас говорят: «подготовить MVP» нам будет достаточно такого описания.

А теперь предлагаю  поразмышлять и взглянуть на «сферического коня в вакууме».

 

Поразмышляли?

Тогда давайте продолжим!

Теперь попробуем выделить области (подсистемы) нашей программы:

  1. Интеграция с какой-то внешней системой
    1. Отправка информации
    2. Получение информации
  2. Хранение информации о посылках или конвертах
  3. Прием и передача (выдача) посылок или конвертов в распределительный центр

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

 

 

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

По сути приложение разработанное на 1С считается монолитом, микросервис на 1С та еще наверно задачка, поэтому предлагаю взглянуть на так называемую модульную архитектуру. Как думаете можно ли примерить модульную архитектуру к 1С? Вы скажите нет? Вот и брат мой так считает. А вот я уверен, что можно!

Обратимся все к тому же гуглу:

Модульная архитектура программного обеспечения – это подход к разработке, при котором программа разбивается на независимые компоненты, которые могут взаимодействовать между собой посредством четко описанных контрактов. Эти компоненты – модули – должны обладать несколькими признаками. Первый – инкапсуляция (они должны скрывать свою реализацию от внешнего окружения), второй – слабая связность (модули взаимодействуют только с помощью заранее оговоренных контрактов), третий – динамичность (возможность замещаться «на лету», без необходимости остановки всего приложения).

Попробуем к этому, найденному во всемирной паутине, определению притянуть наши расширения 1С.

  1. Расширение может скрывать свою реализацию от основной конфигурации или других расширений;
  2. Расширения могут быть слабосвязанными;
  3. При подключении расширения или его обновления можно не перезапускать 1С;
  4. Можно организовать взаимодействие через экспортные процедуры/функции и, в принципе, эти процедуры/функции можно назвать специальными контрактами.

Двигаемся дальше и вспомним о выделенных областях нашего приложения и, опираясь на сформулированные области, попробуем выделить наши модули:

  1. Модуль API для доступа из внешней системы к нашей программе;
  2. Модуль отправки информации во внешнюю систему;
  3. Модуль пользовательского интерфейса для взаимодействия Оператора с нашим приложением.

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

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

На этом моменте я бы хотел остановиться и поразмышлять в комментариях об объектах, какие бы вы объекты создали в основной конфигурации, а какие в расширениях и вообще интересно узнать подобный подход кто-нибудь использовал в рабочем контуре?

 

Продолжение своих размышлений перенесу в другую статью с уже готовым тем самым MVP.

ну, в общем

To Be Continued (Short 2017) - IMDb

...

 
 P.S.

Кстати, в INFOSTART ERP community edition используется модульная архитектура. 

А еще у нас в Воронеже есть профессиональное околоодинесное сообщество Желтый клуб

 

расширения модульная архитектура разработка

См. также

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

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7443    bayselonarrend    20    

154

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

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

13.03.2024    5942    dsdred    16    

80

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

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

24.01.2024    17666    YA_418728146    26    

71

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

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

11.12.2023    11222    dsdred    44    

130

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

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

06.10.2023    23757    SeiOkami    48    

135

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

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

14.09.2023    18828    human_new    27    

80

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

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

28.08.2023    14730    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kuntashov 463 14.02.22 13:17 Сейчас в теме
Дополню референсами:

Одно из первых публичных решений с модульной архитектурой на расширениях у IRP Team, Дмитрий Шерстобитов наверняка много может про это рассказать. Их репозиторий https://github.com/IRPTeam/IRP/

Еще про модульную архитектуру был доклад Арсения Геращенко на митапе "Путь к идеальному коду" https://infostart.ru/events/1313870/

Еще говоря про модульную архитектуру, хоть и не про расширения, не могу не вспомнить публикацию Евгения Павлюка про его рефакторинг xUnitFor1C от монолитной обработки к архитектуре с плагинами https://habr.com/en/post/270061/
native-api; Serg O.; o.nikolaev; Dementor; gortol; artbear; amon_ra; Kolunya; +8 Ответить
2. amon_ra 61 14.02.22 13:54 Сейчас в теме
(1) во, именно на такой комментарий я надеялся)
3. Yashazz 4790 14.02.22 15:53 Сейчас в теме
Обрывок трепотни на общеизвестную тему. Ни системного изложения, ни упорядоченных содержательных мыслей, так, пара рассуждизмов, общие слова, вода и "смишные" картиночки. Хрень.
maksa2005; Sergafan10; lvictor58; gubanoff; ya.Avoronov; FatPanzer; dabu-dabu; AnryMc; baracuda; Neuroproton; user790708; collider; azhigalev; Dach; Cmapnep; triviumfan; mrChOP93; EliasShy; Evg-Lylyk; Steelvan; gybson; amon_ra; +22 4 Ответить
4. Necessitudo 14.02.22 18:21 Сейчас в теме
Посмотрел бы как вы будете "оговаривать" контракты без абстрактных классов/интерфейсов. А насчёт слабой связанности...Вызывать из одного расширения другое это кажется похоже на выстрел себе в коленку.
zqzq; Dementor; user790708; Dach; JohnyDeath; +5 Ответить
5. JohnyDeath 302 14.02.22 19:19 Сейчас в теме
(4) да, самое главное, что между расширениями, а также между ядром и расширениями нет никаких контрактов.
Есть только контракт между расширением и ядром. Только в одну сторону - от ядра. Поэтому "модульность" такая себе нарисовывается
Dementor; Yashazz; German; user790708; Артано; +5 Ответить
8. noprogrammer 239 14.02.22 21:17 Сейчас в теме
(5) Не совсем так. Расширения замечательно работают в других расширениях (как пример есть расширение "Вложения" или "Структура подчиненности" - им не важно в каких расширениях работать - все очень прозрачно ). Конечно со ссылочными типами данных все намного сложнее, но судя по тенденции - платформа активное развивается в этом направление и очень скоро грань между конфигурацией и расширением (с точки зрения возможностей) сотрется совсем. А то, что все рано или поздно придет к модульности - лично я не сомневаюсь, ибо невозможно бесконечно развивать огромный неуправляемый монолит.
12. amon_ra 61 14.02.22 21:41 Сейчас в теме
(8) вот, я тоже так считаю!)
27. Darklight 33 15.02.22 11:04 Сейчас в теме
(8)У меня есть серьёзное подозрение - что разработчики типовых конфигураций 1С уже ведут разработку актуальных управляемых конфигураций не как монолит - а по отдельным модулям (конфигурациям, может и расширениям) - а потом просто сводят всё в единый монолит (так как эта модульность у них условна - нет единой технологии поставки так решений, и есть куча проблем сведения - которые они решают "через пень колоду" поэтому не могут этим нагружать клиентов; как и есть традиция поставлять все решения едиными монолитами - они так лицензируются и так же сопровождаются). Но это вполне позволяет вести разработку в отдельных модулях-конфигурациях. Возможно и EDT был создан для этого (и поддержка GIT тоже тут кстати - там есть подходящие модели ведения проектов) - так как в нём такой процесс разработки построить куда проще - да и плагины для него соответствующие создать можно!

На это указывает то, как они сейчас делят всё на набор стандартных библиотек (уже давно не только одна единственная БСП - да и её тоже наверняка собирают по отдельным подсистемам). Но и учётные части конфигураций сейчас уже тоже содержат всё больше и больше единого кода - наверняка скоро тоже будут все собираться из единых модулей! По крайней мере - версии КОРП и ПРОФ наверняка уже сейчас собираются из единой кодовой базы (автоматически, а не вручную), как собираются и различные бандлы (например бандл "1С:ERP. Управление холдингом", или аналогичный с ERP и 1C Документооборотом)!

Вот отработаю технологию - того глядишь и в новом поколении платформы она уже появится в составе архитектуры этой платформы. А все типовые решения будут поставляться как наборы модулей - лет так через 30...
И так же будут лицензироваться (вот только цены на модули явно подрастут - стоимость одиночных, но состоящих из нескольких модулей решений будет куда выше - впрочем на пакеты модулей буду давать большие скидки).
Но вероятно может измениться и модель лицензирования модулей - как принято сейчас в других конкурирующих модульных учётных системах - каждый модуль не просто будет требовать отдельную лицензию (привет 1С .7.7) - но она ещё и на определённое количество пользователей будет распространятся (которым её выдавать/привязывать нужно будет).
Может поэтому никакой модульности в типовых конфигурациях и в платформе 1С Предприятие 8 не будет - только в будущем новом поколении - ведь так или иначе придётся менять всю модель лицензирования и сопровождения!
Это, конечно, всё только гипотетически - не факт что так всё и будет!

Но это не мешает вести модульную разработку внутри своей инфраструктуры - а потребителям выкатывать уже сведённый продукт!
30. noprogrammer 239 15.02.22 14:12 Сейчас в теме
(27)
У меня есть серьёзное подозрение - что разработчики типовых конфигураций 1С уже ведут разработку актуальных управляемых конфигураций не как монолит ....

Очень сомнительно (я конечно не спец по типовым, но то, что иногда смотрю заставляет усомнится в этом предположении)

На это указывает то, как они сейчас делят всё на набор стандартных библиотек (уже давно не только одна единственная БСП - да и её тоже наверняка собирают по отдельным подсистемам).

Как раз с БСП все очень и очень печально (в плане модульности)

Но это не мешает вести модульную разработку внутри своей инфраструктуры - а потребителям выкатывать уже сведённый продукт!

Полностью с этим согласен.

P.S. Вообще не думаю, что в типовых конфигурация когда либо появится эта самая модульность, по одной простой причине - в 1С работают гении (и это не стеб я в этом абсолютно убежден и реально восхищаюсь ими). Желание использовать модульность появляется тогда, когда понимаешь, что мозгов уже не хватает, что бы разбираться в одной большой монолитной (с миллиона взаимосвязей) конфигурации. А если ты способен писать сложные запросы на 50 листов (собирающиеся из разных мест огромной системы) и а главное помнить все эти взаимосвязи - модульность тебе как бы и не нужна. Проблема в том, что не все такие гении (мне например безумно тяжело разбираться в огромной системе) - отсюда и желание облегчить себе жизнь.
Dementor; +1 Ответить
32. Darklight 33 15.02.22 14:51 Сейчас в теме
(30)
Очень сомнительно (я конечно не спец по типовым, но то, что иногда смотрю заставляет усомнится в этом предположении)

У меня как раз наоборот - то что я смотрю - заставляет меня усомнится - что это всё так можно писать руками и не зае....

Как раз с БСП все очень и очень печально (в плане модульности)

Почему? Во первых - я как раз написал, что они не свалили все библиотеки в одну БСП - а их там сейчас больше десятка - и все они так или иначе интегрируются в монолит типовых конфигурации.
Во вторых БСП - как раз можно внедрять по частям (даже типовые средства для этого есть - хотя да это не очень удобно всё проворачивать - более глубокой поддержки со стороны платформы очень не хватает) - но речь то не об этом, а о том - что эту БСП скорее всего автоматизировано собирают из отдельных частей - из отдельных модулей (суббиблиотек).

Я говорю о том что 1С ведёт внутри своей инфраструктуры модульную разработку - но не выкатывает такую модель для внешних партнёров и клиентов!

По поводу Вашего постскриптума - если они ведут модульность, и юнит-тестирование внутри своей инфраструктуры - то быть гениями уже не требуется. Правда насчёт юнит-тестирования я сомневаюсь - ибо с тестированием у них реально не очень хорошо - но уверен, что хоть какое-то тестирование у них всё-таки есть! Иначе было бы куда всё хуже!
55. Angry 11 20.02.22 01:59 Сейчас в теме
(30) (32) Извините, что вмешиваюсь, но уж очень забавный диалог.
Вы хоть раз были на партнерской конференции?
Они прямо и говорят, что разрабатывают все модульно, а потом с помощью каких-то внутренних (супер секретных :) инструментов нарезают на конечные продукты, но даже без этого можно наглядно по комментариям в типовых увидеть следы этого (комментарии типа "Не УТ").
Правда эта "модульность" не выносится наружу, а используется только внутри, потому что давно понятно, что столько продуктов и такого объема содержать слишком накладно. Модулей все больше, но нам инструменты пока не дают.

В свою очередь, очень надеюсь, что в скором будущем, стратеги 1С созреют до классов. Т.к. сейчас по факту расширения - все больше походят на эту парадигму, правда с упомянутой проблемой про единственную связь, от ядра к расширению, чего явно не достаточно.
58. Darklight 33 21.02.22 09:09 Сейчас в теме
(55)Ну я же об этом и говорю - что в 1С типовые конфигурации разрабатывают модульно, и потом собирают конечные продукты "секретным внутренним инструментом". Вот я хочу сделать свой такой - и представить его всем. Кто раньше - это конечно вопрос, но я его не задаю. Думаю , что готов и с типовым решением потягаться - у разрабатывают не только модульность - у меня очень большая концепция, в т.ч. меняющая архитектурный подход ко всей разработке (расширяющая его).

Классы в 1С Предприятие 8.x крайне маловероятны - БН против, и пока Борис Нуралиев у руля - их не будет. Так что если классы и появятся, то не в продукте 8-го поколения (хотя, при большом желании, их вполне можно было бы ввести - и, скажем, в новой редакции 1С Предприятие 8.x - кстати, об этой идеи хочу написать небольшую статью - про подводные камни такого нововведения и как его можно было бы сделать не перестраиваю всю архитектуру 8-й платформы). Да и классы - не панацея - модульности как таковой они не добавят - как уже написал тут ранее.

Расширения конфигурации, безусловно, будут продвигать дальше - но пока их архитектура никак не тянет на модульную - тут изначально неверно заложена база архитектуры расширений - но выправить, конечно, можно, вот будут исправлять ли - это большой вопрос. А пока концепция гнилая с самого рождения - и нет света в конце туннеля!
37. JohnyDeath 302 15.02.22 16:39 Сейчас в теме
(8) я имел ввиду именно "контракты", а не +/- универсальные методы, которые могут подойти для любых типов/коллекций.
Под контрактом мы же понимаем Экспортные методы объектов одного расширения, которые по идее должны быть доступны для вызова из объектов другого расширения?
Восьмой; +1 Ответить
38. noprogrammer 239 15.02.22 16:49 Сейчас в теме
(37)
Под контрактом мы же понимаем Экспортные методы объектов одного расширения, которые по идее должны быть доступны для вызова из объектов другого расширения?


Именно так и есть - мы вызываем методы одного расширения из другого (и это все отлично работает). Только надо понимать, что для этого и конфигурация должна быть так изначально написана, что бы позволять это делать (раз уж платформа не позволяет некоторые моменты реализовать напрямую). Если будет время - возможно опишу некоторые механизмы, которыми сам пользуюсь дабы обойти текущие ограничения платформы (хотя и не сомневаюсь, что рано или поздно в платформе появятся все необходимые для этого механизмы)
EvgeniyOlxovskiy; JohnyDeath; +2 Ответить
7. AntonProgma 48 14.02.22 20:35 Сейчас в теме
(4) почему вызывать из расширение расширение - выстрел себе в коленку? Я знаю, что 1с не рекомендует, но известны ли проблемные случаи?
10. Necessitudo 14.02.22 21:25 Сейчас в теме
(7) Ну ведь порядок применения расширений не определен.
14. AntonProgma 48 14.02.22 22:13 Сейчас в теме
59. Bassgood 1449 21.02.22 10:55 Сейчас в теме
(14) А если имеется несколько расширений с одним и тем же назначением (например, исправление), которые переопределяют поведение одной и той же процедуры?
И если поставить точки останова в двух расширениях с одним и тем же назначением - отладка остановится только на одном из них (второе уже успеет к тому времени исполниться)?
На сколько помню, 1С писала что порядок применения расширений определяется только их назначением, в каком порядке они применяются в пределах назначения - рандом (не понятно правда в чем сложность было добавить в них некий признак упорядочивания).
60. AntonProgma 48 21.02.22 12:35 Сейчас в теме
(59) переопределения одной и той же функции или изменение одной и той же формы в разных расширениях в нашей системе считается недопустимым. Количество расширений должно стремиться к минимуму, а их содержимое не пересекаться.
61. Bassgood 1449 21.02.22 15:07 Сейчас в теме
(60)
переопределения одной и той же функции или изменение одной и той же формы в разных расширениях в нашей системе считается недопустимым

Считается недопустимым - это организационный момент, а одновременное исполнение одной и той же расширяемой функции - это уже технический момент, поэтому и спрашиваю как такое в принципе возможно с технической точки зрения?
Количество расширений должно стремиться к минимуму, а их содержимое не пересекаться.

Вот 1С выпускает в виде расширений кучу исправительных патчей к своим типовым конфам :)
Есть же и другой подход к количеству расширений - каждое из них имеет свое предназначение - например, деление по предметным областям конфигурации, или же по интеграциям с другими системами - в этом случае логичнее же иметь, допустим, на каждую интеграцию свое расширение, а не запихивать все в одно под именем "Все интеграции".
64. AntonProgma 48 21.02.22 16:21 Сейчас в теме
(61) Пусть будет 10 расширений, если так проще сопровождать. Но пусть их не будет 11, если можно обойтись десятью.

Как та или иная платформа обращается с коллизиями в расширениях мне не известно. Поэтому стараюсь не допускать таких ситуаций организационно. Хотя это в первую очередь вопрос архитектуры - как так вышло, что в вашем решении 2 расширения меняют одну и ту же функцию, что вы хотели этим сказать?
65. Bassgood 1449 21.02.22 20:10 Сейчас в теме
(64)
как так вышло, что в вашем решении 2 расширения меняют одну и ту же функцию, что вы хотели этим сказать?

Это может произойти довольно просто - часть расширений своих собственных, другая часть - других разработчиков-поставщиков, которые не в курсе о наших расширениях.
В целом я задал такой вопрос потому что Вы написали что расширения применяются одновременно, вот у меня и возникла такая мысль как они будут одновременно исполнять одну и ту же расширяемую функцию.
66. AntonProgma 48 21.02.22 22:45 Сейчас в теме
(65) оставлю вас с вашими мыслями наедине
20. Darklight 33 15.02.22 09:36 Сейчас в теме
(10)На самом деле есть способ упорядочивания - есть 3 категории (Назначения) расширений
1. Исправление
2. Адаптация
3. Дополнение
И если мне не изменяет память, то именно в таком порядке они и применяются. Маловато, конечно, но по сути расширения применяются в порядке из следования в списке "Расширения конфигурации" (по каждому Назначению раздельно) - вот только да - вручную порядок так менять нельзя - нужно именно в нужном порядке их подключать!
11. amon_ra 61 14.02.22 21:40 Сейчас в теме
(4)ну, почему же. не вижу тут выстрелов в ногу. в ногу можно везде и отовсюду выстрелить.
6. AntonProgma 48 14.02.22 20:30 Сейчас в теме
Уже второй год работаем со слоями расширений, которые используют инструменты нижних слоев:
1. Базовое расширение (что-то типа маленького бсп)
2. Расширение для конфигурации (бух, зуп, документооборот)
3. Расширение для конкретной базы

Очень удобно. Проблем не было.

P. S.
Единственное неудобство - одноуровневая система общих модулей; тематической вложенности не получается
EvgeniyOlxovskiy; VKislitsin; amon_ra; kuntashov; +4 Ответить
9. kuntashov 463 14.02.22 21:21 Сейчас в теме
(6) Если соберемся сделать митап на эту тему, вам интересно было бы выступить с докладом о вашем опыте?
t278; amon_ra; +2 Ответить
16. AntonProgma 48 14.02.22 22:24 Сейчас в теме
(9) нет опыта в докладах :)
17. kuntashov 463 14.02.22 23:58 Сейчас в теме
(16) В том числе для этого мы проводим онлайн-митапы, чтобы те, у кого нет опыта выступлений, могли себя попробовать в этом. Главное, чтобы было желание и тема для выступления, известная и (главное) интересная самому докладчику. В общем подумайте и если решитесь, можете написать мне в личку здесь на сайте или в телеграме (ник такой же), как наберется необходимое количество докладчиков по теме, сделаем митап.
13. amon_ra 61 14.02.22 21:44 Сейчас в теме
(6) вот я сейчас примерно что-то подобное планирую организовать.
15. AntonProgma 48 14.02.22 22:21 Сейчас в теме
(13) тогда организуйте контроль версий и помните об их обратной совместимости.

Ксати, чтобы не дублировать код маленькая программа для учёта версий тоже написана с использование базового расширения. То есть, без него она даже не заведётся.
31. amon_ra 61 15.02.22 14:44 Сейчас в теме
(15) вот именно с версий я начал) отлично, значит в правильном я направлении и мысли сошлись)
18. VKislitsin 1013 15.02.22 08:35 Сейчас в теме
(6) Очень бы хотелось прочитать или услышать о ваших приемах работы со слоями расширений.
23. AntonProgma 48 15.02.22 10:04 Сейчас в теме
(18) ок. Попробую написать статью на инфостарт, чтобы коллегам служила туториалом.
МимохожийОднако; EvgeniyOlxovskiy; amon_ra; VKislitsin; +4 Ответить
19. cdiamond 235 15.02.22 09:20 Сейчас в теме
Вижу пока только один недостаток у этой технологии - расширения, содержащие пользовательские данные (новые справочники, регистры и т.д.) не должны так легко удаляться из конфигуратора, должны быть заданы уточняющие вопросы тому кто это делает. А когда на клиенте в списке расширений присутствует кнопка "Удалить" вообще нельзя говорить о надежности хранения данных. Бывали случаи.
21. Darklight 33 15.02.22 09:37 Сейчас в теме
(19)По-моему при удалении таких расширений идёт предупреждение о возможной потере данных! А при отключении - данные не удаляются!
22. cdiamond 235 15.02.22 09:40 Сейчас в теме
(21) В клиенте не должно быть удаления вообще, этот нонсенс. Только отключение. И предупреждать надо не о возможной потере данных, а о том что сейчас точно будет потеря данных, и даже вполне можно было бы перечислить что именно, авторам платформы это нетрудно реализовать.
26. Darklight 33 15.02.22 10:44 Сейчас в теме
(22)В клиенте вообще не должно быть управления расширениями - раз на то пошло - но:
1. Это сделано для облачной архитектуры - как и все расширения в первую очередь! Там иначе никак (ну так задумывалось изначально - и да - это архитектурный косяк)
2. Программный API доступен только в рантайм режиме 1С Предприятие 8 - а для работы с расширениями иметь его в рантайме не плохо (но.... наверное не критично - можно было бы через командную строку конфигуратора всё порешать)
Но даже если убрать удаление в рантайм режиме 1С Предприятие - то это не решит проблему потери данных - удаление останется - кривыми руками буду удалят! А то что оно само слетает - это уже проблема к реализации платформы!

А вот о том, что нужно как-то перечислять что будет потеряно - это да - штука была бы очень полезная - вот только API сделать для неё не так то просто - ведь программные алгоритмы на это как-то должны реагировать! Пользователь конечно идиот - но а программный алгоритм дурак априори!
62. Bassgood 1449 21.02.22 15:18 Сейчас в теме
(22) Так специально для того чтобы обычный смертный не мог удалить (как и добавить) расширение имеется специальное право "Администрирование расширений конфигурации" - то бишь это делать могут только либо полноправные админы, либо юзеры с этим правом доступа (которое раздают эти же админы) - то есть эти же админы также спокойно могут открыть конфигуратор и удалить расширение там - в чем принципиальное отличие если эти действия админ будет выполнять не в конфигураторе, а в клиенте через "Все функции".
По мне так это больше вопрос администрирования системы, а не из разряда "этого не должно быть".
63. cdiamond 235 21.02.22 15:54 Сейчас в теме
(62) С точки зрения большой компании ты прав. Но жизнь такова что большинство расширений написаны для мелких компаний, где не могут позволить себе грамотного админа, и хуже того - этим админом является главбух, вот там и происходят инциденты с потерей данных на расширениях. Понятно что в таких условиях есть ещё куча других способов выстрелить себе в ногу, но с расширением это сделать легче всего.
24. serega9507585993 26 15.02.22 10:24 Сейчас в теме
Из всей статьи зашло только упоминание желтого клуба )
Так и не понял , зачем это писалось и я читал ... Но лягушки прикольные )))
rpgshnik; +1 Ответить
25. Darklight 33 15.02.22 10:24 Сейчас в теме
Расширение вещь хорошая - с этим мало кто не согласится! Вот только их реализация подкачала!
Главные недостатки, мешающие выйти расширениям, так сказать, в мейнстрим:

1. По-прежнему не все виды метаданных поддерживаются - конечно, прогресс большой к 21-му релизу 8.3 платформы, но до сих пор многого не хватает - а раз так - то вероятность в своей разработке попасть на то, что нужный вид метаданных принципиально не впихнуть в расширение - отталкивает! Вернее это скорее вопрос не к добавлению нового метаданного - а именно в расширении существующего - но это отдельная проблема!

2. Вот именно - расширения - они же должны, в первую очередь, расширять - но а по факту они, в первую очередь, лишь дополняют! Да - сейчас ситуация потихоньку меняется - вот Код`ы и Наименования справочников стало возможно расширять - но это капля в море... Тем более до сих пор нельзя расширить составные типы даже регистраторы регистра - это практически ставит крест на расширениях, не являющихся полностью автономными (о них ниже отдельно)! А уж расширение командного интерфейса - это вообще жесть!

3. Расширения очень зависят от режима совместимости исходной конфигурации и режима совместимости расширения - и это окончательно ставит на них крест - если более продвинутое расширение (в котором как раз доступны все последние возможности расширения и дополнения как такового) нельзя поставить на типовую конфигурацию - которая более чем 2 года отстала по режиму совместимости от платформы - то толку в этих расширениях почти ноль! И я этого совсем не понимаю - по сути для совместимости расширения нужно только, чтобы реальная платформа была соответствующей версии - а до версии совместимости исходной конфигурации расширению должно быть до фонаря (хотя бы в рамках редакции 8.2, 8.3)!

4. Расширения не видят друг друга - ни метаданные, ни программный код, ни расширенные свойства - понятно, что это только проблема IDE и в рантайм всё будет сведено воедино - но именно это не даёт, скажем так - расширениям расширять расширения - что в очередной раз очень сильно сужает их возможности как модульной архитектуры!

5. Расширения не изолированы - их составы строго никак не могут пересекаться - два одинаковых, скажем справочника, расширения формы, реквизита, да хоть общих модуля с одним и тем же именем - и всё - конфликт имён! Никак воедино свести их нельзя. Никак задать им уровень изолированности или импортирования отдельных частей другими расширениями. Никак нельзя расставить приоритеты сведения. Нельзя выбрать и более актуальный по версии. Никак нельзя просто даже тупо определить, что объекты 100% одинаковые - и можно в итоговую конфигурацию включить любой один их них. И это уже очень серьёзно - это крайне критично для модульности! Это требует очень скрупулёзного и мелкого деления метаданных на десятки расширений! А это чревато большим числом ошибок (уже видел, например в типовой ЗУП 3.1 - где 1С принялось расширениями автоматически ставить патчи - так их там набирается несколько десятков - и рано или поздно начинаются конфликты).

6. Есть ещё проблема с правами доступа - их тоже не так то просто настраиваться для объектов расширений и для пользователей (когда расширений много).


И это далеко не все проблемы расширений. Я оставил только самые "злые" архитектурные - не стал затрагивать надёжность и производительность.

Такой "букет смертельных болезней" просто хоронит расширения на корню! Они хороши, в основном, только как небольшие (реально полностью автономные) расширения (хотя и тут велик риск наткнуться либо на нехватку доступных к расширению метаданных (по уровню совместимости целевой конфигурации), либо на конфликты имён, либо ещё ни какие-либо конфликты...
Либо - расширения годятся как вторая конфигурацию при доработках типовой - в расширения выносятся все доработки, какие только можно внести - оставляя исходную конфигурацию как можно менее тронутой. Но и тут не все гладко - так как даже в режиме расширения "&ИзменениеИКонтроль" нельзя эффективно вносить доработки - скажем в середину (или почти в начало или почти в конец) большой типовой функции (а увы - 1С очень любит такие функции с длинным кодом, с кучей разноплановых секций). А потом, после обновления конфигурации начинаются танцы с бубном и сложное выявление расхождений (особенно в нечитаемых символах табуляции или комментариях - которые опять же 1С часто правит в типовых алгоритмах) - что очень сильно усложняет обновление конфигураций!

А ведь есть ещё крези корпоративные программисты - которые в свих больших командах умудряются писать сразу несколько расширений - и затем ставить их все по отдельности в продуктивную конфигурации! Не сводя воедино (в одно расширение) перед установкой - и имеют потом кучу вышеперечисленных проблем!

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

Поэтому, посмотрев на расширения - я решил для себя - что как модульная архитектура расширения почти бесполезны (могут быть использованы в ряде нетиповых конфигураций - под жёстким контролем состава их архитектуры)! Сейчас лучше всё-таки выпускать cf (для страждущих геморроя и имеющих нужный уровень совместимости конфигурации - можно выпустить cfe - если таковое будет возможно).
Но даже так - рекомендуется все расширения ставить в одну конфигурацию - объединением расширений!

Но вообще-то для себя я решил - что на расширения я полагаться не буду никогда - для меня это мертворождённый проект - тут принципиальные архитектурные проблемы на 8-й платформе не будут решены уже никогда! Я буду делать свою альтернативу расширениям - реально модульную, лишённую почти всех вышеназванных проблем (но, безусловно имеющую своих персональных тараканов; но и имеющую кучу фантастически полезных фишек - до которых идейным вдохновителям из компании 1С как до Марса) - а там уже посмотрим - чья возьмёт! У меня есть чёткое виденье такой архитектуры - её возможностей и способов решения! Отчасти ещё всё расписано в виде общего проекта (там десятки страниц), есть уже и программные наработки некоторой базы системы! Может через год другой (я не быстрый программист) я выкачу общественности своё решения модульности в 1С - идей у меня целый сухогруз - а времени коробчёнка...

P.S.
И это я ещё ни слово не сказал о ряде фишек, которые должны быть реализованы у модулей безотносительно расширения/дополнения вида метаданных - без которых модули сами по себе ущербны!. И это тоже никак не реализовано в расширениях. Например - о выстраивании зависимостей модулей друг от друга, в т.ч. динамических (когда часть модуля включается/выключается или форкается поведение при наличии/отсутствии тех или иных модулей или отдельных метаданных, или попросту опций установки). Или о потребности не только хронологического версионирование модуля, но и функционального (условно по разным уровня редакции: Базовая, Стандартная, Профессиональная, Корпоративная...) - и сочетания зависимостей модулей по всем этим версиям. Или про то, что когда модулей много, и много ИБ с этими модулями - то жизненно необходим единый центр обновления и развёртывания этих модулей по всей инфраструктуре предприятия.... тут хранилищем уже не обойдёшься - даже если оно на GIT...
Ну и если говорим о модулях - то жизненно необходимо говорить и о "юнит"- тестировании в составе этих моделей - иначе можно легко утонуть в ошибках - разбираться в истоках которых будет очень сложно! Поэтому тесты и отладочный режим априори должны быть включены в модули! И т.д. и т.п. другие фишки - присущие серьёзным модульным решениям!

1С Предприятие 8 - до этого никогда не дорастёт! Может только следующее поколение платформы.... лет так через 30....
zqzq; Yashazz; Olenevod; Dementor; dabu-dabu; German; Восьмой; noprogrammer; VKislitsin; EliasShy; SpiegelWiegel; sm.artem; +12 Ответить
28. booksfill 15.02.22 12:58 Сейчас в теме
(25)
Полагаю, вы правы - проблема в архитектуре.

Именно поэтому, ваше утверждение про реализацию своей модульности сомнительно (ибо пока не читал, утверждать что-либо не берусь) - вместо одного костыля будет другой, с вероятностью 99,9%, ибо нельзя получить хороший результат с негодными средствами.

По-моему, проблема в концепции - "нам не нужно ООП, поэтому мы будем его использовать сами, при разработке ядра, а вам взамен ничего полноценного не дадим".

Отсюда и периодически возникающие попытки со стороны сообщества 1С эмулировать классы через обработки, интерфейсы через общие модули, модульность через расширения и т.п.

Например, сходу еще один костыль: в основной конфигурации создается общий модуль - брокер взаимодействия.
Все расширения общаются между собой и с основной конфигурацией только через этот ОМ. Вот очередная, наикривейшая реализация интерфейсов. Потом еще прикручиваем контроль изменений экпортных методов расширений, потом выясняется, что модулей должно быть не один, т.к. разная область исполнения и т.д. и т.п.. Если мы люди упорные, то реализуем все это и пусть непосвященные плачут.

Один реальных примеров - формально верных, а по сути издевательских, идея в ЗУП 3 собирать запрос в 30 местах, причем не просто в 30 местах, а в каждом из них навернуть сложную логику, ибо что-то "модульное" получилось. Разобраться как оно работает вполне реально, но после этого, вместо чувства глубокого удовлетворения, хочется схватиться за голову, желательно того, кто все это придумал и постучать ей по твердой поверхности.

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

По сути - это чемоданчик с красной кнопкой, которую может нажать не президент, а любая обезьяна.
29. Darklight 33 15.02.22 13:47 Сейчас в теме
(28)
вместо одного костыля будет другой

Наверняка будет костыль. Не больше, чем имеющийся в лице 1C EDT - я так считаю на данный момент!
Без глубокой интеграции такие революционные идеи не воплотить без костылей! А интеграцию 1С Предприятие 8 сейчас обеспечивает только на уровне как в 1C EDT (лично я EDT задействовать не буду, я только сравниваю уровень интеграции; но со временем - для большего удобства можно было бы и с EDT более тесно скооперироваться; в принципе более тесно можно было бы и с СУБД скооперироваться как это делал сторонний инструмент 1C Enterprise - ныне похоже уже покойный, и как отчасти как старый СНЕГОПТ - но уж больно это технически затратно и очень трудоёмко в поддержке - так что пока такая углублённая интеграция не вариант - а вот 1С EDT тут чуть более дружелюбен - там и *.class *.jar по рефлектить можно для использования более глубокой интеграции в виде плагинов к EDT).

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

Сам не считаю, что текущие средства, которые даёт 1С - так уж негодные - думаю - что подобные идеи в ряде коллективов уже успешно применяются (на Инфостарт евенте даже выступления были, да и в самой компании 1С наверняка тоже уже что-то подобное втихаря делают) - просто довести до комического продукта это не так то просто - не все готовы! Я вот, хочу попробовать! ООООЧень давно хочу! Ещё до появления расширений вообще платформы 8.3 и даже до 8.2... просто тогда да - средств и возможностей интеграции было куда поменьше! Сейчас их уже почти достаточно для всего!


По-моему, проблема в концепции - "нам не нужно ООП, поэтому мы будем его использовать сами, при разработке ядра, а вам взамен ничего полноценного не дадим"

Я, конечно, сторонник ООП - но поверьте - одним ООП тут кардинально всё не исправить - внедроение тольк ООП модульность не внесёт!
Но внедрение базы задуманного мной инструмента модульности - в дальнейшем может и ООП внести - это уже будет дело техники - ключевой инструментарий будет единый!
Более того - есть идея вообще реализовать новый ЯП для платформы 1С (на основе Kotlin - а там ООП в базе - и его можно практически на 100% полноценно внедрить в 1С Платформу 8 - технически тут не так много ограничений - нужно только выйти за рамки языка 1С - но увы не будет такой же удобной обратной совместимости - хотя хоть какую-то костыльную - но сделать можно) - я уже и такой вариант даже прорабатываю! Кода есть общий работающий костыль - на его основе уже можно более спокойно много чего понавешать - уже не шибко задумываясь о костыле работает - ну и бог с ним.... не если работать, конечно будет ;-)
Вон СНЕГОПАТ - тот ещё костыль - но работает - и на его основе много чего уже понавешано!

Один реальных примеров - формально верных, а по сути издевательских, идея в ЗУП 3 собирать запрос в 30 местах, причем не просто в 30 местах, а в каждом из них навернуть сложную логику, ибо что-то "модульное" получилось. Разобраться как оно работает вполне реально, но после этого, вместо чувства глубокого удовлетворения, хочется схватиться за голову, желательно того, кто все это придумал и постучать ей по твердой поверхности.

Вы не поверите - а может наоборот как раз боитесь - но я в концепции модульности тоже хочу собирать запрос из куче мест! НО! Я хочу чтобы эти места были более прозрачно обозначены (в идеале и задокументировано - но это уже отдельная больная тема). Должен быть удобный поиск. Высокая декларативность. И, само собой, отладочный режим - с логированием процесса сборки! И поддержание всего это должно быть в первую очередь на инструменте обеспечения модульности - а не на разработчиках модулей!
Причём аналогично - я хочу собирать не только запросы - а всё! Даже Формы и Макеты!

Более того (но это не сама цель модульности - это скорее отдельный проект) - хочу вообще отойти от написания запросов - считаю этот подход устаревшим. Хочу перейти на декларативное генерирование запросов (примерно как было в типовых конфигурациях до платформы 8.2 - только куда более гибко) - чтобы повысить уровень абстракции алгоритмов, уменьшить влияния расширений архитектуры в переписывание готовых алгоритмов, повысить эффективность формирования и выполнения запросов! В т.ч. за счёт того, что инструмент сам сможет считывать статистику выполнения запросов (и другие данные из СУБД) и корректировать запросы - автоматически подгоняя их под текущую структуру данных. Аналогично более эффективно анализировать и метаданные и включённые опции - и выкидывать из запроса лишние куски. А в идеале далее и собирать рекомендации для модификации архитектуры метаданных - или даже иметь право самостоятельно их вносить (хотя бы индексы расставлять) по фактической потребности. В общем всё то, что должна уметь делать учетная платформа на заре середины XXI век.

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

Для этих целей создают бэкапы... ну а сисадмины... сами знаете... на кого делятся! На моей практике почти на каждой работе такое деление с "обновлением" сисадминов происходит!
Один раз только на моей памяти был реально толковый ИТ-директор- который сразу как пришёл (была замена по другому поводу) начал наводить порядок в контроле над данными - в т.ч. устраивать стресс-тестирования кризисных ситуаций! Но долго он не протянул - его требования к ИТ были для руководства слишком сложны.... Хотя как руководитель и как человек - он был очень хорошим!
Olenevod; +1 Ответить
34. booksfill 15.02.22 16:09 Сейчас в теме
(29)
По поводу языка, не уверен, что можно взять да и начать использовать что-то стандартное, даже с обертками, - не тот уровень абстракции.
IMHO 1С как предметно-ориентированный язык намного лучше всяких JAVA и т.п. Как язык для быстрого построения нормальных интерфейсов тоже. ORM - просто отдушина после Hibernate и иже с ним. Понятно я имею в виду ORM в рамках того, что 1С позволяет. Жаль только, что позволяет 1С маловато, см. ниже.
Вот просто молодцы!

А как только спускаемся по уровням абстракции чуть ниже, даже в плане использования стандартов SQL - просто беда. Делает компания что-то в этом направлении, но явно не успевает. Я уж не говорю про странное стремление изобретать велосипеды. Вот недавно шину собственную изобрели. А до этого собственный мессенджер (хорошо хоть не с 0, а на основе нормального стека технологий). А еще операторы преобразования данных и нумерацию строк, кажется, добавили - всего-то лет через 20 с появления 8.0.


Про бэкапы. Есть у вас бэкап годовой давности (самый свежий на момент удаления расширения), что вы с ним делать собираетесь?
А если расширение еще, как оказалось, что-то в течении этого года должно было куда-то писать, у вас физически неоткуда взять данные.


за счёт того, что инструмент сам сможет считывать статистику выполнения запросов (и другие данные из СУБД) и корректировать запросы - автоматически подгоняя их под текущую структуру данных


IMHO этого не надо, над эффективностью запросов, включая планы, отлично работает нормальный программист, не путать с кодером, и штатный оптимизатор нормальной СУБД.

Просто реализуйте современный стандарт SQL, разрешите элементарные настройки индексов и т.п., оставьте свой синтаксический сахар, типа запроса к табличной части и ОК.

А корректировать запросы 1С еще как пытается, особенно прелестно иногда получается в СКД с включенным автозаполнением.
Не хватало еще, чтобы она эту практику развила еще больше.
42. Darklight 33 16.02.22 09:45 Сейчас в теме
(34)
По поводу языка, не уверен, что можно взять да и начать использовать что-то стандартное, даже с обертками, - не тот уровень абстракции

Я не говорил взять стандартный и начать использовать.
Я сказал - сделать новый язык на основе Kotlin - что-то урезать, что-то эмулировать. Kotlin и Java - это только ЯП - под ними лежит платформа стековой виртуальной машины JVM. Под ЯП 1С Предприятие 8 тоже лежит стековая виртуальная машина - и её возможности не так уж плохи (хотя есть свои ограничения- например нет поддержки многопоточности, и вызов функций только через константные имена - последнее особенно печально) - но всё-таки определённый уровень функциональности реализовать можно.

IMHO 1С как предметно-ориентированный язык намного лучше всяких JAVA

Я бы с этим поспорил но не хочу. Про Java согласен. Но вот про Kotlin, JavaScript, C# - уже не так всё однозначно даже в предиметноориентированной области. Да и не ЯП тут особо решает - а набор библиотек, в т.ч. ORM.


Про бэкапы. Есть у вас бэкап годовой давности (самый свежий на момент удаления расширения), что вы с ним делать собираетесь?
А если расширение еще, как оказалось, что-то в течении этого года должно было куда-то писать, у вас физически неоткуда взять данные.

С годового бэкапа данные перенести в рабочую базу не так уж сложно.
Если данные были год не нужны и про них никто даже не вспомнил - то либо в них реально нет толка, либо не толка в руководителях подразделений, отвечающих за эти данные. Но в большинстве случаев достаточно просто на копии вернуть алгоритм и всё перепровести + небольшие ручные правки.
Поэтому я восхищался IT-руководителем, который каждый месяц устраивал стресс-тестирования - там восстанавливали бэкапы проверяли все критичные механизмы и данные! А ещё был постоянный "online" мониторинг - специальная самописаная база следила за состоянием вей IT-инфраструктуры, ошибками(в т.ч. из ж/р), логами (а их было много) и т.п.
Ну и база была для ведения истории изменений - там тоже все операции и все данные логировались!

IMHO этого не надо, над эффективностью запросов, включая планы, отлично работает нормальный программист, не путать с кодером, и штатный оптимизатор нормальной СУБД.

Нормальный программист должен либо заниматься программирование не на прикладном уровне, либо заниматься бизнес-процессами прикладного уровня, а не деталями оптимизации недостатков работы СУБД.

Просто реализуйте современный стандарт SQL, разрешите элементарные настройки индексов и т.п., оставьте свой синтаксический сахар, типа запроса к табличной части и ОК.

Вот я как раз против. Задачи прикладного уровня должны не должны опускаться до низкоуровневой оптимизацию.

А корректировать запросы 1С еще как пытается, особенно прелестно иногда получается в СКД с включенным автозаполнением.
Не хватало еще, чтобы она эту практику развила еще больше.

Вот именно - я не говорю про корректировку запросов. Я говорю про их генерацию - это разные вещи.
Я не против наличия запросов - для особо изощрённых случаев - но их применение должно быть большой редкостью!
46. booksfill 16.02.22 10:43 Сейчас в теме
(42)
Задачи прикладного уровня должны не должны опускаться до низкоуровневой оптимизацию.

Запрос SQL, это низкоуровневый тип оптимизации?
Языка, который раньше расшифровывался как simple query language? Язык для "домохозяек".
Знание основ того, как хранить собственные данные - не царское дело прикладного программиста?
Сложно согласиться, разве что в 1С появится продвинутый ИИ.

(42)
Я не против наличия запросов - для особо изощрённых случаев - но их применение должно быть большой редкостью!

Так и есть, для того ORM и создавалось. Вот только когда наступает "большая редкость", кстати, не такая уж большая, надо иметь возможность все настроить максимально быстро и, крайне желательно, без нарушений лиц. соглашений. Собственно и сейчас, например, никто не мешает получить структуру хранения, подключиться к MS SQL прямо из 1С и создавать эффективные запросы. Или там же создать нужный индекс. Только вот, по понятным причинам, так делать очень не хочется.


(42)
Но в большинстве случаев достаточно просто на копии вернуть алгоритм и всё перепровести + небольшие ручные правки

Я даже не буду говорить про временные затраты и радость от проведения документов за год.
Вот реальный пример - было у нас расширение, которое фиксировало продолжительность тел. звонков, пути к файлам записи в привязке к этим самым звонкам и факт перенаправления звонков от менеджера менеджеру.
Данные поступали от Аваи в режиме реального времени через внешнюю компоненту.
Отчеты по всему этому делу реально требовались, но не часто - разборки, поиск не учтенных клиентов и т.п.
К счастью, у нас никто расширение не отключал и все работало, но если его отключить, даже не удалить прежние данные, а просто отключить, то, собственно всё, приехали.
49. Darklight 33 16.02.22 11:43 Сейчас в теме
(46)
Запрос SQL, это низкоуровневый тип оптимизации

Если говорим об SQL запросе уровня СУБД - это очень низкоуровневая оптимизация.
Боле менее высокоуровневая оптимизация - это как минимум уже объектный ORM как .NET Entity Framework или хотя бы LINQ.
Но, на мой взгляд, это не тот уровень абстракции, который хотелось бы видеть на прикладном уровне программирования логики бизнес-процессов. Оптимизировать в отдельных случаях - да. Но не для 98% остальных случаев, не так критичных производительности! ВСЕ КЛЮЧЕВЫЕ ПРОЦЕССЫ УЧЕТА МОЖНО ОПТМИЗИРОВАТЬ СТАНДАРТНЫМИ ПАТТЕРНАМИ ПРИ КОДОГЕНЕРАЦИИ ПО БОЛЕЕ АБСТРАКТНЫМ ИНСТРУКЦИЯМ ПРИКАЛДНОГО ДЕКОАПАТИВНОГО УРОВНЯ, ТАК, ЧТОБЫ НЕ ПРИХОДИЛОСЬ ОБРАЩАТЬСЯ К НИЗКОУРОВНЕВОЙ РУЧНОЙ ОПТИМИЗАЦИИ!

Знание основ того, как хранить собственные данные - не царское дело прикладного программиста?

Лично моей мнение - да - знать основы конечно прикладной программист недалёкого будущего должен - но не более того. Для случаев отдельной потребности в ручной оптимизации лучше временно приглашать отдельных специалистов в этой области - но это совсем не прикладные программисты, они не занимаются логикой бизнес-процессов! И в учётных системах будущего такие случае должны быть очень редкими! Потому что, если алгоритм когенерации работает не достаточно эффективно - это повод написать претензию поставщику этого алгоритма - и уже он должен проанализировать ситуацию и оптимизировать алгоритм! А алгоритмы должны быть динамическими, самоптимизирующимися под текущие условия использования. И выдающие рекомендации к изменению этих условий - если оптимизация алгоритма не даёт нужного результата без оптимизации архитектуры

Сложно согласиться, разве что в 1С появится продвинутый ИИ

Я верю - что в учётных системах недалёкого будущего так и будет - не знаю только насчёт будущей 1С Предприятие 9 (или как будет называться новая учётная система) - если в 1С такого не будет - то эта учётная система обречена на забвение!
В первых версиях не требуется слишком навороченный ИИ - но со временем он будет улучшаться!

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

Не критичный сервис. Ежедневный автоматический мониторинг ж/р тут был бы достаточен. Можно реализовать и более продвинутый мониторинг - для более критичных сервисов - не надо всё валить на расширения. Так же доработки внутри конфигурации можно легко потерять после обновления конфигурации - проблемы те же, расширения не причём!
33. Восьмой 89 15.02.22 15:59 Сейчас в теме
"Скальпель в руках хирурга спасает жизни, скальпель в руках маньяка........" - также и с расширениями.
Инструмент хороший но нужно знать и понимать где и как его использовать, скажем так - не все возможности расширения полезны.
Но как по мне все полезности расширений заканчиваются на функционале: "подписка на события для формы и ее модернизация", "баг фикс", "быстро срубить денег с клиента". Делать на расширениях полноценные библиотеки и компоненты - да круто но не все можно.

На счет модульности и всего прочего- вот представьте себе на секунду что все типовые конфигурации имеют в именовании метаданных свой префикс. К примеру в типовой бухгалтерии справочник "Контрагенты" назывался бы "БП_Контрагенты" а в типовой торговле "УТ_Контрагенты".
К чему бы такой подход в разработке от вендора бы привел - а именно к тому что каждая конфигурация была бы отдельной библиотекой и для склейки разных архитектур и методологий требовалось бы просто объединить две конфы и сделать внутреннюю шину данных для объединения сущностей и механик между собой. Это модульная архитектура? Безусловно - Да. Но этого нет и вряд ли когда появится.

А знаете почему? Просто 1С делает все чтобы у нас было как можно больше работы. В условиях рыночной экономики "правильно, эффективно и красиво" не всегда экономически выгодно. Увы(
Yashazz; amon_ra; +2 Ответить
35. booksfill 15.02.22 16:19 Сейчас в теме
(33)
К примеру в типовой бухгалтерии справочник "Контрагенты" назывался бы "БП_Контрагенты" а в типовой торговле "УТ_Контрагенты"


Не надо суффиксов - просто реализуют пространства имен. И называйте свои объекты как правильно с точки зрения бизнеса, справочник контрагентов должен называться "Контрагенты". Всякие УТ_Контрагенты по своей сути тоже самое как поиск номенклатуры по наименованию.
36. Восьмой 89 15.02.22 16:22 Сейчас в теме
(35)
И называйте свои объекты как правильно с точки зрения бизнеса

У нас для этого есть синоним.

(35)
просто реализуют пространства имен


Просветите меня коллега на примере двух разных конфигураций, как это сделать?
Ну как к примеру взять типовую бухгалтерию и склеить ее с УНФ - без болезненно, как 2 библиотеки в одну, чтобы, скажем метаданные "контрагенты" как класс включал в себя функционал БП и УНФ одновременно, без конфликтов.

(35)
Всякие УТ_Контрагенты по своей сути тоже самое как поиск номенклатуры по наименованию

А причем тут данные и метаданные?) И чем плох поиск по наименованию?)
39. booksfill 15.02.22 18:43 Сейчас в теме
(36)
Просветите меня коллега на примере двух разных конфигураций, как это сделать?


Не просвящу, т.к. "Остапа понесло" и я хотел сказать, что 1С могла реализовать хотя бы это.
Приношу извинения за несвязный поток сознания.


(36)
чем плох поиск по наименовани

Уверен, что вы это и сами знаете. По-моему, вообще любой поиск в программном коде по наименованию плох уже тем, что является хрупким. Сломать, конечно, можно все, и перечисления и ссылки, но на это нужны отдельные усилия.
Вообще, поиск и связь таблиц хороши по натуральным ключам только в пользовательском режиме.
Была на это счет дискуссия на другом форуме, но она продолжилась чуть ли не на 50 страницах. Не думаю, что стоит затевать ее здесь.


(36)
У нас для этого есть синоним

Программист в коде синонимами не пользуется но, должен понимать с каким бизнес-объектом работает с первого взгляда. БТ_Контрагенты - это не бизнес объект, это объект для кодинга.

ВЫБРАТЬ * Из Справочник.ССМ_Контрагенты это что?
Да это же справочник контрагентов, только в конфигурации для союз спец монтаж!
А БП_Контрагенты это, несомненно, бухгалтерия... Стоп. А какая бухгалтерия? Если 2.0, то там структура отличается от БП3, и БП для гос. орг-ий и обычная тоже разные.
Непонятно, надо бы еще суффиксы БП3, БП2, БП3Гос, БП2Гос, БПДопиленнаяПодГазпром что-то, воля ваша не так.
Нет, конечно, у нас не 100500 конфигураций, а всего 2, ну и обмен еще с 3-мя, не так уже много, учим и ... Говорите заменили БП2 на БП3. Фигня вопрос открываем все отчеты, обработки и быстренько меняем префиксы.

Хм... Опять меня понесло в строну пространства имен.
44. Darklight 33 16.02.22 10:33 Сейчас в теме
(33)
На счет модульности и всего прочего- вот представьте себе на секунду что все типовые конфигурации имеют в именовании метаданных свой префикс. К примеру в типовой бухгалтерии справочник "Контрагенты" назывался бы "БП_Контрагенты" а в типовой торговле "УТ_Контрагенты

Два справочника "Контрагенты" - это жесть! Не должно быть так.
При модульности в каждом модуле может быть по справочнику Контрагенты. Но при сведении модулей - справочники тоже должны быть сведены воедино (по заданным правилам сведения).
Сейчас 1С научилась такое делать с длиной кода и наименования заимствованных справочников - великое достижение почти за 10 лет существования расширений! Поэтому расширения 1С - уже протухли. Будущее за другими механизмами обеспечения модульности!

(35)
Не надо суффиксов - просто реализуют пространства имен

Суффиксов действительно не надо. Пространства имён - это действительно очень полезно - но и тут тоже не всё так радужно при использовании модульности.
Но в разных пространствах имён делать отдельные справочники "Контрагенты" точно не стоит!
47. booksfill 16.02.22 10:46 Сейчас в теме
(44)
Но в разных пространствах имён делать отдельные справочники "Контрагенты" точно не стоит!

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

И, да, пространство имен - даже рядом не панацея, просто это что-то облегчающее нашу работу.
40. Petr54-ru 92 16.02.22 06:11 Сейчас в теме
Одному мне кажется, что пример ТЗ выбран крайне неудачно?

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

Лет 7-8 назад, у меня было две задачи. Первая задача - учетное решение очень похожее по функционалу на это ТЗ - нужно было обеспечить учет посылок, которые доставлялись багажом самолетами. Нужно было, чтобы оно общалась с другими приложениями при помощи текстовых файлов и поддерживало работу с ТСД. Была написана мини конфигурация на 1С8.2, трудоемкость в была примерно 15 часов. Заказчик получил надежное решение, которое не надо было поддерживать. Вот есть гвоздь - вот молоток для этого гвоздя и ничего лишнего.

Вторая задача тогда была - это был внутренний проект по автоматизации ЦТО и севрис-центра. Поскольку механизм расширений тогда был никаким, сделал это в виде подсистемы к УТ11.2. Там нужно было выставлять счета клиентам и принимать оплаты, а еще списывать ЗИП и материалы интеграцию с рабочей базой было не обойти.

Когда уже с расширениями все было нормально, года три-четыре назад, я сделал ряд работ для сети магазинов (непродуктовый ритейл). При помощи расширения реализовал работу из УТ11.3 с маркетинговыми акциями на кассе Frontol5. Заказчику пришлось несколько раз оплачивать мне переделку этого расширения, поскольку 1С переписывало БПО. Я полагаю, что у заказчика потери от того что на кассе перестали работать акции были больше, чем стоимость работ по переделке. У того заказчика в УТ11.3 я делал обработку, помощник товароведа - для автоматического формирования заказов поставщикам на основании остатков в магазине и данных о продажах за последние пять недель. Обработка естественно брала данные из регистров, так вот - эту обработку, после очередного обновления УТ тоже пришлось чинить.

А я в свое время предлагал этому заказчику - между УТ11 и кассами воткнуть FrontolManager - и управлять маркетинговыми акциями оттуда. Это было бы существенно надежнее.

На мой взгляд, хорошая архитектура с использованием расширений, должна в своей основе содержать приличный базис - в виде той конфигурации, к которой эти расширения делаются. Если таковой основы нет, то эта архитектура будет держаться на плечах "атлантов-1С программистов".
Olenevod; 33lab; +2 Ответить
50. amon_ra 61 16.02.22 18:45 Сейчас в теме
(40)
Мы делаем расширение к некоей конфигурации, а при этом функционал описанный в ТЗ никак не связан этой конфигурацией

в этом и заключается смысл модульности. мы не привязываемся к конкретной конфигурации, а работаем с ней через api. Описание задачки примитивное, конечно, если копнуть ближе можно много чего придумать, но я хотел конкретно поднять тему модульной архитектуры именно в том понятии, в котором она существует. Ваших примерах там не совсем речь идет о модульной архитектуре, а конкретно в том моменте где вы пишите про УТ 11.3. Здесь вы просто попытались через расширение подменить процедуру/функцию уже типовой конфигурации, т.е. это немного отличается от условия слабой связанности модульности.

С моей колокольни, для реализации описанного тут ТЗ надо делать отдельное решение, которое живет своей отдельной жизнью.

ну, по факту я и описал отдельное решение, которое состоит из нескольких модулей, которые легко обновить, заменить и/или доработать.
52. Petr54-ru 92 17.02.22 05:29 Сейчас в теме
(50)
ну, по факту я и описал отдельное решение, которое состоит из нескольких модулей, которые легко обновить, заменить и/или доработать.


Мы же в нашей деятельности ограничены возможностями платформы.

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

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

Если вы под модульностью понимаете концепцию Никлауса Вирта, которую он в конце 70-х воплотил в языке Modula2 - когда программа состит из модулей, которые через интерфейсы между собой взаимодействуют, то у нас в 1С - ни в платформе, ни в языке ничего похожего на это нет. Вирт все это мыслил для системного программирования, там это осмысленно. У нас автоматизация бизнеса, у нас пользователи, у нас и так предметно ориентированная среда разработки с языком таким же

Механизм расширений, как тут уже в каментах написали - это удобный, высокотехнологичный костыль, при помощи которого мы можем изменять имеющийся функционал и добавлять туда свой. Я выше описывал свой пример работы с расширением УТ11.3 - мне как раз пришлось добавлять функционал, которого там изначально не было.
Olenevod; +1 Ответить
53. amon_ra 61 17.02.22 08:46 Сейчас в теме
(52) c 70-х, прошло много времени и сейчас модульность уже везде, а по поводу хранилищ и ограничений платформы, но так ведь платформа развивается, уже можно использовать EDT и git. Ну, получим мы три разных хранилища и что? Вот у нас база знаний, где описано, что в каком расширении пилится. Ну, предметно-ориентированный язык у нас и что здесь такого? Как я понимаю, описанный мной подход Вам не нравится и Вы его противник, что ж, а мне нравится и в работе и на своих pet проектах я применяю. Да, 1С была придумана как просто скриптописательство, но все вышло из под контроля и сейчас я это полноценный язык программирования, не ООП, но и так нормально.
41. Pavel_Vladivostok 58 16.02.22 06:15 Сейчас в теме
Мои попытки использовать расширения в типовых в большинстве случаев заканчивались неудачей, потому-что Нельзя расширять типы реквизитов, Нельзя добавить план обмена т.к. необходимо прописать его в пачку типовых команд, которые после изменения состава в расширении начинают конфликтовать и не дают применить расширение.
Пару раз удалось использовать расширение когда надо было добавить объекту свой реквизит и вывести его на форму, тут спасали типовые подписки на события формы "ПриСозданииНаСервере", которые удалось переопределить в своем расширении и вывести все что нужно на типовую форму.
Мой вывод по расширениям - пока не применимы для серьезных доработок, когда необходимо добавить обмен или подсистему затрагивающую типовые объекты.
Были случаи когда после очередного сохранения расширения, база с ним не запускалась выдавая критическую ошибку БД, без расширения запускалась. В результате данные внесенные в реквизиты расширения были потеряны.
48. Darklight 33 16.02.22 11:07 Сейчас в теме
(41)Вы будете может удивлены. Но в последних версиях расширений конфигурации можно м и ПВХ добавлять, и типы заимствованных ПВХ расширять. И типы заимствованных реквизитов расширять.
Всё дело в режиме совместимости типовых конфигураций - которые остались где-то далеко в прошлом, и не позволяют использовать все эти фишки расширений.
С командами всё сложнее - да. И тут есть траблы не только с расширениями , но и в основной конфигурации. Концептуальные - от того никогда не будут решёнными 1С. Но обходными путями они решаются.
Вот с подпиской на события форм тоже всё не очень хорошо. Нет общих подписок - и это печально! Но и подсписка через расширения - тоже не панацея - по сути тоже нужно каждую форму обрабатывать (лично мне удобнее внедряться через уже инжектированные функции БСП).
Всё тоже можно обойти - если перейти на другой инструмент обеспечения модульности
Aletar; amon_ra; +2 Ответить
43. TimofeySin 173 16.02.22 10:03 Сейчас в теме
Я сейчас работаю в УТ с 5 куплеными расширениям. Не считая расширений доработок прдидущих разработчиков и моих. Это АД составить запрос, СКД или просто писать код. Синтаксис помошник постояно ругается, что нет нужных реквизитов, функций метаданных. Пока 1С не сделают нормальную видимость объект сквозь расширения - расширения это костыли
45. Darklight 33 16.02.22 10:36 Сейчас в теме
(43)Мда.... как же прогеры зажрались! Хотя да , IDE в 1С давно уже не шедевр - а в современном мире именно IDE даёт комфорт! Но проблемы развития IDE - это всё-таки другая проблема - непосредственно к технологии модульности и расширениям отнесения напрямую не имеющая. Но да - это тоже очень важная проблема!
51. kalyaka 1105 16.02.22 19:03 Сейчас в теме
(43) Если вести разработку в EDT, то порядок работы с расширениями может быть такой: можно "слить" все расширения в основной проект. По мере разработки обновлять проект расширения. И наоборот, при изменениях в проектах расширений, "сливать" изменения в основной проект.

Сдесь расширение приобретает еще один смысл - это выделенная чистая функциональность без инфраструктуры.
54. Yashazz 4790 17.02.22 11:21 Сейчас в теме
Я в своё время вдоволь "накушался" косяков и багов расширений, и сделал однозначный вывод, что пользоваться этой дрянью просто нельзя, вообще и совсем. Расширение может ещё хорошо для исследования конфигурации, для каких-то опытов или тестирования. Но серьёзный механизм должен стоять в самой конфигурации. Поэтому да, считаю более надёжным изменить конфу (аккуратно и грамотно), нежели лепить расширение, а тем более 5-10-20 разных слабо согласованных расширений.

Расширения - кривая глючная хрень. Расширения - это постоянные грабли, баги, падения, прочие аварийные ситуации. Кто не верит, попробуйте в релизе 8.3.20.1674 в заимствованной форме позаимствовать её объект в ДанныеФормыСтруктуру, обычной кнопочкой заимствования. И полюбуйтесь на результат.
57. noprogrammer 239 20.02.22 08:13 Сейчас в теме
(54) У каждого свой опыт - мой опыт говорит об обратном. Расширения конечно не идеальны с ними конечно же бывают проблемы, но все они решаемы. За пару лет использования расширений у клиентов не было ни одной проблемы с ними (а на расширениях написана и маркировка и меркурий и много чего еще)
Rozuriya; +1 Ответить
56. noprogrammer 239 20.02.22 08:02 Сейчас в теме
Вы хоть раз были на партнерской конференции?

Нет

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

Забавно, но раньше это звучало так: из одной большой единой мега конфигурации нарезаются все остальные (БП/УТ/ЗУП и т.д.) - ибо "нарезать" можно именно так в противном случае это звучало бы как "собрать" из модулей конфигурации. В любом случае это не модульность это вариант разработки.

У 1С довольно интересная позиция - с одной стороны они говорят, что использование расширений в качестве модулей является в корне неверной концепцией с другой стороны с каждым новым релизом развивают эти самые расширения именно для возможности использовать их в качестве отдельных модулей.
67. Yashazz 4790 24.02.22 20:00 Сейчас в теме
Ещё раз говорю: хотите надёжно работающий механизм - не используйте это кривое дерьмо. В смысле хрень под названием "расширение". Побаловаться, изучить завиральные идеи 1С - это ещё можно. Строить серьёзное решение - ни в коем случае.

Если кто намерен спорить - просто советую поиметь дело с этой дрянью хотя бы месяц кряду. Да, да, например в 8.3.20.1710. Вы очень быстро всё поймёте. Когда у вас в тридцатый раз по неизвестному глюку не откомпилится модуль, сыпанётся транзакция, перекосит расширенный объект или вылетит конфигуратор - тогда авось дойдёт, что юзать правильно.
Оставьте свое сообщение