Обзор имеющихся библиотек OneScript

Программирование - Практика программирования

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

Введение

Для начала разберемся с терминами.
Тем, кто не знает, что такое OneScript, стоит познакомится с первой вводной статьей от самого автора Как решать повседневные задачи с помощью OneScript и с сайтом проекта OneScript. На Инфостарте недавно появилось несколько хороших статей на тему "быстрого старта".

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

Все пакеты делятся на два типа:

  1. Библиотеки, подключаемые в скрипты через директиву #Использовать и добавляющие разные полезные классы и модули
  2. и Приложения, которые помимо реализованной на OneScript логики имеют специальные обертки запуска из командной строки (cmd/sh). Часть приложений помимо запуска из командной строки позволяют себя подключать через #Использовать (т.е. как библиотеки), но это скорее бонус и желание разработчика приложения, чем возможность, на которую всегда можно надеяться.

Все более-менее работающие и известные пакеты собраны в двух местах:

  1. Организация oscript-library на github.com - https://github.com/oscript-library - содержит оригиналы или форки репозиториев, в которых ведется разработка пакетов. Там лежит весь исходный код, чаще всего там же находится и баг-трекер.
  2. Собранные пакеты выложены на специальном хабе пакетов http://hub.oscript.io/download/ - оттуда их можно скачать руками, если по каким-то причинам не работает пакетный менеджер. Страничка поражает своим минимализмом, но и Москве, как говорится, не сразу стало 870 лет.

Менеджер пакетов OneScript - opm

Перед обзором имеющихся пакетов я хочу немного рассказать о самом главном пакете-приложении в экосистеме OneScript - его пакетом менеджере. opm (onescript package manager) призван упростить установку, обновление и публикацию пакетов из/в хаб пакетов. Данный пакет входит в "стандартную поставку" движка OneScript и готов к работе с момента установки самого движка. С его помощью за одну команду можно установить любой доступный пакет.

Например, библиотека-помощник работы с Яндекс.Диском ставится с помощью команды opm install yadisk. Обновить все установленные пакеты разом можно через команду opm update -all, а opm install -all разом установит все доступные в хабе пакеты. Практически каждое приложение имеет встроенную справку по командам. Выполнив opm help мы получим информацию о всех имеющихся командах, а, например, opm help install выдаст справку конкретно по команде установки пакетов.

Пакетный менеджер имеет свой файл настроек, где можно указать, например, параметры подключения через прокси. Из особенностей работы отмечу лишь довольно очевидное ограничение прав. OneScript по умолчанию ставится в каталог C:/Program Files (x86)/OneScript (или в /usr/share/onescript на linux) и без прав администратора ни один пакет не обновится. Решение простое - либо выдаем себе права на каталог установки OneScript, либо запускаем командную строку от имени администратора/суперпользователя.

Библиотеки

Большая часть функциональности заложена в библиотеках. Здесь я перечислю и кратко опишу все библиотеки, доступные в хабе пакетов. Начну с так называемого "набора стандартных библиотек", поставляемого с OneScript, продолжу всеми остальными библиотеками в алфавитном порядке. После названия библиотеки будет идти ссылка на основной репозиторий, в котором ведется разработка. Иногда этот репозиторий будет вести на личный репозиторий автора библиотеки, однако, все перечисленные здесь библиотеки собраны в организации oscript-library на GitHub.com.

Поставляемые библиотеки

1commands - https://github.com/oscript-library/1commands

Библиотека для запуска различных приложений из OneScript.

Думаю, многие знают про 1сный метод ЗапуститьПриложение() - с его помощью можно запустить любое приложение (и даже открыть файл в ассоциированном приложении). Однако у него есть ряд недостатков:

  • Тяжело анализировать консольный вывод такого приложения
  • Не всегда удобно склеивать строку для запуска
  • Нет управления допустимыми кодами возврата
  • Приходится изобретать велосипед для запуска более сложных команд или последовательности команд под win/linux

Данная библиотека добавляет два класса для запуска приложений - Команда (если команда одна) и КомандныйФайл (если команд несколько). Пример запуска Команды из README проекта:

Команда = Новый Команда;

Команда.УстановитьКоманду("oscript");
Команда.ДобавитьПараметр("-version");	

// или сразу Команда.УстановитьСтрокуЗапуска("oscript -version");

КодВозврата = Команда.Исполнить();
Сообщить(КодВозврата);

Сообщить(Команда.ПолучитьВывод());

assertshttps://github.com/oscript-library/asserts

Реализация функциональности "утверждений" и "ожиданий".

В основном используется в тестах, однако так же позволяет, например, проверять текущее состояние скрипта - заполненность всех нужных параметров и их корректность.

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

МояПеременная = ВычислитьЧтоТоТам(); 

// xUnit style        
Утверждения.ПроверитьРавенство(1, МояПеременная, "Моя переменная должна быть строго равна 1");

// BDD style
Ожидаем.Что(МояПеременная).Равно(1);

cmdlinehttps://github.com/oscript-library/cmdline

Библиотека для разбора и декларативного задания аргументов командной строки.

OneScript при запуске скрипта позволяет получить все переданные скрипту аргументы через коллекцию "АргументыКоманднойСтроки", однако там они лежат в виде обычного массива строк. При разработке более сложных приложений появляется необходимость добавлять различные параметры-флаги, именованные и позиционные параметры, управлять составом команд... Тут на помощь приходит cmdline. С помощью класса ПарсерАргументовКоманднойСтроки можно указать все имеющиеся у скрипта параметры и/или команды и избавить разработчика от ненужной возни.

Парсер = Новый ПарсерАргументовКоманднойСтроки();

Парсер.ДобавитьПараметр("ПутьКФайлу");
Парсер.ДобавитьИменованныйПараметр("-action");

Параметры = Парсер.Разобрать(АргументыКоманднойСтроки);
Сообщить(Параметры["ПутьКФайлу"]);
Сообщить(Параметры["-action"]);

В данном случае при запуске скрипта через "oscript my_script.os -action МоеДействие C:\temp\tempFile.txt" в соответствии "Параметры" окажется два значения с заранее заданными ключами - "ПутьКФайлу" будет хранить в себе "C:\temp\tempFile.txt", а "-action" - "МоеДействие".

fshttps://github.com/oscript-library/files-common

Помощник по работе с файлами и каталогами.

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

ФС.ОбеспечитьПустойКаталог("./build");
Если ФС.КаталогСуществует("C:\МойРабочийКаталог") Тогда
    ФС.КопироватьСодержимоеКаталога("C:\МойРабочийКаталог", "./build");
КонецЕсли;

gitrunnerhttps://github.com/nixel2007/gitrunner

Библиотека-обертка над командами git из OneScript.

Предоставляет "человекочитаемое" API для управления git-репозиторием в объектной технике. Стиль работы с библиотекой похож на v8runner (о котором чуть ниже).

ГитРепозиторий = Новый ГитРепозиторий();
ГитРепозиторий.УстановитьРабочийКаталог(ТекущийКаталог());

ГитРепозиторий.УстановитьНастройку("core.quotePath", "true", РежимУстановкиНастроекGit.Локально);

ГитРепозиторий.ДобавитьВнешнийРепозиторий("origin", "http://github.com/EvilBeaver/oscript-library");

ГитРепозиторий.ПерейтиВВетку("master");
ГитРепозиторий.Получить();

ГитРепозиторий.ОбновитьПодмодули(Истина, Истина);

jsonhttps://github.com/oscript-library/json

Библиотека работы с JSON - порт обработки Александра Переверзева.

Хотя в движке OneScript есть возможность потокового чтения JSON-строк, на мелких файлах намного удобнее (де-)сериализовать объект одной командой. Относительно авторской обработки были внесены некоторые исправления и улучшения, однако общий смысл остался тот же.

ПарсерJSON = Новый ПарсерJSON();

СтрокаJSON = "{
|    ""firstName"": ""Иван"",
|    ""lastName"": ""Иванов"",
|    ""address"": {
|        ""streetAddress"": ""Московское ш., 101, кв.101"",
|        ""city"": ""Ленинград"",
|        ""postalCode"": 101101
|    },
|    ""phoneNumbers"": [
|        ""812 123-1234"",
|        ""916 123-4567""
|    ]
|}";

Объект = ПарсерJSON.ПрочитатьJSON(СтрокаJSON);
		
Утверждения.ПроверитьРавенство(Тип("Соответствие"), ТипЗнч(Объект));

Сообщить(Объект.firstName);

logoshttps://github.com/oscript-library/logos

Логирование в стиле "взрослых языков".

