Вход | Регистрация
    1  2  3  4  5  6   

Конкретные вопросы по lsFusion. Часть 2.

Конкретные вопросы по lsFusion. Часть 2.
Я
   CrushBy
 
14.10.19 - 21:08
В этой ветке только вопросы по lsFusion, без оценок и срача, что в сторону lsFusion, что в сторону 1С.

Для сравнения и троллинга есть отдельная ветка : OFF: lsFusion vs 1C. Раунд 3
 
 
   Злопчинский
 
1 - 14.10.19 - 21:19
к (848) из предыдущей ветки
(848) "Все же функция воспринимается большинством, как какаято последовательность действий, в результате которых, возвращается какое-то значение."
- ну так свойство (в ваших терминах) в результате это и есть значение какого-то типа? не?
то же свойство quantity - это значени етипа "список" (таблица) - колонка из таблицы БД
не?
   Лефмихалыч
 
2 - 14.10.19 - 21:28
> Ещё1 991 - 14.10.19 - 20:37
> (981) Свойство возвращает объект того типа, который был указан при его описании.

https://www.meme-arsenal.com/memes/56873718e4fecd48f55b86d39d9a1f51.jpg
   CrushBy
 
3 - 14.10.19 - 21:29
(1) Как человеку с достаточно глубоким математическим образованием, мне тяжело отвечать на такие вопросы, так как в математике я привык к точности определений.

Грубо говоря, функция - это отображение одного множества объектов на другое. Свойство, объявленное так : quantity = DATA INTEGER (DocLine)
это формально отображение множества строк документов на множество целых чисел :
quantity {DocLine} -> {INTEGER}
С точки зрения хранения в базе данных, то да : будет таблица DocLine, в которой будет поле quantity типа INTEGER

Например, для свойства myProp = DATA INTEGER(Item, Stock) будет таблица с каким-то названием (например, itemStock), в которой будет два ключевых поля item и stock, и поле типа INTEGER myProp. Если вместо INTEGER будет другой класс, то там будет поле со внутренним ИД объекта этого класса.
   Злопчинский
 
4 - 14.10.19 - 21:32
(3) "Item, Stock" - как определяются, например?
   CrushBy
 
5 - 14.10.19 - 21:32
(3) Фактически, обычная логика обычных реляционных баз данных так и транслируется в функциональную. Любое поле в таблице - это функция от объектов ключевых полей на соответствующее значение поля.
   Злопчинский
 
6 - 14.10.19 - 21:33
предыдущая ветка, (984) "Можно сказать, что в таблице Item точно будет столбец quantity. Какие ещё в ней будут столбцы можно сказать только после компиляции всей программы"
- то есть я, типа новый разраб, пришел на место старого. и чтобы понять структуры базы, прикладных обьектов - должен буду прошерстить вручную своим пока что незапятнанным умишщком - должен буду прошерстить ВЕСЬ код, чтобы понять как "список контрагентов" устроен и как он взаимодействует с другими обьектами базы/прикладного решаения?
   Ещё1
 
7 - 14.10.19 - 21:33
(1) Свойство quantity в примерах с прошлой ветки имеет тип (или класс) NUMERIC[10,3]. Т.е. число с 10 разрядами и 3 цифрами после запятой. Не список чисел или ещё чего-нибудь. Это однозначно следует из определения:
quantity = DATA NUMERIC[10,3] (Organization, Stock, Sku);
   CrushBy
 
8 - 14.10.19 - 21:34
(4) В каком смысле ? Есть отдельный класс - Item (товар), есть отдельный класс - Stock (склад). И есть функция, которая для пары товара и склада возвращает значение. Например, пусть будет поле страховой запас. Оно не имеет смысла ни для товара, ни для склада по отдельности, а только для пары.
   Злопчинский
 
9 - 14.10.19 - 21:34
предыдущая ветка (989) "заметьте, что мы не знаем точно, как будет названа эта таблица в базе, мы оперируем классами."
- ну как бы понятно. типа как в 1С. класс "Документ" - а из скольки таблиц он на урровне БД будет состоять - мне как-то пока неважно.
.
но в 1С я вижу класс "Документ" и из "описания" самого класса в конфигураторе пронимаю из чего он состоит. А здесь, в фузине, как я пойму из чего состоит "документ"? вот я, разработчик новый, вроде разобрался в фузине в прикладном решении с "документ.заявкапокупателя". ага, норм. для реализации поставленной передо мной задачи мне нужен "атрибут" заявки покупателя такой как "номер заявки в терминах КИС покупателя". ага, "доопределяю" класс "документ.заявкапокупателя" таким атрибутом. Только оказываетяс что другой разработчик давным давно в каком-то модуле (я его просто не нашел среди обилия модулей/кода) уже определил точно такой же атрибут с такимже прикладным назначением. может такое быть? имхо может.

Это же трэш страшный будет..?

Где посмотреть !!"суммарное" полное!! описание класса "документ.заявкапокупателя" в прикладном решении..?
   Злопчинский
 
10 - 14.10.19 - 21:35
(8) в простом смысле. в самом тривиальном.
просто напишите как Итем и Сток определяются. вашим кодом.
   CrushBy
 
11 - 14.10.19 - 21:37
(6) Обычно просто кейс не такой. Нет смысла понимать всю логику программы, чтобы просто понять. Как правило, задача стоит по-другому. Либо что-то изменить, либо понять как работает конкретная часть. Обычно, каждая из таких частей лежит в отдельных модулях и разбираться нужно именно в них. А не во всем большом полотне из сотен полей, каждое из которых служит своей цели.
   Мэс33
 
12 - 14.10.19 - 21:37
IDE подскажет)
   Злопчинский
 
