name: onescript description: Пишет и структурирует код на OneScript (BSL без 1С). Использовать при работе с файлами .os, проектами OneScript, packagedef, opm, директивой #Использовать, классами и модулями.
OneScript
Навык для написания и структурирования кода на OneScript — кроссплатформенном интерпретаторе языка 1С:Предприятие 8 без платформы 1С. Код выполняется из текстовых файлов .os, аналогично Python или Node.js.
Структура модуля
Модуль — текстовый файл с расширением .os. Три секции (сверху вниз):
- Секция переменных —
Перем ИмяПеременной; - Секция методов — процедуры и функции
- Секция тела модуля — код, выполняемый при запуске (обязательно внизу файла)
Минимальный скрипт:
Сообщить("Привет, Мир!");
Процедуры и функции:
Процедура МояПроцедура(Параметр1, Параметр2)
// операторы
КонецПроцедуры
Функция МояФункция(Параметр1, Параметр2)
Возврат Параметр1 + Параметр2;
КонецФункции
Типы и литералы
Типизация динамическая. Примитивы: Строка, Число, Булево, Дата; специальные: Неопределено, Null.
- Число:
12345.899 - Строка:
"Текст", кавычка внутри —"". Многострочная: новая строка начинается с|, пробелы до|отбрасываются. - Дата:
'20250212235959'или'2025-02-12 23:59:59'
Блоки кода
Условие:
Если Условие Тогда
// ...
ИначеЕсли ДругоеУсловие Тогда
// ...
Иначе
// ...
КонецЕсли;
Циклы:
Для Счетчик = 0 По 10 Цикл
Сообщить(Счетчик);
КонецЦикла;
Для Каждого Элемент Из Массив Цикл
Сообщить(Элемент);
КонецЦикла;
Пока Условие Цикл
// ...
КонецЦикла;
Исключения:
Попытка
// код
Исключение
Сообщить(ОписаниеОшибки());
ВызватьИсключение; // rethrow
КонецПопытки;
ВызватьИсключение "Текст ошибки";
Структура проекта
Рекомендуемая структура каталогов:
src/— исходный код (в дистрибутив)src/Классы/— файлы.os, подключаемые как классы (создание черезНовый)src/Модули/— файлы.os, подключаемые как общие модулиtests/— тестыtasks/— служебные скрипты (сборка, тесты)- Корень:
packagedef(манифест), README, LICENSE
Точка входа (например src/main.os) должна импортировать свой каталог:
#Использовать "."
// далее использование классов и модулей
Сообщить(МойМодуль.Метод());
Манифест packagedef
В корне проекта — файл без расширения packagedef. Минимум: имя, версия, состав.
Описание.Имя("my-package")
.Версия("1.0.0")
.ВерсияСреды("2.0.0")
.ЗависитОт("fs", "1.0.0")
.ЗависитОт("asserts", "1.3.0")
.ВключитьФайл("packagedef")
.ВключитьФайл("src")
.ВключитьФайл("oscript_modules")
.ИсполняемыйФайл("src/my-script.os");
Основные свойства: Имя, Версия, ВерсияСреды, ЗависитОт, ВключитьФайл, ИсполняемыйФайл.
Библиотеки и #Использовать
Подключение в начале модуля (до переменных):
- По имени (поиск в каталогах библиотек):
#Использовать json,#Использовать fs - По пути (относительно файла):
#Использовать ".",#Использовать "lib/mylib"
Класс из библиотеки — новый тип, создаётся через Новый ИмяКласса(). Модуль — глобальный объект с методами: ИмяМодуля.Метод().
Стандартный загрузчик: файлы из подкаталога Классы регистрируются как классы, из Модули — как модули. Имя файла (без .os) = идентификатор класса/модуля.
OPM
- Сборка пакета из каталога с манифестом:
opm build . - Публикация в хаб:
opm push my-file.ospx --token ТОКЕН - Установка пакета: через opm или клонирование в каталог библиотек
Дополнительно
Подробности синтаксиса, отличия от 1С (Формат/ДФ, вызов конструктора в выражении, параметризованные исключения, rethrow с ИнформацияОбОшибке) — в reference.md.
Документация: oscript.io/learn.