Skip to content
This repository has been archived by the owner on Mar 12, 2021. It is now read-only.

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

Closed
ArsenShnurkov opened this issue Jan 4, 2018 · 21 comments

Comments

@ArsenShnurkov
Copy link

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

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

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

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

@nixel2007
Copy link
Contributor

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

@nixel2007
Copy link
Contributor

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

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

@bambr1975
Copy link

https://infostart.ru/public/548028/ раздел "Схема загрузки библиотек", плюс уже упомянутый http://oscript.io/docs/page/libraries плюс https://github.com/oscript-library/oscript-lib-template и https://github.com/oscript-library/oscript-app-template

@ArsenShnurkov
Copy link
Author

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

@bambr1975
Copy link

bambr1975 commented Jan 4, 2018

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

@ArsenShnurkov
Copy link
Author

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

@nixel2007
Copy link
Contributor

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

@nixel2007
Copy link
Contributor

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

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

@ArsenShnurkov
Copy link
Author

ArsenShnurkov commented Jan 4, 2018

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

@nixel2007
Copy link
Contributor

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

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

@nixel2007
Copy link
Contributor

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

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

@EvilBeaver
Copy link
Owner

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

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

@EvilBeaver
Copy link
Owner

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

@EvilBeaver
Copy link
Owner

Ничо не понял

@ArsenShnurkov
Copy link
Author

ArsenShnurkov commented May 7, 2018

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

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

Результат:

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

@ArsenShnurkov
Copy link
Author

ArsenShnurkov commented May 7, 2018

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

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

Пишет

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

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

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

@arkuznetsov
Copy link

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

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

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

//main.os

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

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

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

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

@ArsenShnurkov
Copy link
Author

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

@EvilBeaver
Copy link
Owner

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

@EinstokFair
Copy link

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

@nixel2007
Copy link
Contributor

http://oscript.io/docs

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants