--}}

OneScript (1Script) - Проект Андрея Овсянкина (EvilBeaver). Сайт проекта: oscript.io

2316
14
С друзьями на NN.RU
В социальных сетях
Поделиться
https://habrahabr.ru/post/301064/

OneScript (1Script) - Проект Андрея Овсянкина (EvilBeaver). Сайт проекта: oscript.io

На сегодняшний момент 1Script это стабильный, успешно применяемый в десятках компаний инструмент автоматизации для 1С-ников. Кроме того, OneScript это уже своего рода бренд, это название известно в сообществе, инструмент активно применяют, пишут, задают вопросы, обсуждают и, что особенно приятно -- дорабатывают.
Кроме того, практически неотъемлемой частью проекта является библиотека пакетов повторно используемого кода. Она небольшая, но покрывает значительную часть задач, ежедневно решаемых типовым 1С-ником.
Это уже не просто <<интерпретатор 1С>>. Сообществом была создана экосистема полезных и востребованных инструментов.
Для меня же это был уникальный опыт, я получил слова (и дела) поддержки от десятков незнакомых (и теперь уже знакомых) мне людей. Программа, которую я начал исключительно для того <<чтобы попробовать>> превратилась в работающий проект, используемый в реальных боевых задачах. Кроме того, получен огромный опыт управления таким вот open-source проектом -- поддержка, сопровождение, инфраструктура и т.д...
Ну и самое главное -- получено удовольствие от того, что делаешь нечто нужное.

Что планируем сделать дальше

Активное применение библиотеки пакетов выявило ряд недочетов и неудобств. Планируем внести коррективы в инфраструктуру пакетов и расширить функционал пакетного менеджера. Также планируем расширять набор библиотек, например, сейчас идет работа над оберткой для Docker API. Мы управляем docker-контейнерами с помощью скриптов на 1С и наработки по этой теме, вероятно, также будут опубликованы, когда будут доведены до ума. В результате будет получен упрощенный DSL для манипуляции контейнерами из сценария 1script.

Техническая сводка

Язык программирования -- C#, .NET v4.0/Mono 3.1x
Среда разработки -- VS 2013-2015
Имя интерпретатора -- oscript.exe (запуск на выполнение -- oscript <your-file>)
Расширение файла скрипта -- .os
Расширение файла пакета -- .ospx
Производительность кода -- в большинстве замеров до 4-х раз быстрее оригинальной платформы 1С. Как минимум, не медленнее ее.
Репозиторий движка -- github.com/EvilBeaver/OneScript
Репозиторий библиотеки -- github.com/EvilBeaver/oscript-library


Советы начинающим экспериментаторам

Если у вас есть свой проект, который вы хотели бы вывести в свет, то позволю себе дать вам пару советов, основанных на личном опыте.

Дерзайте! Если вы будете держать свой проект в столе и никому о нем не рассказывать, то о нем никто и не узнает. Начните со статьи на Хабр. Одной статьи будет недостаточно. Упоминайте свой проект в форумах, посвященных предметной области вашего проекта, приводите примеры удачного применения.
Будьте готовы к тому, что предложений от людей много, а реальных коммитов -- сильно меньше. Подход в стиле <<Это open-source, тебе надо, ты и сделай>>, к сожалению, не прокатит.
Заранее продумайте решение <<проблемы роста>>. Рост, как правило, взрывной и справиться с резко возросшим пулом задач довольно сложно.
Автоматизируйте все что можно с самого начала -- тестирование, сборку, публикацию версий, документирование. Эти вещи проще всего отложить на потом, но <<потом>> уже не будет времени все это автоматизировать.
Привлекайте контрибьюторов. Вклад в проект это не только код. Зачастую это даже просто идеи. Спрашивайте: <<как лучше сделать это>>, <<как могло бы выглядеть вот это>>. Вам подскажут. И вполне вероятно -- помогут.
Выращивать проект -- невероятно круто. Не стесняйтесь, делитесь своей работой, получайте удовольствие от процесса!

