Пользовательские функции
суть:
в проекте на c#
подключаю пользовательскую функции:
InitReport(TfrxReportClass frx)
{
...
frx.AddFunction("function FindRecord(sql:string,Title: string): Long", "User functions", "sql - запрос ;Title - Заголовок окна, на выходе либо номер записи, либо -1, если ничего не найдено");
frx.AddFunction("function IntToNumStr(Value:ulong,Sex:int): String", "User functions", "value - Целое число, Sex - 1 - муж. 0 - жен. род, на выходе - число прописью");
frx.AddFunction("function toStr(Value:object): String", "User functions", "value - Varifyn,на выходе - строка");
frx.OnUserFunction += new IfrxReportEventDispatcher_OnUserFunctionEventHandler(OnUserFunction);
...
}
определяю обработчик
private void OnUserFunction(string FunctionName, object Argument, out object ResultValue)
{
System.Array arg = (Array)Argument;
long ret=-1;
string s="";
switch (FunctionName)
{
case "FINDRECORD":
try
{
if (!select_form.SelectValue(null, dbu.readSQLTable(parseVariable(arg, 0).ToString(), "Table"), "", out s, out ret, "", parseVariable(arg, 1).ToString()))
ret = -1;
}
catch { }
ResultValue = ret;
break;
case "TOSTR":
ResultValue= parseVariable(arg, 1).ToString();
break;
case "INTTONUMSTR":
ulong l = Convert.ToUInt64(parseVariable(arg, 0));
bool b = Convert.ToBoolean(parseVariable(arg, 1));
ResultValue = NumByWords.NumPhrase(l, ;
break;
default:
ResultValue = "Undefined user function: " + FunctionName;
break;
}
}
private object parseVariable(Array a, int i)
{
object r;
try
{
r = ((Array)a.GetValue(i)).GetValue(0);
}
catch
{
r = a.GetValue(i);
}
return r;
}
в теле отета делаю вызовы
[IntToNumStr([1234567890],[1])]
[toStr([1234567890])]
отрабатывают нормально
добавляю запрос
select num from table
выпечатываю поле NUM из запроса -
[q."num"]
- все пока работает.
А потом добавляю на мастердате вот такую фигню:
[toStr([q."num"])]
и все взрывается, не доходя до обработчика пользовательских функций : Error ni expression 'toStr(q."num")':Identificator exspected
Что бы это значило?
в проекте на c#
подключаю пользовательскую функции:
InitReport(TfrxReportClass frx)
{
...
frx.AddFunction("function FindRecord(sql:string,Title: string): Long", "User functions", "sql - запрос ;Title - Заголовок окна, на выходе либо номер записи, либо -1, если ничего не найдено");
frx.AddFunction("function IntToNumStr(Value:ulong,Sex:int): String", "User functions", "value - Целое число, Sex - 1 - муж. 0 - жен. род, на выходе - число прописью");
frx.AddFunction("function toStr(Value:object): String", "User functions", "value - Varifyn,на выходе - строка");
frx.OnUserFunction += new IfrxReportEventDispatcher_OnUserFunctionEventHandler(OnUserFunction);
...
}
определяю обработчик
private void OnUserFunction(string FunctionName, object Argument, out object ResultValue)
{
System.Array arg = (Array)Argument;
long ret=-1;
string s="";
switch (FunctionName)
{
case "FINDRECORD":
try
{
if (!select_form.SelectValue(null, dbu.readSQLTable(parseVariable(arg, 0).ToString(), "Table"), "", out s, out ret, "", parseVariable(arg, 1).ToString()))
ret = -1;
}
catch { }
ResultValue = ret;
break;
case "TOSTR":
ResultValue= parseVariable(arg, 1).ToString();
break;
case "INTTONUMSTR":
ulong l = Convert.ToUInt64(parseVariable(arg, 0));
bool b = Convert.ToBoolean(parseVariable(arg, 1));
ResultValue = NumByWords.NumPhrase(l, ;
break;
default:
ResultValue = "Undefined user function: " + FunctionName;
break;
}
}
private object parseVariable(Array a, int i)
{
object r;
try
{
r = ((Array)a.GetValue(i)).GetValue(0);
}
catch
{
r = a.GetValue(i);
}
return r;
}
в теле отета делаю вызовы
[IntToNumStr([1234567890],[1])]
[toStr([1234567890])]
отрабатывают нормально
добавляю запрос
select num from table
выпечатываю поле NUM из запроса -
[q."num"]
- все пока работает.
А потом добавляю на мастердате вот такую фигню:
[toStr([q."num"])]
и все взрывается, не доходя до обработчика пользовательских функций : Error ni expression 'toStr(q."num")':Identificator exspected
Что бы это значило?
Комментарии
[toStr(<q."num">)]