Логирование - больная тема любого продукта, связанного с автоматизацией деятельности. Хочется включать и отключать отладочные логи, сохранять логи в файл и выводить их в консоль, может быть даже как-то их по-хитрому форматировать, управлять настройками из файла или из переменных среды... На все эти вопросы может ответить библиотека logos. Лучше один раз показать:

Лог = Логирование.ПолучитьЛог("oscript.app.messages"); // Инициализация лога
Лог.УстановитьУровень(УровниЛога.Информация); // Можно задать один из пяти уровней, например, Отладка

Лог.Информация("Информационное сообщение"); // выведется в лог
Лог.Отладка("Отладочное сообщение"); // а это - нет, т.к. уровень лога Информация выше, чем Отладка

stringshttps://github.com/oscript-library/strings

Порт модуля СтроковыеФункцииКлиентСервер на OneScript, ни больше ни меньше.

МассивСтрок = Новый Массив;
МассивСтрок.Добавить("Вася");
МассивСтрок.Добавить("пошел в");
МассивСтрок.Добавить("Зоопарк.");
	
// Функция должна объединить строки из массива в строку с разделителями
РезультатСоединения = СтроковыеУтилиты.СтрокаИзМассиваПодстрок(МассивСтрок, " ");
Ожидаем.Что(РезультатСоединения).Равно("Вася пошел в Зоопарк.");

tempfileshttps://github.com/oscript-library/tempfiles

Библиотека для создания временных файлов и каталогов.

Отличительной особенностью является создание файлов в некоторых "пулах", которые можно разом удалить методом ВременныеФайлы.Удалить(). Имеет два режима работы:

  1. Модуль ВременныеФайлы предоставляет общий пул временных файлов среди всех используемых скриптов
  2. Инициализация класса МенеджерВременныхФайлов создаст отдельный пул файлов, которым можно управлять независимо от всех остальных пулов.
ВременныйФайл = ВременныеФайлы.СоздатьФайл();
ВторойВременныйФайл = ВременныеФайлы.СоздатьФайл();

// мой очень полезный код

ВременныеФайлы.Удалить(); // удалит оба созданных временных файла

tool1cdhttps://github.com/oscript-library/tool1cd

Обертка над популярной утилитой для работы с файловыми базами от покинувшего нас Валерия Агеева.

Имеет два класса - ЧтениеТаблицФайловойБазыДанных и ЧтениеХранилищаКонфигурации, позволяющие вычитывать данные из файловых баз в виде таблиц значений.

ЧтениеБазыДанных = Новый ЧтениеТаблицФайловойБазыДанных;
ЧтениеБазыДанных.ОткрытьФайл(ФайлХранилища);
	
ТаблицаБД = ЧтениеБазыДанных.ПрочитатьТаблицу("VERSIONS");
Сообщить(ТаблицаБД.Количество());

ЧтениеБазыДанных.ЗакрытьФайл();

v8runnerhttps://github.com/oscript-library/v8runner

Один из самых популярных пакетов - запуск 1С в режимах Конфигуратора и Предприятие в объектной технике.

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

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

// контекст может быть и не задан, тогда работа выполняется в базе, созданной в каталоге временных файлов
УправлениеКонфигуратором.УстановитьКонтекст("/FC:\1cdb\mydatabase","Admin", "passw0rd");

УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла("C:\source.cf");
УправлениеКонфигуратором.ОбновитьКонфигурациюБазыДанных();

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

Прочие библиотеки

Помимо библиотек из "стандартного набора" в хабе есть и другие не менее замечательные разработки.

collections https://github.com/ret-Phoenix/OneScript-Collections

Расширенные коллекции для OneScript.

OneScript позволяет разрабатывать библиотеки не только на языке 1С, но и на C#. Особо желающие могут попробовать даже F#. Специально для тех, кому не хватает стандартных коллекций 1С, была создана данная библиотека. Она добавляет возможность использовать такие объекты как Стек и Очередь (Дек).

Очередь = Новый Очередь();

Очередь.Добавить("1");
Очередь.Добавить("2");
Очередь.Добавить("3");

Очередь.УбратьИзОчереди(); // в очереди останется 2 и 3

confluence https://github.com/bia-tech/os-confluence

Взаимодействие с confluence.

Первая библиотека из категории 1С+ЧтоТо. Позволяет из OneScript управлять страницами в Confluence (собственный взгляд компании Atlassian на Wiki). Создание страниц, их редактирование, получение информации - все это через RestAPI.

Подключение = Confluence.ОписаниеПодключения("https://confluence.myserver.ru", "user", "password");

ИдентификаторНовойСтраницы = Confluence.СоздатьСтраницу(Подключение, "SpaceKey", "Новая страница", "Содержимое новой страницы");
Confluence.ПрикрепитьМеткуКСтранице(ПараметрыПодключения, ИдентификаторНовойСтраницы, "Моя метка");

delegate https://github.com/artbear/delegate

Делегаты/функторы в 1С.

Тем, кто скучает по Функциям как Объектам Первого Класса или кому просто хочется немного функционального программирования, может понравится эта библиотека. С ее помощью можно создать что-то вроде указателя на процедуру или функцию, передать его как параметр в какой-нибудь другой метод и там его исполнить. Является переработкой библиотеки notify.

// Метод, вызываемый из делегата
Процедура Поздороваться(Имя) Экспорт
    Сообщить("Привет, " + Имя + "!");
КонецПроцедуры

Делегат = Делегаты.Создать(ЭтотОбъект, "Поздороваться", "Мир");

Делегаты.Исполнить(Делегат); // или Делегат.Исполнить();

ДелегатНовыйМир = Делегаты.Создать(ЭтотОбъект, "Поздороваться");

ДелегатНовыйМир.Исполнить("Новый мир"); // или Делегаты.Исполнить(ДелегатНовыйМир, "Новый мир");

extensions https://github.com/ret-Phoenix/onescript-extensions

Дополнительные возможности для OneScript, не вошедшие в движок.

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

Буфер = Новый БуферОбмена();
Буфер.Установить("есть!");
Ожидаем.Что(Буфер.Получить()).Равно("есть!");

fluent https://github.com/nixel2007/oscript-fluent

Обработка коллекций в "текучем" стиле.

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

Массив = Новый Массив;
Массив.Добавить(3);
Массив.Добавить(4);
Массив.Добавить(7);
Массив.Добавить(5);
Массив.Добавить(7);
Массив.Добавить(0);

Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)
	.Различные()
	.Фильтровать("Результат = Элемент >= 5")
    .Обработать("Сообщить(Элемент)")
	.Обработать("Результат = Элемент + 1")
	.ВМассив();

// На выходе два сообщения в лог (5 и 7) и массив [6, 8]  

ftp https://github.com/dmpas/oscript-ftp

FTP-клиент для OneScript.

Имя библиотеки говорит само за себя - работа с файлами по протоколу ftp.

Соединение = Новый FtpСоединение("example.com");

Соединение.Записать("/local/file.txt", "/dir/");

Файлы = Соединение.НайтиФайлы("/dir/", "file.txt");

Файл = Файлы[0];

РазмерФайла = Файл.Размер();

gui https://github.com/ret-Phoenix/oscript-simple-gui

Графический интерфейс в OneScript.

Одна из самых удивительных и неожиданных библиотек для OneScript. Добавляет возможность кодом создавать графический интерфейс для скриптов. Есть работа с таблицами и деревьями, кнопки, поля ввода и многое другое. Статья-анонс на Инфостарте от автора Сергея Ушакова - //1c-soft.it-terminal.ru/public/540284/

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

#Использовать gui

Перем Форма;

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

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

УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
Форма = УправляемыйИнтерфейс.СоздатьФорму();

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

InternetMailhttps://github.com/dmpas/oscript-mail

Реализация протокола SMTP для отправки почти.

Повторение синтаксиса и классов 1С по работе с почтовыми сообщениями, но на C# и из OneScript. 

Сообщение = Новый ИнтернетПочтовоеСообщение;
Сообщение.Получатели.Добавить("receiver@mail.ru");
Сообщение.ОбратныйАдрес.Добавить("someuser@mail.ru");
Сообщение.Отправитель = "someuser@mail.ru";
Сообщение.Тема        = "Server is down";
Текст =  "
	|<h3>Server is down !</h3>
	|Надо что-то делать.<br/>";

Сообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.HTML);
Сообщение.Вложения.Добавить("C:/Пример вложения 1.docx");
Сообщение.Вложения.Добавить(
        Новый ДвоичныеДанные("C:/Пример вложения 2.docx"),
        "Пример вложения 2.docx"
);

messenger https://github.com/oscript-library/messenger

