Coder Social home page Coder Social logo

evilbeaver / onescript Goto Github PK

View Code? Open in Web Editor NEW
459.0 53.0 107.0 26.86 MB

Исполняющая среда скриптов на языке 1С

Home Page: http://oscript.io

License: Mozilla Public License 2.0

Batchfile 0.07% Inno Setup 0.16% C# 64.70% C++ 2.00% C 0.43% Shell 0.12% PowerShell 0.18% 1C Enterprise 28.64% Makefile 0.02% CSS 1.59% Dockerfile 0.04% Rich Text Format 1.06% HTML 0.87% XSLT 0.09% CMake 0.04%

onescript's Introduction

OneScript

Join telegram chat DEV Build Status STABLE Build Status

Проект является независимой кросс-платформенной реализацией виртуальной машины, исполняющей скрипты на языке 1С:Предприятие

Logo

При этом библиотеки системы 1С:Предприятие не используются и не требуется установка системы 1С:Предприятие на целевой машине.

Иными словами, это инструмент для написания и выполнения программ на языке 1С без использования платформы 1С:Предприятие.

Название и произношение

Проект носит название OneScript, может быть сокращен при написании до названия 1Script. Произносится как [уанскрипт].

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

Сайт проекта

Основная информация о проекте, релизы и техдокументация расположены на официальном сайте

https://oscript.io

Библиотека полезных скриптов

В поставку OneScript уже входит набор наиболее часто используемых пакетов. Эти, а также другие пакеты находятся в репозитории oscript-library и доступны всем желающим. Имеется пакетный менеджер opm.

Установка

Windows

Linux

MacOS

Интерактивного установщика нет, но движок можно установить из командной строки:

  • установить homebrew
  • установить mono командой brew install mono
  • скачать ovm
  • выполнить команду mono ovm.exe install stable
  • выполнить команду mono ovm.exe use stable
  • перезапустить терминал

Донастройка Self-Contained варианта поставки (не требующего инсталляции dotnet)

chmod +x ./oscript
xattr -d com.apple.quarantine *.dylib oscript
codesign -s - ./oscript

Ручная локальная сборка

Подготовка

Ниже приведены ссылки на дистрибутивы, однако, учтите, что ссылки могут меняться со временем и их актуальность не гарантируется. Нужен dotnet SDK и компилятор C++, скачать можно из любого места, которое нагуглится.

  • Установить MS BuildTools, при установке включить таргетинг на .net6, .net4.8, установить компилятор C++.

Сборка

Запустить Developer Command Prompt (появится в меню Пуск после установки MSBuildTools или Visual Studio). Перейти в каталог репозитория OneScript. Далее приведены команды в консоли Developer Command Prompt Сборка выполняется с помощью msbuild. Таргеты:

  • CleanAll - очистка результатов предыдущих сборок
  • BuildAll - подготовить файлы для поставки
  • MakeCPP;MakeFDD;MakeSCD;BuildDebugger - отдельные таргеты сборки для подготовки разных типов поставки
  • PrepareDistributionFiles - сборка полных пакетов поставки (включая библиотеки)
  • PackDistributions - подготовка ZIP архивов поставки
  • CreateNuget - создать пакеты для публикации в NuGet

Параметры сборки

  • VersionPrefix - префикс номера релиза, его основная часть, например, 2.0.0
  • VersionSuffix - суффикс номера, который обычно выступает в качестве произвольного суффикса версионирования по semver, например, beta-786 (необязателен)
  • NoCppCompiler - если True - не установлен компилятор C++, в сборку не будут добавлены компоненты C++ (поддержка NativeApi)

Все поставляемые файлы будут размещены в каталоге built в корне репозитория 1Script

Сборка содержимого дистрибутивов в отдельном каталоге

msbuild Build.csproj /t:CleanAll;PrepareDistributionFiles

Сборка с ручным указанием версии

msbuild Build.csproj /t:CleanAll;PrepareDistributionFiles /p:VersionPrefix=2.0.0

Сборка ZIP-дистрибутивов

msbuild Build.csproj /t:CleanAll;PrepareDistributionFiles;PackDistributions /p:VersionPrefix=2.0.0 /p:VersionSuffix=preview223

onescript's People

Contributors

240596448 avatar absolemus avatar akpaevj avatar alexkmbk avatar aliczin avatar andreyshv avatar arkuznetsov avatar artbear avatar bambr1975 avatar bapho-bush avatar chipazawra avatar dependabot[bot] avatar dmpas avatar dvakor avatar evilbeaver avatar faithfinder avatar jdeshin avatar kuntashov avatar lintest avatar mr-rm avatar n-dimens avatar nivanchenko avatar nixel2007 avatar otymko avatar pumbaeo avatar redmammoth avatar ret-phoenix avatar sfaqer avatar vbondarevsky avatar yukon39 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

