Введение
Для начала разберемся с терминами.
Тем, кто не знает, что такое OneScript, стоит познакомится с первой вводной статьей от самого автора Как решать повседневные задачи с помощью OneScript и с сайтом проекта OneScript. На Инфостарте недавно появилось несколько хороших статей на тему "быстрого старта".
Как только скриптописатель выходит за рамки Сообщить("Привет, мир!") и начинает решать прикладные задачи, у него появляется желание найти какие-то готовые куски кода или целиком разработанную функциональность. Большинство полезных скриптов упаковывается в так называемые пакеты, упрощающие установку этих скриптов на локальную машину и их последующее использование.
Все пакеты делятся на два типа:
- Библиотеки, подключаемые в скрипты через директиву #Использовать и добавляющие разные полезные классы и модули
- и Приложения, которые помимо реализованной на OneScript логики имеют специальные обертки запуска из командной строки (cmd/sh). Часть приложений помимо запуска из командной строки позволяют себя подключать через #Использовать (т.е. как библиотеки), но это скорее бонус и желание разработчика приложения, чем возможность, на которую всегда можно надеяться.
Все более-менее работающие и известные пакеты собраны в двух местах:
- Организация oscript-library на github.com - https://github.com/oscript-library - содержит оригиналы или форки репозиториев, в которых ведется разработка пакетов. Там лежит весь исходный код, чаще всего там же находится и баг-трекер.
- Собранные пакеты выложены на специальном хабе пакетов http://hub.oscript.io - там можно посмотреть список пакетов, их описание и доступные версии, и даже можно скачать руками, если по каким-то причинам не работает пакетный менеджер.
Менеджер пакетов 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 в другой каталог, либо воспользоваться разрабатывающимся менеджером версий OneScript - ovm.
Библиотеки
Большая часть функциональности заложена в библиотеках. Здесь я перечислю и кратко опишу все библиотеки, доступные в хабе пакетов. Начну с так называемого "набора стандартных библиотек", поставляемого с OneScript, продолжу всеми остальными библиотеками в алфавитном порядке. После названия библиотеки будет идти ссылка на основной репозиторий, в котором ведется разработка. Иногда этот репозиторий будет вести на личный репозиторий автора библиотеки, однако, все перечисленные здесь библиотеки собраны в организации oscript-library на GitHub.com.
Поставляемые библиотеки
1commands - https://github.com/oscript-library/1commands
Библиотека для запуска различных приложений из OneScript.
Думаю, многие знают про 1сный метод ЗапуститьПриложение() - с его помощью можно запустить любое приложение (и даже открыть файл в ассоциированном приложении). Однако у него есть ряд недостатков:
- Тяжело анализировать консольный вывод такого приложения
- Не всегда удобно склеивать строку для запуска
- Нет управления допустимыми кодами возврата
- Приходится изобретать велосипед для запуска более сложных команд или последовательности команд под win/linux
Данная библиотека добавляет два класса для запуска приложений - Команда (если команда одна) и КомандныйФайл (если команд несколько). Пример запуска Команды из README проекта:
Команда = Новый Команда;
Команда.УстановитьКоманду("oscript");
Команда.ДобавитьПараметр("-version");
// или сразу Команда.УстановитьСтрокуЗапуска("oscript -version");
КодВозврата = Команда.Исполнить();
Сообщить(КодВозврата);
Сообщить(Команда.ПолучитьВывод());
asserts - https://github.com/oscript-library/asserts
Реализация функциональности "утверждений" и "ожиданий" - специальных функций, кидающих исключение, если переданные в них значения не проходят некую проверку.
В основном используется в тестах, однако так же позволяет, например, проверять текущее состояние скрипта - заполненность всех нужных параметров и их корректность.
Реализована в виде двух независимых модулей - Утверждения и Ожидаем. Каждый из этих модулей содержит функции проверки переданных значений - на равенство, тип, состав и прочее. Хорошая вводная статья и примеры использования опубликованы в виде статьи на Хабре. Использование этой библиотеки можно увидеть практически во всех пакетах, имеющих тестирование в том или ином виде.
МояПеременная = ВычислитьЧтоТоТам();
// xUnit style
Утверждения.ПроверитьРавенство(1, МояПеременная, "Моя переменная должна быть строго равна 1");
// BDD style
Ожидаем.Что(МояПеременная, "Моя переменная должна быть строго равна 1").Равно(1);
cmdline - https://github.com/oscript-library/cmdline
Библиотека для разбора и декларативного задания аргументов командной строки.
OneScript при запуске скрипта позволяет получить все переданные скрипту аргументы через коллекцию "АргументыКоманднойСтроки", однако там они лежат в виде обычного массива строк. При разработке более сложных приложений появляется необходимость добавлять различные параметры-флаги, именованные и позиционные параметры, управлять составом команд... Тут на помощь приходит cmdline. С помощью класса ПарсерАргументовКоманднойСтроки можно указать все имеющиеся у скрипта параметры и/или команды и избавить разработчика от ненужной возни.
Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьПараметр("ПутьКФайлу");
Парсер.ДобавитьИменованныйПараметр("-action");
Параметры = Парсер.Разобрать(АргументыКоманднойСтроки);
Сообщить(Параметры["ПутьКФайлу"]);
Сообщить(Параметры["-action"]);
В данном случае при запуске скрипта через "oscript my_script.os -action МоеДействие C:\temp\tempFile.txt" в соответствии "Параметры" окажется два значения с заранее заданными ключами - "ПутьКФайлу" будет хранить в себе "C:\temp\tempFile.txt", а "-action" - "МоеДействие".
fs - https://github.com/oscript-library/files-common
Помощник по работе с файлами и каталогами.
Данная небольшая библиотека упрощает некоторые операции с файловой системой. В одну строку/вызов функции проверить, что файл или каталог существует, создать новый каталог, если его нет, рекурсивно скопировать все файлы из одного каталога в другой и тому подобное.
ФС.ОбеспечитьПустойКаталог("./build");
Если ФС.КаталогСуществует("C:\МойРабочийКаталог") Тогда
ФС.КопироватьСодержимоеКаталога("C:\МойРабочийКаталог", "./build");
КонецЕсли;
gitrunner - https://github.com/nixel2007/gitrunner
Библиотека-обертка над командами git из OneScript.
Предоставляет "человекочитаемое" API для управления git-репозиторием в объектной технике. Стиль работы с библиотекой похож на v8runner (о котором чуть ниже).
ГитРепозиторий = Новый ГитРепозиторий();
ГитРепозиторий.УстановитьРабочийКаталог(ТекущийКаталог());
ГитРепозиторий.УстановитьНастройку("core.quotePath", "true", РежимУстановкиНастроекGit.Локально);
ГитРепозиторий.ДобавитьВнешнийРепозиторий("origin", "http://github.com/EvilBeaver/oscript-library");
ГитРепозиторий.ПерейтиВВетку("master");
ГитРепозиторий.Получить();
ГитРепозиторий.ОбновитьПодмодули(Истина, Истина);
json - https://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);
logos - https://github.com/oscript-library/logos
Логирование в стиле "взрослых языков".
Логирование - больная тема любого продукта, связанного с автоматизацией деятельности. Хочется включать и отключать отладочные логи, сохранять логи в файл и выводить их в консоль, может быть даже как-то их по-хитрому форматировать, управлять настройками из файла или из переменных среды... На все эти вопросы может ответить библиотека logos. Лучше один раз показать:
Лог = Логирование.ПолучитьЛог("oscript.app.messages"); // Инициализация лога
Лог.УстановитьУровень(УровниЛога.Информация); // Можно задать один из пяти уровней, например, Отладка
Лог.Информация("Информационное сообщение"); // выведется в лог
Лог.Отладка("Отладочное сообщение"); // а это - нет, т.к. уровень лога Информация выше, чем Отладка
strings - https://github.com/oscript-library/strings
Порт модуля СтроковыеФункцииКлиентСервер на OneScript, ни больше ни меньше.
МассивСтрок = Новый Массив;
МассивСтрок.Добавить("Вася");
МассивСтрок.Добавить("пошел в");
МассивСтрок.Добавить("Зоопарк.");
// Функция должна объединить строки из массива в строку с разделителями
РезультатСоединения = СтроковыеУтилиты.СтрокаИзМассиваПодстрок(МассивСтрок, " ");
Ожидаем.Что(РезультатСоединения).Равно("Вася пошел в Зоопарк.");
tempfiles - https://github.com/oscript-library/tempfiles
Библиотека для создания временных файлов и каталогов.
Отличительной особенностью является создание файлов в некоторых "пулах", которые можно разом удалить методом ВременныеФайлы.Удалить(). Имеет два режима работы:
- Модуль ВременныеФайлы предоставляет общий пул временных файлов среди всех используемых скриптов
- Инициализация класса МенеджерВременныхФайлов создаст отдельный пул файлов, которым можно управлять независимо от всех остальных пулов.
ВременныйФайл = ВременныеФайлы.СоздатьФайл();
ВторойВременныйФайл = ВременныеФайлы.СоздатьФайл();
// мой очень полезный код
ВременныеФайлы.Удалить(); // удалит оба созданных временных файла
tool1cd - https://github.com/oscript-library/tool1cd
Обертка над популярной утилитой для работы с файловыми базами от покинувшего нас Валерия Агеева.
Имеет два класса - ЧтениеТаблицФайловойБазыДанных и ЧтениеХранилищаКонфигурации, позволяющие вычитывать данные из файловых баз в виде таблиц значений.
ЧтениеБазыДанных = Новый ЧтениеТаблицФайловойБазыДанных;
ЧтениеБазыДанных.ОткрытьФайл(ФайлХранилища);
ТаблицаБД = ЧтениеБазыДанных.ПрочитатьТаблицу("VERSIONS");
Сообщить(ТаблицаБД.Количество());
ЧтениеБазыДанных.ЗакрытьФайл();
v8runner - https://github.com/oscript-library/v8runner
Один из самых популярных пакетов - запуск 1С в режимах Конфигуратора и Предприятие в объектной технике.
Позволяет забыть как страшный сон десятки различных флагов и параметров для запуска 1С из командной строки и поиск нужной версии установленной платформы, инкапсулируя это внутри класса УправлениеКонфигуратором. Список доступных методов в README безбожно устарел, для осознания всей мощи инструмента стоит заглянуть в исходники.
УправлениеКонфигуратором = Новый УправлениеКонфигуратором();
// контекст может быть и не задан, тогда работа выполняется в базе, созданной в каталоге временных файлов
УправлениеКонфигуратором.УстановитьКонтекст("/FC:\1cdb\mydatabase","Admin", "passw0rd");
УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла("C:\source.cf");
УправлениеКонфигуратором.ОбновитьКонфигурациюБазыДанных();
УправлениеКонфигуратором.ВыполнитьСинтаксическийКонтроль();
Прочие библиотеки
Помимо библиотек из "стандартного набора" в хабе есть и другие не менее замечательные разработки.
add - https://github.com/silverbulleters/add
Продукт для разработки через TDD/BDD, упакованный в виде пакета.
Не совсем "библиотека", но по формальному признаку (отсутствие оберток для запуска из командной строки и наличие подключаемых модулей) отнесена в этот раздел. Используется для быстрой установки Vanessa ADD на машину разработчика или в локальный каталог репозитория через команду opm install -l add.
При запуске vanessa-runner с командой "vanessa" по умолчанию ищется установленный пакет add.
cli - https://github.com/khorevaa/cli
Библиотека для создания консольных приложений.
cli является целым "фреймворком" для создания консольных приложений. Являясь развитием идей cmdline, cli предоставляет API для декларативного описания структуры вашего приложения. Описывается:
- набор команд и их классов-обработчиков
- аргументы и опции команд, их типы
- поддерживаются вложенные команды (подкоманды)
Формирование командной строки реализовано согласно POSIX стандартам, есть автоматический вывод справки по командам, поддерживаются объединение опций-флагов, массивы, взаимоисключающие опции/аргументы и многое другое.
Настоятельно рекомендую разработку нового консольного приложения на OneScript начинать с использования библиотеки cli.
#Использовать cli
Процедура ВыполнитьПриложение()
Приложение = Новый КонсольноеПриложение("cli", "Помощник генерации приложения на основании шаблона cli");
Приложение.Версия("v version","1.0.0");
Приложение.ДобавитьКоманду("i init", "Инициализация структуры нового приложения", Новый КомандаInit);
Приложение.Запустить(АргументыКоманднойСтроки);
КонецПроцедуры // ВыполнениеКоманды()
///////////////////////////////////////////////////////
Попытка
ВыполнитьПриложение();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Отдельно добавлю, что и сами opm и ovm сейчас базируются на данной библиотеке.
ClientSSH - https://github.com/asosnoviy/oscript-ssh
ssh клиент для oscript.
Как следует из названия, данная библиотека призвана упростить работу через ssh. Помимо, собственно, подключения к ssh-серверу, позволяет выполнять команды (в том числе в поточном режиме), поддерживает авторизацию по паре логин-пароль и ssh-ключ, отправку файлов.
Может использоваться для управления Конфигуратором (!) в режиме ssh-агента.
КлиентSSH = Новый КлиентSSH("127.0.0.1", 22, "user", "password");
Соединение = КлиентSSH.ПолучитьСоединение();
Результат = Соединение.ВыполнитьКоманду("echo 123");
Соединение.Разорвать();
collections - https://github.com/ret-Phoenix/OneScript-Collections
Расширенные коллекции для OneScript.
OneScript позволяет разрабатывать библиотеки не только на языке 1С, но и на C#. Особо желающие могут попробовать даже F#. Специально для тех, кому не хватает стандартных коллекций 1С, была создана данная библиотека. Она добавляет возможность использовать такие объекты как Стек и Очередь (Дек).
Очередь = Новый Очередь();
Очередь.Добавить("1");
Очередь.Добавить("2");
Очередь.Добавить("3");
Очередь.УбратьИзОчереди(); // в очереди останется 2 и 3
configor - https://github.com/khorevaa/configor
Библиотека для работы с конфигурационными файлами в формате json, yaml.
В отличие от ReadParams и params (о которых ниже), поддерживает предварительное описание параметров, зачитываемых из файла. В наличии поддержка дополнительных "провайдеров" для чтения параметров из других типов данных (файлы других структур и расширений, СУБД, переменные окружения).
// Пример файла настроек
//{
// 'Настройки': {
// "Глобальные": {
// "НастройкиПрокси":{
// "Сервер": "localhost",
// "Порт": "8080"
// }
// }
//
// }
//}
// Чтение без описания
МенеджерПараметров = Новый МенеджерПараметров();
МенеджерПараметров.УстановитьФайлПараметров("Путь/К/Файлу");
МенеджерПараметров.Прочитать();
ПроксиСервер = МенеджерПараметров.Параметр("Настройки.Глобальные.НастройкиПрокси.Сервер")
// Установка описания параметров
МенеджерПараметров.КонструкторПараметров(КлассСПараметрамиПриложения);
ПроксиСерверИзПараметровПриложения = ПараметрыПриложения.Параметры().Настройки.НастройкиПрокси.Сервер;
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.ПрикрепитьМеткуКСтранице(ПараметрыПодключения, ИдентификаторНовойСтраницы, "Моя метка");
coverage - https://github.com/khorevaa/oscript-coverage
Библиотека для конвертации результата расчета покрытия тестами в различные форматы.
Мало кто знает, но OneScript умеет мерить покрытие исполнявшегося кода. Для этого его надо запустить с параметром -codestat=ПутьКФайлуСРезультатамиЗамера. На выходе нас будет ждать json-файл с информацией о том, какие сценарии запускались и какие строки кода в них выполнялись. С помощью библиотеки coverage этот json можно сконвертировать в популярные форматы Clover, Covertura и GenericCoverage, использующийся в SonarQube.
А с плагином coverage-gutters для Visual Studio Code можно прямо в редакторе видеть покрытие кода тестами.
ПроцессорГенерации.ОтносительныеПути()
.ФайлСтатистики(Файл_Стат.ПолноеИмя)
.GenericCoverage() // // Формирование отчета в формате GenericCoverage
.Cobertura() // Формирование отчета в формате Cobertura
.Clover(ИмяПакета) // Формирование отчета в формате Clover
.Сформировать();
datetime- https://github.com/khorevaa/datetime
Библиотека для облегчения работы со датой/временем.
Содержит в себе функции по конвертации даты-времени в/из формата unix timestamp, а так же двустороннюю конвертацию даты-времени по форматной строке.
ФорматДатыСтроки = "dd MM yy";
ДатаПоФормату = "01 01 18";
// В переменной "Дата" окажется дата '20180101';
Дата = ПроцессорДаты.СтрокаВДату(ДатаПроверкиПоФормату, ФорматДатыСтроки);
delegate - https://github.com/artbear/delegate
Делегаты/функторы в 1С.
Тем, кто скучает по Функциям как Объектам Первого Класса или кому просто хочется немного функционального программирования, может понравится эта библиотека. С ее помощью можно создать что-то вроде указателя на процедуру или функцию, передать его как параметр в какой-нибудь другой метод и там его исполнить. Является переработкой библиотеки notify.
// Метод, вызываемый из делегата
Процедура Поздороваться(Имя) Экспорт
Сообщить("Привет, " + Имя + "!");
КонецПроцедуры
Делегат = Делегаты.Создать(ЭтотОбъект, "Поздороваться", "Мир");
Делегаты.Исполнить(Делегат); // или Делегат.Исполнить();
ДелегатНовыйМир = Делегаты.Создать(ЭтотОбъект, "Поздороваться");
ДелегатНовыйМир.Исполнить("Новый мир"); // или Делегаты.Исполнить(ДелегатНовыйМир, "Новый мир");
entity - https://github.com/nixel2007/entity
Библиотека Entity
предназначена для работы с данными БД как с простыми OneScript объектами. Является реализацией концепции ORM в OneScript.
Данная библиотека позволяет описывать структуру БД или "модель" в виде набора "сущностей" - специальным образом аннотированных классов OneScript. Поддерживаются все операции CRUD, работа с транзакциями, сложный поиск объектов.
Поддержка различных СУБД возможна в виде "коннекторов", имеющих единый интерфейс. В качестве стандартной реализации библиотека уже содержит коннектор к SQLite.
// file: ФизическоеЛицо.os
// Данный класс содержит информацию о физических лицах.
&Идентификатор // Колонка для хранения ID сущности
&ГенерируемоеЗначение // Заполняется автоматически при сохранении сущности
&Колонка(Тип = "Целое") // Хранит целочисленные значения
Перем Идентификатор Экспорт; // Имя колонки в базе - `Идентификатор`
Перем Имя Экспорт; // Колонка `Имя` будет создана в таблице, т.к. поле экспортное.
&Колонка(Имя = "Отчество") // Поле `ВтороеИмя` в таблице будет представлено колонкой `Отчество`.
Перем ВтороеИмя Экспорт;
&Колонка(Тип = "Дата") // Колонка `ДатаРождения` хранит значения в формате дата-без-времени
Перем ДатаРождения Экспорт;
&Колонка(Тип = "Ссылка", ТипСсылки = "СтраныМира")
Перем Гражданство Экспорт; // Данная колонка будет хранить ссылку на класс СтраныМира
&Сущность(ИмяТаблицы = "ФизическиеЛица") // Объект с типом `ФизическоеЛицо` (по имени файла) будет представлен в СУБД в виде таблицы `ФизическиеЛица`
Процедура ПриСозданииОбъекта()
КонецПроцедуры
// Работа с обычными объектом OneScript.
СохраняемоеФизЛицо = Новый ФизическоеЛицо;
СохраняемоеФизЛицо.Имя = "Иван";
СохраняемоеФизЛицо.ВтороеИмя = "Иванович";
СохраняемоеФизЛицо.ДатаРождения = Дата(1990, 01, 01);
СтранаМира = Новый СтраныМира;
СтранаМира.Код = "643";
СтранаМира.Наименование = "Российская Федерация";
// Присваиваем колонке с типом "Ссылка" конкретный объект с типом "СтраныМира"
СохраняемоеФизЛицо.Гражданство = СтранаМира;
// Сохранение объектов в БД
// Сначала сохраняются подчиненные сущности, потом высокоуровневые
МенеджерСущностей.Сохранить(СтранаМира);
МенеджерСущностей.Сохранить(СохраняемоеФизЛицо);
// После сохранения СохраняемоеФизЛицо.Идентификатор содержит автосгенерированный идентификатор.
// Колонка "Гражданство" в СУБД будет хранить идентификатор объекта СтранаМира - значение "643".
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. Добавляет возможность кодом создавать графический интерфейс для скриптов. Есть работа с таблицами и деревьями, кнопки, поля ввода и многое другое. Статья-анонс на Инфостарте от автора Сергея Ушакова - //infostart.ru/public/540284/
Отдельно добавлю, что при подключении установленной из хаба библиотеки, подключать внешнюю компоненту руками уже не нужно.
#Использовать gui
Перем Форма;
//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
ПолеВвода1 = Форма.Элементы.Добавить("ПолеВвода1", "ПолеФормы", Неопределено);
ПолеВвода1.Вид = Форма.ВидПоляФормы.ПолеВвода;
ПолеВвода1.Заголовок = "Поле ввода";
ПолеВвода1.Значение = "Значение задано из скрипта";
КонецПроцедуры
УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
Форма = УправляемыйИнтерфейс.СоздатьФорму();
//# Устанавливаем обработку события ПриОткрытии
Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
Форма.Показать();
InternetMail - https://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"
);
irac - https://github.com/arkuznetsov/irac
Управление кластером серверов 1С с помощью утилит rac/ras.
Библиотека является оберткой над утилитой командной строки rac, оборачивая ее вызовы в удобные функции и объекты языка 1С.
АдминистрированиеКластера = Новый АдминистрированиеКластера("localhost", 1545, "8.3.10", "admin", "P@ssw0rd");
СписокКластеров = АдминистрированиеКластера.Кластеры();
Кластер = Кластер = Кластеры.Получить(1541);
Сообщить("Всего ИБ: " + Кластер.ИнформационныеБазы().Список().Количество());
markdown - https://github.com/oscript-library/markdown
Парсер разметки Markdown и генерация HTML.
Миниатюрная библиотека на C# для работы с Markdown. Файлы README в хабе пакетов и различные вставки кода на сайтах oscirpt.io и web.oscript.io обрабатываются как раз этой библиотекой.
Парсер = Новый ПарсерРазметкиMD();
Парсер.ВключитьРасширения = Истина;
Текст = "# Привет
|
|[http://advice.org/Как поймать слона](http://oscript.io/Как%20поймать%20слона)";
Сообщить(Парсер.СоздатьHTML(Текст));
messenger - https://github.com/oscript-library/messenger
Отправка сообщений в различные сервисы.
Еще одна интеграционная библиотека. На этот раз - для отправки сообщений. На момент написания статьи умеет отправлять SMS (через трех операторов), а так же писать сообщения в Slack, RocketChat, Gitter и Telegram. Слышал о "success story" с отправлением ошибок из Журнала Регистрации в Телеграм-чат с последующей раздачей по шапке получившим сообщение.
ИмяКомнаты = "organization/repo";
Мессенджер = Новый Мессенджер();
Мессенджер.ИнициализацияGitter(ТокенПользователя);
Мессенджер.ОтправитьСообщение(Мессенджер.ДоступныеПротоколы().gitter, ИмяКомнаты, "Всем привет!" );
moskito - https://github.com/nixel2007/moskito
Библиотека предназначена для создания моков (mock) и стабов (stub) в OneScript.
При применении unit-тестирования в других языках часто применяются моки - специальные классы-"заглушки", эмулирующие работу реальных классов. Сохраняя интерфейс класса-родителя, моки не имеют "побочных эффектов" от своей работы. Запись мок-файла не создаст файл на диске, и так далее. Для быстрого получения и последующей настройки таких классов-заглушек и предназначена данная библиотека.
Помимо собственно создания моков, библиотека позволяет гибко установить ожидаемые результаты работы методов.
HTTPЗапрос = Новый HTTPЗапрос("/ping");
МокСоединение = Мок.Получить(Новый HTTPСоединение("localhost"));
// Некоторые объекты нельзя создавать через конструктор.
// Для таких объектов можно воспользоваться созданием мока из типа.
Ответ = Мок.Получить(Тип("HTTPОтвет"));
Ответ.КодСостояния = 200;
Ответ.Когда().ПолучитьТелоКакСтроку().ТогдаВозвращает("Переопределенный ответ");
// Моки можно вкладывать в моки
МокСоединение.Когда().Получить(HTTPЗапрос).ТогдаВозвращает(Ответ);
Результат = МокСоединение.Получить(HTTPЗапрос);
Ожидаем.Что(Результат.ПолучитьТелоКакСтроку()).Равно("Переопределенный ответ");
notify - https://github.com/nixel2007/notify
Создание и обработка объектов ОписаниеОповещения.
Не смотря на то, что асинхронных функций как таковых в OneScript нет, объект ОписаниеОповещения и идущий с ним в паре метод ВыполнитьОбработкуОповещения довольно хорошо подошли под реализацию Функций как Объектов Первого Класса, сохранив максимально приближенный к 1С синтаксис. Можно использовать, например, для реализации паттерна "функции обратного вызова" (коллбэка).
// Процедура-обработчик описания оповещения.
//
Процедура СообщитьПриветМир(Результат, ДополнительныеПараметры = Неопределено) Экспорт
Сообщить("Привет, " + ДополнительныеПараметры + "!");
ВызватьИсключение "Что-то произошло!";
КонецПроцедуры
// Создание объекта ОписаниеОповещения. Аналогично использованию "Новый ОписаниеОповещения("СообщитьПриветМир", ЭтотОбъект, "Мир")" в 1С.
ОписаниеОповещения = ОписанияОповещений.Создать("СообщитьПриветМир", ЭтотОбъект, "Мир");
// Выполнение обработки оповещения. Аналогично использованию ВыполнитьОбработкуОповещения(ОписаниеОповещения) в 1С.
ОписанияОповещений.ВыполнитьОбработкуОповещения(ОписаниеОповещения);
params - https://github.com/artbear/params
Стандартизированное переопределение параметров командной строки из json-файлов конфигурации и переменных окружения.
Данная библиотека условно является надстройкой над библиотекой "cmdline". Используя вывод ПарсераАргументовКоманднойСтроки, анализируя наличие и содержимое файла настроек и переменных среды, позволяет получить итоговые значения параметров. У каждого типа задания параметра есть свой приоритет. Файлы настроек могут быть вложенными друг в друга через специальные поля-ссылки. Является продолжением идей библиотеки ReadParams.
Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьИменованныйПараметр("Параметр");
Параметры = ЧтениеПараметров.Прочитать(Парсер, АргументыКоманднойСтроки);
ParserFileV8i - https://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);
КонецЦикла;
ПрогрессБар.Завершить();
RabbitMQ - https://github.com/oscript-library/rabbitmq
Клиент для RabbitMQ.
Минималистичный клиент для RabbitMQ, адаптер клиента на C# в OneScript. Поддерживает базовые методы отправки и получения сообщений. На данный момент поддерживается прием/передача только строковых данных.
Соединение = Новый СоединениеRMQ;
Соединение.Пользователь = "guest";
Соединение.Пароль = "guest";
Соединение.Сервер = "localhost";
Соединение.ВиртуальныйХост = "/";
Клиент = Соединение.Установить();
ИмяТочкиОбмена = "test";
Клиент.ОтправитьСтроку("Привет", ИмяТочкиОбмена);
Соединение.Закрыть();
ReadParams - https://github.com/Stepa86/ReadParams
Чтение параметров скрипта из json-файла.
Выполняет десериализацию JSON-файла настроек в соответствие, поддерживает включение параметров из одного файла в другой через специальные поля-ссылки, а так же подстановку значений одних полей в другие.
записьТекста = Новый ЗаписьТекста(файлПараметров1);
ЗаписьТекста.ЗаписатьСтроку( "{""парам.Число"": 1, ""парам.Строка"": ""1"", ""парам.Булево"": true}" );
ЗаписьТекста.Закрыть();
прочитанныеПараметры = ЧтениеПараметров.Прочитать( файлПараметров1 );
// прочитанныеПараметры["парам.Число"] = 3;
// прочитанныеПараметры["парам.Строка"] = "3";
// прочитанныеПараметры["парам.Булево"] = Истина;
reflector - https://github.com/khorevaa/reflector
Библиотека упрощает и расширяет работу с встроенным в OneScript объектом Рефлектор
и добавляет функциональность работы с интерфейсами.
Помимо ожидаемых функций-оберток вроде ЕстьФункция/ЕстьСвойство позволяет описывать "интерфейс" - некий контракт класса в виде обязательного набора процедур и функций, и в последствии проверять классы на соответствие контракту.
Интерфейс = Новый ИнтерфейсОбъекта;
Интерфейс.ФункцияИнтерфейса("Функция1", 2)
.ПроцедураИнтерфейса("Процедура1");
РасширенныйРефлектор = Новый РефлекторОбъекта(ЭтотОбъект);
РеализуетИнтерфейс = РасширенныйРефлектор.РеализуетИнтерфейс(Интерфейс);
Утверждения.ПроверитьИстину(РеализуетИнтерфейс, "Интерфейс реализуется объектом");
restler - https://github.com/oscript-library/restler
Помощник работы с RestAPI.
Довольно молодая библиотека, родившаяся после нескольких мучительных дней работы с HTTPСоединением. Упрощает шаги по вызову различных http-сервисов, сама делает десериализацию, позволяет управлять кодом состояния. Имеет бедное README, однако уже зарекомендовала себя (личным примером) как отличный фундамент для построения более высокоуровневых интеграционных компонентов уже как минимум к пяти различным системам.
Клиент = Новый КлиентВебAPI();
Клиент.ИспользоватьСоединение(Новый HTTPСоединение("localhost"));
ИнформацияОПродажах = Клиент.Получить("sales/totals");
Для Каждого Инфо Из ИнформацияОПродажах Цикл
Сообщить(СтрШаблон("Продано товара %1 на сумму %2", Инфо["nomenclature"], Инфо["sum"]));
КонецЦикла;
semver - https://github.com/khorevaa/semver
Библиотека предназначена для чтения и сравнения строковых версий по стандарту семантического версионирования (версии 2.0). Этот стандарт широко применяется при работе с пакетами в других языка, таких как, например, node.js и его пакетный менеджер npm, и python с его pip.
Помимо "простого" сравнения точных версий на больше-меньше поддерживаются "диапазоны" (по правилам semver).
Результат = Версии.ВерсияВДиапазоне("1.0.2", ">=1.0.0");
МассивВерсий = Новый Массив();
МассивВерсий.Добавить("1.0.2");
МассивВерсий.Добавить("1.0.3");
МассивВерсий.Добавить("1.0.4");
МаксимальнаяВерсия = Версии.МаксимальнаяВерсияМежду(МассивВерсий, ">=1.0.0", "<2.0.0");
// ИЛИ
МаксимальнаяВерсия = Версии.Сравнение(">=1.0.0")
.ДобавитьДиапазон("<2.0.0")
.ПроверяемыеВерсии(МассивВерсий)
.Максимальная();
Сообщить(МаксимальнаяВерсия.ВСтроку());
sql - https://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.Выполнить().Выгрузить();
telegrambot - https://github.com/pallid/telegrambot
Библиотека для взаимодействия с Telegram Bot API.
Поддерживается обработка входящих сообщений, отправка сообщений, работа с кнопками и клавиатурой, геолокация и отправка контактов. Поддерживается работа в OneScript.Web.
Бот = Новый ТелеграмБот;
Бот.УстановитьТокенАвторизации("ТВОЙ_ТОКЕН_БОТА");
Бот.УстановитьВебхук("ТВОЙ_АДРЕС_ДЛЯ_ХУКОВ");
///
ОбъектЗапрос = ПарсерJSON.ПрочитатьJSON(ТекстТелаЗапроса);
Если ОбъектЗапрос["message"] <> Неопределено Тогда
ТекстСообщения = ОбъектЗапрос["message"]["text"];
ПолучательИД = ОбъектЗапрос["message"]["chat"]["id"];
Если ТекстСообщения = "/start" тогда
ТекстСообщения = "Привет, в низу меню для навигации";
Сообщение = ТелеграмАПИ.НовоеСообщение(ПолучательИД, ТекстСообщения);
ТелеграмАПИ.ДобавитьКлавиатуру(Сообщение, ГлавноеМеню());
Результат = Бот.Отправить(Сообщение);
КонецЕсли;
КонецЕсли;
TLog - https://github.com/Tavalik/TLog
Альтернативная реализация логирования для OneScript.
Из коробки поддерживается вывод в файл и консоль, автодобавление времени, работа с многоуровневыми логами при помощи отступов.
Логирование = Новый ТУправлениеЛогированием();
Логирование.ДатаВремяВКаждойСтроке = Истина;
Логирование.СоздатьФайлЛога("ТестовоеЗадание",РабочийКаталог);
Логирование.ЗаписатьСтрокуЛога("Начало процедуры");
// Запишем строку с отступом
Логирование.УвеличитьУровень();
Логирование.ЗаписатьСтрокуЛога("Строка второго уровня");
Логирование.УменьшитьУровень();
Логирование.ЗаписатьСтрокуЛога("Окончание процедуры");
// Выведет:
// [11.05.2018 12:03:11] Начало процедуры
// [11.05.2018 12:03:12] Строка второго уровня
// [11.05.2018 12:03:12] Окончание процедуры
TMail - https://github.com/Tavalik/TMail
Библиотека для отправки электронных сообщений. В своей работе использует COM-объекты, соответственно работает исключительно под Windows.
В наличии поддержка HTML и текстовых сообщений, вложений, отправка нескольким получателям. Есть поддержка SSL.
УправлениеЭП = Новый ТУправлениеЭлектроннойПочтой();
УчетнаяЗаписьЭП = УправлениеЭП.УчетнаяЗаписьЭП;
// Настройка учетной записи...
УчетнаяЗаписьЭП.АдресSMTP = "smtp.mydomain.com";
// ...
СтруктураСообщения = УправлениеЭП.СтруктураСообщения;
СтруктураСообщения.АдресЭлектроннойПочтыПолучателя = "admin@mydomain.com;";
СтруктураСообщения.Вложения = ИмяФайлаДляВложения;
СтруктураСообщения.ТемаСообщения = "Проверка работы библиотеки TMail";
СтруктураСообщения.ТипТекстаПочтовогоСообщения = "HTML";
УправлениеЭП.НачатьТекстСообщенияHTML();
УправлениеЭП.ДобавитьВТекстСообщенияHTML("Проверка работы библиотеки TMail");
УправлениеЭП.ЗавершитьТекстСообщенияHTML();
УправлениеЭП.ОтправитьСообщение();
TMSSQL - https://github.com/Tavalik/TMSSQL
Библиотека для работы с базами данных на MS SQL Server. В своей работе использует COM-объекты, соответственно работает исключительно под Windows.
Объектная обертка над ADODB.Connection, упрощающая взаимодействие с СУБД MS SQL Server. для Может работать и как библиотека и как приложение.
УправлениеMSSQL = Новый УправлениеMSSQL();
// Введем параметры
ПараметрыПодключения = УправлениеMSSQL.ПараметрыПодключения;
ПараметрыПодключения.АдресСервераSQL = "10.1.1.40";
// ...
УправлениеMSSQL.СоздатьБД();
УправлениеMSSQL.ИзменитьМодельВосстановленияБД("FULL");
ПолноеИмяФайла = УправлениеMSSQL.СделатьРезервнуюКопиюБД(,,"FULL");
TRun1C - https://github.com/Tavalik/TRun1C
Библиотека для запуска 1С:Предприятие 8 в различных режимах.
Еще одна альтернативная реализация функциональности из стандартной библиотеки OneScript. Так же как и v8runner позволяет автоматизировать работу с 1С и хранилищем конфигурации. Для работы с сеансами использует платформенный COMConnector, соответственно эта часть будет работать исключительно под Windows.
Запуск1С = Новый ТУправлениеЗапуском1С();
ПараметрыЗапуска = Запуск1С.ПараметрыЗапуска;
ПараметрыЗапуска.ПутьКПлатформе1С = "C:\Program Files (x86)\1cv8\8.3.8.2054\bin\1cv8.exe";
ПараметрыЗапуска.ТипБазы = "F";
ПараметрыЗапуска.ИмяБазы = "C:\repo\OS_TScripts\_Tests\Base";
// ...
Запуск1С.ЗапуститьПредприятие();
Запуск1С.ЗапуститьКонфигуратор();
Запуск1С.УстановитьБлокировкуНачалаСеансов();
Запуск1С.ЗавершитьРаботуПользователей();
Запуск1С.ВыгрузитьИнформационнуюБазу(ПолныйПутьКФайлу);
v8storage - https://github.com/oscript-library/v8storage
Работа с Хранилищем 1С в стиле v8runner.
Библиотека является развитием идей и функциональности v8runner, специализируясь именно на работе с хранилищем.
ХранилищеКонфигурации = Новый МенеджерХранилищаКонфигурации();
ХранилищеКонфигурации.УстановитьКаталогХранилища(КаталогХранилища);
ХранилищеКонфигурации.ПрочитатьХранилище();
ХранилищеКонфигурации.СохранитьВерсиюКонфигурацииВФайл(НомерВерсии, ИмяФайлаКофигурации);
ТаблицаВерсий = ХранилищеКонфигурации.ПолучитьТаблицаВерсий();
МассивАвторов = ХранилищеКонфигурации.ПолучитьАвторов();
v8unpack - https://github.com/dmpas/oscript-v8unpack
Порт компоненты для работы с контейнерами файлов 1С:Предприятие 8.
Среди людей, которые хоть раз занимались распаковой и анализом внешних обработок или конфигураций 1С (еще до 8.3.7), утилита v8unpack давно известна. Данный порт является переработкой данного приложения в виде компоненты на C# для вызова ее изнутри OneScript без всяких ЗапуститьПриложение(). На данный момент поддерживается только команда -parse в тех рамках, в которых она используется в приложении gitsync (о нем ниже).
#Использовать v8unpack
ЧтениеФайла = Новый ЧтениеФайла8("ПутьКФайлу");
Для Каждого мЭлемент Из ЧтениеФайла.Элементы Цикл
Сообщить(мЭлемент.Имя);
ЧтениеФайла.Извлечь(мЭлемент, "Каталог", Истина);
КонецЦикла;
vanessa-behavior - https://github.com/silverbulleters/vanessa-behavior2
Фреймворк для разработки через BDD, упакованный в виде пакета.
Не совсем "библиотека", но по формальному признаку (отсутствие оберток для запуска из командной строки и наличие подключаемых модулей) отнесена в этот раздел. Используется для быстрой установки Vanessa Behavior на машину разработчика или в локальный каталог репозитория через команду opm install -l vanessa-behavior. Обращаю внимание, что данный пакет собирается из репозитория Vanessa-Behavior2, который в данный момент не поддерживается.
verbal-expressions - https://github.com/oscript-library/verbal-expressions
Библиотека для OneScript, помогающая собирать сложные регулярные выражения в объектной технике.
Регулярные выражения часто имеют один существенный недостаток. Они, что называется, write-only. Их не очень сложно написать, но сложно читать. Есть несколько подходов к упрощению разбора регулярных выражений. Данная библиотека (и мультиязычный проект verbal expressions) представляет один из них.
ВербальноеВыражение = Новый ВербальноеВыражение()
.НачалоСтроки()
.Затем("http")
.МожетБыть("s")
.Затем("://")
.ЧтоНибудьНоНе(" ")
.КонецСтроки();
ТекстРегулярногоВыражения = ВербальноеВыражение.ВСтроку();
Сообщить(ТекстРегулярногоВыражения); // ^(http)(s)?(://)([^ ]+)$
ЭкранироватьПереданноеЗначение = Ложь;
ВербальноеВыражение = Новый ВербальноеВыражение()
.НачалоСтроки()
.Затем(
Новый ВербальноеВыражение()
.Найти("http")
.МожетБыть("s")
.Либо("ftp")
.ВСтроку(),
ЭкранироватьПереданноеЗначение
)
.Затем("://")
.ЧтоНибудьНоНе(" ")
.КонецСтроки();
ТекстРегулярногоВыражения = ВербальноеВыражение.ВСтроку();
Сообщить(ТекстРегулярногоВыражения); // ^(((http)(s)?)|(ftp))(://)([^ ]+)$
xml-parser - https://github.com/khorevaa/xml-parser
Библиотека для (де)cериализации данных в xml.
Данная библиотека пригодится для работы с XML как объектом (структурой или соответствием). Конечно, это не полноценная замена технологии DOM, но тем не менее есть поддержка вложенных тегов, атрибутов, комментариев, массивов и блоков CDATA.
//<ФайлПФР>
// <ИмяФайла>
// <НазваниеФормата>fb2</НазваниеФормата>
// <НазваниеПрограммы />
// </ИмяФайла>
//</ФайлПФР>
ПутьКФайлу = "ТутНуженПутьКФайлу";
ПроцессорXML = Новый СериализацияДанныхXML();
РезультатЧтения = ПроцессорXML.ПрочитатьИзФайла(ПутьКФайлу);
Сообщить(РезультатЧтения["ФайлПФР"]["ИмяФайла"]["НазваниеФормата"]);
//////////////////////////////
ДанныеЗаписиXML = Новый Структура("name", "Наименование");
ПроцессорXML.ЗаписатьВФайл(ПутьКФайлу);
// Содержимое файла
//<name>Наименование</name>
yadisk - https://github.com/kuntashov/oscript-yadisk
Работа с Яндекс.Диск через RestAPI.
C помощью этого пакета можно автоматизировать загрузку/выгрузку файлов с помощью Яндекс.Диск, получать свойства диска (размер, свободное и занятое пространство), работать с корзиной и прочее. Вот здесь есть пример использования библиотеки от самого автора - отдельное приложение для загрузки файлов.
OAuth_Токен = "..."; // Используйте полученный токен для вашего приложения.
ЯндексДиск = Новый ЯндексДиск;
ЯндексДиск.УстановитьТокенАвторизации(OAuth_Токен);
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
ПутьНаДиске = "/test-folder/" + ИмяФайла;
ЯндексДиск.ЗагрузитьНаДиск("c:/data/file-to-upload.txt"), ПутьНаДиске);
yaml - https://github.com/khorevaa/yaml
Библиотека для чтения и записи файлов в формате YAML.
Аналогично библиотекам json и xml-parser, yaml осуществляет сериализацию yaml-строки в объект (и обратно).
Процессор = Новый ПарсерYAML;
// Нижеследующий текст будет преобразован в массив строк
СтрокаYaml =
"
|--- # Favorite movies
| - Casablanca
| - North by Northwest
| - The Man Who Wasn't There";
ОбъектыМассив = Процессор.ПрочитатьYaml(СтрокаYaml);
// Нижеследующий текст будет преобразован в соответствие. Значения элементов соответствия
// будут разобраны согласно стандарту YAML.
СтрокаYaml =
"---
|a: 123 # an integer
|b: ""123"" # a string, disambiguated by quotes
|c: 123.0 # a float
|d: !!float 123 # also a float via explicit data type prefixed by (!!)
|e: !!str 123 # a string, disambiguated by explicit type
|f: !!str Yes # a string via explicit type
|g: True # a boolean True (yaml1.1), string ""Yes"" (yaml1.2)
|h: Yes we have No bananas # a string, ""Yes"" and ""No"" disambiguated by context.
|...";
ОбъектыСоответствие = Процессор.ПрочитатьYaml(СтрокаYaml);
Приложения
Как я писал выше, приложения - это те же самые скрипты для интерпретатора 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
Прочие приложения
autodocgen - https://github.com/bia-tech/autodocgen
Инструмент генерации документации на основании файлов исходных кодов конфигурации 1С:Предприятие.
Позволяет автоматически генерировать документацию в формате HTML и/или экспортировать в пространства Confluence. Поддерживается разбор описаний методов, работа с Областями.
autodocgen generate . -git -format html
changelog-generate - https://github.com/KrapivinAndrey/ChangeLogGenerator
Генератор changelog.md на OneScript.
Обновляет лог изменений, разбивая описания коммитов по группам. Ориентируется на первое слово. По умолчанию следует правилам разбиения keepachangelog, однако позволяет переопределить настройки через специальный yaml-файл.
Обновление файла CHANGELOG.md разницей между коммитом с хэшем xxx и HEAD:
changelog-generate xxx
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
gitrules - https://github.com/otymko/gitrules
Версионирование правил обмена 1С с помощью git.
Приложение регистрирует специальный хук в репозитории (по аналогии с precommit1c), который выполняет распаковку правил обмена и регистрации на отдельные каталоги и файлы.
Имеется возможность запуска распаковки/запаковки из консоли.
Установка инструмента в репозиторий осуществляется в одну простую команду:
gitrules install
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
precommit4onec - https://github.com/bia-tech/precommit4onec
Утилита для автоматической обработки исходных файлов конфигурации, внешних отчетов и обработок для платформы 1С:Предприятие при помещении в репозиторий git.
В отличие от старого и зарекомендовавшего себя precommit1c, данное приложение распаковывает отчеты и обработки платформенной выгрузкой в исходные файлы, а так же содержит возможности расширения функциональности через плагины.
Помимо собственно разбора файлов (обычные тоже поддерживаются через v8unpack), precommit4onec содержит несколько встроенных обработчиков, "вычищяющих" код. Это, например, такие плагины как:
КорректировкаXMLФорм
- при выполнении данного сценария, файлы описаний форм (Form.xml
) проверяются на наличие задублировавшихся индексов элементов, которые образуются при объединениях. Если дубли есть, то они исправляютсяДобавлениеПробеловПередКлючевымиСловами
- при выполнении данного сценария, в файлах модулей перед ключевыми словами добавляются отсутсвующие пробелы. На данный момент обрабатывается только ключевое словоЭкспорт
.УдалениеЛишнихКонцевыхПробелов
- при выполнении данного сценария, в файлах модулей удаляются лишние пробелы и табы в конце не пустой строки.СортировкаДереваМетаданных
- при выполнении данного сценария, выполняется упорядочивание объектов метаданных в дереве за исключением подсистем, они остаются в том порядке, который задал разработчик.
Установка в конкретный репозиторий проста:
precommit4onec install repo_name
Рекомендую подробно ознакомиться с README данного проекта.
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-runner - https://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С
vanessa-tfs - https://github.com/oscript-library/vanessa-tfs
Приложение для скачивания артефактов сборки из VSTS и TFS (2015/2017).
vanessa-tfs --user username --password password --collectionURI http://localhost:8080/tfs/Collection --project Project1 --buildId 1 --out ./artifacts.zip
Заключение
Данным обзором я постарался разом ответить на большинство вопросов вида "А есть ли библиотека/приложение для вот этого". Если вдруг готовой библиотеки не оказалось, не бойтесь писать свои и выкладывайте их на GitHub. Сообщество будет вам крайне благодарно :) Обсуждение имеющихся библиотек сосредоточено в Gitter-канале EvilBeaver/oscript-library и в Issues каждой конкретной библиотеки.
В следующей статье вы узнаете как создавать собственные библиотеки и приложения, готовые для публикации в хабе пакетов OneScript.
Спасибо за внимание!
P.S. В последних релизах расширения поддержки языка 1С в VSCode появился полноценный Синтакс-Помощник по OneScript.Web и всем классам и модулям всех установленных библиотек. При наличии README в пакете выводится и он. Обновляйтесь, нажимайте ctrl-f1 и выбирайте в выпадающем меню новые разделы OneScript.Web и oscript-library. Так же не забывайте ставить пакет oscript-config для получения частичной поддержки автодополнения по модулям и классам библиотек прямо при наборе кода.