13 - 14.10.19 - 21:40
(7) это понятно, если мы говорим о конкретных значениях организации, товара и склада.
как мне имея вот такое определение  свойства

quantity = DATA NUMERIC[10,3] (Organization, Stock, Sku);

получить список из квантити для конкретной организации, склада, и всех товаров?
   CrushBy
 
14 - 14.10.19 - 21:40
(9) Да, может быть такое.
Обычно все-таки задача идет со стороны пользователя (как минимум, там есть описание в какие формы добавить). Вы заходите в эти формы и смотрите - есть там или нет. Дальше, наведя на объект, система показывает в каком модуле  оно объявлено :
https://habr.com/ru/company/lsfusion/blog/465573/
Вот тут раздел Навигация.

Если его на форме нет, то и в системе нет.
   НиколаевГ
 
15 - 14.10.19 - 21:41
(8) Смысла оно может и не имеет, но, если я правильно понял, можно получить это значение для конкретного склада, применив агрегатную функцию для свойства с пустым объектом класса Item?
   CrushBy
 
16 - 14.10.19 - 21:41
(10)
CLASS Item 'Товар';
CLASS Stock 'Склад';

quantity = DATA INTEGER (Item, Stock);
Вот так как-то.
   Лефмихалыч
 
17 - 14.10.19 - 21:42
(13) тебе его надо вызвать с конкретными значениями аргументов
Количество = quantity(ТвояОрганизация, ТвойСклад, ТвойТовар)
ТвояОрганизация, ТвойСклад, ТвойТовар - этов сё переменные, в которых конкретные значения валяются
   Злопчинский
 
18 - 14.10.19 - 21:43
(11) мну не интересно какой "обычно кейс". (соотнеся со срачем: в "1С такой кейс" - вам же это не нравится что в 1С "такой кtйс"? 1С плохая, несмотря на то что у нее "тfкой кейс)/

у менz задача реализовать бизнес-потребность. сделать сущность, отажающую номер заявки покупателя во внутренних терминах-идентифкаторах покупателя.
как мне узнать - имея открытй проект в среде разработки - есть такая сущность или нет?
   Злопчинский
 
19 - 14.10.19 - 21:44
(16) CLASS Item 'Товар';
из чего этот класс состоит?
   CrushBy
 
20 - 14.10.19 - 21:44
(15) Нет. Нельзя. Пустых объектов не существует. Если вы на вход дадите NULL, то всегда получите на выходе NULL. Есть инвариант определенности (так сделано потому, что иначе невозможно будет сделать логику компиляции на SQL). Да и что такое страховой запас просто для склада ?
   Злопчинский
 
21 - 14.10.19 - 21:45
(17) мне не нужен конкретный. мне нужно количество по всем товарам
типа
Количество(Товар) = quantity(ТвояОрганизация, ТвойСклад)
.
?
   Лефмихалыч
 
22 - 14.10.19 - 21:45
(20) дяденька, у тебя талант делать людям непонятно. Тебе бы монетизировать это.
   Лефмихалыч
 
23 - 14.10.19 - 21:46
(21) яхз, наверное квантити_два определять с двумя параметрами
твоего вопроса как будто не видят...
   НиколаевГ
 
24 - 14.10.19 - 21:47
(20) А как тогда? получать свойство для всех объектов класса Item, что-ли?
   CrushBy
 
25 - 14.10.19 - 21:47
(13) Зависит от контекста. Если на форме, то вот так :
FORM test
OBJECTS o = Organization PANEL

OBJECTS st = Stock PANEL

OBJECTS i = Item
PROPERTIES name(i), quantity(o, st, i)
FILTERS quantitity(o, st, i)
;

Если в действии, то так :

runAction(Organization o, Stock st) {
    FOR quantity(o, st, Item i) DO {
        MESSAGE 'Кол-во по организации ' + name(o) + ' и складу ' + name(st) + ' и товару ' + name(i) + ' : ' + quantity(o, st, i);
    }
}
   Лефмихалыч
 
26 - 14.10.19 - 21:49
quantity(o, st, Item i) яшсказал...
   CrushBy
 
27 - 14.10.19 - 21:49
(21) Тогда товар должен быть справа, а не слева.

Вы для начала представьте, как это будете хранить в базе данных. А на самом деле, так и будет : как таблица с тремя ключами, то есть функция от 3х параметров.
   Злопчинский
 
28 - 14.10.19 - 21:50
(14) "Обычно все-таки задача идет со стороны пользователя (как минимум, там есть описание в какие формы добавить)."
- это частный случай когда у пользователя есть условно бизнес-аналитик.
если таковго нет - приходит менеджер/логист, который даже в фузине не работает и говорит
"надо чтобы на всех этикетках которыми мы маркируем поставки, печатался идентификатор заявки, который нам дает покупатель. Все. он в глаза эту фузину не видел. он в ВМС какой-нить интегрируемой с фузиной работает. фузина скидывает в ВМС все данные.
Поэтому исходим из того, что пользовтаель не знает в какое место и в какую фому нужно это поставить. он знает бизнес-потребность. вне привязки к инструменту автоматизации.

"Вы заходите в эти формы и смотрите - есть там или нет. "
- в какие конкретно ЭТИ ФОРМЫ? как получить список "этих форм", которые надо обязательно отсмотреть, стелепатировать поток мыслей того кто раньше писал эти модули (ввиду отсутсивя спецификации разработок и требований к оформлению кода и отсутсвию комментариев)
.
?
   Ещё1
 
29 - 14.10.19 - 21:51
(9) Тут просматривается два подхода к компоновке классов и методов работы с ними в 1С и lsFusion. На примере документа продажи.

В 1С: есть Документ продажи. В нём описаны все известные его атрибуты, формы для работы с ним, логика проведения/отпроведения, проверки атрибутов на точность заполнения, совместимость между собой, проверка прав пользователя на этот объект и проч. Практически всё в 1 месте. За исключением добавок, внесённых через расширения конфигурации (это свежая добавка в последних версиях 1С), внешние отчёты, внешние печатные формы, внешние обработки для этого документа.

В lsFusion: тоже есть Документ продажи, и в нём тоже заданы его базовые атрибуты, базовые формы и отчёты для работы, базовые проверки на заполнение и совместимость значений атрибутов. А дополнительная функциональность подключается к базовой через новые модули. Например, нужно добавить в программу партионный учёт товаров на складах. Создаётся новый модуль, и там для всех документов программы добавляются нужные свойства, прописывается логика партионного учёта, расширяются где надо формы и т.д. (Это не значит, что фузиновцы именно так и поступили в своей ERP, но общая схема доработки программы такая).
   Лефмихалыч
 
30 - 14.10.19 - 21:51
(21) а, я понял. Это тебе не надо просто. Это у тебя адинэсная парадигма в голове, а в фузине так не делают. А вот как делают - яхз. Я сегодня догадывальник намозолил уже на работе и чот не догоняю промежду этих бурятских строк прочесть намёки
 
 Рекламное место пустует
   Злопчинский
 
31 - 14.10.19 - 21:52
(25) "OBJECTS i = Item"
что такое Item? где определяется?
   Лефмихалыч
 
32 - 14.10.19 - 21:52
(28) тебе говорят: "у тебя задача говно, мы такие не решаем". Но может и правда у них это не решается потому, что где-то на старте все совсем по-другому. Только вот они объяснить не могут, к сожалению.
   Злопчинский
 
33 - 14.10.19 - 21:54
(25) " Если на форме, "
- форма может быть без визуализации  - так?
- форма может быть откуда-то вызывана, внутри себя получить список Квантити(товар) и вернет наружу?
   CrushBy
 
34 - 14.10.19 - 21:55
(24) К сожалению, не очень понял вопроса. Для какой конкретно задачи ?

"надо чтобы на всех этикетках которыми мы маркируем поставки, печатался идентификатор заявки, который нам дает покупатель"

Ну, как минимум, если вы вообще ничего не знаете о программе, то спросите у того, кто печатает заявки - какие кнопки он жмет, и начните раскручивать с этой стороны. Еще часто просто делаете CTRL+SHIFT+F и вбиваете там "этикетки" и дальше смотрите где они используются.
   Злопчинский
 
35 - 14.10.19 - 21:56
придумайте какое-нить соглашение о терминахз, плиз
"на форме" - для меня и большинства 1сников, имхо, это визуальная форма, но я хз, может это у вас и без визуализации
"в форме" - для меня это в МОДУЛЕ формы, что в общем случае никак может быть не связано с визуальным отображением на форме и вообще необходимостью визуализации формы.
.
а то догадывайся (из контекста? контесть тоже бывает неясен), а догадки у всех разные могут быть
   НиколаевГ
 
36 - 14.10.19 - 21:56
(25) Вот здесь: FOR quantity(o, st, Item i) - Item i обозначает все объекты класса Item?
   CrushBy
 
37 - 14.10.19 - 21:58
(31) Item - это класс. Таким объявлением вы добавили на форму таблицу с динамическим списком, в которой в качестве записей будут объекты класса Item.
(33) Без визуализации форма может быть только для экспорта/импорта. Так что давайте для простоты всегда считать, что это визуальные форма.
   НиколаевГ
 
38 - 14.10.19 - 21:58
(34) А пользователь может никаких кнопок и не нажимать, этикетки обычно печатаются программно :)
   CrushBy
 