https://habrahabr.ru/post/301064/
Андрей Овсянкин. 1Script - язык для автоматизации рутины в жизни специалиста по 1С

https://youtu.be/BW2P_EIQI9g
Да закидают меня тапками, но такой проект актуален для групп спецов, автоматизирующих годами одного крупного заказчика. Обычно в его штате, как отдел. Специалистам же, которые занимаются десятком клиентов за год, это не очень нужно \ не так актуально \ не оправдывает трудозатраты? Есть реальный опыт у кого?
Пока есть только два приложения, написанных мною на OneScript, для облегчения перекодировки символов, предназначенных для последующего ввода в ККТ онлайн <<Элвес-МФ>> и <<АТОЛ 90Ф>>:

infostart.ru/public/595642/
Скорее полезно тем, кто себе сервер интеграции разворачивает. Думаю, всех полезнее это командам франчей, затем фикси.

Я вот себе написал скрипт для копирования боевой базы в базу разработки, чтоб в случае какой ошибки можно было быстренько развернуть себе копию https://github.com/Stepa86/oScript-Examples

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

С другой стороны гитсинх на оскрипте я не осилил и сделал/доработал Гиттер конфой, который разбирает конфу на исходники и отправляет в гит. infostart.ru/public/583152/

Короче все определяется знаниями, удобством, наличием примеров и задачами, которые хочется решить. Мне оскрипт более, чем полезен.
напоминает 1С++ именно ооп для 7.7 в целом - такое же шаманство, слетающее при серьезном обновлении от 1С по платформе... ничего личного.
Не, тут не так. 1) Это внешний среда выполнения, она не добавляет функциональности самой 1С 2) Используется только документированные возможности платформы 3) оскрипт удобно использовать для нужд автоматизации, сами 1С этим же занимаются, только batниками
Прочитал , посмотрел видео. Все таки не пойму, чем это лучше стандартных скриптов?
Тем, что синтаксис от 1С и разрабатывается 1Сниками для 1Сников. Если знаешь другие скрипты на должном уровне, то в принципе оскрипт не нужен.
Ну и еще там уже куча всего написано и адаптировано. Например, вот так можно развернуть базу и создать под нее хранилище:

#Использовать tempfiles
#Использовать v8runner

УправлениеКонфигуратором = Новый УправлениеКонфигуратором;

ВременныйКаталог = ВременныеФайлы.СоздатьКаталог();


УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог);



КаталогВременногоХранилища = ОбъединитьПути(ВременныйКаталог, "v8r_TempRepository");


ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0\1Cv8.cf");


УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации);

УправлениеКонфигуратором.СоздатьФайловоеХранилищеКонфигурации(КаталогВременногоХранилища,"Администратор");
Пишем консольные exe-приложения на языке 1С: infostart.ru/public/287643/
Опубликовал Андрей Овсянкин (Evil Beaver) в раздел Программирование - Практика программирования

Нужен скрипт автоматизации рутинных операций? Нет времени учить JScript или VBScript? Теперь можно писать скрипты автоматизации прямо на языке 1С. Проект 1Script представляет собой альтернативную исполняющую среду этого языка.
В данной статье рассматриваются основные возможности 1Script и варианты его практического применения.
Сообщение от автора от 06.07.15

Данная статья написана тогда, когда проект только-только вышел в свет и умел очень мало. На данный момент информация в данной статье заметно устарела. Для более прикладного знакомства с 1Script рекомендую прочитать вот эту статью, а также посетить wiki проекта https://bitbucket.org/EvilBeaver/1script/wiki/Home.

Все что написано ниже не удалено с инфостарта, поскольку является, как-никак, частью истории проекта.



Как решать повседневные задачи с помощью OneScript infostart.ru/public/327581/
Опубликовал Андрей Овсянкин (Evil Beaver) в раздел Программирование - Инструментарий

