Ошибка в выражении '01.04.2005': ';' expected
Есть переменная отчёта: FASTDATAN
В неё внесена переменная типа TDateTime - 01.04.2005.
В скрипте в заглавном модуле значение этой переменной присваивается переменной DOA-запроса
DOAQuery1.setVariable('P_datan', Get('FastDataN'));
После этого запрос переоткрывается.
Первый раз присвоение проходит нормально.
При повторном запуске отчета (при отладке) выдаётся ошибка:
*********************************************
Ошибка в выражении '01.04.2005': ';' expected
*********************************************
Только что попытался на втором запуске посмотреть тип
ShowMessage(IntToStr(VarType(Get('FastDataN'))));
на этой строке вылазит уже с вместе MasterData1
*********************************************
MasterData1: Ошибка в выражении '01.04.2005': ';' expected
*********************************************
Значение переменной в скрипте не трогаю.
Что это значит?
Отлаживаться невозможно, работать надо.
С уважением, Андрей
В неё внесена переменная типа TDateTime - 01.04.2005.
В скрипте в заглавном модуле значение этой переменной присваивается переменной DOA-запроса
DOAQuery1.setVariable('P_datan', Get('FastDataN'));
После этого запрос переоткрывается.
Первый раз присвоение проходит нормально.
При повторном запуске отчета (при отладке) выдаётся ошибка:
*********************************************
Ошибка в выражении '01.04.2005': ';' expected
*********************************************
Только что попытался на втором запуске посмотреть тип
ShowMessage(IntToStr(VarType(Get('FastDataN'))));
на этой строке вылазит уже с вместе MasterData1
*********************************************
MasterData1: Ошибка в выражении '01.04.2005': ';' expected
*********************************************
Значение переменной в скрипте не трогаю.
Что это значит?
Отлаживаться невозможно, работать надо.
С уважением, Андрей
Комментарии
в первый раз - нет
function TfrxReport.DoGetValue выдаёт:
в первый раз TVarData(val).VType <> varString
в второй раз TVarData(val).VType = varString
begin
ShowMessage(IntToStr(VarType(Get('FastDataN'))));
end.
и в проекте присвоить переменной значение
activeReport.Variables := Null;
activeReport.Variables := Date;
И вызвать пару раз из design'ера
procedure TfrxReport.DoClear;
begin
.........
FVariables.Clear;
и сразу после этого вызывается
procedure TfrxReport.ReadVariables(Reader: TReader);
begin
frxReadCollection(FVariables, Reader, Self);
end;
при этом все переменные преобразуются к типу string,
т.к. тип их нигде не указан.
в procedure frxReadCollection
вызов Reader.ReadString возвращает строку
' Name="FASTDATAN" Value="01.04.2005"'
*************************************
ЧТО ДЕЛАТЬ?
Где гарантия, что я потом получу правильно значение при обратной конвертации?
Что не вылезут точки/запятые в числах и точки/слэши в датах?
Почему вообще меняется тип переменой?
Почему я в тип VARIANT(!) должен писать только строку?
*************************************************
Я уже сделал по-другому - через Script.Variables
activeReport.Script.Variables[strName] := AllBPLSParams.arrVar.Value;
Так вроде работает.
С уважением, Андрей
Можно ли в переменных использовать тип, отличный от string?
В документации сказано, что можно.
А в жизни?
1) перед каждым вызовом отчета устанавливать переменные
2) установить TfrxReport.EngineOptions.DestroyForms = False, чтобы переменные не перечитывались из временного потока.
Загружается общая форма из dll.
Из неё грузится .fr3
Для каждого .fr3 у нас существует список настроечных параметров.
Эти параметры можно менять из общей формы.
Затем они передаются в .fr3.
После этого идет ShowReport.
Также эта общая форма используется и для настройки макетов.
Пока мне не представляется возможным использовать вариант 1 (как в дизайнере переустановить переданные извне переменные?), а вариант 2 я просто слабо себе представляю.
Буду пока через Script.Variables.
Спасибо.
Андрей