FR4 не могу вызвать функцию COPY...

Привествую.Вопрос по FR4 Demo. Незнаю как там в полной версии обстоит.В общем все очень странно.Создал тупо простой отчет пустой.Кинул Мемо и в нем прописал текст: [COPY([F], 1, 1)]Т.е. вывести переменную из переменной F первую букафку.Далее в скриптовой части:var // Глобальная часть скрипта F: string; procedure Memo16OnBeforePrint(Sender: TfrxComponent);beginF := 'dg'; // Просто присваиваю значение *************;И собситвенно запускаю предпросмотр.НА что вылетает ошибка:The following error(s) have occured:Memo16: Could not convert variant of type (Array Variant) into type (String)Причем если в Мемо прописать так:[COPY('sdf', 1, 1)]то усе работает...ЧТо не так - хелп плиз.... Мне надо из поля БД вывести некоторые символы из строкового поля.НА FR регатся надо да и на ентом форуме отвечают СУПЕР оперативно. ТАк что решил что тут быстрее написать...
5 ответов

Нашел где трабл... В ФР4 синтаксис отличен в зависимости от того куда втыкать код и какую переменную юзать... Если из списка Variant то юзаим [] если описаную в скрипте то <>.... Вот и все... Мдя.... и зачем было так извращатся......... В общем проблема решилась методом тыка -заменой кавычек на противоположные


В FR есть определенное правило: квадратные скобки внутри выражения можно использовать только в случае массивов или списков. Пример:в коде:
<b>var</b> l: TStringList;
...
l.add('asdf');
в текстовом поле[copy(l[0], 1, 1)]Такая запись прокатит. Любая другая - нет.В твоем случае надо было просто написать [COPY(F, 1, 1)]


Подскажите плиз и еще кое что. Снова застрял )Теперь мне надо вызвать UserFunction из скрипта и присвоить результат переменной описаной в скрипте. ПРототип функци таков
AddMethod('function SomeFunc(Index: integer; S: array of Variant; StringPar: string): Variant' ,CallMethod, 'ctOther','');
S енто массив вариантов. Так вот, мне надо туда передать число вычисляющееся в процессе построения отчета ))))))))))там должно быть 3 параметра: string, string, integer;Вот так я счас вызываю енто дело (весь скрипт привожу он маленький):
<b>var</b> SkladInfo: <b>string</b>; Id_Client: integer;
<b>procedure</b> MasterData1OnBeforePrint(Sender: TfrxComponent); <b>begin</b> <i>// Пробовал и напрямую задавать в функции и через переменную (вот тут через переменную)</i> Id_Client :=<Master."ID_CLIENT">; <i>// Вызываю функцию передаю ей параметры.</i> SkladInfo := SomeFunc(<b>1</b>,['Naklad_Info','Stock',Id_Client],'');
<b>end</b>;
<b>begin</b>
<b>end</b>.
и вылетает ошибка при подготовке отчета.---------------------------Debugger Exception Notification---------------------------Project GlobalProject.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (String)'. Process stopped. Use Step or Run to continue.---------------------------OK Help ---------------------------У мя демоверсия не могу поглядеть в исходниках на каком там месте ругается. Но ссылается на fs_iinterpreter.pas.Не пойму что уже я не так делаю... Вызываю все без скобочек вообще... но не работает.Причем если я вызываю так: SkladInfo := SomeFunc(1,['Naklad_Info','Stock',123],''); т.е. вместо Id_Client передаю просто константу то ВСЕ РАБОТАЕТ.. Объясните плиз как надо вызывать функцию и передать ей параметр расчитаный в скрипте, а то я совсем уже запутался ((Формат функции у меня такой мутный потому что другого варианте нету...ПРИЧЕМ если в мемо прописать этот же вызов с переменной (обернув только в квадратики), то все работает !. Т.е. такой код если прописать в мемо работает:[SomeFunc(1,['Naklad_Info','Stock',Id_Client],'')]а в скрипте не могу найти как сделать присвоение... Запутался я уже ) Хелп плиз.


Хм... Чудеса...Заработало как тока сменил тип SkladInfo: string;наSkladInfo: Variant;Чудеса.Кстати там хранится число в общем то... Но я вообще то ее в виде строки передавал...НЕ пойму почему заработало после смены типа..... Оччень странно..... Хотелось бы понять почему...


А ну я все понял. я тупил... угу прототип функции возвращает Variant. Пришлось заюзать временную перменную типа String и написать такой кодTempStr := VarToStr (SkladInfo);кау увсе заработало...Просто я предпологал что все произойдет неявно... Т.к. я в функии возвращаю Стринг то и в отчете сразу принимал стринг... Но ФастРепорт почему то ен хотел неявно преобразовывать в стринг... В общем ок запомню енту проблемку - надо явно преобразовывать.. ок. Не проблема в общем то...