Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Делаю проект для знакомой, она рекламщица Проект по расчету стоимости заказа Есть БД (max) с двумя таблицами 1-usluga=тут хранятся услуги 2-material=тут хранятся расценки на материал При выборе услуги из таблицы(usluga) ячейка(raschet) содержит такую запись: [space]*[max.material.banr2]+2*([width]+[height])*[max.material.luver] где, width=ширина банера,height=высота банера,space=площадь банера Например:width=2,height=2,space=4,max.material.luver=140,max.material.banr2=200 Необходимо выполнить
Code
Math "[space]*[max.material.banr2]+2*([width]+[height])*[max.material.luver]" "2" "[result]"
так все работает, но если так:
Code
Math "[max.usluga.raschet]" "2" "[result]"
то нет Каким способом можно выполнить формулу из переменной?
Сообщение отредактировано Сергей - Сб, 28 Июля 2012, 11:27
но если так: Код Math "[max.usluga.raschet]" "2" "[result]" то нет
А что именно содержится в переменной [max.usluga.raschet] ? - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
На первый взгляд выглядит как глюк NeoBook, но это только на первый.
Загвоздка здесь вот в чем... Когда мы пишем:
Code
Math "[action]" "2" "[result]"
Это означает, что NeoBook прочитает содержимое переменной [action], и просто подставит его в формулу. Что там (в этой переменной) конкретно находится не имеет значения, будет тупо подставлено содержимое (а там у нас просто текст), после чего пойдет расчет по формуле, но переменная [action] не является формулой, она лишь часть (элемент, значение, один из аргументов) формулы.
Точно также не прокатит команда:
Code
SetVar "[result]" "[action]"
В [Result] будет "[space]*[banr2]+2*([width]+[height])*[luver]", но не результат вычисления.
Пока ничего положительного в голову не приходит...
А для чего нужно в формулу подставлять именно из переменной? Может можно как-то иначе решить задачу? - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
А для чего нужно в формулу подставлять именно из переменной? Может можно как-то иначе решить задачу?
В услугах 97 наименований и для каждой своя формула расчета. Для быстроты и простоты я решил выбрать это направление, но уткнулся в сабж Формулы зашивать в проект, да и 97 подпрограмм я решил не делать. Других решений организаций пока нет, в голову ничего путного не лезет...
Для быстроты и простоты я решил выбрать это направление
Так формулы-то все-равно потребуется вручную прописывать.
Quote (Сергей)
Формулы зашивать в проект, да и 97 подпрограмм я решил не делать.
А как тогда считать, без формул?
Чего-то я ничего не понимаю...
Quote (Сергей)
единственное, что пока работает это Call, но тут уже внешний файл
И почему это так плохо? Call это означет вызов функции, а она зашивается в проект при компиляции.
В любом случае, без функции или подпрограммы (которая заменяет в формуле имена переменных на их значения) не обойтись. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Так формулы-то все-равно потребуется вручную прописывать.
так они и прописаны в БД
Quote (Peter)
А как тогда считать, без формул?
почему без формул, они будут находится в бд Задумка в том, что формулы извлекаются из бд в виде строки (a+b*c), а уж в НБ их просчитывать. + получаем динамические формулы, которые легко можно изменять.
Quote (Peter)
И почему это так плохо?
она срабатывает только раз, т.к. загружается при запуске. И если изменить функцию после, то исполнятся все равно первоначальное
Quote (Peter)
См прикрепление.
посмотрю
Добавлено (28 Июля 2012, 16:39) --------------------------------------------- интересно, а в 1С как такое реализовано, там ведь формулы тоже в бд лежат
Добавлено (28 Июля 2012, 16:40) --------------------------------------------- Вот я тупанул про 1С
Сообщение отредактировано Сергей - Сб, 28 Июля 2012, 16:33
она срабатывает только раз, т.к. загружается при запуске. И если изменить функцию после, то исполнятся все равно первоначальное
Не понял. Это ты об чем? Похоже, что мы про какие-то разные Call говорим...
Quote (Сергей)
Вот я тупанул про 1С
А что такое? - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Нажимаем первую - результат 4,00 - все верно Жмем вторую - результат 4,00 - не верно Забудем пока про Call, все равно не буду делать, есть плачевный опыт, я уже делал динамический проект, многое реализовал через Call Не все так гладко в этой команде с динамикой....
Сделал временно (страшно подумать что так и останется ) через парсер. Может кто еще подкинет какую нить элегантную идею, выполнить формулу из переменной
Добавлено (28 Июля 2012, 18:41) ---------------------------------------------
Кстати, что то я ни разу не встречал в плагах функцию исполнения кода НБ из строки. Есть для Ruby, есть для Java, есть Lua, есть даже, не знаю зачем, делфи, а для НБ нету Вот тут как раз и спасла бы такая фича
Сообщение отредактировано Сергей - Сб, 28 Июля 2012, 18:41
Все правильно, потому-что "тело" функции грузится только один раз, а этим "телом" у тебя и является само математическое выражение.
Исполнительный код функции (тело) всегда неизменен после загрузки в память, а менять можно только зачения аргументов (параметры), то-бишь, значения переменных, используемых функцией.
Quote (Сергей)
Может кто еще подкинет какую нить элегантную идею, выполнить формулу из переменной
А чем не устраивает решение, предложенное мной? Это аккурат то, что требуется. Или 13 строк кода это слишком много?
А, если по-уму, то надо бы добавить ещё пару строк.
Quote (Сергей)
не знаю зачем, делфи
Вот это и впрямь интересно!!! Покаж, где это?
Добавлено (28 Июля 2012, 19:10) ---------------------------------------------
Quote (Сергей)
Вот тут как раз и спасла бы такая фича
А это не подходит? - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Ну так если работает, то что ещё надо-то? На других языках работать лучше не будет. Разьве-что (может быть) чуточку быстрее на формулах длиною в километр.
А вообще, у NeoBook очень хороший язык, и по скорости даже превосходит VBS на однотипных скриптах! Проверяли как-то давно с Дембелем.
Другое дело, что в NB функций маловато в сравнение с VBS.
Quote (Сергей)
на форуме тоже выкладывали
Да, припоминаю вроде... Было какое-то упоминание на "интерпретатор-переводчик", но когда я его посмотрел, то там оказалось, что нужно знать Delphi, и какой тогда, спрашивается, смысл шлепать какие-то переходные скрипты, если можно все сделать на чистом Delphi в виде плагина.
Quote (Сергей)
есть даже, не знаю зачем, делфи
Ты прав! Скажу больше - бредовая идея!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Разьве-что (может быть) чуточку быстрее на формулах длиною в километр.
я переделал немного по другому. Вот два варианта:
Quote
.Вид формулы преведен в подобный вид SetVar "[max.usluga.act[type_usluga]]" "max.materials.o11; #43; #50; #42; #40; width; #43;height; #41; #42; max.materials.o18" .Потом просто разбиваю строку и обрамляю каждый элемент а квадратные скобки .что получается:[max.materials.o11]+2*([width]+[height])*[max.materials.o18] StrParse "[max.usluga.act[type_usluga]]" ";" "[arr]" "[count]" Loop "1" "[count]" "[i]" IfEx "[arr[i]] <> [#34][#34] OR [[arr[i]]] <> [#34][#34]" SetVar "[tm]" "![tm][[arr[i]]]" Else EndIf SetVar "[arr[i]]" "" EndLoop Math "[tm]" "2" "[result]" ClearVariables "[count],[i],[tm]"
И с использованием плагина hpwPlayAction. Разобрался я с ним и понял почему не работало в первый раз. Оказалось, что когда я добавлял команду, то плагин приводил скобки в ascii вид И есно при обработке данные не подменялись и ничего не происходило:
Что использовать это вопрос "филосовский". Скрипт в сообщении 7 не лишен недостатка - неправильно обрабатываются составные переменные (правда, это можно попытаться и доработать), приведенный чуть выше скрипт (не проверял) вроде бы свободен от этого недостатка, но требует мудреного написания формулы.
Я бы, лично, однозначно предпочел скрипт, т.к. убежден в том, что плагины нужно применять только тогда, когда без них никак, а кто-нибудь другой скажет: да нафига строчить кучу кода, когда можно обойтись одной строчкой.
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
отнюдь, прогнать через конвертер win_to_ascii и все. Формулы лепятся в простой до ужаса форме, тут я не стал мудрить. Каждый элемент выбирается из выпадающего списка При выборе из списка все мат.элементы прогонять через конвертер.
Задумка в том, что формулы извлекаются из бд в виде строки (a+b*c), а уж в НБ их просчитывать.
А если формулы извлекать не в виде строки, а в виде переменных([a]+[b]*[c]) ?
А вообще, выложил бы набросок проекта с базой что и как. Мне почему то кажется что направление не то. Зациклился на ыполнение мат.условия из переменной, а это мне кажется можно обойти по другому.
Сильно не пинать. Только приехал, устал. Бегло прочитал. Мож что то упустил, мож не допонял.
отнюдь, прогнать через конвертер win_to_ascii и все. Формулы лепятся в простой до ужаса форме, тут я не стал мудрить. Каждый элемент выбирается из выпадающего списка При выборе из списка все мат.элементы прогонять через конвертер.
Ну так и чего ты тогда заморачиваешься коли работает?
Quote (mishem)
А вообще, выложил бы набросок проекта с базой что и как. Мне почему то кажется что направление не то.
Тоже верно. Про "направление" не знаю, но вот увидеть, так-сказать, "живьем" совсем другое дело. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
А вообще, выложил бы набросок проекта с базой что и как.
Quote (Peter)
Тоже верно.
в сообщение 3 есть пример Просто в примере одна формула, а в бд их 91. Такая задумка, сделать формулы динамичные, а не зашивать в проект. По другому пока не получается организовать, а возможно и нет других вариантов.
Добавлено (29 Июля 2012, 18:30) --------------------------------------------- Хотя, сейчас залью демку
Демка и файл бд Внимание, для второго варианта расчета нужен плагин hpwPlayAction. Если он не установлен, то за комментировать код в кнопке "Расчет hpwPlayAction"
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
С hpwPlayAction работает, вернее цифры показывает. А работает или нет еще не разобрался.
Мля, я еще бухой, ни как не могу понять, или я туплю, или не правильно вопрос понимаю
Не вижу этого.
Quote (Сергей)
так все работает, но если так: Math "[max.usluga.raschet]" "2" "[result]" то нет
Но это ладно, чуть позже разберусь. Вроде нашел. Зачем вот это? Delay "100" У тебя смотрю уже как в привычку вошло. Нет смысла использовать здесь эту команду.
Со SQL я не дружу.
В голове идея какая то крутится, поймать не могу. К вечеру если не нажрусь(что вряд ли) попробую разобраться.
я упростил бд, т.к. в оригинале много таблиц, что еще больше запутает. Потому сделал с 2я основными, поэтому имена ячеек другие В место raschet, новое имя actN (где N выбираемый номер) Вот и получается:
Quote
Math "[max.usluga.act[type_usluga]]" "2" "[result]"
Quote (mishem)
Зачем вот это?
у меня комп старенький и иногда НБ быстрее работает чем винда выдает ответ, т.е. валится ошибка, что БД не открыта. И заметил, что чем больше размер БД, тем больше надо ставить паузу.
Добавлено (30 Июля 2012, 13:07) ---------------------------------------------
Quote (Peter)
пользовал расчет скриптом.
хмм, я в тестовом скрипт не запускал, проверю.
Сообщение отредактировано Сергей - Пн, 30 Июля 2012, 13:04
Добавлено (30 Июля 2012, 13:32) ---------------------------------------------
Quote (mishem)
В голове идея какая то крутится
идея это хорошо, подожду
Добавлено (30 Июля 2012, 13:44) --------------------------------------------- Надо как то по другому организовать структуру бд Оказывается, что применение формул могут зависеть от некоторых условий... Получается, что теперь надо еще и продумать куда вставлять условия (If-Else-EndIf) Мдя, вот я "подписался" с дуру, а на первый взгляд проект обещался быть простым
И заметил, что чем больше размер БД, тем больше надо ставить паузу.
Надо иметь ввиду.
Quote (Сергей)
идея это хорошо, подожду
Дней 5 придется ждать. Мож по пьяне что выдумаю.
Quote (Сергей)
проект обещался быть простым
проект простой. Я те говорю, не в том направлении прост идешь. Зачем мускул? И так все просто. Каждой переменной присвоить свое значение.... Че сказал, сам не поняол, но направление правильное. Не хочешь читать хелп?
да где ты увидел мусол то, обычный файловый ассес. Без бд ни как, там еще база клиентов.
Quote (mishem)
Каждой переменной присвоить свое значение
зашивать не надо, т.к. значения будут меняться, если динамика значит надо хде то хранить, так что без бд никак. Думаю, может в место формул хранить кусок кода примерно так
dbpExecSQL "max" "SELECT act[type_usluga],id,kof[type_usluga] FROM usluga WHERE id = [name_usluga]" "" и т.д.
Я нажрался, ну это как обычно, мне кажется что ты и сам можешь догадаться.... Не, мне кажется сейчас ступлю. Давай подождем пару тройку дней, Мне кажется, все таки 80 условий надо вешать. 80=90
mishem, ты случаем не переводил плагин hpwPlayAction?! Вроде интересный плаг, вот решил его поковырять... Автор плага написал на оф\форуме, что плаг исполняет код в отдельном потоке, во как...
Сообщение отредактировано Сергей - Пн, 30 Июля 2012, 22:26
переводил, но наверно не до конца. Раз не выложил. Там что то замудренное было по моему. Не один, а штуки 3 надо было , не помню Ща дам. если есть перевод
Добавлено (30 Июля 2012, 22:57) --------------------------------------------- Ну вот, точно. У hpwPlayAction две команды. Остальное, идет обращение к другим. Я пробовал разобраться, не смог, Если разберешься, давай хелп. Плаг заслуживает внимание.
в объект TextEntry и задать ей переменную "action"
TextEntry не понимает переменных, там все это читается как текст. И когда присваиваетя значение из TextEntry, то записываются названия переменных а не их значение. А вот объект Text как раз понимает все переменные как значение. Можно без команды Math сделать примерно так.