Отправка сообщений в различные сервисы.

Еще одна интеграционная библиотека. На этот раз - для отправки сообщений. На момент написания статьи умеет отправлять SMS (через трех операторов), а так же писать сообщения в Slack, RocketChat, Gitter и Telegram. Слышал о "success story" с отправлением ошибок из Журнала Регистрации в Телеграм-чат с последующей раздачей по шапке получившим сообщение.

ИмяКомнаты = "organization/repo";
Мессенджер = Новый Мессенджер();
Мессенджер.ИнициализацияGitter(ТокенПользователя);
Мессенджер.ОтправитьСообщение(Мессенджер.ДоступныеПротоколы().gitter, ИмяКомнаты, "Всем привет!" );

notify https://github.com/nixel2007/notify

Создание и обработка объектов ОписаниеОповещения.

Не смотря на то, что асинхронных функций как таковых в OneScript нет, объект ОписаниеОповещения и идущий с ним в паре метод ВыполнитьОбработкуОповещения довольно хорошо подошли под реализацию Функций как Объектов Первого Класса, сохранив максимально приближенный к 1С синтаксис. Можно использовать, например, для реализации паттерна "функции обратного вызова" (коллбэка).

// Процедура-обработчик описания оповещения.
//
Процедура СообщитьПриветМир(Результат, ДополнительныеПараметры = Неопределено) Экспорт
    Сообщить("Привет, " + ДополнительныеПараметры + "!");
    ВызватьИсключение "Что-то произошло!";
КонецПроцедуры

// Создание объекта ОписаниеОповещения. Аналогично использованию "Новый ОписаниеОповещения("СообщитьПриветМир", ЭтотОбъект, "Мир")" в 1С.
ОписаниеОповещения = ОписанияОповещений.Создать("СообщитьПриветМир", ЭтотОбъект, "Мир");

// Выполнение обработки оповещения. Аналогично использованию ВыполнитьОбработкуОповещения(ОписаниеОповещения) в 1С.
ОписанияОповещений.ВыполнитьОбработкуОповещения(ОписаниеОповещения);

params https://github.com/artbear/params

Стандартизированное переопределение параметров командной строки из json-файлов конфигурации и переменных окружения.

Данная библиотека условно является надстройкой над библиотекой "cmdline". Используя вывод ПарсераАргументовКоманднойСтроки, анализируя наличие и содержимое файла настроек и переменных среды, позволяет получить итоговые значения параметров. У каждого типа задания параметра есть свой приоритет. Файлы настроек могут быть вложенными друг в друга через специальные поля-ссылки. Является продолжением идей библиотеки ReadParams.

Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьИменованныйПараметр("Параметр");

Параметры = ЧтениеПараметров.Прочитать(Парсер, АргументыКоманднойСтроки);

ParserFileV8ihttps://github.com/ret-Phoenix/parserV8i

Чтение и запись файла списка баз .v8i.

Обработка списка баз в виде соответствия, поиск баз по имени или пути. На сладкое - класс для очистки кэша.

Парсер = Новый ПарсерСпискаБаз;
Парсер.УстановитьФайл("tests/ibases.v8i");

Результат = Парсер.НайтиПоПути("http://localhost/lessons/");

Ожидаем.Что(Результат.Connect.String).Равно("Connect=ws=""http://localhost/lessons/"";");

progbar https://github.com/theshadowco/progbar

Консольный прогресс-бар.

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

ПрогрессБар = Новый ПрогрессБар();
ПрогрессБар.Начать(100, "Прогресс ");

Для Ит = 0 По 100 Цикл

    ПрогрессБар.СделатьШаг();
    Приостановить(200);

КонецЦикла;
ПрогрессБар.Завершить();

ReadParamshttps://github.com/Stepa86/ReadParams 

Чтение параметров скрипта из json-файла.

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

записьТекста = Новый ЗаписьТекста(файлПараметров1);
ЗаписьТекста.ЗаписатьСтроку( "{""парам.Число"": 1, ""парам.Строка"": ""1"", ""парам.Булево"": true}" );
ЗаписьТекста.Закрыть();

прочитанныеПараметры = ЧтениеПараметров.Прочитать( файлПараметров1 );

// прочитанныеПараметры["парам.Число"] = 3;
// прочитанныеПараметры["парам.Строка"] = "3";
// прочитанныеПараметры["парам.Булево"] = Истина;

restler https://github.com/oscript-library/restler

Помощник работы с RestAPI.

Довольно молодая библиотека, родившаяся после нескольких мучительных дней работы с HTTPСоединением. Упрощает шаги по вызову различных http-сервисов, сама делает десериализацию, позволяет управлять кодом состояния. Имеет бедное README, однако уже зарекомендовала себя (личным примером) как отличный фундамент для построения более высокоуровневых интеграционных компонентов уже как минимум к пяти различным системам.

Клиент = Новый КлиентВебAPI();
Клиент.ИспользоватьСоединение(Новый HTTPСоединение("localhost"));
ИнформацияОПродажах = Клиент.Получить("sales/totals");

Для Каждого Инфо Из ИнформацияОПродажах Цикл
  Сообщить(СтрШаблон("Продано товара %1 на сумму %2", Инфо["nomenclature"], Инфо["sum"]));
КонецЦикла;

sqlhttps://github.com/ret-Phoenix/oscript-sql

Работа с SQL-базами из OneScript.

Изначально библиотека разрабатывалась для работы с sqlite - чтение и обработка Журнала Регистрации и собственные мини-базы (в том числе in-memory). На данный момент дополнительно поддерживаются MS SQL Server, MySQL и PostgreSQL.

Соединение = Новый Соединение();
Соединение.ТипСУБД = Соединение.ТипыСУБД.sqlite;
Соединение.ИмяБазы = ":memory:";
Соединение.Открыть();

Запрос = Новый Запрос();
Запрос.УстановитьСоединение(Соединение);
Запрос.Текст = "Create table users (id integer, name text)";
Запрос.ВыполнитьКоманду();

Запрос.Текст = "insert into users (id, name) values(1, @name)";
Запрос.УстановитьПараметр("name", "Сергей");
Запрос.ВыполнитьКоманду();

Запрос2 = Новый Запрос();
Запрос2.УстановитьСоединение(Соединение);
Запрос2.Текст = "select * from users where id = @id";
Запрос2.УстановитьПараметр("id", 1);
ТЗ = Запрос2.Выполнить().Выгрузить();

v8storagehttps://github.com/oscript-library/v8storage

Работа с Хранилищем 1С в стиле v8runner.

Библиотека является развитием идей и функциональности v8runner, специализируясь именно на работе с хранилищем.

ХранилищеКонфигурации = Новый МенеджерХранилищаКонфигурации();
ХранилищеКонфигурации.УстановитьКаталогХранилища(КаталогХранилища);

ХранилищеКонфигурации.ПрочитатьХранилище();

ХранилищеКонфигурации.СохранитьВерсиюКонфигурацииВФайл(НомерВерсии, ИмяФайлаКофигурации);

ТаблицаВерсий = ХранилищеКонфигурации.ПолучитьТаблицаВерсий();
МассивАвторов = ХранилищеКонфигурации.ПолучитьАвторов();

v8unpackhttps://github.com/dmpas/oscript-v8unpack

Порт компоненты для работы с контейнерами файлов 1С:Предприятие 8.

Среди людей, которые хоть раз занимались распаковой и анализом внешних обработок или конфигураций 1С (еще до 8.3.7), утилита v8unpack давно известна. Данный порт является переработкой данного приложения в виде компоненты на C# для вызова ее изнутри OneScript без всяких ЗапуститьПриложение(). На данный момент поддерживается только команда -parse в тех рамках, в которых она используется в приложении gitsync (о нем ниже).

#Использовать v8unpack

ЧтениеФайла = Новый ЧтениеФайла8("ПутьКФайлу");
Для Каждого мЭлемент Из ЧтениеФайла.Элементы Цикл
    Сообщить(мЭлемент.Имя);
    ЧтениеФайла.Извлечь(мЭлемент, "Каталог", Истина);
КонецЦикла;

vanessa-behaviorhttps://github.com/silverbulleters/vanessa-behavior2

Фреймворк для разработки через BDD, упакованный в виде пакета.

Не совсем "библиотека", но  по формальному признаку (отсутствие оберток для запуска из командной строки и наличия подключаемых модулей) отнесена в этот раздел. Используется для быстрой установки Vanessa Behavior на машину разработчика или в локальный каталог репозитория через команду opm install -l vanessa-behavior. Обращаю внимание, что данный пакет собирается из репозитория Vanessa-Behavior2, и может отставать по релизом от (пока еще) основного репозитория.