39 - 14.10.19 - 21:59
(36) Да. Значит для всех Item i, для которых определено (то есть не NULL) значение quantity(o, st, i).  То есть вы тем самым "расширяете контекст", а внутри DO уже можете обращаться к товару через переменную i.
   CrushBy
 
40 - 14.10.19 - 22:01
(38) Ну я бы начал с поиска класса Этикетка (Label). А затем в IDE нажал бы ALT+F7 (поиск использований) и быстро бы нашел все места, где создаются объекты этого класса (типа : NEW l = Label). Собственно это и будут все места печати этикеток, скорее всего.
   НиколаевГ
 
41 - 14.10.19 - 22:02
(39) Для агрегатных функций оно так-же работает?
   Злопчинский
 
42 - 14.10.19 - 22:02
(34) ночь, блин. все спять. спросить не у кого.
надо сделать. туда куда это встает по бизнес-процессу. сделаю и утром покажу юзверю где это.
я - как разработчик определяю бизнес-процесс, его прохождение и прочее.
а не пользователи (они блин набизнесят так что мама не горюй). когда я не понимаю для чего это в какую точку бизнес-процесса воткунть, когда у меня сомнения - я ТОГДА ИДУ И ПЫТАЮ пользюков.
а не кидаюсь по перовму чиху пользюков лепить на какую-то непонятную для меня формочку непоянтн какое поле.
.
не уходите от ответа.
задача есть. из слов менеджера я сделал следующую постановку для себя
- в "документ.заявкапокупателя" поставить на визуальную форму реквизит "номерЗаявкиПокупателя". Данный реквизит должен быть виден во всех шапках этого документа где они - шапки этого документ есть на визуальных формах.
.
возвращаемся собственно к самому вопросу.
   Ещё1
 
