Сообщение от автора от 06.07.15
Данная статья написана тогда, когда проект только-только вышел в свет и умел очень мало. На данный момент информация в данной статье заметно устарела. Для более прикладного знакомства с 1Script рекомендую прочитать вот эту статью, а также посетить wiki проекта.
Все что написано ниже не удалено с инфостарта, поскольку является, как-никак, частью истории проекта.
Введение
Не так давно я опубликовал проект 1Script (OneScript), представляющий собой компилятор языка 1С и виртуальную машину, исполняющую программы на этом языке. В этой статье хотелось бы рассказать о том, что полезного можно сделать с помощью 1Script.
Программа представляет собой самостоятельную виртуальную машину, исполняющую код на языке 1С. При этом наличие самой платформы 1С не требуется. Технические подробности о внутреннем устройстве есть на хабре, а в этой статье мне хотелось бы сделать акцент на практических способах применения 1Script в народном хозяйстве.
Назначение и состав
Основным назначением 1Script является использование его, как самостоятельного программного продукта, предназначенного для выполнения скриптов на языке 1С в целях автоматизации администрирования. Ближайшим аналогом является инфраструктура WSH.
1Script может использовать COM-объекты WSH для взаимодействия с операционной системой, тем самым получая весьма широкие возможности.
Разумеется, область применения этим не ограничивается и именно об областях применения пойдет речь ниже.
В состав программы входят 2 основных компонента:
- GUI-приложение TestApp, которое позволяет экспериментировать с движком, запускать скрипты и смотреть на результат.
- Консольное приложение oscript, которое является «боевым» модулем, выполняющим основное назначение программы – исполнение скриптов в консоли
После установки оба этих компонента можно запускать независимо друг от друга.
Краткое описание возможностей
Основное назначение программы – возможность исполнения кода на языке 1С, но без самой 1С. Наиболее вероятное применение, как уже упоминалось – это скрипты автоматизации, аналогичные тем, что пишутся на JScript и VBScript с применением инфраструктуры WSH.
1Script позволяет использовать родные для windows COM-объекты, которые применяются в WSH. Например, если нам нужно архивировать все базы из списка баз 1С, то мы можем написать следующий скрипт:
Shell = Новый COMОбъект("WScript.Shell");
ПапкаПараметров = Shell.ExpandEnvironmentStrings( "%APPDATA%" );
ФайлСпискаБаз = ПапкаПараметров + "\1C\1CEStart\ibases.v8i";
МассивСтрокСоединения = Новый Массив;
ЧтениеФайла = Новый ЧтениеТекста(ФайлСпискаБаз);
СтрокаФайла = ЧтениеФайла.ПрочитатьСтроку();
Пока СтрокаФайла <> Неопределено Цикл
Если Лев(СтрокаФайла, 8) = "Connect=" Тогда
МассивСтрокСоединения.Добавить(Сред(СтрокаФайла,9));
КонецЕсли;
СтрокаФайла = ЧтениеФайла.ПрочитатьСтроку();
КонецЦикла;
ЧтениеФайла.Закрыть();
КоманднаяСтрокаАрхивации = "1Cv8.exe DESIGNER %1 /DumpIB";
Для Каждого СтрокаСоединения Из МассивСтрокСоединения Цикл
РабочаяСтрокаЗапуска = СтрЗаменить(КоманднаяСтрокаАрхивации, "%1", СтрокаСоединения);
Shell.Run(РабочаяСтрокаЗапуска);
КонецЦикла;
В приведенном примере проверка ошибок и выбор места, в которое надо поместить архив, опущены для краткости.
Сохраняем данный скрипт в файл и в командной строке запускаем:
oscript.exe [файл скрипта]
Будет прочитан список баз, из него получены строки соединения с базами и для каждой из баз выполнена процедура архивации. Обратите внимание, код на языке 1С исполняется 1Script без участия самой платформы 1С.
Возможности языка
Доступны все возможности встроенного языка, перечисленные в ветке "Описание встроенного языка" стандартного синтакс-помощника.
Исключения из этого правила перечислены в разделе "Отличия от стандартной библиотеки".
Возможно создание и использование следующих универсальных коллекций:
- Массив
- Структура
- Соответствие
Доступны вспомогательные классы:
- Консоль
- ЧтениеТекста
Доступны глобальные методы и свойства:
- метод Сообщить(сообщение)
- метод ВвестиСтроку(результат, макс_длина = 0)
- метод ЗавершитьРаботу(код_возврата)
- метод Приостановить(миллисекунды)
- метод ОсвободитьОбъект(COM-объект)
- свойство АргументыКоманднойСтроки
- метод ТекущийСценарий()
- метод ПодключитьСценарий()
Подробнее о назначении этих методов и свойств можно прочитать в wiki проекта. Состав классов будет пополняться.
Отличия от стандартной библиотеки 1С
- Из математических функций реализованы только Цел, Окр, Pow и Sqrt
- Не реализованы строковые функции СтрЧислоСтрок, СтрПолучитьСтроку, СтрЧислоВхождений, ТРег
- Не реализована функция форматирования строк Формат
- Не реализована работа с типами (функции Тип и ТипЗнч)
- Не реализовано динамическое выполнение кода функциями Вычислить и Выполнить
- Не реализованы функции ДобавитьОбработчик, УдалитьОбработчик для обработки событий COM-объектов.
- Не реализованы системные перечисления
- Не поддерживается оператор Перейти и метки
Некоторые отличия планируется реализовать позже.
Построение самостоятельного exe-модуля
1Script позволяет упаковать ваш скрипт в отдельный exe-модуль, который можно удобно распространять, не требуя установки самого 1Script на машину пользователя.
Для создания exe нужно запустить oscript.exe с ключом –make и указать имя входного скрипта и выходного exe.
Пример:
oscript.exe –make C:\myscript.1scr D:\program.exe
Файл C:\myscript.1scr будет упакован в самостоятельный exe-шник и сохранен, как D:\program.exe.
Небольшая демонстрация
В качестве примера предлагаю вашему вниманию классическую игру «Змейка», написанную полностью на языке 1С. (исходник игры и сам exe можно скачать в прилагаемых файлах)
Системные требования
Весь проект реализован на базе .NET Framework 4.0 и требует его наличия на клиентской машине.
Стабильность текущей версии
На данный момент проект находится в активной разработке, поэтому, весьма вероятны ошибки и неточности в работе. Обо всех обнаруженных недостатках сообщайте любым удобным способом – в комментариях здесь, личным сообщением, в разделе Issues на странице проекта в bitbucket.
Обновление от 22.10.2014:
Дистрибутив обновлен до версии 1.0.7. Дальнейшее развитие проекта.
Обновлена и актуализирована вики проекта по адресу https://bitbucket.org/EvilBeaver/1script/wiki/Home
По традиции, исходники проекта открыты, сотрудничество приветствуется.
Спасибо за внимание.