Каталог решений - Ядерный Снегопат

Ядерный Снегопат

Ядерный Снегопат

В наличии

Проект Снегопат предназначен для расширения возможностей штатного конфигуратора 1С 8-й версии. В около-1С-ной сфере проект Снегопат – это, наверное, самый долгий долгострой. О том, какой путь прошел проект с 2009 года до сегодняшнего дня, на конференции Infostart Event 2021 Post-Apocalypse рассказал программист компании Инфостарт Александр Орефков.

Категория:

Описание

Это был очень долгий путь…

 

Проект Снегопат я начал еще в 2009 году. Один бы я с ним не справился – в разработке скриптов мне помогали очень много людей, среди них Александр Кунташов, Артур Аюханов и другие.

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

На основе этого в 2009 году появился проект Снегопат.

Как и у OpenConf, основная задача Снегопата – это расширение возможностей конфигуратора.

 

 

У Снегопата было три ключевых этапа развития.

 

Первый вариант – с 2009 по 2016 год

На первом этапе в движке Снегопата взаимодействие с движком 1С было написано полностью на C++. Логика была частично вынесена в скрипты на JavaScript. Этот Снегопат сам запускал процесс 1С и внедрялся в него.

Основные сложности с таким подходом состояли в том, что с каждым выходом нового релиза 1С начинался ад. Внутреннее устройство движка 1С каждый раз немного изменялось. Отслеживать и сопровождать эти изменения непосредственно на C++ было очень трудно, потому что C++ – жестко типизированный язык. И в нем всю логику по работе с разными релизами приходилось, по сути, выносить в длинную проверку условий. Если у нас такой релиз запущен – делаем так. Если такой релиз запущен – делаем по-другому.

 

Снегопат Reborn – с 2016 по 2020 год

В 2015 году я начал переделку Снегопата – портировал его практически полностью на новый движок. Новый вариант Снегопата я назвал Снегопат Reborn, потому что это было возрождение – люди уже думали, что проект Снегопат закончился и не сможет перебороть эти проблемы.

В новом движке я для взаимодействия с движком 1С использовал скриптовый язык AngelScript – на нем была реализована вся основная логика Снегопата.

Скриптовый язык AngelScript позволяет легко вызывать код на C++ – например, обращаться к 1С, чтобы при запуске Снегопата определять, под каким релизом 1С он запущен, и выстраивать слой взаимодействия между AngelScript и кодом 1С.

А сам код уже работал в разных релизах – сопровождение новых релизов упростилось.

Но жизнь не стоит на месте, бьет ключом. И возникли новые проблемы.

  • Во-первых, фирма «1С» продолжает выпускать новые релизы. Но так как каждый релиз 1С содержит свой набор багов и фич, получалось, что у обычного разработчика 1С на рабочем месте скапливалась куча разных релизов. Одна база работает под таким релизом, другая база – под другой версией 1С. И использовать один Снегопат для параллельной одновременной работы с базами разных релизов было сложно.

  • Вторая проблема, которая возникла – это появление конфигуратора на архитектуре x64. Старый Снегопат работал только под x86, поэтому при запуске конфигуратора на x64 в нем, естественно, Снегопата не было.

  • Поскольку Снегопат сам запускает процесс 1С, а потом внедряется в него, ситуация могла окончиться совсем непредсказуемо. Для разных баз используются разные релизы платформы – сам механизм запуска очень сложный. Например, Снегопат запускал процесс 1С, тот при открытии нужной базы вычислял, какой релиз требуется запустить, при этом сам мог закрыться, открыть вместо себя следующий процесс, и так по цепочке. На каждом этапе процесс внедрения Снегопата в 1С мог прерваться. И таким образом, когда запускался конфигуратор, в этом конечном процессе Снегопата уже не было.

И поэтому было решено сейчас сделать третий уже вариант движка Снегопата.

 

Архитектура нового Снегопата

 

 

На слайде показана архитектура нового Снегопата.

Сам Снегопат было решено еще раз разделить на две части.

  • Первую часть мы назвали Core.As – она содержит непосредственно движок AngelScript и движок, работающий с архитектурой процессора. Core.As отвечает за вызов и перехват функций на C++. Это отдельный независимый процесс, который никак не связан с 1С – он ничего об 1С не знает. Core.As работает практически так же, как сервер NodeJS, который для встраиваемого в браузер языка JavaScript реализует отдельный процесс выполнения, тем самым делая из него отдельный язык. Core.As работает практически так же – из скриптового языка AngelScript, который, по сути, является встраиваемым, сделан отдельный язык – его можно запускать как отдельный модуль и выполнять какой-то код.

  • Вторая часть – это сам модуль Снегопата, который написан на AngelScript, отвечает за логику взаимодействия с внутренним устройством 1С

С помощью Core.As реализовано внедрение модуля Снегопата в запускаемые процессы – мы просто один раз запускаем резидентный стартер Core.As Loader, он отслеживает запускаемые программы и, если запускается конфигуратор 1С, он просто туда внедряет модуль Снегопата. В принципе, можно разрабатывать и другие модули, внедряться в другие процессы, не только в конфигуратор.

 

Возможности последних версий

 