43 - 14.10.19 - 22:03
(18) Да, неплохо было бы получить как-то полный список пользовательских классов приложения. А для каждого класса - список его свойств, а также список свойств, где этот класс выступает в качестве параметра. Я нашёл только такое: в своём приложении в меню выбираем Administration - Metadata - Properties. Там есть таблица всех свойств классов, определённых в программе. Но без разбиения на классы, которым они принадлежат.
https://paste.pics/0bd9da02e3c9ca30c638271496e62dda
В демке ERP такого нет - там меню Administration отключено по понятным соображениям.
   Злопчинский
 
44 - 14.10.19 - 22:03
(27) товар будет справа. потому что у меня ключевые поля (организация, склад). на выходе - на визуальной форме пусть для начала - список квантити по всем товарам.
   Злопчинский
 
45 - 14.10.19 - 22:04
(44) тьфу, товар - будет слева, "справа" - ключевфые поля
   Злопчинский
 
46 - 14.10.19 - 22:06
(29) ну вот мне и надо узнать - нет ли где в "дополнительных" модулях доопределения базового класса "документ" нужным мне реквизитом. чтобы не городить свой огород. если есть то что нужно.
   Злопчинский
 
47 - 14.10.19 - 22:07
(37) класс Item как определен? код, для примера, в самом простом виде)
   НиколаевГ
 
48 - 14.10.19 - 22:09
(47) Насколько я понял, класс определяется свойствами, которые могут принимать его в качестве параметра :))
   Злопчинский
 
49 - 14.10.19 - 22:10
(37) "Без визуализации форма может быть только для экспорта/импорта."
..
эээ? я, что не могу написать где-то (глобальную) модуль (форму? функцию? действие? класс? свойство? хз что?), которая получает список нужных мне обьектов (например, все товары, для получаемых на входе Организации и Склада) и выдает на выход "потребителю" этот список?
.
или мне везде где нужен спсиок товаров по отбору (организация,склад) - все время рожать код какой-ито?
   CrushBy
 
50 - 14.10.19 - 22:11
(41) Если вы подразумеваете под "агрегатными" функциями "вычисляемые" функции (то есть любые, кроме DATA), то да.
   CrushBy
 
51 - 14.10.19 - 22:12
(43) Посмотрите в статье по IDE раздел Анализ (первая GIF'ка там) : https://habr.com/ru/company/lsfusion/blog/465573/
Это то, что надо ?
   Злопчинский
 
52 - 14.10.19 - 22:13
(39) Item i
- i - экземпляр Item?
Item где-то "выше" описан как сущность (класс? свойство? хз что?) "Товар"..?
   НиколаевГ
 
53 - 14.10.19 - 22:14
(50) А что ещё можно подразумевать под "агрегатными функциями"?
   CrushBy
 
54 - 14.10.19 - 22:14
(48) Можно и так сказать :) Напомнило утиную типизацию (duck typing) : "Если это выглядит как утка, плавает как утка и крякает как утка, то это, вероятно, и есть утка."
   Злопчинский
 
55 - 14.10.19 - 22:15
(40) мне чтобы печатать этикетки - надо сначала на уровне прикладного приложения определить "контейнер", где будет храниться номер этикетки тупо String(30) относящийся к "шапке" документ.ЗаявкаПокупателя
   Злопчинский
 
56 - 14.10.19 - 22:16
как мне в приложении/среде разработки найти все "реквизиты", которые описывают сущность "документ.заявкаПокупателя"?
   Злопчинский
 
57 - 14.10.19 - 22:19
(43) подожди, ты показываешь скриншот ПРИЛОЖЕНИЯ. я разраб. у меня приложения готвого нет. у меня код в среде разработки.
   CrushBy
 
58 - 14.10.19 - 22:24
(55) Еще один кейс, который мы используем на практике :
Find symbol (CTRL+ALT+SHIFT+N) в IDEA. Как правило, есть naming policy. То есть такое свойство должно быть объявлено вроде как label = DATA Label (SaleOrder);
Соответственно просто набираете labOrd, и она находит все такие объявления.
   Ещё1
 
59 - 14.10.19 - 22:28
(51) Там где автодополнение показывается? В идеале неплохо было бы что-то вроде меню Navigate - Class / Property / Form в IDEA. Меню-то есть, но оно пустое.
   Злопчинский
 
60 - 14.10.19 - 22:32
(58) то бишь тупо контекстный поиск. и если я не угадал с символами для поиска то я захренячу еще одно поле (вдобавок к уже существующему с тем же целевым назначением).
.
нет кнопочки чтобы нажать
и получить некое дерево "определения" документ.ЗаявкаПокупателя - со всеми базовыми определениями, переопределениями и добавлениями на базовый класс пробежаться про нему и увидет что-то типа InputNumberFromClient - и уже дальше от него исследовать, а не от "Label" или "Lab" иди хз как там еще мог написать предыдущий ваятель?
   Злопчинский
 
61 - 14.10.19 - 22:36
ладно, пока все на сегодня.
.
примерно так (имхо мнение)
в 1С - туева хуча общих/глобальных модулей/процедцур/фунгкций. не знаешь - будешь изобретать велосипед и множить лишние сущности ()
в фузина - туева хуча модулей, классов, свойств, определений/переопределений/добавок сверху. не будешь знать (инструмента удобного нет) - будешь хренячить лишнее/дублировать/изобретать велосипед
.
один хрен грабли, с разных боков.
принципиальнйо разницы нет.
   Ещё1
 
62 - 14.10.19 - 22:38
(59) Хотя нет, надо начать набирать имя класса, и будет отыскивать его определения. Я ожидал, что оно сразу покажет весь список классов.
Но вот что-то подобное надо бы сделать для свойств и форм. Причём для свойств - желательно с фильтром по классу в параметрах.
   Лефмихалыч
 