onescript's Issues

Функции ввода значений и запуск с аргументами

Originally reported by: Alexey Lustin (Bitbucket: allustin, GitHub: allustin)


Иногда необходимо ввести значения от пользователя, добавив скрипту интерактивности и универсальности

текущее поведение остальных языков

read-from-stdin
или
myscript.os --key=value


Не выполняется EndTry при преждевременном возврате

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


Попытка
    СделатьЧтоТо();
    Возврат Истина;
Исключение
    Возврат Ложь;
КонецПопытки;

При выполнении возврата из блока Попытка-Исключение не выполняется опкод EndTry, т.к. "Возврат" выполняет Jump на точку возврата и у EndTry не остается шансов на выполнение.


Семантика подсчета ссылок и RAII

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


OneScript не применяет семантику RAII и не ведет подсчет ссылок на объекты. Это непривычно для разработки под 1С и требует дополнительных усложнений в виде глобальной функции ОсвободитьОбъект.

Нужно ввести RAII на основе счетчика ссылок для объектов, владеющих ресурсами (файлов и COM)


Именные параметры командной строки

Originally reported by: Евгений Мартыненков (Bitbucket: EvgenyMartynenkov, GitHub: Unknown)


Сделать именные параметры командной строки для того, чтобы вызывать скрипты примерно так:

#!1script

oscript.exe copyfile.os -Откуда "c:\1.txt" -Куда "d:\temp\1.txt"

(имена параметров можно ограничить и английским)
Внутри скрипта они виделись бы как фиксированная структура.


Развитие доступа к API Снегопата

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


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

Проброс исключения вверх по стеку вызовов

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


Некорректно проталкивается исключение вверх по стеку.

При пробрасывании исключения наверх (ВызватьИсключение; - без параметра) оно может потеряться и долететь до обработчика не в первоначальном виде.

Если в блоке Исключение вызывались методы скрипта, то они затирают существующее исключение и далее пробрасывается уже пустое (без правильного текста сообщения)


Приоритет логических операций

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


Если Не НовыйБлок = Неопределено Тогда

1С выполняет сначала сравнение, затем отрицание

OneScript сначала выполняет отрицание, что может приводить к ошибке приведения к типу Булево, если НовыйБлок имеет не булевский тип.


Поддержка COM объектов, не предоставляющих ITypeInfo для master-ветки

Originally reported by: Nikolay Dyatchenko (Bitbucket: cybernik, GitHub: cybernik)


Патч из ветки snegopat для таких COM объектов позволяет решить данную проблему. Просьба включить его в основную ветку.

Применял патч руками - работает, но выкидывает эксепшен в методе ResolveMethodFunc класса MachineInstance. Убрал условие внутри метода и заработало, но предполагаю, что это не вариант для решения.


Нельзя запустить скрипт при помощи wscript/cscript

Originally reported by: Alexander Kuntashov (Bitbucket: kuntashov, GitHub: kuntashov)


Нельзя запустить скрипт при помощи wscript/cscript

Порядок воспроизведения:

  1. Создаю скрипт со следующим кодом в кодировке cp1251
Сообщить("Привет, Мир!");
  1. Сохраняю файл с именем hello.1s
  2. Пытаюсь запустить файл командой

cscript test.1c

Выдается сообщение:

Ошибка ввода: Отсутствует исполняющее ядро  для расширения имени файла ".1s"

Если пытаюсь указать явно имя ядра как oscript в ком. строке:

script /E:oscript test.1c

То выдается сообщение:

Ошибка CScript: Не удается найти исполняющего ядра "oscript" для сценария D:
\Temp\test.1s

Правильно я понимаю, Windows Scripting Host пока полноценно не поддерживается?

Или я указываю не правильное название исполняющего ядра?

Поддержка WSC нужна для работы скриптов в среде Снегопата.


Поддержка строк, разделенных пробельными символами

Originally reported by: Валерий Агеев (Bitbucket: awa15, GitHub: awa15)


Вот такой код

Сообщить("упадёт?" "или нет?");

не компилируется. А должен.
1С поддерживает создание многострочных строк путем написания нескольких строк друг за другом, разделённых только пробельными символами.


При сохранении состояния машины не очищается стек вызовов

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


