Closed steelvan closed 3 years ago
А зачем? Я не очень понял выходную пользу этого. Чтобы что? Сейчас собственные типы можно объявлять через механизм библиотек и загрузки классов.
Ну хорошо. Если считаете лишним, то закрывайте.
Польза в том, чтобы можно было работать с объектами метаданных. Например как в оскрипте сделать вот такое ?
Сообщить(ТипЗнч(Перечисления.ТипыКонтрагентов.Покупатель)); // ПеречислениеСсылка.ТипыКонтрагентов Сообщить(ТипЗнч(Перечисления.ТипыКонтрагентов.Поставщик)); // ПеречислениеСсылка.ТипыКонтрагентов Сообщить(ТипЗнч(Перечисления.ТипыКонтрагентов.Посредник)); // ПеречислениеСсылка.ТипыКонтрагентов
Я смотрю немного наперед и продумываю более-менее полноценную работу с перечислениями, справочниками, документами и прочими объектами. Хочу на основе оскрипта попробовать сделать систему быстрой разработки веб-приложений по 1Сным принципам.
Это видел https://infostart.ru/1c/articles/840993/ не, спасибо :)
для работы с объектами и в целом с ORM уже есть entity. перечисления уже реализуются как обычные модули с экспортными переменными, что туда положить зависит только от вас. ТипЗнч на такой модуль будет таким, как модуль зарегистрирован в системе типов, в т.ч. можно сделать и ТипыКонтрагентов. Пример реализации можно посмотреть в той же entity.
в частности entity работает в OneScript.Web. в каталоге примеров есть пример использования, да и в целом на гитхабе можно найти использование этой библиотеки
Посмотри на https://github.com/EvilBeaver/OneScript.Web Он, конечно, очень далек от совершенства, и вообще первый блин, но надо же от чего-то отталкиваться.
Начинаю изучать ваш движок с точки применения для написания приложений вместо 1С платформы. Сразу вопрос по поводу ТипЗнч() в общем и для перечислений в частности.
Как в 1С
Создается объект метаданных "Перечисление" со значениями. Например, Перечисление.ВидКонтрагента.Поставщик или Перечисление.ВидКонтрагента.Покупатель. Данное равенство будет истинным: ТипЗнч(Перечисления.ВидКонтрагента.Покупатель) = Тип("ПеречислениеСсылка.ВидКонтрагента")
Предложение сделать в Оскрипте
В модуль добавить предопределенную функцию ПриПолученииТипаЗначения(Объект). Данная функция должна неявно вызываться из метода ТипЗнч(Объект). Данная функция должна возвращать строку, которая должна быть в описании типа.
Пример применения Создается модуль "Перечисления". В нем создаются экспортные переменные для каждого перечисления в виде структуры. Ключами структуры должны являться значения перечисления, значения могут быть простого типа. При получении типа значения через ТипЗнч(Объект) должна неявно вызываться функция ПриПолученииТипаЗначения(Объект), внутри которой должен быть пользовательский код, который должен проанализировать объект и вернуть строку, которая и должна быть описанием типа.
// Файл "Перечисления.os"
// Файл script.os
Понятно, что при таком подходе надо проверку писать более тщательную и стараться исключать пересечения по значениям перечислений. Но хоть что-то для работы с расширениями типов. На этом уже можно пробовать строить работу со справочниками, документами и прочими наборами.