63 - 14.10.19 - 22:51
(48) «класс определяется свойствами, которые могут принимать его в качестве параметра»

класс определяется свойствами, которые могут принимать его... свойствами, которые принимать его... класс опредШТОТЫСЕЙЧАССКАЗАЛ?!
   _DAle_
 
64 - 14.10.19 - 23:06
(59) Имелась ввиду вот эта гифка https://habrastorage.org/webt/gn/y8/lq/gny8lql1upiag0blpf_otxfyqjw.gif
   Ещё1
 
65 - 14.10.19 - 23:18
(64) О, ну конечно оно, "Structure View", спасибо! Вот, здесь всё видно, какие свойства принадлежат выбранному классу, и где они определены. Это спрашивал выше Злопчинский (55).
   Ещё1
 
66 - 14.10.19 - 23:21
Теперь понятно, как "навигировать" по незнакомому проекту. Выцепляем нужный класс по названию, через Navigate - Class отыскиваем его базовое определение. И потом можно искать все его свойства через Structure View.
 
 Рекламное место пустует
   _DAle_
 
67 - 14.10.19 - 23:31
(66) Я бы советовал прочитать эту статью по IDE полностью, там еще всякие крутые штуки есть вроде иерархии использования элемента и других фишек навигации.
   Ещё1
 
68 - 14.10.19 - 23:39
(67) Да, наверное стоит. Просто очень много информации разной. Для меня это всё ново: IDEA, lsFusion, Java... А информация разбросана по документации, статьи на Хабре и ответы здесь, исходники ваших проектов...

Вам надо сообщать куда про исключения в IDE? Вот такое окно у меня показало:
IDE Fatal Errors
Exception in plugin lsFusion (1.0.179).
Stack trace:
java.lang.Throwable: window with id="Design" isn't registered
    at com.intellij.openapi.diagnostic.Logger.error(Logger.java:145)
    at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.getRegisteredInfoOrLogError(ToolWindowManagerImpl.java:709)
    at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.isToolWindowVisible(ToolWindowManagerImpl.java:1599)
    at com.intellij.openapi.wm.impl.ToolWindowImpl.isVisible(ToolWindowImpl.java:204)
    at com.lsfusion.design.DesignView$1.run(DesignView.java:103)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$MyTimer.runListenerAction(ActionManagerImpl.java:1492)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$MyTimer.notifyListeners(ActionManagerImpl.java:1481)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl$MyTimer.actionPerformed(ActionManagerImpl.java:1471)
    at java.desktop/javax.swing.Timer.fireActionPerformed(Timer.java:317)
    at java.desktop/javax.swing.Timer$DoPostEvent.run(Timer.java:249)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:824)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:773)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:412)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:704)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:411)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
   _DAle_
 
69 - 14.10.19 - 23:43
(31) Про Item уже ответили, я расскажу, что такое "i =". В данном случае - это всего лишь задание алиаса, альтернативного имени, чтобы потом не писать внутри объявления формы везде Item, а писать i. Примерно, как AS в SQL. Его можно не задавать, и в таких малюсеньких примерах, имхо, код будет только читабельней.
   _DAle_
 
70 - 14.10.19 - 23:45
(68) Думаю, было бы круто заманить вас к нам в slack :) Да, сообщать надо, но я сейчас не готов сказать, это какая-то уже известная нам проблема или нет.
   Ещё1
 
71 - 14.10.19 - 23:48
(69) Т.е. в строке
OBJECTS i = Item
i - это алиас имени класса, не переменная?
Я думал, у вас в коде классы везде с большой буквы, а переменные с маленькой.
   Ещё1
 
72 - 14.10.19 - 23:51
(70) Пока других ошибок не видел, только эту. Может попозже в Slack, тут на Mista у людей примерно одинаковое знание платформы, как у меня. Обучаться вместе интересней.
   _DAle_
 
73 - 14.10.19 - 23:54
(71) Хороший вопрос. В принципе, вы правы, в данном случае это i используется в качестве имени параметра. Просто если этот алиас не задать, то параметр будет равен имени класса. Ну и соответственно, для встроенных классов алиас придется задавать обязательно.
   _DAle_
 
74 - 14.10.19 - 23:58
(73) Поправлюс: ...Просто, если этот алиас не задать, то имя параметра будет равно имени класса. Ну и для встроенных классов алиас приходится задавать обязательно, так как их имена - это ключевые слова.
   _DAle_
 
75 - 15.10.19 - 00:00
(72) Ну в slack ведь вас никто заставлять говорить не будет, можно просто туда добавиться. Ну вот и stack trace'ы вот такие туда можно бросать, чтобы мы их не потеряли в массе сообщений.
   Злопчинский
 
76 - 15.10.19 - 00:01
(66) а если класс сверху "переопределен" и сверху еще чем-то дополнен - в нафигации базового класса как-то будет видно?
   Злопчинский
 
77 - 15.10.19 - 00:02
(69) ничего не увидел где про Итем ответили.
я понял что это класс (?) "Товары", но где он определяется/описывается и как?
   Злопчинский
 
78 - 15.10.19 - 00:04
(72) Пока это еще не обучение, а вьезд в начала. Но уже с тестированием всех фигни что выплывает. Мистовцы тут наловили уже ошибок. а фузиновцы зажлобили вознаграждение.
   _DAle_
 
79 - 15.10.19 - 00:09
(77) Там был ответ, что Item - это класс. Объявляется класс в lsfusion одной строкой.

CLASS Item;

Я так понимаю, что вы спрашиваете какие есть свойства/действия, которым на вход приходят объекты класса Item, да? Вообще определяться эти свойства и действия могут в любом модуле, который зависит от модуля в котором объявлен класс Item. Просмотреть можно, например, в том самом Structure View в IDE.
   Ещё1
 
