Текущий архив: 2009.09.13;
Скачать: CL | DM;
Вниз
Использование скриптов в программе Найти похожие ветки
← →
Наиль © (2009-07-14 10:27) [80]
> На создание нового уйдет 2 часа, вместо 2 дней, когда я
> буду из программы вносить в каждую отдельную ячейку данные,
> а потом высчитывать - куда мне вставить еще одну таблицу
> и после какой строки. А так же то, что вы предлагаете -
> отдельный лист с переменными - это тоже по сути ручная работа
> программисту.
Второй, третий и т.д. листы - листы программиста.
На них чётко определены ячейки в которые надо вносить данные.
Поэтому высчитывать ни чего не надо. Программист такой программе не нужен.
А первый лист - лист для печати. Он делается на основе данных с остальных листов с использованием формул. На изменение такого листа требуется не более часа. И не нужно вмешиваться для этого в программу.
> Не для пользователя я стараюсь.
Вы можете сильно заболеть (не дай Бог), найти более достойную работу/зарплату (дай Бог), или просто уйти в отпуск. И что будут делать пользователи которым срочно нужно будет изменить форму отчёта?
Если Вы думаете, что им этого не понадобится, то я скажу: "Не зарекайтесь".
← →
Skyle © (2009-07-14 10:35) [81]
> Kris_ © (14.07.09 09:55) [77]
Диспозиция такая: наша программа - суть скрипт-хост. Её задача (в разрезе вывода отчётов) заключается всего в двух вещах:
1. Запустить нужный скрипт (формирующий конкретный отчёт)
2. Обеспечить скрипт необходимыми данными.
И всё. Никаких упоминаний о OOo в программе не нужно, потому как эти скрипты сами по себе могут практически что угодно.
Собственно отчёт формируется скриптом, в моих примерах это будет сделано через OLE-автоматизацию MS Office, написано на VBScript.
Допустим, нужен отчёт, выводящий в Excel прайс-лист.
Для этого мы можем сочинить примерно вот такой вот скрипт.OPTION EXPLICIT
Dim Excel, Data(), I
SET Excel = CreateObject("Excel.Application")
Excel.DisplayAlerts = False
Excel.Visible = True
Excel.WorkBooks.Add
Data = Reporter.QueryOpen("PriceListStoredProc")
Excel.Cells(1, 1) = "Наименование"
Excel.Cells(1, 2) = "Цена"
Excel.Cells(1, 3) = "Остаток"
for I = LBound(Data) to UBound(Data)
Excel.Cells(I + 1, 1) = Data(I, 0) " Наименование
Excel.Cells(I + 1, 2) = Data(I, 1) " цена
Excel.Cells(I + 1, 3) = Data(I, 2) " Остаток
Next
Сохраняем этот скрипт в файл (допустим, PriceList.vbs) и ложим где-нибудь в доступном для программы месте (например в сети). Далее, наша программа каким-то образом определяет, что пользователь хочет вывести прайс-лист и для этого используется скрипт из файла PriceList.vbs. Программа создаёт экземпляр ScriptControl, берёт весь текст из файла PriceList.vbs и передает его в ScriptControl.AddCode. Затем вызывает ScriptControl.AddObject, куда передаёт написанный нами com-объект (Reporter) и вызывает ScriptControl.Run. Как-то так.
Что при этом происходит. Объект Reporter несёт нужные нам медоты доступа к данным. В моём примере метод Reporter.QueryOpen выполняет в БД хранимую процедуру PriceListStoredProc и её результат возвращает двумерным массивом в скрипт. Далее, мы просто знаем, в каких столбцах массива лежат нужные нам значения и просто бежим по нему, подставляя в нужных местах.
По поводу ячеек и прочих формул - я не понял необходимости. В данном случае всю предварительную обработку, склеивание строк и прочего можно сделать в скрипте.
← →
Kris_ © (2009-07-14 11:39) [82]Skyle, если по вашему, я поняла в чем суть, это хороший вариант, но не поняла - в чем тогда преимущество скрипта? Единственное преимущество в этом способе я вижу, если бы в VBScript была нужная мне функция eval() например. Она там есть?
← →
Kris_ © (2009-07-14 11:42) [83]turbouser, я принимаю freeReport как вариант, но я уже писала - если пользователь надует губки и скажет, фу, мне это не надо (на экран), мне хочется выборку в Excel (ОО) я хочу делать с ней что хочу, а freeReport, по-моему не может экспортировать в ОО/Excel. К тому же я спрашивала, если вы знакомы с этим инструментов - можно ли получить файл frf - легально бесплатно его построить для использования в рантайм? я не знаю ответа на этот вопрос..
← →
Skyle © (2009-07-14 11:45) [84]
> Kris_ © (14.07.09 11:39) [82]
> но не поняла - в чем тогда преимущество скрипта
Преимущество скрипта в том, что можно делать любые отчёты не меняя программы. Изменения вносятся только в скрипт и сразу же всем доступны (в случае сетевого хранения). Программу менять придётся только в случаях, когда потребуется расширять скрипт-хост, но это очевидно не чаще, чем менять или добавлять отчёты.
> функция eval() например. Она там есть?
Функция Eval там есть, даже в двух видах. Только, хоть убейте, не понял, что вы ей собрались делать...
← →
Anatoly Podgoretsky © (2009-07-14 11:49) [85]> Kris_ (14.07.2009 11:39:22) [82]
Вроде есть, но не уверен, но не обязательно в VBScript, может быть в WSH .
← →
Anatoly Podgoretsky © (2009-07-14 11:50) [86]> Kris_ (14.07.2009 11:42:23) [83]
Может и может в Эксель, но в ОО вряд ли, поэтому тебя и пытают, почему ОО
← →
Kris_ © (2009-07-14 12:12) [87]
> Может и может в Эксель, но в ОО вряд ли, поэтому тебя и
> пытают, почему ОО
Анатолий, я же объяснила почему. Меня по-моему тут уже запытали не только этим.
> Только, хоть убейте, не понял, что вы ей собрались делать.
> ..
Увы, еще раз объяснять не имеет смысла. Если есть эта функция, то это отлично, это хороший выход.
Программу поменять нет проблемы, вообще-то. Обычно я делаю обновление сразу, выкладываю, и при запуске все скачивается через сеть (или интернет) моментально.
Кстати, еще вопрос.
Объясните еще раз, пожалуйста, что именно содержится в вашем примере в Reporter, а то я про свое думаю, видимо еще недопоняла. ЭТо объект со свойством Data (массив) в котором содержатся входные данные для скрипта (собственно, отчета). Так? Подключаем мы его из программы командой AddObject, для того, чтоб он стал виден скрипту. Верно?
И еще - как отлаживать скрипт и где смотреть, к примеру, справку по командам? в экселе встроенная справка по языку - оно или нет?
А где справка по WSH?
← →
Kris_ © (2009-07-14 12:14) [88]Skyle, а еще вопрос - как вернуть значение из скрипта в программу? А если надо массив вернуть?
← →
Anatoly Podgoretsky © (2009-07-14 12:24) [89]> Kris_ (14.07.2009 12:12:27) [87]
Так я понял объяснение, но разве это что то меняет, поддержка ОО пока еще очень, очень ограничена. Теоритически можно работать с ОО как с COM/OLE но нужна библиотека типов и непонятно как ее импортировать. Я не настолько знаком с WSH.
WSH слишком мощный и гигантский инструмент, у него нет даже ограничения по языкам и может работать с любыми COM/OLE объектами, но это надо уметь, а уметь здесь мало народу, все таки мы все ориентированы на Дельфи.
И вопрос по справке - справка у Микрософта, кое какие огрызки есть у меня на сайте, примеры и некоторая методика работы, смотри папку http://www.podgoretsky.com/ftp/Docs/WSH/ но там мало, всего три статьи, основной упор надо делать на Микрософт.
← →
Kris_ © (2009-07-14 12:30) [90]
> поддержка ОО пока еще очень, очень ограничена.
интересно - что вы имели ввиду - кем или чем ограничена?
> работать с ОО как с COM/OLE но нужна библиотека типов и
> непонятно как ее импортировать.
куда?
← →
Skyle © (2009-07-14 12:32) [91]Отвечаю по порядку.
> Kris_ © (14.07.09 12:12) [87]
> Увы, еще раз объяснять не имеет смысла
Это печально. А то может VBscript"овые Eval и Execute делают не совсем то, что ваш FoxPro"шный Evaluate. Ну да ладно, посмотрите справку, решите.
> что именно содержится в вашем примере в Reporter
Я вам писал с позиции, что статью из [0] вы всё-таки прочитали. Начиная со слов "Модель расширения TScriptControl". Reporter, это ActiveX, добавленный в вашу программу. Он экспортирует некий интерфейс, который содержит необходимый вам фукнционал, например доступа к данным и прочего.
В моём примере его интерфейс содержит метод QueryOpen, который возвращает результат выполения запроса к базе данных (да, исхожу из того, что вы всё-таки перенесли свои большие файлы OOo в БД, хотя это необязательно). Чтобы скрипту стали видны наши методы, мы должны добавить наш интерфейс в окружение этого самого скрипта с помощью ScriptControl.AddObject. Первый параметр - имя, под которым он будет доступен коду скрипта.
> ЭТо объект со свойством Data
Видимо вы незнакомы с VBScript, потому что в моём примере Data - это переменная, объявленная в скрипте, она используется для получения результатов вызова QueryOpen.
> как отлаживать скрипт
Да как обычно.. Написали, запустили, исправили, опять запустили. Вроде есть где-то отладчики, но я никогда не интересовался подробно.
> где смотреть, к примеру, справку по командам
В MSDN как водится...
> в экселе встроенная справка по языку - оно или нет?
Там справка по VBA, это немного другое. В принципе тот же VBScript, только ему много раз сделали AddObject и по мотивам этого написали справку. По самому языку справку ищите в MSDN.
> Kris_ © (14.07.09 12:14) [88]
> Skyle, а еще вопрос - как вернуть значение из скрипта в
> программу? А если надо массив вернуть?
Ничего вам не мешает добавить в свой Reporter соответствующий метод или свойство. Я в одной из своих программ выставлял в скрипт что-то типа датасета. И заполнялся этот датасет именно скриптом, а потом в программе я его уже использовал.
← →
Kris_ © (2009-07-14 12:44) [92]Skyle, большое спасибо за терпение
> А то может VBscript"овые Eval и Execute
если Eval и Execute , то они делают совсем не то. EVALUATE() в фокспро - эта функция имеет параметром строку кода, который выполняет, это выражение с переменными. Фокс - интерпретатор, может выполнить в рантайм строчку кода без проблем. Надеюсь, что и VBScript это каким-то образом умеет.
Про остальное теперь мне более ясно, с VBScript я не знакома, лишь читала эту и еще вот эту статью
http://www.delphikingdom.ru/asp/viewitem.asp?UrlItem=/helloworld/activescript.htm
ну еще Delphi и COM того же автора
все :)
← →
Skyle © (2009-07-14 12:53) [93]
> Kris_ © (14.07.09 12:44) [92]
> Skyle, большое спасибо за терпение
>
> > А то может VBscript"овые Eval и Execute
>
> если Eval и Execute , то они делают совсем не то. EVALUATE()
> в фокспро - эта функция имеет параметром строку кода, который
> выполняет, это выражение с переменными. Фокс - интерпретатор,
> может выполнить в рантайм строчку кода без проблем. Надеюсь,
> что и VBScript это каким-то образом умеет.
VBScript тоже интерпретируемый язык, поэтому конечно он это умеет.
Посмотрите справку
Eval
http://msdn.microsoft.com/en-us/library/0z5x4094(VS.85).aspx
Execute
http://msdn.microsoft.com/en-us/library/03t418d2(VS.85).aspx
← →
Dennis I. Komarov © (2009-07-14 13:04) [94]Совсем девушку замучили... или она...
> Kris_ ©
Вам просто хотят сказать, что привязываться к некой конкретной программе (в частности ОО) не есть хорошо. Если программа работает с неким набором данных, то не верно передавать их ей в формате некой конкретной программы. Логичнее было бы сконвертировать этим средством (к которому все очень прикипели) данные в некий универсатьный формат. Например сохранить в формате dbf (и Excel и Calc сие умеют), написать макрос который выгрузит данные в нужном формате (если dbf не угодил) и т.д. и т.п.
← →
Anatoly Podgoretsky © (2009-07-14 13:23) [95]
> интересно - что вы имели ввиду - кем или чем ограничена?
Ограничена любителями, более серьезной поддержки на уровне системы и Дельфи нет, в отличии от МС Офиса
← →
Kris_ © (2009-07-14 14:49) [96]
> Ограничена любителями, более серьезной поддержки на уровне
> системы и Дельфи нет, в отличии от МС Офиса
сорри, но не вижу в этом никакой проблемы. Все замечательно автоматизируется, моими пользователями используется и т.д. Я же объяснила - что у нас все перешли уже на ОО, т.е. не в одной отдельно взятой фирме, а в городе. И в плане универсальности все оки. Можно выдать в ОО, а затем - хочешь в эксель, хочешь в rtf. Не вижу ни проблем ни ограничений. Но это уже офф. Надоело, если честно это обсуждать. Тема была в другом.
Skyle,
>Execute Statement
Executes one or more specified statements.
Вполне себе сойдет. Спасибо за прекрасные ссылки.
← →
Inovet © (2009-07-14 16:21) [97]> [8] Kris_ © (13.07.09 20:46)
> turbouser,
> Все прочие компоненты отпадают потому, что их нельзя добавить
> в турбо-дельфи. т.е. добавить можно лишь в рантайм. Я с
> трудом это себе представляю с генератором отчетов.
Да ну. Как раз в случае с ФР самый правильный подход.
← →
TDelphi © (2009-07-15 12:14) [98]Ребят я прочитал весь этот "трактат" и выражаясь сленгом "ниасилил" :)
Присоединяюсь к БарЛог ©
Страницы: 1 2 3 вся ветка
Текущий архив: 2009.09.13;
Скачать: CL | DM;
Память: 0.66 MB
Время: 0.018 c