Итак, что удалось сделать в последних релизах?

  • После полугода интенсивной разработки удалось сделать в Снегопате полную поддержку x64 – все возможности, которые были раньше под x86, сейчас уже работают и под x64. По крайней мере, те скрипты, которыми я пользуюсь, работают.

  • Сам процесс разработки и публикации релизов был перенесен на GitHub. Если раньше все это работало на базе моего сайта, под управлением системы fossil, то теперь все сделано по правилам. Модуль Core.As Loader расположен в одном репозитории, а модуль Снегопата – в другом репозитории. Сам Снегопат сейчас является открытым проектом. Любой может подключиться к разработке, что-то свое добавить, если есть желание.

  • Самая важная новость – с помощью сообщества удалось догнать 1С по версиям. Сейчас Снегопат работает уже во всех релизах 1С, которые были выпущены. И в x64, и в x86.

 

Проще использовать и разрабатывать

 

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

 

 

Кроме упрощения подключения скриптов также упростилось и создание форм для Снегопата.

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

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

 

 

Использовать Снегопат стало проще, разрабатывать тоже стало проще.

Если у вас есть желание и идеи, как сделать конфигуратор для себя удобнее, то приглашаю – присоединяйтесь, подключайтесь.

Чтобы начать разработку скриптов, нужно несколько достаточно простых инструментов – Git, Visual Studio Community Edition, Visual Studio Code и небольшие познания в JavaScript.

Процесс настройки окружения и разработки скриптов для новой версии Снегопата описан в статье «Разработка скриптов для Снегопата».

 

Ближайшие планы

 

 

Ближайшие планы по движку:

  • Выпустить триальную и полную версию на новой архитектуре.

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

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

И по скриптам – ближайшее, что будем развивать:

  • сделаем набор инструментов для упрощения работы с Git;

  • и скрипты для интеграции с инструментами контроля качества кода. Один из таких скриптов уже есть – это скрипт, который вызывает для текущего модуля BSL Language Server и выводит результат его работы прямо здесь же в отдельном окошке, позволяя сразу же переходить к нужному месту кода.

 

Вопросы

 

Будет ли поддержка Linux?

Поддержки Linux нет и не будет. Дело в том, что Application Binary Interface под Linux другой, он отличается от Microsoft. Чтобы реализовать поддержку Linux, надо будет, по сути, всю эту работу опять повторить. Это будет уже отдельный продукт.

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

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

При выпуске новой версии платформы как долго ждать обновления Снегопата для поддержки? Примерные есть какие-нибудь прогнозы по срокам?

Если 1С очень сильно ничего не перелопатит внутри, то в среднем, Снегопат начинает поддерживать вообще сразу – если ключевые механизмы не поменялись. Бывает, за пару часов удается подстроиться под новый релиз. Иногда несколько дней занимает. Сейчас 17-18-й релизы выходили, и даже не я сам, а участники сообщества (в частности, Семен Павлюков) – посидели и разобрались, как это все работает. Они даже уже без моей помощи смогли сами сделать поддержку последних релизов. На это требуется буквально от нескольких часов до максимум недели.

Если куплена лицензия на первый вариант Снегопата, насколько я помню, на второй вариант был переход бесплатно, а это уже третий вариант – нужно будет платить?

Нет.

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

Нет, мы здесь ничего не нарушаем. Этот вопрос нами разбирался досконально, никаких нарушений здесь нет. Что касается возможных действий со стороны фирмы 1С – коммерческая фирма просто так ничего не делает. Чтобы что-то начать делать, у этого должно быть какое-то финансовое обоснование. Затраты на обфускацию тоже не бесплатные. Надо сажать программистов, обфусцировать. После этого усложнится процесс тестирования. Мне это просто кажется смешным. С одной стороны, фирма 1С – это огромное всероссийское предприятие. И с другой стороны – один я. И что, они скажут, что не могут конкурировать с Орефковым? Если вспоминать историю, EDT появился после того как на первой конференции Инфостарта представили Снегопат и потом, когда Инфостарт устраивал голосование за вопросы Борису Нуралиеву, первым по популярности вопросом в обсуждении был вопрос именно по поводу Снегопата. Возможно, именно он и подтолкнул фирму 1С к началу развития. Не знаю, почему они решили вместо того, чтобы развивать конфигуратор, который я считаю очень хорошей средой разработки, перейти на Eclipse и, по сути, делать двойную работу. У них сейчас, получается, нужно сперва какую-то фичу реализовать непосредственно в движке 8-ки в конфигураторе. А потом еще поддержку этой фичи реализовать в EDT. Причем код повторно использовать даже не получится, потому что EDT на Java, а 1С на C++.

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

Всего в Снегопате идет три слоя – это основное ядро, затем его движок – код AngelScript и третий слой – это обвязка из скриптов на JavaScript. Чем слой выше, тем больше людей им занимается. Основное ядро я пока пишу один. А разработкой скриптов сейчас активно занимается 10 энтузиастов. Разработкой движка на AngelScript сейчас занимается где-то три-четыре человека. Они разбираются, что к чему и даже что-то исправляют. Если посмотреть недавние правки на GitHub, Артур Аюханов делал доработки по ключевым словам. Семен Павлюков много улучшений сделал. А основной код самого движка пишу пока я один. Так как я сейчас в команде Инфостарт, даже если я куда-то пропаду, моя работа никуда не денется.

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

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

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event 2021 Post-Apocalypse. Больше статей можно прочитать здесь.

Приглашаем всех 11-12 ноября принять участие в INFOSTART EVENT 2021 в Москве: //infostart.ru/events/1451228/

has been added to your cart:
Оформление заказа