80 - 15.10.19 - 00:16
Я обратил внимание, в демке ERP часто используют для задания даты/времени (напр. документа) пару полей ввода дата и время вместо объединённого даты/времени. Такая ерунда была в 1С 7, и от неё отказались в 1С 8 из-за ненадобности и усложнения интерфейса и навигации по форме. я б вам рекомендовал рассмотреть тоже этот вариант, как в 1С 8.
   _DAle_
 
81 - 15.10.19 - 00:17
(76) Да, если мы, наприимер, создадим новый модуль, в нем добавим зависимость на модуль с объявлением класса Item, и добавим новое свойство newProperty(Item i), то оно будет видно.
   PR
 
82 - 15.10.19 - 00:25
_DAle_, а что такое ваш продукт вообще в принципе?

Как я все понимаю
Есть Оракл или Постгре — это СУБД
Есть JAVA — это язык программирования
Есть IDEA — это среда разработки проектов на JAVA
А что есть ваш продукт во всем этом?
Правильно ли, что (если мне не жалко времени изобрести велосипед с нуля) я могу написать в IDEA (да хоть в блокноте, не суть) JAVA-код, который будет работать с СУБД и это ничем не будет отличаться от вашего продукта?

Ну и, чтоб два раза не вставать, а то я не сильно силен в JAVA
Чем рисуется вся визуальная кухня, то есть GUI?
   Ещё1
 
83 - 15.10.19 - 00:26
(80) В таблицах тоже самое, два столбца "Дата документа" и "Время документа". Сделайте 1 и назовите "Дата". Поймут даже секретарши, потому что в любом бизнес-документе есть как минимум 2 основных реквизита: его номер и его дата.
   Ещё1
 
84 - 15.10.19 - 00:41
(82) Наверное все фузинцы ушли спасть. Могу ответить как я понимаю. А завтра уточнят.

1. Язык. Единый язык для написания логики программы и для работы с данными. В большинстве других бизнес-платформах есть отдельный язык написания логики (самобытный или один из известных С++/Java/Delphi/1С...), и отдельно язык для манипуляции данными (SQL, 1С-SQL, ...). Тут 2 в 1 - меньше учить.

2. Плагин для IDEA - помогающий писать код, поддерживающий рефакторинги, навигацию и т.д.

3. Сама платформа: уже готовое решение на Java, каркас 3-звенного приложения (БД - сервер приложений - клиентские приложения Windows/Web).

А также транспайлеры кода из lsFusion в SQL и Java, анализатор и оптимизатор SQL-запросов к базе, и другое что я забыл или не знаю.
   PR
 
85 - 15.10.19 - 00:44
(84) Ну вот нахрена ты это написал?
Я же специально вопрос на Крашу, не Бро и не начинающим энтузиастам задал, а конкретно _DAle_
Как бы есть причины на то, я их уже озвучивал
   PR
 
86 - 15.10.19 - 00:45
+(85) Я как бы никуда не тороплюсь, готов подождать, ничего страшного
   Ещё1
 
87 - 15.10.19 - 00:48
(85) Подумалось, человек уйдёт спать без ответа, будет всю ночь мучатся... :)
Ладно, я тоже отключаюсь.
   _DAle_
 
89 - 15.10.19 - 01:16
(82) Хм, я никогда не пробовал формулировать, что такое платформа, если честно. Я попробую, не уверен, что это будет сильно адекватно.
Платформа lsfusion - это совокупность нескольких программ (как минимум это сервер приложений (application server), desktop-клиент, web-клиент), позволяющих разрабатывать информационные системы. Сервер приложений в свою очередь предоставляет среду исполнения (execution environment) для программного кода, написанного на языке lsfusion. Если другими словами, то это 2 из 3 звеньев трехзвенки, в качестве недостающего сервера баз данных используются существующие РСУБД.

Сам код платформы написан в основном на java. Для написания кода на языке lsfusion платформа предоставляет плагин к Intellij IDEA.

>Правильно ли, что (если мне не жалко времени изобрести велосипед с нуля) я могу написать в IDEA (да хоть в блокноте, не суть) JAVA-код, который будет работать с СУБД и это ничем не будет отличаться от вашего продукта?

Хм, тут я немного не понял. Да, платформа написана на java, но главной штукой тут является базовыые концепции (свойства, действия, классы, ограничения, формы и т.п.), и язык lsfusion, который позволяет эти концепции удобно описывать.

>Чем рисуется вся визуальная кухня, то есть GUI?

desktop - Swing, web - GWT + есть возможность прикрутить React.
   PR
 
90 - 15.10.19 - 01:17
(87) Раз уж ты зачем-то написал свой не на что не отвечающий пост, то я прокомментирую, может это поможет _DAle_ более точно понять мой вопрос

>>1. Язык. Единый язык для написания логики программы и для работы с данными. В большинстве других бизнес-платформах есть отдельный язык написания логики (самобытный или один из известных С++/Java/Delphi/1С...), и отдельно язык для манипуляции данными (SQL, 1С-SQL, ...). Тут 2 в 1 - меньше учить.
Если я все правильно помню, нет никакого языка, кроме JAVA, который поддерживается интерпретатором в лице JAVA-машины
Весь остальной язык — это различные модули, то есть переменные, функции, процедуры, классы, хренассы, все, что ты набарогозил и теперь подключаешь и используешь
Один из аналогов в 1С в чистом виде — БСП, которую можно использовать, а можно то же самое самому накидать
А вот аналог Сообщить в 1С ты не сделаешь, потому что нет у тебя никакой возможности сообщить что-то в окно сообщений, кроме как через Сообщить
Вот мне и интересно, есть ли в данном случае что-то такое же или весь продукт — это набор различных прикольных модулей?

>>2. Плагин для IDEA - помогающий писать код, поддерживающий рефакторинги, навигацию и т.д.
Что за плагин? И что, если я буду писать все это без этого плагина? Мне будет просто неудобнее и сложнее или я чего-то не смогу принципиально?

>>3. Сама платформа: уже готовое решение на Java, каркас 3-звенного приложения (БД - сервер приложений - клиентские приложения Windows/Web).
Прикольно, че.
— Что есть ваша платформа?
— Ну, во-первых, язык, во-вторых, плагин, а в-третьих, платформа!

>>А также транспайлеры кода из lsFusion в SQL и Java, анализатор и оптимизатор SQL-запросов к базе, и другое что я забыл или не знаю.
https://ru.wikipedia.org/wiki/Транспайлер всего-лишь делает работу без него менее удобной, но не невозможной.
Анализатор и оптимизатор SQL-запросов к базе то же самое.
Про другое да, очень емкое замечание. Приходный, расходный и другие кассовые ордера, которые я забыл или не знаю.
   PR
 
91 - 15.10.19 - 01:29
(89) Я объясню, с какой целью задал вопрос
Вот, предположим, решил начинающий программист на что-то нацелиться, на 1С, JAVA, что-то еще, позволяющее организовать многопользовательскую работу с данными и визуальным интерфейсом

Делая свой выбор в пользу 1С совершенно понятно, что у него должна стоять программа 1С, либо файловая либо плюс сервер приложений
Написание программы в этом случае у него ограничено возможностями языка 1С

Делая свой выбор в пользу JAVA совершенно понятно, что у него должен быть установлен JAVA-интерпретатор
Написание программы в этом случае у него ограничено возможностями языка JAVA

А чем выбор в пользу вашей платформы принципиально отличается от выбора в пользу JAVA?
Понятно, что и в случае с 1С можно написать свою "1С", точно такую же, но это скорее из теоретической области, придется писать с нуля просто все
В вашем же случае есть некоторая надстройка над JAVA и все, верно?
Насколько она велика?
Какова ее ценность самой по себе?
Что без нее теряет разработчик, сколько лет ему придется корпеть, чтобы сделать такое же?
Что она вообще в принципе из себя представляет, что это за набор библиотек, что мне, как разработчику, не придется писать на JAVA с нуля, когда я буду создавать свое конкретное решение с конкретными классами?
   PR
 
92 - 15.10.19 - 01:41
(89) >>сервер приложений
ok, понятно, некий достаточно сложный, в то же время унифицированный, интеллектуальный продукт со своей логикой

>>desktop-клиент
Что он из себя представляет?
Многооконное приложение с главным меню?
Какая-то простая заготовка application, на которую нужно накручивать все остальное?
Что-то другое?

>>web-клиент
Веб-клиент разве не браузер?
Что в данном случае есть веб-клиент?

>>Сервер приложений в свою очередь предоставляет среду исполнения
Какой-то глобальный интерфейс, понятно, часть сервера приложений, иначе такой сервер приложений никому не был бы нужен.

>>Для написания кода на языке lsfusion платформа предоставляет плагин к Intellij IDEA.
Ну то есть это просто обертка, ok.
Или это серьезная такая обертище, замаешься сам писать?

>Хм, тут я немного не понял. Да, платформа написана на java, но главной штукой тут является базовыые концепции (свойства, действия, классы, ограничения, формы и т.п.), и язык lsfusion, который позволяет эти концепции удобно описывать.
Всякие базовые концепции — это набор библиотек и только, верно? При большом желании подключи я их в проекте без вашей платформы, они так же будут работать?
Про язык я написал выше, что это обертка.

>desktop - Swing, web - GWT + есть возможность прикрутить React.
Swing — это не html, это не для браузера?
GWT — это как раз и есть ваш вклад в веб-браузер или это поддерживается браузером из коробки, а у вас наработанный набор модулей под отрисовку с его помощью?
   PR
 
93 - 15.10.19 - 01:46
+(92) Я к тому, что, если довести ситуацию до абсурда, я могу написать одну библиотеку с одной возможностью, обертку над JAVA, она будет выводить на экран заданный текст заданное количество раз
И назову это платформой X
Но ты же понимаешь, что моей платформой в этом случае будет пользоваться ровно ноль человек, потому что нахрен кому эта прослойка между программистом и JAVA нужна?
Вот я и пытаюсь понять, насколько у вас толстая и нужная прослойка?
   _DAle_
 
94 - 15.10.19 - 01:53
(91) >А чем выбор в пользу вашей платформы принципиально отличается от выбора в пользу JAVA?

Более высоким уровнем абстракции и предметно-ориентированной направленностью. Смотрите, я может проведу сейчас не лучшую аналогию, но платформа 1С ведь написана на С++ (если я ничего не путаю). Вот этот вопрос - это примерно "Чем выбор в пользу платформы 1С принципиально отличается от выбора в пользу С++?"

>В вашем же случае есть некоторая надстройка над JAVA и все, верно?
Это не надстойка, это программный продукт, написанный на Java. Мы бы были надстройкой, если бы мы код на lsfusion транлировали бы в код на джава, который бы потом выполнялся. А это не так.

>Какова ее ценность самой по себе?
>Что без нее теряет разработчик, сколько лет ему придется корпеть, чтобы сделать такое же?

В платформе решено множество сложных технических задач, есть, например, оптимизирующий компилятор в SQL, который реализует некоторые вещи, которые не реализуют сами СУБД. Лет корпеть придется много. Вообще, это все есть в статьях и об этом лучше рассказывает Bro :)
   _DAle_
 
