Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
Ну, например, случилось обращение к несуществующему элементу массива. Высветилось сообщение - и все, привет.
А скрипт, зараза, здоровенный. И "отладчик" - слёзы. Поди найди, в какой строке сие произошло.

Не разбирался ли кто с данной "проблемой"?

К сообщению приложен файл. Размер - 31Kb
2 мар 19, 23:50    [21823498]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
DimaBr
Member

Откуда:
Сообщений: 10994
ShowMessage(Code.ErrorPos+':'+ Code.ErrorMsg);
3 мар 19, 00:39    [21823514]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
asviridenkov
Member

Откуда:
Сообщений: 3899
По хорошему им нужно сделать режим в котором при исключении на экран будет выводиться дебагер, аналогично IDE
3 мар 19, 01:20    [21823526]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
DimaBr
ShowMessage(Code.ErrorPos+':'+ Code.ErrorMsg);

Где это применить?
3 мар 19, 01:26    [21823527]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
DimaBr
Member

Откуда:
Сообщений: 10994
В коде Delphi
3 мар 19, 02:25    [21823536]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
DimaBr
Member

Откуда:
Сообщений: 10994
Если в отчёте, то выполняйте его в режиме отладки. Наставьте брейкпоинтов.
3 мар 19, 02:34    [21823538]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
DimaBr
Если в отчёте, то выполняйте его в режиме отладки. Наставьте брейкпоинтов.

Да так и делаю, только скрипт длинный, по две-три тысячи строк. Откроешь древний отчет, а там жуть с рогами, какую-нибудь мелочь поменять непросто, в рантайме почти никакой диагностики. Номер строки, имя контрола, имя процедуры - почему бы не отображать?
3 мар 19, 05:42    [21823553]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
DimaBr
Member

Откуда:
Сообщений: 10994
Фэйтл Эра
в рантайме почти никакой диагностики. Номер строки, имя контрола, имя процедуры - почему бы не отображать?

Потому что сделано не для людей, к сожалению. Погремушка на коленке...
4 мар 19, 00:13    [21823933]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
gpi
Member

Откуда: г. Волноваха, Украина
Сообщений: 706
FR 6.3.1 FRDemo Calendar report
begin
  Year := 2014;

  Months[1] := 'January';
  Months[2] := 'February';
  Months[3] := 'March';
  Months[4] := 'April';
  Months[5] := 'May';
  Months[6] := 'June';
  Months[7] := 'July';
  Months[8] := 'August';
  Months[9] := 'September';
  Months[10] := 'October';
  Months[11] := 'November';
  Months[12] := 'December';
  ShowMessage(Months[13]);

Картинка с другого сайта.
4 мар 19, 16:09    [21824592]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
DimaBr
Member

Откуда:
Сообщений: 10994
gpi
FR 6.3.1 FRDemo Calendar report

Вам вопрос про FR4 задают, а не про последний билд.
4 мар 19, 22:34    [21824872]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
Vlad F
Member

Откуда:
Сообщений: 781
DimaBr,

А вы еще на Delphi 1 и его отчетники ссылайтесь. У меня как раз из его коробки осталась одна, теперь уже, однозначно коллекционная, книжка.
4 мар 19, 22:49    [21824883]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
gpi
Member

Откуда: г. Волноваха, Украина
Сообщений: 706
DimaBr
gpi
FR 6.3.1 FRDemo Calendar report

Вам вопрос про FR4 задают, а не про последний билд.

В FR 4 номер строки с ошибкой не отображается, в FR 5.6.18 - уже отображается
4 мар 19, 23:09    [21824892]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
gpi
DimaBr
пропущено...

Вам вопрос про FR4 задают, а не про последний билд.

В FR 4 номер строки с ошибкой не отображается, в FR 5.6.18 - уже отображается

И что?
Нафталина нет, возьмите гуталин?
5 мар 19, 09:34    [21825061]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
DimaBr
Member

Откуда:
Сообщений: 10994
procedure TForm1.FormCreate(Sender: TObject);
begin
  frxReport1.Script.OnRunLine := MyRunLine;
end;

procedure TForm1.MyRunLine(Sender: TfsScript; const UnitName, SourcePos: String);
begin
  Memo1.Lines.Add(SourcePos);
end;
5 мар 19, 10:47    [21825143]     Ответить | Цитировать Сообщить модератору
 Re: FastReport 4: как узнать номер строки скрипта, в которой произошла ошибка?  [new]
gpi
Member

Откуда: г. Волноваха, Украина
Сообщений: 706
Фэйтл Эра
gpi
пропущено...

В FR 4 номер строки с ошибкой не отображается, в FR 5.6.18 - уже отображается

И что?
Нафталина нет, возьмите гуталин?

Можно попробовать перетащить код из текущего FS в FS десятилетней давности
+
 Source/fs_iinterpreter.pas | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/Source/fs_iinterpreter.pas b/Source/fs_iinterpreter.pas
index 23e2785..abef546 100644
--- a/Source/fs_iinterpreter.pas
+++ b/Source/fs_iinterpreter.pas
@@ -175,6 +175,7 @@ type
     FIncludePath: TStrings;
     FUseClassLateBinding: Boolean;
     FEvaluteRiseError: Boolean;
+    FLastSourcePos : String;
     function GetItem(Index: Integer): TfsCustomVariable;
     procedure RunLine(const UnitName, Index: String);
     function GetVariables(Index: String): Variant;
@@ -3004,10 +3005,21 @@ procedure TfsStatement.Execute;
 var
   i: Integer;
 begin
+  FProgram.ErrorPos := '';
   for i := 0 to Count - 1 do
   begin
     if FProgram.FTerminated then break;
-    Items[i].Execute;
+    try
+      FProgram.FLastSourcePos := Items[i].FSourcePos;
+      Items[i].Execute;
+    except
+      on E: Exception do
+       begin
+         if FProgram.ErrorPos = '' then
+           FProgram.ErrorPos := FProgram.FLastSourcePos;
+         raise;
+       end;
+    end;
     if FProgram.FBreakCalled or FProgram.FContinueCalled or
       FProgram.FExitCalled then break;
   end;
@@ -3383,6 +3395,7 @@ begin
       begin
         FProgram.SetVariables('ExceptionClassName', E.ClassName);
         FProgram.SetVariables('ExceptionMessage', E.Message);
+        FProgram.ErrorPos := FProgram.FLastSourcePos;
         ExceptStmt.Execute;
       end;
     end;
@@ -3400,7 +3413,6 @@ begin
   end;
 end;

5 мар 19, 14:12    [21825385]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить