Страница 6 из 6
CIDC 2015
Добавлено: 29 Октябрь 2015, 17:11
finsoftrz
Кларионовский evaluate работает очень медленно. А так, к нему несложно прикрутить циклы, условия и т.п. Пользовался когда-то таким, потом концепция сменилась. Lua или питон должны быть в этом отношении более оптимизированы, т.к. там есть предварительная трансляция в байт-код. Но пользователи крайне редко что сами могут делать, в крайнем случае привлекут местного эникейщика. А это уже с нашей стороны будет игра на чужом поле. Как мне кажется, наиболее разумный подход заключается в использовании "мастер-процедур". То есть некоторая предопределенная процедура с конкретным назначением, а формы можно создавать свои в программе. Ну, по примеру, как в FRB, только не зацикливать вывод в кларионовскую report-структуру, с которой, кроме печати, особо не поработаешь.
CIDC 2015
Добавлено: 29 Октябрь 2015, 17:35
Игорь Столяров
finsoftrz писал(а): Кларионовский evaluate работает очень медленно. А так, к нему несложно прикрутить циклы, условия и т.п.
Вот как раз в эту тему был доклад на CIDC 2015. Думал, может будут какие-то материалы потом опубликованы ...
Ан нет. Толи все секретно, то ли показать народу опять нечего ...
CIDC 2015
Добавлено: 29 Октябрь 2015, 17:39
Shur
Ну я же не просто так написал про циклы и ветвления. В эвалюэйте этого нет пока (здесь отсыл на CIDC 2015, доклад под названием Calculate Engine).
Фрагмент кода на Lua:
Код: Выделить всё
function Log(str)
if config.log_enabled and file ~= nil then
file:write(sformat("%s %s\n",os.date(), str))
end
end
function comma_value(amount)
local formatted = amount
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1 %2')
if (k==0) then
break
end
end
return formatted
end
function round(val, decimal)
if (decimal) then
return math.floor( (val * 10^decimal) + 0.5) / (10^decimal)
else
return math.floor(val+0.5)
end
end
function finite(n)
if (amount ~= amount) or (amount == math.huge) or (amount == -math.huge) then
return false
else
return true
end
end
CIDC 2015
Добавлено: 29 Октябрь 2015, 17:47
kreator
Shur писал(а): if (amount ~= amount)
Красиво!!!
CIDC 2015
Добавлено: 29 Октябрь 2015, 17:51
Shur
Да уж, выхватил кусок кода, не посмотрев. Функция какая-то кривая. А ведь пишут!
Понятнее было бы написать:
CIDC 2015
Добавлено: 29 Октябрь 2015, 18:04
finsoftrz
Интересно было бы глянуть пример, как подключить и работать с lua из клариона. Действительно ли там достаточно одной dll и сколько она весит? Читал, что питон надо специально инсталить на компьютер пользователя.
Вот, из старых архивов, как когда-то выглядел скрипт на кларионе:
Код: Выделить всё
@GROUP,RASCH,0 Присвоение_1 */ присвоение значений выводимым переменным
*/ ...
!База=GetBaza(P(4,0)) */ смещение для базы в месяцах
!DO SetPeriod(1,F('База')+25) */ сумма
!Сумма1=0
!Сумма2=0
!Ном=0
!LOOP ABSOL
!Ном=F('Ном')+1
!IF F('Ном')>24
!BREAK
!ENDIF
!DO SetPeriod(1,-1)
!DO SetBd()
!IF F('Ном')<13
!Сумма1=F('Сумма1')+GetNak(22,1)
!ELSE
!Сумма2=F('Сумма2')+GetNak(22,1)
!ENDIF
!ENDLOOP
!DO SetPeriod(1,0)
!DO SetBd()
Группы - это типа рутинок, их можно вызывать друг из друга, располагать в разных файлах и т.п. Некрофилия...
CIDC 2015
Добавлено: 30 Октябрь 2015, 14:43
Admin
Ой кстати хочу фичу!!!
Код: Выделить всё
MAP
SomeProc(CSTRING Text)
END
CODE
SomeFunc(CSTRING('test')) ! т.с. приведение типов :)