yadiskhttps://github.com/kuntashov/oscript-yadisk

Работа с Яндекс.Диск через RestAPI.

C помощью этого пакета можно автоматизировать загрузку/выгрузку файлов с помощью Яндекс.Диск, получать свойства диска (размер, свободное и занятое пространство), работать с корзиной и прочее. Вот здесь есть пример использования библиотеки от самого автора - отдельное приложение для загрузки файлов.

OAuth_Токен = "..."; // Используйте полученный токен для вашего приложения.

ЯндексДиск = Новый ЯндексДиск;
ЯндексДиск.УстановитьТокенАвторизации(OAuth_Токен);

ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
ПутьНаДиске = "/test-folder/" + ИмяФайла;

ЯндексДиск.ЗагрузитьНаДиск("c:/data/file-to-upload.txt"), ПутьНаДиске);

Приложения

Как я писал выше, приложения - это те же самые скрипты для интерпретатора OneScript, но предназначенные для запуска из командной строки. При установке таких приложений через opm в PATH добавляются обертки в виде bat/sh-файлов, позволяющие запускать их без лишних телодвижений. Например, вместо строки

"C:\Program Files (x86)\OneScript\bin\oscript.exe" "C:\Program Files (x86)\OneScript\lib\gitsync\src\gitsync.os"

можно просто вызвать приложение "gitsync". Целью создания таких приложений является упрощение выполнения каких-то типовых задач "в одну строку", без написания собственных скриптов. Часто эти же запуск этих приложений встраивается в сборочные линии, например, на Jenkins CI. Аналогично библиотекам, часть приложений поставляется в "стандартном наборе", остальные доступны для установки через opm.

Поставляемые приложения

1bdd https://github.com/artbear/1bdd

Фреймворк для разработки через BDD в OneScript.

Приложение позволяет запускать проверки поведения по заранее написанным feature-файлам. Реализации шагов (step_definitions) описываются в виде скриптов для OneScript. Имеются возможности по пакетному запуску прогона фич, генерации реализаций шагов по feature-файлам, представление результатов отчета в формате jUnit, собственная библиотека шагов. Пакет может быть подключен как библиотека через #Использовать, например, для реализации программного запуска прогона сценариев и файлов задач (tasks) пакетного менеджера opm.

1bdd ./features -junit-out out/

1testrunner https://github.com/artbear/1testrunner

Фреймворк для разработки через TDD в OneScript.

Пакет является портом фреймфорка xUnitFor1C. Предназначен для запуска tdd-тестов. Реализация тестов описывается в виде скриптов для OneScript. Можно запускать отдельные тесты или каталог с тестами целиком. Так же, как и в 1bdd, есть представление результатов тестирования в виде отчета jUnit и подключение как библиотеки через #Использовать.

# запустит все тесты из каталога tests и сформирует отчет о результатах тестирования в каталоге build
1testrunner -runall ./tests xddReportPath ./build

gitsync https://github.com/oscript-library/gitsync

Синхронизация хранилища 1С с репозиторием git.

Наверное, самое известное приложение для OneScript. Осуществляет выгрузку каждого помещения в хранилище в виде коммита в git-репозиторий, переносит автора помещения, дату и текст сообщения. После начальной инициализации репозитория служебными файлами (указатель на версию хранилища и данные об авторах) выгрузку можно запустить командой

gitsync export c:/storage/zup src/cf

Прочие приложения

cpdb https://github.com/arkuznetsov/cpdb

Приложение-комбайн по работе базой данных в файловом формате и MS SQL Server.

Позволяет автоматизировать загрузку/выгрузку базы, отправку базы на Yandex.Диск, работу с сетевыми дисками, выполнять архивацию и прочие частые операции. С полным списком команд можно ознакомится в README проекта.

Пример выполнения бэкапа и отправки его на Я.Диск:

cpdb backup -sql-srvr MySQLName MyDatabase -sql-user sa -sql-pwd 12345 -bak-path "d:\MSSQL\Backup\MyDatabase_copy.bak"
cpdb putyadisk -file "d:\MSSQL\Backup\MyDatabase_copy.bak" -ya-token XXXXXXXXXXXXXXXXXXXXXXXXXXXXX -ya-path "/transfer/MyDatabase_copy.bak" -delsrc

deployka https://github.com/oscript-library/deployka

Развертывание конфигураций 1С.

Приложение позволяет автоматизировать обновление конфигураций из хранилища/файла конфигурации/файла обновления. Приятным дополнением является возможность управления активными сеансами через родные для 1С утилиты rac/ras.

# Блокировка базы с удалением всех сеансов
deployka session kill -ras myserver:1545 -db-user admin -db-pwd pass -lockuccode "123"
# Обновление конфигурации из хранилища
deployka loadrepo /FC:\Infobase C:\Хранилище1С -db-user admin -db-pwd pass -storage-user admin -storage-pwd pass -uccode "123"
# Обновление БД
deployka dbupdate /FC:\Infobase -db-user admin -db-pwd pass -uccode "123"
# Разблокировка базы
deployka session unlock -ras myserver:1545 -db-user admin -db-pwd pass

oscript-config https://github.com/nixel2007/oscript-config

Работа с файлом конфигурации OneScript oscript.cfg

Позволяет зачитывать и устанавливать настройки приложения oscript.exe из командной строки. Этот пакет необходим для работы системы автодополнения кода по библиотекам OneScript в редакторе кода Visual Studio Code.

> oscript-config get lib.system
C:\Program Files (x86)\OneScript\lib

> oscript-config set lib.additional "./oscript_modules"

packman https://github.com/oscript-library/packman

Сборка тиражных релизов конфигураций 1С:Предприятие 8.

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

Простой пример работы:

packman load-storage С:/Хранилище1С -storage-user admin -storage-pwd pass
packman make-cf
packman МанифестПоставки.edf -out ./build -setup
packman zip-dist -in ./build -out ./dist

precommit1c https://github.com/xDrivenDevelopment/precommit1c

Приложение для разборки внешних обработок при выполнении коммита в git.

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

precommit1c --install

scenex https://github.com/arkuznetsov/scenex

Исполнитель сценариев, объявленных декларативно в JSON-файле.

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

Запуск:

scenex batch "./deploy_scenario.json"

Пример файла сценариев:

{
    "stages": {
        "Вывод справки oscript": {
            "description": "Вывод справки oscript",
            "tool": "oscript",
            "command": ""
        },
        "Вывод справки deployka (команда loadcfg)": {
            "description": "Вывод справки deployka",
            "tool": "deployka",
            "command": "help",
            "params": [
                "loadcfg"
            ]
        }
    }
}

vanessa-runnerhttps://github.com/silverbulleters/vanessa-runner

Автоматизация различных операций 1С-разработчика и dev-ops.

Приложение является большим комбайном из возможностей, частично портированных из других библиотек. Умеет разбирать и собирать файлы cf/cfe/epf/erf, упрощает запуск тестирования с помощью фреймворков Vanessa Behavior и xUnitFor1C, создавать и обновлять информационные базы, выполнять миграцию данных конфигураций, построенных на БСП, запускать синтаксический контроль с выводом результата проверки в формат jUnit, делать привязку баз к хранилищу. Полный список возможностей лучше изучать через вывод команды vrunner help. Конфигурируется через параметры командной строки, переменные среды и файл настроек в формате JSON. 

# Выполнение миграции
vrunner run --command "ЗапуститьОбновлениеИнформационнойБазы;ЗавершитьРаботуСистемы;" --execute $runnerRoot/epf/ЗакрытьПредприятие.epf --ibname /FC:\Инфобаза1С
# Запуск проверки поведения с помощью фреймворка Vanessa Behavior
vrunner vanessa --settings tools/vrunner.json --ibname /FC:\Инфобаза1С

Заключение

Данным обзором я постарался разом ответить на большинство вопросов вида "А есть ли библиотека/приложение для вот этого". Если вдруг готовой библиотеки не оказалось, не бойтесь писать свои и выкладывайте их на GitHub. Сообщество будет вам крайне благодарно :) Обсуждение имеющихся библиотек сосредоточено в Gitter-канале EvilBeaver/oscript-library и в Issues каждой конкретной библиотеки.

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

Спасибо за внимание!

P.S. В последнем релизе расширения поддержки языка 1С в VSCode появился полноценный Синтакс-Помощник по всем классам и модулям всех установленных библиотек. При наличии README в пакете выводится и он. Обновляйтесь, нажимайте ctrl-f1 и выбирайте в выпадающем меню новый раздел oscript-library. Так же не забывайте ставить пакет oscript-config для получения частичной поддержки автодополнения по модулям и классам библиотек прямо при наборе кода.