Если вам не нравится выполнять рутинные операции вручную. Если вы 1С-ник, который хоть раз в жизни писал BAT-CMD-файлы для автоматизации, или который время от времени вынужден вспоминать особенности черной магии Powershell, то эта статья для вас. Теперь можно все это делать на языке 1С. Интересно? Читайте дальше!
Скрипты - наше все!
//infostart.ru/public/327581/
Формы для 1script: infostart.ru/public/540284/
Опубликовал Сергей (ret-Phoenix) в раздел Программирование - Инструментарий
Создание 01.08.16 16:33

В последнее время для задач, связанных с администрированием 1С или расширением возможностей конфигуратора, стал использовать 1script (onescript). Движок оказался очень удобным и приятным, но чего-то не хватало, а именно работы с формами. В ряде скриптов использовать GUI было бы предпочтительней параметров командной строки, тем более если с этим работать конечному пользователю.

Имея некоторый опыт работы с C#, решил написать внешнюю компоненту для 1script, благо базовый пример был. После нескольких часов работы появилась компонента, позволяющая работать с формами и обрабатывать события. API старался сделать максимально приближенным к 1С.

Во время разработки очень порадовала обратная связь с разработчиками onescript, ответы на вопросы получал очень быстро. Библиотечные методы написаны просто и понятно, ряд вопросов решился просмотром исходных кодов и копипастом (перебор элементов формы в цикле ДляКаждого Элемент Из Коллекции Цикл).

Проект выложен на github, там же лежит бинарник, для более быстрого начала использования. Методы компоненты покрыты тестами, которые так же являются и примерами работы с объектами компоненты. За тесты отдельное спасибо artbear, всегда знает в каком направлении правильно пнуть :D
Примеры работы с компонентой

Перейдем к работе с компонентой...
Создание формы и вывод надписи

Перем Форма;

Процедура Инициализация()

//# Загружаем внешнюю компоненту
ПодключитьВнешнююКомпоненту(″oscript-simple-gui.dll″);

ПростойГУИ = Новый ПростойГУИ();
Форма = ПростойГУИ.СоздатьФорму();

//# Устанавливаем обработку события ПриОткрытии
Форма.УстановитьДействие(ЭтотОбъект, ″ПриОткрытии″, ″ПриОткрытииФормы″);
Форма.Показать();

КонецПроцедуры

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт

Декорация1 = Форма.Элементы.Добавить(″Декорация1″, ″ПолеФормы″, Неопределено);
Декорация1.Вид = Форма.ВидПоляФормы.ПолеНадписи;
Декорация1.Заголовок = ″Это действительно работает!″;

КонецПроцедуры

Инициализация();

Создание формы с кнопкой и обработка события нажатия на кнопку

Перем Форма;

Процедура Инициализация()

//# Загружаем внешнюю компоненту
ПодключитьВнешнююКомпоненту(″oscript-simple-gui.dll″);

ПростойГУИ = Новый ПростойГУИ();
Форма = ПростойГУИ.СоздатьФорму();

//# Устанавливаем обработку события ПриОткрытии
Форма.УстановитьДействие(ЭтотОбъект, ″ПриОткрытии″, ″ПриОткрытииФормы″);
Форма.Показать();

КонецПроцедуры

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт

ПолеВвода1 = Форма.Элементы.Добавить(″ПолеВвода1″, ″ПолеФормы″, Неопределено);
ПолеВвода1.Вид = Форма.ВидПоляФормы.ПолеВвода;
ПолеВвода1.Заголовок = ″Поле ввода″;
ПолеВвода1.Значение = ″Значение задано из скрипта″;

Кнопка1 = Форма.Элементы.Добавить(″Кнопка1″, ″КнопкаФормы″, Неопределено);
Кнопка1.Заголовок = ″Нажми меня″;
Кнопка1.УстановитьДействие(ЭтотОбъект, ″Нажатие″, ″ПриНажатииНаКнопку1″);

КонецПроцедуры

Процедура ПриНажатииНаКнопку1() Экспорт
Форма.Элементы.Найти(″ПолеВвода1″).Значение = ″Значение после нажатия на кнопку″;
КонецПроцедуры

Инициализация();

Перейдем к более сложному примеру, создадим форму с кнопкой, полем ввода.

Пример работы с выпадающим списком

Перем Форма;

Процедура Инициализация()

//# Загружаем внешнюю компоненту
ПодключитьВнешнююКомпоненту(″oscript-simple-gui.dll″);

ПростойГУИ = Новый ПростойГУИ();
Форма = ПростойГУИ.СоздатьФорму();

//# Устанавливаем обработку события ПриОткрытии
Форма.УстановитьДействие(ЭтотОбъект, ″ПриОткрытии″, ″ПриОткрытииФормы″);
Форма.Показать();

КонецПроцедуры

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт

Данные = Новый Соответствие;
Данные.Вставить(″Один″, ″1″);
Данные.Вставить(″Два″, ″2″);
Данные.Вставить(″Три″, ″3″);

ПолеСоСписком1 = Форма.Элементы.Добавить(″ПолеСоСписком1″, ″ПолеФормы″, Неопределено);
ПолеСоСписком1.Заголовок = ″Поле со списком″;
ПолеСоСписком1.Вид = Форма.ВидПоляФормы.ПолеСоСписком;
ПолеСоСписком1.СписокВыбора = Данные;
ПолеСоСписком1.Значение = ″3″;
ПолеСоСписком1.УстановитьДействие(ЭтотОбъект, ″ПриИзменении″, ″ПриИзменииЗначения″);

Форма.Высота = 80;

КонецПроцедуры

Процедура ПриИзменииЗначения() Экспорт
Сообщить(″Новое значение: ″ + Форма.Элементы.Найти(″ПолеСоСписком1″).Значение);
КонецПроцедуры

Инициализация();

Возможности компоненты

На самом деле возможностей компоненты значильно больше нежели приведено в примерах, ознакомиться с ними можно на странице github.
Классы
УправляемыйИнтерфейс/ManagedInterface
Свойства

Версия/Version - Строка - Только чтение - Номер версии;
СтильЗакрепления/DockStyle
ВидПоляФормы/FormFieldType
ВидГруппыФормы/FormGroupType
ПоложениеЗаголовка/TitleLocation

Методы

СоздатьФорму/CreateForm - Форма - Создать форму (близка к Управляемой форме)

Форма/Form
Свойства

ВидПоляФормы/FormFieldType - ВидПоляФормы
ВидГруппыФормы/FormGroupType
ПоложениеЗаголовка/TitleLocation
Заголовок/Caption

Методы

Показать/Show
ПоказатьНеМодально/ПоказатьНеМодально
Элементы/Items
Возвращаемое значение
Коллекция с ПолеФормы, ГруппаФормы, КнопкаФормы

Элементы/Items
Свойства
Методы

Количество/Count - Число - Количество элементов
Найти/Find - Найти элемент по имени элемента
Параметры
ИмяЭлемента - Строка
Возвращаемое значение
ПолеФормы, ГруппаФормы, КнопкаФормы, Неопределено
Удалить - Удалить элемент
Параметры
ПолеФормы, ГруппаФормы, КнопкаФормы
Переместить/Move - Переместить элемент
Параметры
Элемент - ПолеФормы, ГруппаФормы, КнопкаФормы
Родитель - ГруппаФормы, УправляемаяФорма - Новый родитель элемента. Может совпадать со старым.
МестоРасположения - ПолеФормы, ГруппаФормы, КнопкаФормы - Элемент, перед которым нужно разместить перемещаемый элемент. Если не задан, то перемещается в конец коллекции.
Добавить/Add - Добавить элемент на форму
Параметры
ИмяЭлемента - Строка - Уникальное имя элемента
ТипЭлемента - Строка - Тип элемента (ПолеФормы, ГруппаФормы, КнопкаФормы)
Родитель - ГруппаФормы, Неопределено - Родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень.

КнопкаФормы/FormButton
Свойства

