onescript что это такое
OneScript
Инструмент автоматизации для специалистов по 1С
Проект является независимой кросс-платформенной реализацией виртуальной машины, исполняющей скрипты на языке 1С:Предприятие.
При этом библиотеки системы 1С:Предприятие не используются и не требуется установка системы 1С:Предприятие на целевой машине.
Иными словами, это возможность писать программы на языке 1С без использования платформы 1С:Предприятие.
Название и произношение
Проект носит название OneScript, может быть сокращен при написании до названия 1Script.
OneScript позволяет создавать и выполнять текстовые сценарии, написанные на языке, знакомом любому специалисту по системе 1С:Предприятие. Применение знакомого языка для скриптовой автоматизации позволяет значительно повысить продуктивность специалиста за счет более простой автоматизации ручных операций.
Основные возможности
Совместимость языка
1Script поддерживает все возможности встроенного языка, перечисленные в ветке «Описание встроенного языка» стандартного синтакс-помощника:
Новости и статьи
Прими участие в проекте!
1Script разрабатывается группой энтузиастов на безвозмездной основе. Поэтому, мы приветствуем любую помощь проекту. Нам нужен, например, логотип проекта.
Вы можете также доработать документацию проекта или изменить какой-то текст на этом сайте. Вы можете даже доработать этот сайт целиком, например, поменять дизайн или сделать более удобный синтакс-помощник.
Иными словами, мы рады любым идеям, не стесняйтесь писать нам.
Благодарности
SilverBulleters
За информационную и идеологическую и вообще всякую поддержку, за опыт и знания, за формирование и преобразование отрасли разработки под 1С и вклад в сообщество.
Infostart
JetBrains
За предоставленные бесплатные лицензии на замечательные продукты Resharper, Rider и др.
А также за лицензионную политику в отношении Open Source.
Сообщество разработчиков
За использование продукта, за помощь в разработке, за финансовую и моральную поддержку.
Практика применения OneScript (он же OScript, он же 1 Script) для 1С с примерами
Примеры скриптов на OneScript для управления кластером 1С:Предприятие
Специалисты 1С, не располагающие знаниями других языков программирования, которым необходимо автоматизировать «админскую» часть своих обязанностей по сопровождению систем на базе 1С:Предпрятие – могут воспользоваться интерпретатором OneScript для осуществления DevOps разработки.
Для написания приведенных далее скриптов использовалась библиотека управления кластером irac.
Установка OneScript и irac.
1. Скачаем дистрибутив интерпретатора.
Это можно сделать с сайта разработчика https://oscript.io/, там же можно почитать подробнее о самом OneScript.
2. Распакуем архив и поместим файлы интерпретатора OneScript на компьютер администратора.
Например в такую папку:
Размещать OneScript и библиотеку irac можно по любому пути на компьютере.
Но надо понимать, что данный путь указывается в скриптах, для подключения библиотеки.
3. Скачаем так же библиотеку управления кластером 1С irac.
4. Распакуем архив и поместим каталог irac в каталог с OneScript.
Примеры скриптов и их описание
В моем случае управление скриптами осуществляется внешней обработкой 1С:Предприятия.
Обработка для управления скриптами 1С OneScript
Для работы которой требуется база 1С:Предприятия с доступной клиентской лицензией.
Из обработки осуществляется запуск командных строк вызова скриптов. Примеры использования командной строки можно прочитать можно посмотреть в статье*статья*.
Пример командной строки запуска:
Передаем в качестве параметров:
Скрипт блокировки базы
Устанавливает свойства базы:
Аналогичным образом можно выполнить разблокировку базы, задав параметры в значение «off».
Скрипт редактирования требований назначений функциональности
Добавляет в кластер требование назначения, чтобы клиентские соединения выполнялись только на 1-м сервере кластера.
Текст скрпита добавления требований:
Текст скрипта удаления требований:
Скрипт удаления сеансов в базе
Удаляет все активные сессии в базе.
Итоги
Как видим рутинные операции по обслуживанию 1С, для автоматизации которых ранее надо было исхищраться с shell-интерпритаторами операционной системы, теперь доступны в кофмотрной для «1С-ника» обертке. Это позволяет более гибко и управляемо подходить к процессу сопровождения системы прорамм 1С.
Еще можно посмотреть
Командная строка 1С и примеры ее использования
Командная строка 1С Запуск исполняемого файла программы 1С Предприятие с различными ключами и параметрами позволяет запускать программу в различных сервисных режимах и передавать ей определенные данные для обработки. Это позволяет автоматизировать некоторые операции связанные с запуском программы 1С. В данной статьи показаны примеры практического применение и привести реальные примеры командных строк 1С:Предприятия. Остановимся сначала на […]
Разворачиваем виртуальный сервер VirtualBox для 1С и не только
В данной статье расскажем о том, как развернуть у себя на компьютере виртуальный сервер. На него мы можем затем установить любую операционную систему и любое прикладное программное обеспечение. В нашем случае — операционную систему linux для использования его в качестве сервера 1С на linux. О том как установить сервер 1С описано в Установка сервера 1С […]
Настройка DNS-адресации для 1С сервера
Рассмотрим важность настройки DNS-адресации для 1С сервера или как сэкономить кучу времени на исправлении ошибок подключения к 1С серверу.
Настройка выделенного сервера лицензий 1С Предприятия
Настраиваем сервер лицензий 1С на выделенном компьютере. Пошаговый процесс настройки.
Onescript что это такое
Речь идёт о возможности написания скриптов на языке OneScript для автоматизации операций над группой баз вот на этой вкладке обновлятора:
Что такое OneScript?
Проект является независимой кросс-платформенной реализацией виртуальной машины, исполняющей скрипты на языке 1С:Предприятие.
Иными словами, это возможность писать программы на языке 1С без использования платформы 1С:Предприятие.
И это позволяет нам в конечном итоге брать уже готовые куски кода, написанные в конфигураторе и с минимальной адаптацией переносить их в программу на OneScript.
И пусть по словам разработчиков это не главная цель проекта, но я вижу интерес именно в том, чтобы из программы на OneScript подключаться к базе 1С через внешнее соединение и выполнять некоторый полезный код.
Но мы ведь говорим об автоматизации и тут есть фундаментальные проблемы:
Все эти проблемы решает OneScript.
Зачем писать и запускать эти скрипты именно в обновляторе?
Потому что обновлятор берёт на себя ряд непростых вещей, чтобы упростить написание таких скриптов в части взаимодействия с базами.
Список баз для обработки
Прямо в обновляторе мы выбираем для какого количества баз нужно запустить написанный нами скрипт:
Передача параметров базы
При выполнении скрипта обновлятор сам передаёт в него необходимые параметры с информацией о текущей базе:
Все эти параметры мы можем использовать в своём скрипте, делая его универсальным для выполнения над любым количеством выбранных баз.
Примеры таких скриптов мы можем найти в списке шаблонов обновлятора:
Предварительная архивация базы
При необходимости обновлятор обеспечит создание резервной копии перед выполнением скрипта:
Эта резервная копия будет согласована с общей системой архивации, то есть её также можно подвергать «тюнингу» в дополнительных настройках обновлятора. Такая копия всегда будет иметь метку «перед опасной операцией».
Блокировка, разблокировка базы
При необходимости обновлятор выполнит полную блокировку базы перед выполнением вашего скрипта и разблокировку после:
Нужно «разрулить» текущие подключения пользователей, административные подключения, выполнение фоновых задач. И всё это через общение напрямую с кластером 1с.
Сохранение отчётов
Обновлятор сохраняет историю выполнения таких скриптов в менеджере отчётов.
Уведомление на почту
Если у вас настроены уведомления на почту (все или только при ошибках).
. то информация о выполнении скриптов (включая детальные отчёты) будет приходить к вам точно также, как и информация о выполнении других операций из обновлятора:
Запуск скрипта по расписанию
Для добавления скрипта в запуск по расписанию следует сохранить сам скрипт:
Далее у нас есть 2 варианта:
Быстрый, но неудобный способ
И далее уже отредактировать расписание этого задания непосредственно в планировщике Windows.
Чуть более медленный, но самый удобный способ
После того как вы сохранили скрипт (не добавляя его в планировщик Windows) вернитесь в главное окно Обновлятора на закладку «Настройки программы».
Далее нажмите кнопку «Расписание».
И создайте задачу с типом операции «Запуск скрипта»:
Укажите ваш сохраненный скрипт по ссылке «выбрать скрипт для запуска. «.
Облачный мониторинг
Многопоточное выполнение скриптов
О том как запускать скрипт параллельно для нескольких баз подробно рассказывается здесь.
Что ещё полезно изучить перед написанием скриптов?
Прежде всего есть вот этот справочник языка 1С с примерами: ссылка.
Также стоит пробежаться по отличиям OneScript от стандартного языка 1С. Их немного (ссылка).
Ну, и наконец, у OneScript есть также свой синтакс-помощник.
Изучать сторонние библиотеки на OneScript (которые также можно подключать в обновлятор) на первом этапе я не советую. Вы сможете вернуться к ним, когда освоитесь с простейшими скриптами в достаточной мере.
Ну, поехали!
Изучаем структуру простейшего скрипта
Для этого выберем из шаблонов пункт «1. Привет, база».
В редактор вставится шаблон простейшего скрипта:
1Script или Как я начал open-source проект
Тезис о том, что open-source создается гиками-энтузиастами в наше время несколько утратил актуальность. Тем не менее, идеология открытого кода родилась именно так. Классные программы, написанные ночью, бородатыми (и не очень) чудиками, бескорыстно, просто, чтобы сделать мир лучше — изменили мир разработки ПО.
Любой программист втайне мечтает сделать что-то большое и светлое, чтобы всем понравилось. Если вы скажете мне, что вы не из таких, что вам нравится только закрывать тикеты в рабочем багтрекере, и вы не мечтаете о выпуске своего проекта в большой мир, то я вам не поверю. Или посоветую сменить профессию. Я убежден, что программист — это художник, а художнику важно делать что-то свое, возможно, просто «в стол» — но делать.
Однажды, мне в голову упала идея проекта. Идея была чисто исследовательской и я не собирался делать из этого некий «продукт». Кроме того, я раньше не вел проектов в открытом доступе и мне очень хотелось попробовать, как это вообще происходит. Что из этого получилось — под катом.
В самом начале жизненного пути проекта я уже писал про него на Хабре. Тогда это были первые шаги, код был сырым, но он работал. Мне хотелось, чтобы проект вызвал интерес со стороны других авторов, поскольку в одиночку я его явно бы не потянул и вообще, забросил. В принципе, так бы и вышло, если бы я не получил свой первый pull-request от незнакомого человека. Но обо всем по порядку…
О чем идет речь?
Я сделал собственную реализацию стековой машины, исполняющей скрипты на языке 1С: Предприятие. Или, если проще — открытый интерпретатор языка 1С и открытую же реализацию некоторых стандартных классов 1С. При этом, ставилась четкая прикладная цель проекта — дать 1С-никам инструмент скриптовой автоматизации, который легко будет изучить. Проект был назван 1Script.
И вот, проект опубликован на хабре и на профильном 1С-овском портале infostart.ru. Жду обратную связь. Первый отклик получил на мисте и от души посмеялся. Топик на форуме назывался «Интерпретатор 1С на хабре. Давайте зачмырим?» На мисте много добрых людей, я порадовался:)
Потом пошли более-менее адекватные вопросы, на которые я старательно отвечал, после чего статьи в штатном режиме опустились с первых страниц куда-то вниз, и интерес к проекту затих. Ну что же, это был ожидаемый финал, я немного подосадовал, но не сильно. Собственно, я не рассчитывал на какой-то особый результат. Поболтали и ладно. Шли дни, я что-то доделывал, даже выложил еще одну версию, но она кроме меня никому была не нужна. Мой запал иссяк. Хотя я и не был разочарован, но писать новый код перестал.
Второе дыхание
Спустя примерно два месяца после публикации на меня вышел Сергей Батанов (Серега, привет!:) — заметный чувак в сообществе 1С-ников, который предложил свою помощь в развитии стандартной библиотеки. Это был 1С-овский класс «ТаблицаЗначений». Разумеется, я согласился. А когда я увидел реальный код, который прислал Сергей, я радовался, как ребенок, правда. В Интернетах часто бывает, когда кто-то что-то предлагает на словах, но до дела часто не доходит. А тут — реальный живой код, который работает, который полностью адекватный, который можно вставить в проект!
При этом, задача довольно крупная, я сам бы поленился ее делать. А тут — ощутимый, реально полезный, измеримый строками кода вклад в общий проект! Короче говоря, не покривлю душой, если скажу, что именно Сергей сделал так, что проект не был мной заброшен. Это потрясающее вдохновение — получить помощь от незнакомого человека. Просто так, потому что ему было интересно то, что ты начал.
Постепенно, я стал получать фидбек от людей, которые пробовали движок и спрашивали «где вот такая фича?», «а как сделать вот это?» На все эти вопросы приходилось отвечать, что мол, это прототип, а самому в срочном порядке эти фичи добавлять. Но энтузиазм зашкаливал: «Люди интересуются и пробуют применять», поэтому новые фичи добавлялись довольно быстро. Изначально в стандартной библиотеке не было даже функций работы с файлами.
Дальше-больше
Спустя какое-то время, мне написал Александр Кунташов, с вопросом об интеграции 1Script и проекта Снегопат (www.snegopat.ru). Кто не знает — это такой решарпер для 1С. В нем можно делать скриптовые плагины к Конфигуратору 1С и есть целое сообщество авторов подобных плагинов.
Плагины эти писались на JavaScript, в связи с чем требовали квалификации, выходящей за рамки стандартного программиста 1С. Из-за этого, в конечном итоге, тормозилось и развитие экосистемы плагинов. Число людей, желающих улучшить Конфигуратор, примерно равно общему числу 1С-ников, однако, необходимость изучения JavaScript отпугивает авторов потенциальных шедевров.
Я, опять же, дико обрадовался востребованности своего детища, выпросил у автора дистрибутив Снегопата и стряхнул пыль со своих знаний C++. Пыли оказалось намного больше, чем знаний, но творческий зуд сделал свое дело, и я погрузился в MSDN.
Примерно через месяц, в Конфигураторе 1С стало можно писать плагины прямо на языке 1С, не переключаясь в окно редактора JavaScript. Тогда же были исправлены первые критичные баги движка и существенно пересмотрена внутренняя архитектура.
Я же получил пьянящий восторг от общения с С++, COM, ATL и всем вотэтимвот, после долгих лет работы исключительно с 1С. Ну и еще от того, что сделал нечто полезное, ощутимое для сообщества 1С-ников.
Первый опыт боевого применения
Примерно в это же время (точно уже не помню) проект попал в поле зрения Алексея Лустина (alexey-lustin) (Леха, тебе тоже привет!) — среди 1С-ников человека известного и уважаемого. Это совпало по времени с моим поиском нового места работы. Я присматривал интересные компании на рынке, а Алексей — специалистов под проект Continuos Integration/Continuos Delivery для 1С-ников. Тогда Леша уже видел мой проект (и ник) на хабре, а я уже знал, что некая команда продвинутых 1С-ников в сети делают занятные нестандартные вещи.
В тот момент в сообществе уже были известны такие штуки, как юнит-тестирование, хранение кода 1С в git, BDD+cucumber для 1С и прочее. Самым доступным из этих чуваков мне показался Алексей и я написал ему письмо, где спросил нет ли у того интересной работы. Так я вместе со своим проектом попал в веселую компанию гиков, собравшихся к тому времени в компании, где работал Алексей.
На тот момент движок уже имел минимально необходимый скрипту набор возможностей, и его можно было (как мне казалось) в принципе применить в качестве скриптования сборки и развертывания баз 1С.
Зачем вообще применять для этого новый движок?
Собственно, скриптовых языков мильон, непонятно же, зачем нужен еще один, да еще и неизвестный — спросит читатель хабра — и будет не совсем прав. Стратегически, будущий продукт предназначался для 1С-ников и должен был бы жить переходя от разработчика к разработчику, независимо от кадровых изменений в компании. В сообществе 1С-ников существует объективная проблема: среди них много классных специалистов, но почему-то средний 1С-ник не хочет учить никакой другой язык, после того, как хорошо набил руку в 1С. Я не знаю в чем причина данного явления, наверное в том, что 1С рулит (irony)? Люди приходят в 1С зная Java, С/С++, микроконтроллеры, Delphi, либо не зная ничего, но они часто остаются в 1С и неохотно переходят обратно в свои исходные экосистемы.
Я сейчас предвижу волну гнева, но будьте добры, дослушать тезис до конца. Из любого правила есть исключения, однако, планируя систему, которая должна пережить несколько поколений разработчиков (не биологических, а кадровых поколений, разумеется), то с наибольшей вероятностью вы найдете специалиста, который сможет ее развивать, если она будет написана на 1С. Если это будет питон (или вставьте ваш любимый язык), то вам придется нанимать питонщика, очень хорошо знающего 1С. А после его перехода в большие начальники — вам придется искать еще одного такого же, с компетенциями в области 1С. А если это сразу будет язык 1С, то вам придется найти только 1С-ника, хорошо знающего 1С и этого будет достаточно.
Иными словами, система будет более живучей и сможет развиваться бОльшим количеством спецов, если будет написана на знакомом им всем языке.
Таким образом, стала понятна сфера применения 1Script: это DevOps и подобные задачи для целей 1С проектов.
Первые шишки и правильная разработка
За какие-то три-четыре месяца библиотека классов движка обросла, наконец, всем необходимым для большинства задач скриптинга: появились сетевые функции, работа с архивами, XML и прочее. Наш проект по CI для 1С был успешно запущен.
Примерно в то же время, благодаря, опять же, alexey-lustin в проект стали приходить новые заинтересованные пользователи. Они запрашивали фичи, находили баги, требовали новых релизов.
Поток фич, выделение библиотечного кода, вкупе с необходимостью простой схемы выпуска релизов, привели меня к такой интересной штуке, как проблема роста. Но о ней, чуть позже.
Проблема роста или Подводные камни поддержки проекта
Как оказалось, наличие в твоем управлении востребованного проекта, даже небольшого — несет в себе немалый такой груз накладных расходов. Для начала, это поток фич. Пожелания приходят намного чаще, чем коммиты, реализующие эти пожелания. Требуется строго учитывать версии, в которых исправлялись те или иные ошибки. Требуется как-то уведомлять пользователей о том, что с версии Х исправлена ошибка или появилась новая возможность. Рост функционала требует документирования, причем документация имеет тенденцию к устареванию.
Ну и самое забавное — требуется техническая инфраструктура собственно «поддержки». Потребовался сайт, генератор документации, сервер сборки/деплоя и прочее и прочее… Потребовались финансовые вложения в инфраструктуру — минимальные, но все-таки вложения.
Начиная исследовательский проект, я даже не предполагал такое количество организационно-технических вопросов, с которыми придется столкнуться при росте проекта. Очень помог в этом плане переход на методику git-flow, стало проще разбираться самому и общаться с пользователями на тему версий и веток.
Опыт краудфандинга (ужасное слово)
Библиотека полезных скриптов
За полтора года кодинга на 1Script выделились библиотечные блоки, которые можно использовать самому и рекомендовать другим. Естественным путем в моем распоряжении скопился ряд наработок, которые были пригодны к повторному использованию.
Это привело к тому, что в движок была добавлена возможность подключения сторонних «пакетов», написанных также на 1Script. На выходе получился еще один проект, получивший название oscript-library. (https://github.com/EvilBeaver/oscript-library) Эта библиотека, разумеется, также потребовала инфраструктуры, документации, end-user обновлений и прочего. Зато поток контрибьютинга со стороны 1С-ников вырос в разы. Пакеты ведь разрабатываются на уже знакомом языке, а значит можно сразу приносить пользу, портировать уже имеющиеся наработки и т.д. Сообщество «1С-скриптописателей» начало расти, чему в немалой степени поспособствовал уже второй доклад на Infostart Event в 2015 г.
Как это выглядит
Для импорта используется специальная директива препроцессора #Использовать (#Use) Ее нет в оригинальной платформе 1С, но для простоты импорта библиотек пришлось отойти от канонического синтаксиса и позаимствовать решение в других экосистемах.
Конкретное решение вырабатывалось уже коллективом авторов, продумывались сценарии применения, подводные камни и пр. В качестве инструмента для «мозгоштурма» был использован Google Docs.
Пакетный менеджер
Для управления пакетами был на коленке написан простенький пакетный менеджер, получивший название OPM (OneScript Package Manager). Он также написан на 1Script и представляет собой консольную утилиту управления пакетами. В данный момент идет переосмысление инфраструктуры пакетов и работа над production-ready версией opm.
Проект сегодня
На сегодняшний момент 1Script это стабильный, успешно применяемый в десятках компаний инструмент автоматизации для 1С-ников. Кроме того, OneScript это уже своего рода бренд, это название известно в сообществе, инструмент активно применяют, пишут, задают вопросы, обсуждают и, что особенно приятно — дорабатывают.
Кроме того, практически неотъемлемой частью проекта является библиотека пакетов повторно используемого кода. Она небольшая, но покрывает значительную часть задач, ежедневно решаемых типовым 1С-ником.
Это уже не просто «интерпретатор 1С». Сообществом была создана экосистема полезных и востребованных инструментов.
Для меня же это был уникальный опыт, я получил слова (и дела) поддержки от десятков незнакомых (и теперь уже знакомых) мне людей. Программа, которую я начал исключительно для того «чтобы попробовать» превратилась в работающий проект, используемый в реальных боевых задачах. Кроме того, получен огромный опыт управления таким вот open-source проектом — поддержка, сопровождение, инфраструктура и т.д…
Ну и самое главное — получено удовольствие от того, что делаешь нечто нужное.
Что планируем сделать дальше
Активное применение библиотеки пакетов выявило ряд недочетов и неудобств. Планируем внести коррективы в инфраструктуру пакетов и расширить функционал пакетного менеджера. Также планируем расширять набор библиотек, например, сейчас идет работа над оберткой для Docker API. Мы управляем docker-контейнерами с помощью скриптов на 1С и наработки по этой теме, вероятно, также будут опубликованы, когда будут доведены до ума. В результате будет получен упрощенный DSL для манипуляции контейнерами из сценария 1script.
Техническая сводка
Советы начинающим экспериментаторам
Если у вас есть свой проект, который вы хотели бы вывести в свет, то позволю себе дать вам пару советов, основанных на личном опыте.