224

См. также

Комментарии
Сортировка: Древо
1. artbear 1065 14.11.17 13:37 Сейчас в теме
Первое впечатление - очень круто и наглядно!
Спасибо.
Liris; adhocprog; TreeDogNight; awk; vlad.frost; +5 Ответить
2. A1ice1990 110 14.11.17 15:50 Сейчас в теме
Спасибо, обязательно повнимательнее позже прочту, да и сама OneScript давно пылиться без дела.
Первое ощущение от статьи "Python енто ти?"
3. nixel 508 14.11.17 16:27 Сейчас в теме
(2)
Первое ощущение от статьи "Python енто ти?"


если вопрос про opm, то он изначально делался с закосом под рубивский gem, а сейчас дописывается в духе npm.
vlad.frost; +1 Ответить
4. Evil Beaver 5245 14.11.17 17:51 Сейчас в теме
Героическая работа!
rintik; xzorkiix; gubanoff; tsukanov; TreeDogNight; vlad.frost; +6 Ответить
5. nixel 508 14.11.17 18:01 Сейчас в теме
(4) спасибо :) от автора всей этой движухи это услышать особенно приятно
vlad.frost; +1 Ответить
6. script 190 14.11.17 19:24 Сейчас в теме
А вызывать OneScript из 1С программно можно типа через OneScript = Новый("OneScript")?
7. nixel 508 14.11.17 19:40 Сейчас в теме
(6) на данный момент через Новый нельзя. Но можно через запустить приложение
8. Evil Beaver 5245 14.11.17 23:19 Сейчас в теме
(6) Нет, это две независимых друг от друга программы и вызывать одну из другой можно только запуская их в явном виде.

Но можно с небольшими допилками и при соблюдении границ применимости просто копипастить код из одной системы в другую
9. iolko 178 15.11.17 05:56 Сейчас в теме
Автору, респект. В пользуюсь давно уже многими пакетами, нереально упрощает жизнь. Переписал все свои наработки по автоматизации на односкрип, с vbs. Работа с каждым релизом становиться все более комфортной. Ошибки исправляются просто на лету.
10. ImHunter 21 15.11.17 07:14 Сейчас в теме
Супер! Очень вовремя! Как раз начал заниматься автоматизацией сборок.
11. awk 687 15.11.17 09:21 Сейчас в теме
Что значит "от покинувшего нас Валерия Агеева"?
12. nixel 508 15.11.17 09:34 Сейчас в теме
(11) к сожалению, значит как раз то, что кажется. Валерий скончался в этом году.
13. awk 687 15.11.17 09:39 Сейчас в теме
(12) Огромная и невосполнимая потеря.
19. karpik666 2046 15.11.17 16:45 Сейчас в теме
(12) очень жаль, спасибо за информацию.
14. premier 161 15.11.17 11:29 Сейчас в теме
(0) Не удалось осилить всего описания. Но труд, несомненно титанический: "+" .
Есть вопрос: а поддержка работы с Windows registry имеется?
15. nixel 508 15.11.17 11:44 Сейчас в теме
(14) не сталкивался. Может быть Сергей Ушаков что-то копал в этом направлении (по крайней мере он делал компоненту по работе со службами Windows, а где службы, там и реестр недалеко).

Но если мне не изменяет память, реестр физически хранится в виде файлов на диске. А файловый доступ и чтение/запись файлов есть. Библиотеки по работе с файлами ini-формата тоже есть, но, судя по всему, не в хабе.
16. premier 161 15.11.17 11:53 Сейчас в теме
(15) У файлов Windows registry довольно сложный формат. Сам когда-то его изучал. Так без специальной обертки (библиотеки) работать с ними не просто. Автору проекта надо бы взять на заметку.
17. awk 687 15.11.17 16:39 Сейчас в теме
(16) Что мешает использовать "WScript.Shell"?


Новый СОМОюъект("WScript.Shell")
20. premier 161 15.11.17 16:55 Сейчас в теме
(17) Что тогда мешает использовать в качестве сценарного движка Windows Script Host? Если всё равно придется на другом сценарном языке писать?
21. artbear 1065 15.11.17 17:48 Сейчас в теме
(20) Код-то 1с будет, не какой-то другой.
очень удобно и просто.
Тем более, что примеров использования WSH для 1С полно.
Копипаст простейший.

Пойми - главное, что язык 1С, который мы знаем от и до, и пишем почти без Синтакс-помощника :)
35. premier 161 16.11.17 10:25 Сейчас в теме
(21) Это-то я как раз понял. Но если код 1С, то почему бы не сделать обертку над некоторыми функциями WSH, чтобы не было копипаста, а был понятный для нас всех язык 1С? С регулярными выражениями та же история. Тоже использовать РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp");?
36. baton_pk 374 16.11.17 10:31 Сейчас в теме
(35) регулярки есть : http://oscript.io/syntax/page/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0­%BD%D0%BE%D0%B5%D0%92%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0­%B8%D0%B5


обёртку над WSH можно сделать, просто никому до сих пор это, видимо, не понадобилось.
37. artbear 1065 16.11.17 10:46 Сейчас в теме
(35) У нас 1скрипт - это кроссплатформенный движок.
Регулярки будут работать не только в Винде, но и в Линуксе.
В отличие от WSH
38. baton_pk 374 16.11.17 10:58 Сейчас в теме
(37)
1скрипт - это кроссплатформенный движок.


это не мешает людям пилить сторонние библиотеки, завязанные на винду.
18. Peleng 19 15.11.17 16:42 Сейчас в теме
Вот интересно, когда я выложу разрабатываемый мной полноценный компилятор под .net с языка похожего на 1С меня сильно заклюют? Конечно все на стадии 0 пока, но возможности OneScript уже давно перекрыты... Беспокоит только как публика встретит...
Конечно язык отличается от 1С в связи с тем, что он типизирован и поддерживает нетовские штучки, но надеюсь программистам 1С будет очень легко с ним работать...
Черт за язык дернул, извините, но очень уж хочется знать интересно это кому-то или нет...
22. artbear 1065 15.11.17 17:51 Сейчас в теме
(18) Уже есть реализации и для Go, но что-то не взлетает :)
Были и другие реализации, похожего на 1С-языка, не удачны.
Например, один из авторов такой реализации (Сергей Батанов) сейчас активнейший разработчик как раз OneScript :)

Вся фишка именно в совместимости с языком 1С, чтобы минимум расхождений.
23. artbear 1065 15.11.17 17:52 Сейчас в теме
(18)
но возможности OneScript уже давно перекрыты

Вот тут бы поаккуратнее :)

Какие Ваши доказательства? (с)
25. Peleng 19 15.11.17 21:47 Сейчас в теме
(23) пока нет доказательств, еще месяца три по моим подсчетам до релиза альфы.. приблизительно... но сравнение не совсем корректное, конечно, т.к. у меня компилятор, а тут скриптовый движок, т.е. назначение не по всем пунктам может пересекаться...
говорю же, черт за язык дернул... проболтался раньше времени... фальстарт... :)
24. Evil Beaver 5245 15.11.17 18:17 Сейчас в теме
(18) В принципе, да, не так давно появился проект Гонец, но про него ничего сказать не могу, не запускал. Меня больше волнует другой момент: зачем сообществу несколько несовместимых движков? Даже если все другие будут лучше чем 1Script, то чем они будут лучше друг-друга? Это напоминает зарю становления браузеров. Последствия расхлебываем до сих пор.

Я точно клевать не буду, обещаю, но делать еще одно такое же, но другое - сомнительная идея.

Ну и да, наша лицензия MPL2 все-таки запрещает прямую копипасту в закрытые проекты.
artbear; awk; +2 Ответить
26. Peleng 19 15.11.17 21:50 Сейчас в теме
(24) я согласен с вами, на счет того, что в разнос пускать не желательно... но все же у меня компилятор, а у вас скриптовый движок, это разные ниши, хотя и пересекающиеся... вот и мозгую над тем, как бы сделать большую совместимость...
28. nixel 508 16.11.17 00:07 Сейчас в теме
(26) я видимо чего-то не знаю, но с каких пор на c# можно писать что-то компилируемое? .Net runtime же все равно нужен, CLR и прочее.
30. lustin 973 16.11.17 00:39 Сейчас в теме
(28) чую я там может быть Kotlin, а не C#
33. baton_pk 374 16.11.17 09:31 Сейчас в теме
(28)
.Net runtime же все равно нужен, CLR и прочее.


нынче это тоже считается компиляцией. В противовес интерпретации, когда каждый раз бегаешь именно по исходникам. Так-то ОднСкрипт тоже компилируется в свой байткод.
39. Peleng 19 16.11.17 11:42 Сейчас в теме
(28) да, вы не в курсе... C# компилирует в IL, но при первом запуске программы IL компилируется в машинный код JIT компилятором... т.е. реально работает машинный код. CLR это как бы окружение работающей программы, т.е. разного рода внешний по отношению к программе код, выполняющий разные служебные действия... ну и набор базовых библиотек заодно... JIT компилятор связывает CLR и вашу программу в одно целое...
27. Peleng 19 15.11.17 22:07 Сейчас в теме
(24)
проект Гонец
посмотрел проект Гонец... у него конечно особая ниша, он возможно понравится тем кто одновременно пишет на 1С и GO.... цитата: "позволяет создавать высокопроизводительные вэб-приложения и микросервисы, с низким треббованием к системным ресурсам". Т.е. позиционирует себя не так, как 1Скрипт и вряд ли пересечется из-за завязанности на GO...
А я круче замахнулся и не факт, что сдюжу :)... у меня фактически конкурент C# и VB.Net намечается :) шучу...
48. IntelInside 127 17.11.17 21:37 Сейчас в теме
(24)
Меня больше волнует другой момент: зачем сообществу несколько несовместимых движков?

Ответ:
1) Политика 1С
2) Амбиции
3) Проблемы монетизации
4) Невыраженность Миссии проекта
Можно поговорить на эти темы. Если что, то пункт "2" я перерос. Большое дело можно сделать только командой и никак иначе.

Почему 1с++ v7 так и не дал БСП++? Бух++? и т.д.++?
29. lustin 973 16.11.17 00:38 Сейчас в теме
(18) история с WScript.Sheell мы уже проходили - ключевое слово "Серый кардинал" http://forum.script-coding.com/viewtopic.php?id=2496

По ссылке можно внезапно обнаружить никнейм artbear и неизбежное ИМХО в постах.

Почему отказались и переросли - можно долго диccкутировать, но EvilBEaver в статье на ХабраХабр немного затронул эту тему в своей статье https://habrahabr.ru/post/301064/

1Script - автоматиматизация русскокодирующих программистов бех холиваров какой скриптовый язык выбрать... и главное кроссплатформенный

(20) не заклюём, но лично я НЕ пойму - опять же советую обратить внимание на всех нас... после появления 1Script большинство из нас выбросило свои поделки (вы когда-нибудь видел Groovy на русском ?) и начали решать свои задачи с помощью экосистемы.

зачем надо пилить Гонец - мне не понятно, можно было эти силы направить на доработку v8unpack и на доработку движка и сразу получить все плюшки и уважуху.

то же самое касается и вашего будущего продукта - зачем ? почему это время не потратить на форк и pull-request ?

Электронная подпись коммита на GitHub теперь позволяет четко видеть вклад каждого... По крайней мере за перебивкой копирайтов вроде как никто не был замечен.


P.S. все опечатки сделаны сознательно для эффффекта.

P.S. (24) повторюсь - попробуйте сделать функциональность которую вам нужно на 1Script - быстрей получите благодарных бета-тестеров.
31. Infactum 263 16.11.17 06:54 Сейчас в теме
(29) По вашей логике можно было не тратить силы на 1Script а пользоваться Python. Много базового функционала, написанного для 1Script, не пришлось бы делать с нуля. Это я не холивара ради :-)
И про мантру "русскоговорящие" программисты не могут / не хотят изучать другой язык (путь даже очень простой) помню. Но за таких "программистов", честно говоря, стыдно.
Но как известно, сослагательного наклонения в истории нет, так что спасибо всем активным разработчикам 1Script за инструменты решения некоторых повседневных задач.
59. lustin 973 25.11.17 10:55 Сейчас в теме
(31) тут давеча я подсмотрел тезис... делюсь

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

этот тезис подсмотрен у товарищей из WSO2 - они там сплошь индусы, тайцы и комбоджийцы пишушие на Java.

обратная сторона этого подхода ровно одна - огромная кодовая база на английском и огромная экосистема jar файлов/библиотек.

для ускорения эти товарищи не пишут с нуля а пробрасывают вызовы в свой новый "интеграционно-ориентированный" язык из чистой Java...

что очень напоминает подход в 1Script
32. baton_pk 374 16.11.17 09:17 Сейчас в теме
(18)
но возможности OneScript уже давно перекрыты

работа с конфигуратором? гитсинк? Если да, то с удовольствием бы посмотрел!

когда я выложу разрабатываемый мной полноценный компилятор под .net с языка похожего на 1С

я немножко потроллю, но пока вы там его втихаря в одиночку разрабатываете, тот же самый ОдноСкрипт может уже вас опередить на этом поприще ;-)
40. Peleng 19 16.11.17 13:27 Сейчас в теме
(32) я писал только про возможности языка, но не про библиотеки... и я не оспариваю ценность OneScript... в конце концов живут же вместе Java и JavaScript, Vb.Net и Vb.Script... и каждому находится свое применение... языков много именно потому, что каждый кому-то приглянулся... и Microsoft сделала великую вещь, позволив языкам работать сообща, особенно после выхода на кроссплатформенность...
41. baton_pk 374 16.11.17 13:40 Сейчас в теме
(40)
я писал только про возможности языка

а, ну тут не хитро дело переплюнуть :-)
43. Peleng 19 16.11.17 13:57 Сейчас в теме
(41) к сожалению, оказалось, что чем дальше в лес, тем больше дров... когда стал делать классы, интерфейсы, перечисления и т.д., то свет в конце тоннеля несколько потускнел... но через годик прояснился... еще месяца три и выложу на обозрение... а пока благодарен всем, кто написал пару слов... уже понятно, что какой-то интерес будет...
34. awk 687 16.11.17 09:45 Сейчас в теме
(18) В чем будет изюминка? Если отличия надо изучать, то не проще будет взять другой существующий язык?
42. Peleng 19 16.11.17 13:49 Сейчас в теме
(34)
В чем будет изюминка? Если о
к сожалению, отличия надо будет изучать, но они не велики и связаны в основном тем, что язык будет типизированным...
Изюминка только в том, что программисту 1С становится доступным весь функционал .Net...
Например, такое вот:

ИмпортИмен System.Collections.Generic
Словарь = Новый Dictionary<Строка,Целое>{{"ключ1",1},{"ключ2",2}}

уже можно свою dll написать и потом хоть в C# ее используй, хоть в 1С...
думаю найдется применение...
44. awk 687 17.11.17 09:28 Сейчас в теме
(42)
Словарь = Новый Dictionary{{"ключ1",1},{"ключ2",2}}


Данную конструкцию можно и сейчас написать в C#. И все будет работать. В чем смысл? Почему не взять C#?

Например: Есть java, а есть groovy. Groovy позволяет писать программы гораздо быстрее за счет сокращения количества строк кода.

В чем же преимущества вашего языка?
45. Peleng 19 17.11.17 13:05 Сейчас в теме
(44)
Groovy позволяет писать программы гораздо быстрее за счет сокращения количества строк кода.
но, тем не менее, на него почему-то все толпой не побежали... люди продолжают писать на десятках других языков... и причин этому много... мне, например, нравится писать на родном языке, что бы там не говорили другие... сейчас у меня такой возможности нет, точнее у меня уже есть :), а как решу, что уже можно в народ пустить, то и еще у кого-нибудь появится, надеюсь месяца за три достаточно отладить...
вместо Dictionary надо было конечно написать Соответсвие, это я просто из теста скопировал, когда Соответствия у меня еще не было...
И, кстати, я тоже придумал немного фишек для сокращения строк кода по сравнению с языком 1С от которого естественно отталкивался.... однако, за годы программирования на языке 1С я уже привык, что "многа букаф" это даже хорошо, особенно в свете появления хороших распознавателей речи... сейчас можно код диктовать, а делать это удобнее полными словами, чем разными значками и символами...
46. awk 687 17.11.17 17:31 Сейчас в теме
(45) Я привел пример "изюминки". Если вы не готовы ответить на вопрос: "В чем "изюминка" вашего языка" - будучи разбуженным посреди ночи, то можете забить на то, что кто-то кроме вас будет его использовать.

