Пользовательская функция - передача параметра
Евгений Пришко
Украина, Харьков
Доброго дня, уважаемые!
сегодня столкнулся с интересной ситуацией при написании своей функции.
поскольку она (функция) нужна в только в одно отчете, то решил не добавлять ее в общий набор, асделать через OnUserFunction.
в качестве параметров передавал следующее:
параметр 1 - цифра
параметр 2 - строка, результат выполнения функции [copy([датасет."поле"],1,столько-то)]
т.е. в скрипте это выглядело так
для бэнда уровня 1
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 2)])];
для бэнда уровня 2
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 4)])];
для бэнда уровня 3
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 6)])];
2,4,6 - это длина, которая зависит от уровня вложености бэнда
на входе в обработчик OnUserFunction значение второго параметра было равно [copy([setRResult."hierarchy"],1, 2)], т.е. функция не выполнялась
вопрос 1:
почему не выполнялось вычисление второго параметра?
варианты ответа:
1 мне надо пофиксить руки
2 где чего-то глючит
3 ваш вариант
вопрос 2:
что сделать, чтобы я получал значение выражения , а не само выражение ?
сегодня столкнулся с интересной ситуацией при написании своей функции.
поскольку она (функция) нужна в только в одно отчете, то решил не добавлять ее в общий набор, асделать через OnUserFunction.
в качестве параметров передавал следующее:
параметр 1 - цифра
параметр 2 - строка, результат выполнения функции [copy([датасет."поле"],1,столько-то)]
т.е. в скрипте это выглядело так
для бэнда уровня 1
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 2)])];
для бэнда уровня 2
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 4)])];
для бэнда уровня 3
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 6)])];
2,4,6 - это длина, которая зависит от уровня вложености бэнда
на входе в обработчик OnUserFunction значение второго параметра было равно [copy([setRResult."hierarchy"],1, 2)], т.е. функция не выполнялась
вопрос 1:
почему не выполнялось вычисление второго параметра?
варианты ответа:
1 мне надо пофиксить руки
2 где чего-то глючит
3 ваш вариант
вопрос 2:
что сделать, чтобы я получал значение выражения , а не само выражение ?
Комментарии
Ты не поверишь, но при вызове твоей функции вообще не вычисляется значение ни первого, ни второго и не третьего (если он есть конечно) параметра )
Хороший вариант )
Наврядли ...
Вообще не плохобы почитать доку, ну раз руки уже пофиксены и до хелпа им уже не дотянуться, то приведу кусок кода прямо сюда:
procedure frReportUserFunction(const Name: String; p1, p2, p3: Variant;
var Val: Variant);
var Param1:Integer;
Param2:String;
begin
Param1:=frParser.Calc(p1);
Param2:=frParser.Calc(p2);
Val:=GetParentName(Param1,Param2);
end
вызывал я parser.calc(param2)...
результат при param2 имеющем вид [copy([setRResult."hierarchy"],1, _2_)]
(выделнная цифра меняется) всегда был 0
а должна быть строка минимум из 2-символов
так что, может руки и надо фиксить, но до законченного ламера мне (я недеюсь) далеко