При сохранении состояния машины стек вызовов не очищается. В результате, код нового состояния выполняя "Возврат" уходит по стеку из предыдущего состояния, чем вызывает непредсказуемое выполнение кода.


Функция возвращает ссылку вместо значения

Originally reported by: Sergey Batanov (Bitbucket: dmpas, GitHub: dmpas)


#!vb

Перем Ч;

Функция Ф()
    Ч = Ч + 1;
    Сообщить("Возврат = " + Ч);
    Возврат Ч;
КонецФункции

Функция Х()
    Ч = Ч + 1;
    Сообщить("Возврат = " + Ч);
    Возврат Ч;
КонецФункции


Ч = 1;

Сообщить(Ф()*Х());

даёт вывод

#!

Возврат = 2
Возврат = 3
9

когда 1С вполне ожидаемо выдаёт

#!

Возврат = 2
Возврат = 3
6

Если вместо Возврат Ч; написать Возврат Ч*1; тогда код отрабатывает правильно.


Временно отключен функционал подключаемых скриптов

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


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


Экранирование двойных кавычек в строках

Originally reported by: Nikolay Dyatchenko (Bitbucket: cybernik, GitHub: cybernik)


Не работает экранирование двойных кавычек.
Пример:

#!1С
 Перем текст;
 текст = "вот";
 Сообщить("Текст """+текст+"""");

Выводит:

#!1С
Текст ""вот""

Должно быть:

#!1С
Текст "вот"

Добавить в инсталятор функционал записи в PATH

Originally reported by: Alexey Lustin (Bitbucket: allustin, GitHub: allustin)


Необходимо, чтобы инсталятор скриптового движка предлагал добавлять себя в переменную окружения PATH

Судя по тому, что используется InnoSetup то примерной ссылкой видится http://stackoverflow.com/questions/3304463/how-do-i-modify-the-path-environment-variable-when-running-an-inno-setup-install

Необходимо для простоты внедрения:

  1. пользователь установил инсталятор
  2. переходит в командную строку
  3. bin файл oscript.exe уже доступен к запуску без прямого указания пути к "движку"

Некорректно отрабатывает стек вызовов процедур

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


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


Ключевые слова в качестве полей структуры выдают ошибку компиляции

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


Если у объекта (например, у Структуры) есть поле с ключевым словом, то возникает ошибка компиляции.

Стр = Новый Структура("Знач");

Стр.Знач = 1; // ошибка, считает "Знач" ключевым словом, которое не на своем месте.


Некорректная отработка логических выражений

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


http://infostart.ru/public/287643/#message1167816

При выполнении сокращенных логических вычислений вторая часть выражения не приводится принудительно к "Булево", что является ошибкой.


Падает снегопат при открытии прилагаемой формы

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


Во вложении скрипт (аддин снегопата) и форма к нему. При попытке открыть эту форму из Снегопата система падает. Другие формы отрабатывают без замечаний.

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


Отличается поведение цикла "Для.. По" по сравнению с 1С

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


http://infostart.ru/public/287643/#message1167833

A=5;
For i=1 To A Loop
 Message(i);
 A=4;
EndLoop;

В 1С верхняя граница цикла вычисляется один раз и не может изменяться из кода.

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


Значения по-умолчанию в заголовках функций/процедур

Originally reported by: Nikolay Dyatchenko (Bitbucket: cybernik, GitHub: cybernik)


Не работают значения по-умолчанию в заголовках функций/процедур:

#!1С
Процедура Пример(Знач Парам1="тест") 
 Сообщить(Парам1);
КонецПроцедуры

Пример("первый");
Пример();

Вывод:

#!1С
первый
Неопределено

Не поддерживается сокращенное вычисление логических выражений

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


Если А <> Неопределено и А.КакоеТоСвойство = 5 Тогда

Сокращенное вычисление обеспечивает типобезопасность. Вторая часть условия будет исполнена только если первая часть равна Истина.


Поддержка оператора Прервать.

Originally reported by: Валерий Агеев (Bitbucket: awa15, GitHub: awa15)


При использовании Прервать в цикле при компиляции ошибок не происходит, однако при выполнении происходит ошибка. Также "Прервать" не выделяется в коде как ключевое слово.


Неверный порядок вычисления операндов

Originally reported by: EvilBeaver (Bitbucket: EvilBeaver, GitHub: EvilBeaver)


А = 100 + 100 + 20 * 100 / 2 - 18 + 45698 * 45789 / 16 - 500 - 800 * 19;

Сообщить(А);

Должно вывести 130764589.625.

Выводит другое значение, т.к. неправильно обрабатывается преобразование в польскую нотацию.


Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.