95 - 15.10.19 - 02:20
(92) >Всякие базовые концепции — это набор библиотек и только, верно? При большом желании подключи я их в проекте без вашей платформы, они так же будут работать?

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

>>desktop-клиент
>Что он из себя представляет?

Эмм, Оконное приложение. Причем пользователю платформы ничего для этого делать не нужно, он описывает логику на языке lsfusion и получает на выходе сервер приложений с этой логикой, desktop-клиент и web-клиент (это приложение, выполняющееся в браузере и общающееся с application server'ом).

>>Для написания кода на языке lsfusion платформа предоставляет плагин к Intellij IDEA.
>Ну то есть это просто обертка, ok.
>Или это серьезная такая обертище, замаешься сам писать?

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

Swing и GWT - это GUI библиотеки, которые мы используем для создания пользовательского интерфейса. Swing - это не для браузера, это такая старенькая стандартная GUI java-библиотека, GWT - это библиотека от Google, позволяющая создавать javascript-фронтенд из Java.
   PR
 
96 - 15.10.19 - 02:24
(94) >>Более высоким уровнем абстракции и предметно-ориентированной направленностью. Смотрите, я может проведу сейчас не лучшую аналогию, но платформа 1С ведь написана на С++ (если я ничего не путаю). Вот этот вопрос - это примерно "Чем выбор в пользу платформы 1С принципиально отличается от выбора в пользу С++?"
Все верно, только я же писал и про 1С и про свое приложение с одной функцией
Это две грани, от очень сложно написать такое же до делается за секунду

>>Это не надстойка, это программный продукт, написанный на Java. Мы бы были надстройкой, если бы мы код на lsfusion транлировали бы в код на джава, который бы потом выполнялся. А это не так.
Ага, вот пошло интересное, не зря я тебя пытал
А во что же летит дальше код на lsfusion?

>>В платформе решено множество сложных технических задач, есть, например, оптимизирующий компилятор в SQL, который реализует некоторые вещи, которые не реализуют сами СУБД. Лет корпеть придется много. Вообще, это все есть в статьях и об этом лучше рассказывает Bro :)
Оптимизирующий компилятор — это наверное прикольно, но все-таки не то, на самостоятельную платформу не тянет
А про Bro не думаю, что он рассказывает лучше
   PR
 
97 - 15.10.19 - 02:27
(95)  >>На java их тоже можно было реализовать, только куда менее удобно, чем на специально сделанном для их выражения языке.
Так а этот специально сделанный для них язык куда в итоге все транслирует, в какой язык более низкого уровня? Или это вообще уже готовые dll и exe?

>>Эмм, Оконное приложение. Причем пользователю платформы ничего для этого делать не нужно, он описывает логику на языке lsfusion и получает на выходе сервер приложений с этой логикой, desktop-клиент и web-клиент (это приложение, выполняющееся в браузере и общающееся с application server'ом).
ok, понятно

>>Это средство разработки, облегчающее жизнь программисту: подсветка кода, автодополнение, навигация, рефакторинг, отладчик и многое другое. Плагин нужен именно для написания кода на lsfusion. Сам плагин довольно серьезный, функционала там достаточно много, вполне себе на уровне взрослых языков программирования, на мой взгляд.
ok, понятно

>>Swing и GWT - это GUI библиотеки, которые мы используем для создания пользовательского интерфейса. Swing - это не для браузера, это такая старенькая стандартная GUI java-библиотека, GWT - это библиотека от Google, позволяющая создавать javascript-фронтенд из Java.
ok, понятно
   _DAle_
 
98 - 15.10.19 - 02:32
(96) >Это две грани, от очень сложно написать такое же до делается за секунду.

Я могу завтра посчитать, сколько строк кода на java в исходном коде платформы. Это не ахти какой показатель, я это не понимаю. Но все же.

>А во что же летит дальше код на lsfusion?

Так как все выполняется на jvm, то физически все сначала превращается в java-объекты, структуры данных.. Логически же логика вычислений в конечном итоге превращается в код на SQL.

>А про Bro не думаю, что он рассказывает лучше

Он по крайней мере это постоянно делает, а я нет.
   PR
 
99 - 15.10.19 - 02:33
(98) >>Так как все выполняется на jvm, то физически все сначала превращается в java-объекты, структуры данных.. Логически же логика вычислений в конечном итоге превращается в код на SQL.
Ну то есть все-таки все в итоге транслируется в java-код? То есть все-таки обертище?
   _DAle_
 
100 - 15.10.19 - 02:52
(99) Нет, это же получается не исходный код на java, а объекты в памяти. Мы не компилируем в java, а интерпретируем код на lsfusion и во время интерпретации создаем jvm объекты.

Я уже писал, что можно было обойтись и без своего языка, на самом деле на начальном этапе у нас так все и было, мы создавали свойства, классы, формы (я тут использую именно понятия из нашей терминологии) с помощью кода на java. Это было неудобно и громоздко, хотя тогда возможностей у платформы было на порядок меньше. Сделав свой язык, мы получили возможность кратко и точно описывать понятия из нашей парадигмы, снизили порог вхождения, получили возможность сделать поддержку многих возможностей IDE.  

Вообще, на мой взгляд, язык в платформе - не главное, главное - это совокупность тех подходов (концепций, парадигмы, можно как угодно это называть), которые мы используем, и какие плюсы и минусы она в результате приносит. Но это очень обширная тема, и тут все же лучше хотя бы попробовать почитать нашу первую статью на хабре, где описывается логическая модель.
  1  2  3  4  5  6   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.