Родитель/Parent - ГруппаФормы, УправляемаяФорма - Только чтение - Содержит ссылку на родительский элемент.
Имя/Name - Строка - Имя кнопки
Видимость/Visible - Булево - Видимость кнопки
Доступность/Enabled - Булево - Доступность кнопки
Заголовок/Title - Строка - Надпись на кнопке

Методы

КнопкаНажатие/ButtonClick - deprecated - Обработчик нажатия на кнопку

Параметры
Скрипт - Объект - ссылка на скрипт с обработиком события
ИмяМетода - Строка - Имя метода обработчика события

Кнопка1 = ЭлементыФормы.Добавить(″Кнопка1″, ″КнопкаФормы″, Неопределено);
Кнопка1.Заголовок = ″Нажми меня″;
Кнопка1.КнопкаНажатие(ЭтотОбъект,″ПриНажатииКнопка1″);

УстановитьДействие/SetAction - Устанавливает обработчик события.
Параметры
Скрипт - Объект - Ссылка на скрипт с обработчиком события
ИмяСобытия - Строка - Имя события. Для кнопки только ″Нажатие″
ИмяМетода - Строка - Имя метода для обработчика
ПолучитьДействие/GetAction - Получает имя установленного обработчика события.
Параметры
ИмяСобытия - Строка - Имя события. Для кнопки только ″Нажатие″

ПолеФормы/FormField
Свойства

Значение/Value - Установка и получение значения.
Вид/Type - ВидПоляФормы
Имя/Name - Строка
Видимость/Visible - Булево
Доступность/Enabled - Булево
Заголовок/Title - Строка
ПоложениеЗаголовка/TitleLocation - ПоложениеЗаголовка
СписокВыбора/ChoiceList - Соответствие
Родитель/Parent - ГруппаФормы, УправляемаяФорма - Только чтение
ТолькоПросмотр/ReadOnly - Булево
Закрепление/Dock
АвтоматическийРазмер/AutoSize
Ширина/Width
Высота/Height

Методы

УстановитьДействие/SetAction - Устанавливает обработчик события.
Параметры
Скрипт - Объект - Ссылка на скрипт с обработчиком события
ИмяСобытия - Строка - Имя события. Для кнопки только ″Нажатие″
ИмяМетода - Строка - Имя метода для обработчика
ПолучитьДействие/GetAction - Получает имя установленного обработчика события.
Параметры
ИмяСобытия - Строка - Имя события. Для кнопки только ″Нажатие″

Обрабатываемые события

Форма: ПриОткрытии
Кнопка: ПриНажатии
ПолеФормы: ПриИзменении, ПриВыборе (нажат Enter)
ПолеСписка: ПриДвойномКлике

ВидПоляФормы/FormFieldType

ПолеВвода/InputField
ПолеИндикатора/ProgressBarField
ПолеКалендаря/CalendarField
ПолеНадписи/LabelField
ПолеФлажка/CheckBoxField
ПолеТекстовогоДокумента/TextDocumentField
ПолеСоСписком/ComboBox
ПолеСписка/ListBox

ВидГруппыФормы/FormGroupType

ОбычнаяГруппа/UsualGroup
Страница/Page
Страницы/Pages

ПоложениеЗаголовка

Авто/Auto
Верх/Top
Лево/Left
Нет/None
Низ/Bottom
Право/Right

СтильЗакрепления

Нет/None
Верх/Top
Низ/Bottom
Лево/Left
Право/Right
Заполнение/Fill
Вас все услышали тут.
Юрий9393
22.05.2023
Привет подскажите пожалуйста, требуется команда на onescript для запуска ИБ 1С и запуска в ней внешней обработки:
подскажите пожалуйста как верно написать команду:

vrunner run --command ″C:\Program Files\1cv8\8.3.22.1750\bin\1cv8.exe;ЗавершитьРаботуСистемы″ --execute $runnerRoot/ТестоваяОбработка.epf --ibconnection /stg-1cliz-cld\LeasingYDay2 --db-user ″test ″ --db-pwd ″123″ так верно ли?
Последние темы форумов