EvilBeaver/oscript-library

Нужна статья про то, как создать компоненту средствами 1Скрипта, а не C#

Closed this issue · 21 comments

Неясно, как это сделать (и можно ли), http://oscript.io/dev/page/components

Вроде бы компонента/библиотека начинается с файла package-loader.os -
http://oscript.io/docs/page/libraries

кроме того, есть (http://oscript.io/library) заманчивая картинка

Но всё вместе оно как-то не складывается в голове, как надо что писать и куда класть в файловой системе.

В планах на ближайший месяц-два. Либо одна большая - как сделать библиотеку и как сделать приложение, либо две поменьше.

как это сделать (и можно ли)

большинство библиотек написаны на oscript, а не на c# :)

Простой вопрос - чем "классы" отличаются от "модулей"? У них какой-то особый синтаксис? Где этот синтаксис описан?

http://oscript.io/docs/page/package-loader
Под классом понимается новый тип в системе типов приложения. Экземпляры объектов этого типа создаются через оператор Новый.
Модуль это то же самое, что ОбщийМодуль в системе 1С:Предприятие. Модуль - это свойство в глобальном контексте, методы которого мы можем вызывать из языка.

я имею в виду синтаксис в месте определения класса, а не в месте использования через оператор Новый

Классы инстанцируются с помощью оператора Новый. Каждый инстанс имеет свои собственные версии глобальных переменных скрипта.
Модули инстанцируются при начале работы приложения, как общие модули конфигурации. Глобальные переменные таких модулей (если они есть) общие на все время выполнения

у класса еще есть необязательный метод ПриСозданииОбъекта.

различий в синтаксисе описания классов и модулей нет, т.к. этого не позволяет сама грамматика 1С

в языке C# для класса есть ключевое слово "class", есть ли подобное в 1Скрипт? Или класс отличается от модуля только тем, что в классе описаны переменные в глобальном скопе, а в модуле не описаны?

в языке C# для класса есть ключевое словл "class", есть ли подобное в 1Скрипт?

нет, такого нет. все различие - в способе инстанцирования.

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

в модуле тоже могут быть переменные в глобальном скоупе.

@ArsenShnurkov все как на картинке. Будет файл "классом" или "модулем" зависит от того, в какой папке он лежит. Внутри синтаксически они не отличаются никак.

Если копнуть еще глубже, то дело не в папках, а в алгоритме модуля package-loader.os. Именно он решает в какую из групп "класс"/"модуль" отнести тот или иной файл .os

@bahtiy - это к кому просьба? Про написать?

Ничо не понял

Ничего не получается.

// Файл main.os
#Использовать Classes
    
Перем символ;
символ = Новый Символ();
символ.Выступить_С_Речью();
// Файл oscript.cfg
lib.additional = .;
// Файл package-loader.os
ДобавитьКласс("./Classes/symbol.os", "Символ");
// Файл Classes/symbol.os
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура Выступить_С_Речью() Экспорт
	Перем консоль;
	консоль = Новый Консоль();
	консоль.ВывестиСтроку("за роботу товарещи");
КонецПроцедуры

Результат:

{Модуль main.os / Ошибка в строке: 5 / Ожидается идентификатор}

Так тоже не работает

// Файл main.os
Попытка
	ПодключитьСценарий("symbol.os","Символ");
	Высказать();
Исключение
	Сообщить("Пичаль/бида");
КонецПопытки;
// Файл symbol.os
Процедура Высказать() Экспорт
	Сообщение("за роботу товарещи");
КонецПроцедуры

Пишет

{Модуль main.os / Ошибка в строке: 4 / Неизвестный символ: Высказать}

$ oscript -v | head -1
1Script Execution Engine. Version 1.0.19.0

есличё, новее релизов нет в списке тэгов репозитория

@ArsenShnurkov :
// МойКласс.os

Процедура ПриСозданииОбъекта()
	Сообщить("Создан класс!");
КонецПроцедуры

Процедура МойМетод() Экспорт
	Сообщить("Вызван метод");
КонецПроцедуры

//main.os

ПодключитьСценарий("МойКласс.os", "МойКласс");

ЭкземплярКласса = Новый МойКласс();

ЭкземплярКласса.МойМетод();

вот так работает

Ясно, слово "Символ" неудачное было... Надо было использовать "СимволПрорыва"

Вопрос решен вроде бы

Не затруднит ли Вас в таком случае добавить сюда ссылку на эту замечательную обучающую статью с официального сайта 1Скрипт, раз уж вопрос решен. Или таки не решен?

http://oscript.io/docs

Статья под заголовком "Исчерпывающее руководство по созданию библиотеки 1Script" ведет на мою статью на ИС.