Как передать значение переменной в скрипт?
bor
Москва
Есть такая проблема:
Имеется отчет (компонент TfrxReport). В нем на странице кодов (то есть в скрипте) - переменная int N.
Хочу из программы присвоить ей значение
frxReport1->Script->Variables["N"] = 2;
frxReport1->ShowReport();
Выдается сообщение "Идентификатор N переопределен".
В документации сказано, что если переменной нет, она будет создана, в противном случае ей просто присвоится значение.
Отказаться от описания переменной в скрипте не могу, т.к. значение для нее иногда должно передаваться, а иногда нет. В последнем случае FR будет ругаться на то, что переменная не определена.
Функция frxReport1->Script->Find("N") выдает NULL, то есть переменная не видится (следовательно, при присвоении значения
пересоздается). Почему, собственно, она не видится?
Как это обойти?
Имеется отчет (компонент TfrxReport). В нем на странице кодов (то есть в скрипте) - переменная int N.
Хочу из программы присвоить ей значение
frxReport1->Script->Variables["N"] = 2;
frxReport1->ShowReport();
Выдается сообщение "Идентификатор N переопределен".
В документации сказано, что если переменной нет, она будет создана, в противном случае ей просто присвоится значение.
Отказаться от описания переменной в скрипте не могу, т.к. значение для нее иногда должно передаваться, а иногда нет. В последнем случае FR будет ругаться на то, что переменная не определена.
Функция frxReport1->Script->Find("N") выдает NULL, то есть переменная не видится (следовательно, при присвоении значения
пересоздается). Почему, собственно, она не видится?
Как это обойти?
Комментарии
Но как это согласуется с описанием в документации?
И вторая часть вопроса - почему переменная не видится функцией Find?
Если у вас переменная фастрепорта (fx), то:
Рискуя показаться назойливым, повторю вторую часть вопроса - почему описанная в скрипте переменная не видится функцией Find?
При этом переменную в скрипте можно использовать без объявления.
Это уже вопрос к разработчикам...
Но, думаю, find вам и не придется использовать...
Все скриптовые переменные становятся видимыми движку FR только прсле срабатывания функции PrepareScript (вызывается автоматически при подготовке отчета).
До сего момента скрипт - всего лишь StringList. Именно поэтому не работает Find, а ранее объявленная в скрипте переменная при присвоении значения определяется как бы во второй раз.
Принудительный вызов PrepareScript не решает проблему, поскольку последующий вызов PrepareReport (а в нем, соответственно, штатно вызывается PrepareScript) обнуляет все списки переменных скрипта и заполняет их заново.
Попробую пошуршать в исходниках, чтобы изменить порядок вызова функций.
О результатах доложу.
Всем спасибо!
Все будет работать.