В OneScript изюминка - это похожесть до безразличия на 1С.
47. Peleng 19 17.11.17 18:27 Сейчас в теме
(46) я думаю, что изюминка OneScript в другом, он дает программисту 1С новые возможности на знакомом языке... хотя вам все равно понадобиться некоторое время на изучение, что бы начать им пользоваться... изучить новые библиотеки, подумать в каких задачах сможете использовать...
того же пытаюсь добиться и я... например, можно написать внешнюю компоненту к 1С на знакомом языке... или написать DLL на языке 1С и отдать ее в проект на C#... или утилитку какую-нибудь быстренько написать... да мало-ли еще новых возможностей появляется... надеюсь, что народ примет, а там посмотрим...
49. IntelInside 127 17.11.17 22:29 Сейчас в теме
(47)
Словарь = Новый Dictionary<Строка,Целое>{{"ключ1",1},{"ключ2",2}}

Вы используете uniforn initialization form {..}. Это требует от русского программиста еще чаще переключать раскладку. Зачем? Вы explicity указываете типы для Dictionary. Зачем? Они могут быть выведены из строки инициализации. Хотелось бы видеть объявление типа Dictionary. И т.д. и т.п.

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

И вообще. На том пути по которому Вы идете расшибли лоб об стену с десяток серьезных людей. В кровь, говно и слезы расшиблись. Нужно быть очень смелым и сильным человеком, чтобы пытаться изменить мир в одиночку. Подумайте над идеей присоединиться к команде OneScript. Или... Или никогда ни с кем не советуйтесь. Это делает человека слабее. Свое видение мира в мир нужно "вбить" и он покорится.

Удачи. Я думаю Вы сделаете правильный выбор.
50. Evil Beaver 5245 18.11.17 17:16 Сейчас в теме
(49)
Подумайте над идеей присоединиться к команде OneScript


Я сознательно не подключаюсь к беседе, ибо уже высказался. И фраза взятая в цитаты попала сюда случайно и никаких намеков не делаю ;) Но, если будет желание добавить в 1Скрипт компиляцию в байт-код MSIL - милости просим.
51. IntelInside 127 18.11.17 17:56 Сейчас в теме
(50)
Хотя об очках я подумываю уже серьезно, но не настолько чтобы '++' сливалось в '#'.

В качестве вдохновения для будущего (ох...) JIT у меня на операционном столе LLVM (swift, WebAssemly, etc.). Еще MSIL я просто не потяну, да и не вижу смысла - MS меня уже один раз с VB6 кинул.

Над чем я сейчас хожу кругами - это google-gRPC компонента и, соответственно, protocol-buffers compiler для 1С-бейсик. Вернее для ES Language, который видится мне развитием 1С-бейсик. С классами, функторами, плюшками и т.п.

Я от корки до корки прочитал весь http://oscript.io , но не нашел миссии Вашего проекта. Вернее Вашего отношения к развитию языка. Вы видите OneScript исключительно классическим 1С-бейсиком? Принципиально? Тогда не удивительно, что появляются Гонец, я, '1С-Peleng' и проч. Все хотят развития, а не того же самого вид с боку. Прежде чем заняться своими классами и компиляторам я много над этим думал и пришел к выводу, что это системная проблема цивилизации 1С. Угрожающая, кстати, и самой 1С и всему сообществу.

Если Вы где-то высказывались уже на эту тему - просто киньте ссылку. Ей богу не находил.

Спасибо.
52. Evil Beaver 5245 20.11.17 00:08 Сейчас в теме
(51) Вот прямо так "на бумаге" миссию проекта я не формулировал. Задумался, как бы поточнее выразить... Пожалуй пока не рискну. Но для себя я ее вывел достаточно давно.

Вы видите OneScript исключительно классическим 1С-бейсиком? Принципиально?

Вот этой фразы не понял. Что такое "классический 1С-бейсик"?
55. Peleng 19 20.11.17 06:06 Сейчас в теме
(52) а я вижу миссию вашего проекта именно как "Скриптовая машина"... это самоценная миссия... во-первых, она нужна, что бы прикручивать ее как часть пользовательского интерфейса к компилируемым приложениям, во-вторых, нужна там, где основная жизнь приложения проходит на стороне программиста (админка, сайты, серверные приложения, прослойка между сетью и 1С)
Компилируемый язык нужен для другого, для выпуска приложений в юзерский мир в готовом виде... для написания библиотек, драйверов работы с оборудованием и т.д.
Ниши конечно не однозначны и могут пересекаться, но главное, что бы версии языка отличались не на столько, что бы между ними было трудно переключаться... ваша версия выгодно отличается минимальными расхождениями, но из-за это кое-что вам реализовать трудно, например, классы и интерфейсы ни как не впишешь не меняя язык... у меня наоборот, язык развил, а совместимость потерял... у каждой медали две стороны...
53. Peleng 19 20.11.17 05:37 Сейчас в теме
(51) О, нашего народу полно оказывается... :) Ну вот и чудно, чей-то проект возможно и даст всё то, что люди хотят от языка похожего на 1С.... я не боюсь разбить лоб об это дело, мне просто интересно его делать... конечно надеюсь, что выстрелит, но если и не выстрелит, то море удовольствия я уже получил... у меня таких программ и раньше было много, которыми только я сам пользуюсь и еще наверное будет не одна... а цели у меня такие:
1) как можно больше русского языка;
2) как можно больше похоже на 1С;
3) все что можно вызвать в Net должно вызываться (отсюда разные новинки в языке, но они могут понадобиться в каких-то случаях, а значит должны быть)
4) компилятор должен быть переписан на новом языке...

а у вас я так понял будет LLVM? так это чудесно, пусть будет еще и это...
57. Peleng 19 20.11.17 06:45 Сейчас в теме
(51)
MS меня уже один раз с VB6 кинул
ну почему сразу кинул? прошло 16 лет с выхода Net, но все мои программы написанные на VB6 работают отлично... и нужные библиотеки я до сих пор пишу иногда на нем... а так как он работает в Windows 10, то еще долго будет жить... так можно сказать, что 1С тоже кинул всех при переходе с 7.7 на 8... изменения тоже были драматическими, потребовавшими большого труда на переобучение...
58. lustin 973 25.11.17 10:45 Сейчас в теме
(51) "прям миссия" - вот скажите... предположим такую ситуацию.

* в Гиттере объявляется кличЬ - давайте сформулируем миссию.
* наверное мы создадим ГуглоДокс где коллективно накидаем тезисы
* дальше путем римского голосования выберем наиболее удачные формулировки

и вот в репозиторий https://github.com/EvilBeaver/oscriptiocontent поехал пул-реквест с "МИССИЕЙ!!!"

и вдруг, внезапно, OScript начал покорять мир... ни один 1С специалист больше не использует мышку для рутинных операций... ВСЁ автоматизировано. Количество библиотек превышает милион-сто-пятсот тысяч - движок стал быстрей в 800 раз, все поставили себе VSCode...

Сегодня я в развитие такой ситуации верю... НО

* тут надо отладить поведение WCF под Mono и пофиксить его работу в ночной сборке
* нужно реализовать 3 библиотеки для PG - а то последний 9.6.5 прям просится на автоматизацию администрирования
* <еще 100 issue>

Как-то так... Формальные лендинг пейджЫ с миссиями наверное важны, но насколько я понимаю - сейчас приоритет на развитие экосистемы библиотек и компонентов.

(52) но на досуге кстати покреативть можно...
Evil Beaver; +1 Ответить
60. KAV2 22.01.18 12:14 Сейчас в теме
(51)
Все хотят развития, а не того же самого вид с боку.


А есть ли смысл изменять язык уходя от стандарта вендора? Если уж менять язык координально, то проще всего выбрать другой язык и программировать на нем: Python, C#, TypeScript...
63. IntelInside 127 23.01.18 11:06 Сейчас в теме
(60) Как-то кардинально изменять язык у меня и в мыслях не было. На 1С-бейсике уже написаны миллионы строе кода. Если бог даст и что-то получится, то только надмножество языка 1С. Т.е. любой код на 1С-бейсике будет оставаться корректным кодом. Как для TypeScript любой JavaScript остается корректным. Вообще между 1С-бейсиком и JavaScript много общего. Они пытаются решить одну задачу и проходят по одним и тем же граблям. Только JavaScript впереди. Путь следующий: а) сделать язык очень-очень простым, чтобы каждая домохозяйка могла себе написать сайт бухгалтерию; б) наваракозить на этом очень-очень простом языке целый ангуляр ЕРП; б) завыть матерно от 1005000 строк плохо структуированного и с трудом поддерживаемого кода; в) придумать TypeScript и все переписать. Нет другого пути. В 90-х прошлого века при переходе с С на С++ было то же самое. Либо вендор сам это сделает, либо я, либо еще кто-то, но это будет. Лучше бы, конечно, чтобы в самой 1С разум проснулся.
54. Peleng 19 20.11.17 05:53 Сейчас в теме
(49)
Они могут быть выведены из строки инициализации
Не факт, например, Dictionary<Ключ,Значение>{{"ключ1",1},{"ключ2","2"}}, если тип Значение может инициализироваться и числом и строкой, тогда то что в строке инициализации преобразуется к нужным типам во время выполнения...
при добавлении новых возможностей в язык я больше на VB.Net ориентируюсь, чем на C#. Но язык 1С так был сделан изначально, ключевые слова и базовые функции слизаны с VBScript, а синтаксис (точки с запятой, квадратные скобки) с JavaScript....
Все языки отличаются, в конечном итоге, только синтаксисом.
это сильно упрощенное суждение... тут пока названия типам придумаешь, запаришься... много из уже реализованного в языке пришлось выкинуть после рассуждений в духе бритвы Оккама... оно плодится, а ты его режешь... иногда жаль, но на инструкцию к новому языку программист 1С должен потратить не больше дня и все ухватить и запомнить... вот где задача...
56. Peleng 19 20.11.17 06:38 Сейчас в теме
(49) вот с раскладками невезуха, нам оставили только круглые скобки... но остальные можно автозаменой в редакторе вводить... например, ёх это [, ёъ это ], ЁХ это {, ЁЪ это }, ЁБ это <, ЁЮ это >... вполне удобно получается и быстро привыкаешь... хотя ЁБ для некоторых смешно :)
62. KAV2 23.01.18 05:14 Сейчас в теме
(42) А почему просто не писать на C#?
64. Peleng 19 23.01.18 14:18 Сейчас в теме
(62) Если вы уже владеете C#, то пишите на нем... C# в любом случае круче... тут же дело добровольное... а если не владеете, то порог входа надеюсь будет ниже на языке похожем на 1С... кому понравится на новом языке, тот и будет на нем что-то писать... есть такое понятие энтузиасты... если их найдется достаточное количество, то и экосистема языка быстро появится и плюшки с фишками... а нет так нет... провал, неудача и т.д. я отношусь к этому философски... без неудач не бывает... но раз я делаю язык, значит мне самому он нравится, т.е. я первый энтузиаст и есть... уже скоро выяснится будут ли другие... планирую альфа релиз к 8 марта...
61. milanse 32 22.01.18 15:32 Сейчас в теме
Вижу на инфостарте много пиара на тему OneScript и это хорошо. При главном достоинстве - почти полной совместимости с 1С, уже много статей с пошаговыми примерами настройки рабочего окружения. Готовые простые кейсы по использованию как самого языка так и библиотек. А самое главное - все это опенсорс. По моему мнению 1С именно на открытости кода и вырос (не в части платформы, а в части конфигураций, конечно), чего и OneScript желаю.

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

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

Пишущим свои велосипеды предлагаю обратить внимание именно на момент продвижения и популяризации ваших разработок. Я смотрю даже у 1С туго выходит пересадить разработчиков на управляемые приложения и на всякую асинхронщину - а это все в рамках одного языка и кучи типовых решений. Получится ли у вас продвинуть продукт и втолковать прелести изменений языка "тупым одинесникам" ?
Berckk; artbear; +2 Ответить
65. Peleng 19 23.01.18 14:23 Сейчас в теме
(61)
Получится ли у вас продвинуть продукт и втолковать прелести изменений языка "тупым одинесникам" ?

да кто же может ответить на такой вопрос до выхода продукта в свет... может быть сработает эффект новизны... может еще что-то из предложенного зацепит... а может провалится... но мне же самому нравится то, что я делаю, поэтому и надежда на то, что понравится другим, не умирает...
66. milanse 32 23.01.18 15:54 Сейчас в теме
(65) У OneScript уже есть сообщество, в этом его сила. Можно начинать пытаться перетащить часть участников их в свою разработку
67. Peleng 19 23.01.18 16:06 Сейчас в теме
(66) согласен, но ведь еще недавно его не было... возможно так же будет и с моим языком, сообщество возникнет, надеюсь... я ни кого не хочу перетаскивать, я бы мечтал о синергии... как сосуществуют VB и VBScript, Java и JavaScript, так, надеюсь смогут сосуществовать OneScript и мой компилируемый "аналог" (окончательного названия пока нет)...
68. artbear 1065 23.01.18 19:40 Сейчас в теме
(67) OneScript взлетел, потому что мы начали активно применять его в своей работе и делясь результатами с соседями, коллегами, интернетом.
Без использование в работе ничего не выйдет.
69. Peleng 19 24.01.18 09:30 Сейчас в теме
(68) ну, пользоваться то вы начали потому, что сама идея понравилась... скажу о себе, писать код по-русски для меня быстрее и приятнее даже не смотря на то, что до появления 1С 7.5 я уже почти 10 лет по-английски программировал и с тех пор тоже не прекращал... навыки быстрого чтения на родном языке позволяют так же быстро читать код, хоть чужой, хоть свой собственный... а технологии распознавания речи уже позволяют его диктовать, хотя и не слишком удобно пока, но всяко удобнее, чем на не родном языке...
а в своей работе я уже свой язык использую, это позволяет находить ошибки, которые выжили после тестов, т.к. тесты на все случаи не придумаешь, жизнь богаче, а люди наверняка найдут ошибки о которых я даже теоретически не подозреваю... и на люди я его хочу вывести как можно быстрее, но совсем сырой стыдно выводить... поэтому еще месяца 2-3 буду сам отлаживать... что бы не опозорится с не работающим.... а потом назову альфа версией и рискну пойти в народ и будь что будет... как по мне, то ничего не делать хуже... даже велосипеды люди изобретают до сих пор, и иногда случаются у них очень интересные варианты...
70. mister_tula 24.01.18 16:21 Сейчас в теме
А есть ли решение для организации резервного копирования для файловой или sql (postgres) ?
71. Berckk 24.01.18 16:53 Сейчас в теме
(70) Есть же в статье https://infostart.ru/public/672461/ SQL
Или cpdb - https://github.com/arkuznetsov/cpdb (Приложение-комбайн по работе базой данных в файловом формате и MS SQL Server.)
72. mister_tula 25.01.18 10:09 Сейчас в теме
Ну да, cpdb позволяет делать копии, но только MS. Первый вариант вообще не об этом. Интересно, есть ли решения для postgres?
73. nixel 508 25.01.18 13:14 Сейчас в теме
(72) для постгреса есть куча консольных утилит в коробке самого постгреса. файловая без проблем выгружается через vunessa-runner (скапитаню про "не надо делать dt, если у вас скульная база")
75. mirco 73 26.04.18 18:00 Сейчас в теме
(73)
может подскажите алгоритм сборки в один файл ?
76. baton_pk 374 26.04.18 21:17 Сейчас в теме
(75)
сборка в exe очень ограниченна в своих возможностях. Если используются DLL, то сборка работать не будет. Если используются ещё какие-либо внешние файлы - сборка работать не будет.

В собранный exe будут включены только OS-файлы.
77. mirco 73 27.04.18 08:53 Сейчас в теме
(76)
Спасибо.
А есть идеи как хранить пароли внутри так, чтобы их нельзя было прочитать ?
78. baton_pk 374 27.04.18 09:08 Сейчас в теме
(77)
А есть идеи как хранить пароли внутри так, чтобы их нельзя было прочитать ?

есть идея, что это невозможно. Любой спрятанный пароль с ненулевой вероятностью можно вынуть.
74. mirco 73 26.04.18 16:18 Сейчас в теме
Вопрос:
есть скрип, в нем используются библиотеки.
Как все это собрать в exe ?

#Использовать "/относительный путь к библиотекам/"

делаем make

и раскладываю dll и скрипты библиотек в каталог с готовым exe (а потом все собираю в инсталятор)?
79. Vladimir45 35 07.09.18 07:36 Сейчас в теме
ftp - https://github.com/dmpas/oscript-ftp
FTP-клиент для OneScript.

Имя библиотеки говорит само за себя - работа с файлами по протоколу ftp.


Ругается на отсутствие длл в пакете. Где найти?
80. nixel 508 07.09.18 11:15 Сейчас в теме
(79) ставили через opm или просто скачивали zip с гитхаба?
81. Vladimir45 35 07.09.18 13:56 Сейчас в теме
82. nixel 508 07.09.18 17:30 Сейчас в теме
(81) значит, надо собрать ее из исходников с помощью Visual Studio :)
поставьте ее через opm, установится готовый к использованию пакет со скомпилированной dll.
Оставьте свое сообщение