Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Лицензия FastReport за багрепорты и багофиксы

Автор: GloThin
Дата сообщения: 06.02.2007 13:33
royt

Цитата:
"если вы нашли баг, и его пофиксили..."

Имеется в виду, что баг пофиксен методом правки исходников ФР.

Цитата:
кто должен пофиксить баг? Тот, кто о нем заявил?

Кто угодно: за данное действие сделавший это получает больше баллов чем за просто багрепорт.

Цитата:
Или просто указать место в исходниках?

Место то по-любому надо указывать, включая измененные строки с комментариеь //fix или типа того.

Цитата:
а где вообще взять исходники, если лицензии нету

получить ПРо-версию ФР по расценкам в шапке или поискать в сети(тоже может удастся).

Цитата:
Или достаточно описать причины, при которых баг возникает

Это и называется багрепорт.

З.Ы. добавлена ссылка на пост в шапку.
Автор: Delphis11
Дата сообщения: 08.02.2007 14:28
Если в отчете (FastReport 4.1) на страницу "Данные" положить компонент TfrxADOTable или TfrxADOQuery или TfrxBDETable или TfrxBDEQuery, одним словом, любого наследника от TfrxCustomDataset то наблюдаются следующие неприятные вещи

1. У компонентов в инспекторе присутствует свойство "Master" но при этом отсутствует "MasterFields" (одно без другого не имеет смысла)
2. Если настроить свойство "Master" (установить ссылку на другой набор данных), затем сохранить отчет, закрыть его и открыть снова, или же просто сделать предварительный просмотр, то свойство "Master" обнуляется (сбрасывается в "(не определен)")

Соответственно лечение этих двух багов таково:


unit frxCustomDB;

interface

// .......................................................................................

type
TfrxCustomDataset = class(TfrxDBDataSet)
private
FDBConnected: Boolean;
FDataSource: TDataSource;
FMaster: TfrxDBDataSet;
FMasterFields: String;
//Change
FMasterName: string;
function GetMasterName: string;
procedure SetMasterName(const Value: string);
//EndChange
procedure SetActive(Value: Boolean);
procedure SetFilter(const Value: String);
procedure SetFiltered(Value: Boolean);
function GetActive: Boolean;
function GetFields: TFields;
function GetFilter: String;
function GetFiltered: Boolean;
procedure InternalSetMaster(const Value: TfrxDBDataSet);
procedure InternalSetMasterFields(const Value: String);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure SetParent(AParent: TfrxComponent); override;
procedure SetUserName(const Value: String); override;
procedure SetMaster(const Value: TDataSource); virtual;
procedure SetMasterFields(const Value: String); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure OnPaste; override;
property DBConnected: Boolean read FDBConnected write FDBConnected;
property Fields: TFields read GetFields;
//Change
//property MasterFields: String read FMasterFields write InternalSetMasterFields;
//EndChange
property Active: Boolean read GetActive write SetActive default False;
published
property Filter: String read GetFilter write SetFilter;
property Filtered: Boolean read GetFiltered write SetFiltered default False;
property Master: TfrxDBDataSet read FMaster write InternalSetMaster;
//Change
property MasterName: string read GetMasterName write SetMasterName;
property MasterFields: String read FMasterFields write InternalSetMasterFields;
//EndChange
end;

// .......................................................................................

implementation


// .......................................................................................

procedure TfrxCustomDataset.InternalSetMaster(const Value: TfrxDBDataSet);
begin
FMaster := Value;
if FMaster <> nil then
//Change
// FDataSource.DataSet := FMaster.GetDataSet
//else
// FDataSource.DataSet := nil;
begin
FDataSource.DataSet := FMaster.GetDataSet;
FMasterName := FMaster.UserName;
end
else
begin
FDataSource.DataSet := nil;
FMasterName := '';
end;
//EndChange
end;

//Change
function TfrxCustomDataset.GetMasterName: string;
begin
if not Assigned(Master) then
Result := FMasterName
else
Result := FMaster.UserName;
end;

procedure TfrxCustomDataset.SetMasterName(const Value: string);
begin
FMasterName := Value;
FMaster := frxFindDataSet(FMaster, FMasterName, Report) as TfrxDBDataSet;
end;
//EndChange

// .......................................................................................

initialization
frxObjects.RegisterObject1(TfrxDBLookupComboBox, nil, '', '', 0, 41);
//Change
frxHideProperties(TfrxCustomDataset, 'MasterName');
//EndChange
end.


Добавлено:
Еще, багами наверное не назовешь, но сделано, на мой взгляд не очень хорошо.

1. В документации нигде не сказано что название типов событий для собственных компонентов отчета должно обязательно начинаться на "Tfrx" и заканчиваться на "Event", собственно руководствуясь только этим инспектор отличает события от свойств. К тому же это не удобно для разработки собственных компонентов, так как нельзя дать типу свой префикс.

2. В модуле frxDesgnEditors описания классов всех редакторов свойств сделаны в секции implementation, соответственно, при написании собственных компонентов уже нельзя воспользоваться создаными редакторами, приходится тупо делать copy-past. Скажем если надо сделать у компонента свое свойство типа TfrxDataSet то зарегистрировать для его редактирования TfrxDataSetProperty никак не получится, придется повторять код класса TfrxDataSetProperty. ИМХО описания классов редаткоров свойств все же лучше было бы видеть в секции interface
Автор: My_Way
Дата сообщения: 22.03.2007 19:30
2 ALL
Акция продолжается,
очки посчитаны, смотрите шапку

Всем добавлено по семь призовых очков! В качестве компенсации за временную неактивность акции

За заработанным милости просим в ПМ:
с примерно таким сабжем "Прошу выдать честно заработанные мной продукты..." и перечисляем их в письме....
- если Вы еще не получали продукт и у Вас нет аккаунта на сайте FastReport, то
просьба в ПМ указать email и имя(можно ник) на которое регистрировать продукт;

- если у Вас уже есть аккаунт , то сообщите ваш логин или емаил.

Также все имеющие FR 3, могут бесплатно проапгрейдится до FR 4 той же версии:

для осуществления этого тоже нужно обязательно указать в ПМ, что то типа "Хочу проапгрейдить мой FR3 до FR4".

Ждем продолжения Вашей деятельности на ниве багоискательсьва и багофиксаторства.
Автор: Nicka_Grey
Дата сообщения: 22.03.2007 19:42
My_Way
С возвращением!!!
И спасибо.
Автор: feandy
Дата сообщения: 22.03.2007 21:23
My_Way
Ну вот и слава высшим кругам.
А то пропал совсем. Я уж грешным делом начал думать о черт знат чем
Автор: GloThin
Дата сообщения: 22.03.2007 21:43
My_Way
Да точна, с возвращением в родные пенаты, вернее в родной топик!
Тебя тут так все ждали, как с печи пирога!
Спасибо за подарки!
Можна продолжать творчество, не боясь что тебя не постигнет кара в виде лицензии на продукты от компании Фастрепорт!
Автор: vidic777
Дата сообщения: 23.03.2007 02:13
My_Way
Рады Вас видеть вновь.
Хочу сказать что данная акция компании очень конструктивна, прогрессивна, оригинальна в своем роде. Она позволяет как улучшить качество продукции так и позволяет легализоваться "неофициальным" пользователям. Такая акция идет только во благо всем !

Должен признаться, что написав сюда об ошибках, не расчитывал на то что мои старания буду замечены. Однако труды и не толко мои были замечены и вознаграждены.

Подводя итог хочу выразить благодарность компании Fast Reort Inc.

Спасибо огромное и удачи.
Автор: vadson6666
Дата сообщения: 23.03.2007 04:22
Вай, вай, хорошо, теперь можно будет потрогать и ФР 4, а троечку то совсем забросили....
Автор: Jedinichka
Дата сообщения: 30.03.2007 11:01
ммм... достаточно нелогично работают вертикальные бэнды
если положить на форму H и V бэнд, скажем с фиксированным количеством рядочков, то поведение при этом у отчета будет такое:

1. если нет компонента, целиком лежащего в V бэнде и цепляющего пересечение, то существование V бэнда игнорируется, и указанное число раз выводится H-бэнд со всеми своими компонентами. Содержимое V бэнда при этом один разок выводится там же, где нарисовано в дизайнере.

2. если такие компоненты есть, то они размножаются в виде таблички, все же прочие (т.е. лежащие в H-бэнде, но превосходящие размером пересечение, или лежащие в v-бэнде и пересечение не цепляющие), выводятся один раз

ИМХО во втором случае стоит выводить компоненты H-бэнда каждый раз, как он отрисовывается

Добавлено:
Итак, объекты горизонтального бэнда все-таки выводились, но при выполнении unstretcha их размеры сбрасывались в 0, и таким образом в расплющенном состоянии они лежали себе на отчете, невидимые никому.

Происходило это потому, что при вызове stretcha их габариты не запоминались, т.к. блокировался вызов BeforePrint

Код:
procedure TfrxEngine.Stretch(Band: TfrxBand);
...
begin
FCurBand := Band;
HaveSub := False;
NeedShift := False;
PrepareShiftTree(Band);

{ it is not necessary for vertical bands }
if Band <> FVMasterBand then {!!!!!!!!!!!!!!!!!!!!!!!!!!!}
begin
{ firing band OnBeforePrint event }
Report.CurObject := Band.Name;
Band.BeforePrint;
Report.DoBeforePrint(Band);
end;

{ firing OnBeforePrint events, stretching objects }
for i := 0 to Band.Objects.Count - 1 do
begin
c := Band.Objects[i];
if (c is TfrxSubReport) and TfrxSubReport(c).PrintOnParent then
HaveSub := True;

{ skip getdata for vertical bands' objects }
if Band <> FVMasterBand then {!!!!!!!!!!!!!!!!!!!!!!!!!!!}
begin
Report.CurObject := c.Name;
c.BeforePrint;
if Band.Visible then
begin
Report.DoBeforePrint(c);
if c.Visible then
begin
c.GetData;
Report.DoNotifyEvent(c, c.OnAfterData);
end;
end;
end;
Автор: Jedinichka
Дата сообщения: 31.03.2007 18:04
известный глюк с неправильной расцветовкой в code-editore fast-reporta (при вставке в середину текста фрагмента из более чем одной строки) лечится исправлением в модуле frxSynMemo метода TfrxSyntaxMemo.SetSelText


Код:
procedure TfrxSyntaxMemo.SetSelText(const Value: String);
...
begin
...
// ClearSyntax(p3.Y);
ClearSyntax(p1.Y);
end;
Автор: ArmD45
Дата сообщения: 01.04.2007 16:06
Delphi 7 upd1
FastReport 4.1.61_d7b
И такая же демо.

Ошибка с присвоением текста из кода программы какому-нибудь мемо

uses
frxClass;

proc.....
Var Memo1: TfrxMemoView;
begin dmReport.frxReport1.LoadFromFile(ExtractFilePath(Application.ExeName)+'report\AviaTicket.fr3');
Memo1 := dmReport.frxReport1.FindObject('Memo22') as TfrxMemoView;
Memo1.Text := 'NS';
dmReport.frxReport1.ShowReport();
end;

Отчет выводится но не присваивает в Memo1.Text нужное значение.



Добавлено:
Админы удалите плз мой пост выше и этот.
Ошибка в руках и мозгах.
Автор: Jedinichka
Дата сообщения: 02.04.2007 12:18
хм, я чесговоря в растерянности
после последнего исправления при открытии дизайнера репорта из приложения цвета ведут себя как положено
но встроенный в делфу дизайнер (такой же точно) все равно выводит их неправильно, хотя frxComponents я перепэкейджил

может frxScripts тоже надо?
Автор: Jedinichka
Дата сообщения: 03.04.2007 11:51
Кроме исправлленного случая, форматы плывут еще при использования ctrl-I, ctrl-U (indent, unindent) и при переключении на обработчик события по двойному щелчку в обжект-инспекторе (последнее трудноповторимо, надо сначала перещелкнуться на процедуру с неверным именем, затем с верным; че-то такое, однозначного контрольного примера не вышло)
Автор: Garrett
Дата сообщения: 04.04.2007 02:12
fr4_2_d10e.exe от 03.04.2007
Может и раньше было, не обращал внимания.
Если в объект "Текст" вписать однострочный текст, а потом форматировать его кнопками "выровнять по верхнему краю", "центрировать текст по вертикали", "выровнять по нижнему краю", то можно заметить, что выравнивание несколько смещено вниз.
Т.е. при выравнивании по верху, сверху всегда есть зазор, при центрировании - центр смещен вниз, а по нижнему краю, так вообще знак подчеркивания не выводится, а буквы типа "g" выводятся без нижней части.
Автор: Jedinichka
Дата сообщения: 13.04.2007 10:30
у вертикальных бэндов в списке свойств отсутствует имя!!!

Добавлено:
Кладем на страницу мастербэнд (*)
на него не около края (!) кладем сабрепорт
в сабрепорте делаем один мастербэнд (**), не подвязанный к бд с роукаунтом 1
и вертикальный бэнд
на их пересечении кладем какой-нибудь мем или шейп (***)
плюс на Хбэнде в сабрепорте кладем около края (!!) какой-либо шейп (****), больший чем пересечение с Вбэндом


в результате (****) будет выведен около края(!!) мастербэнда(*), то есть там, где он должен был бы вывестись относительно (**). С шейпами (***) все в порядке

Этот эффект наблюдается независимо от значения PrintOnParent у сабрепорта. Если этот флажок стоит в false (default-овое значение), то все бэнды сабрепорта сдвинуты вверх. Такое впечатление, будто (**) центрируется по вертикали относительно верхней границы (*)
Автор: ArmD45
Дата сообщения: 16.04.2007 16:14
Не знаю баг это или нет, но после установки fast report 4.2 Delphi 7 upd 1.1

Object Inspector в delphi стал упорно появлятся в левом нижнем углу.
Т.е. не сохраняет свои размеры и положение окна.

Здорово бесит.
Автор: Jedinichka
Дата сообщения: 21.04.2007 16:41
Даже если выложенному на masterband-е сабрепорту сделать BringToBack, он все-равно отрисуется последним и замажет собой прочие лежащие там компоненты.
Автор: Jedinichka
Дата сообщения: 22.04.2007 13:24
Это наверняка либо кем-то уже описано, либо считается фичей, но у шейпов нельзя убрать рамку. Не typ, не "width := 0" не действуют.
Автор: waik
Дата сообщения: 23.04.2007 17:02
Не знаю насколько это бага, но вполне воспроизводимая:
В среде (D2006) установлено fr256 и Fr4. В проекте на форме кинул TFRxReport и назвал его frReport. Закрыл и удалил fr256, руками. Запускаем проект - ругается на fr10.bpl и предлагает больше не грузить - соглашаюсь. Открываю форму - frReport от 4 FR изчезает. При компиляции предлогается и ссылки на него удалить. Восстановить можно (я открываю форму как текст из закладки History (которую среда ведёт) и тупо его копирую взад). Если назвать как то отлично от frReport то ничего такого не происходит... Смахивает на багу (за старую привычку в мелких проектах называть компоненты просто удаляя T не ругать - вроде всегда было можно, а тут убрал ещё и "x").

з.ы. Лицензия не нужна , просто сообщение.
Автор: Pentium133
Дата сообщения: 26.04.2007 12:34
Ну так это глюкан делфи. Причем тут FR...
Автор: Jedinichka
Дата сообщения: 29.04.2007 18:31
Это вероятно является фичей, однако очень неприятно: если поместить значение в текст у мемки, к примеру 'abc', то при вытаскивании получишь 'abs#$A#$D'.

Чтобы результат был равен исходному 'abc', можно переписать в ftxUnicodeStrings этот метод:


Код:
function TWideStrings.GetTextStr: WideString;
var
I, L, Size, Count: Integer;
P: PWideChar;
S, LB: WideString;
begin
Count := FWideStringList.Count;
Size := 0;
LB := sLineBreak;
for I := 0 to Count - 1 do Inc(Size, Length(Get(I)) + Length(LB));
if size >0 then dec (size, length (lb)); {line added}
SetString(Result, nil, Size);
P := Pointer(Result);
for I := 0 to Count - 1 do
begin
S := Get(I);
L := Length(S);
if L <> 0 then
begin
System.Move(Pointer(S)^, P^, L * SizeOf(WideChar));
Inc(P, L);
end;
if i <> count -1 then begin {line added}
L := Length(LB);
if L <> 0 then
begin
System.Move(Pointer(LB)^, P^, L * SizeOf(WideChar));
Inc(P, L);
end;
end; {line added}
end;
end;
Автор: yurkinsys
Дата сообщения: 03.05.2007 22:52
FastReport 4.2

У "TfrxReportPage" свойства "PaperHeight" и "PaperWidth" имеют тип "extended" и значения могут быть -/+ (отрицат./полож.). Так вот когда PaperHeighт или PaperWidth =-Х(значение) страница исчезает из дизайнера а в превью её показывает очень агромной и пустой. Думаю что эти свойства не должны допустить отрицательные значения! Я сделал так:

в файле: "frxClass.pas"

function Round8(e: Extended): Extended;
begin
Result := Round(e * 100000000) / 100000000;
end;
//---------------------------------------------------------

добавил abs() вот так:

function Round8(e: Extended): Extended;
begin
Result := Round(abs(e) * 100000000) / 100000000;
end;

Автор: vshersh
Дата сообщения: 11.05.2007 11:31
Баг проявляется и на 3 и на 4-й версии.
1. Создаем отчет (TfrxReport) на основе внешнего набора данных (НД) с использованием TfrxDBDataset (через TfrxDBDataset подключаем TDataSource который в свою очередь подключен к TDataset).
При этом UserName для TfrxDBDataset ставим, например, "Customer".
2. Создаем еще один отчет (TfrxReport) на основе другого внешнего НД с использованием TfrxDBDataset с таким же именем ("Customer")
3. При выполнении любого из отчетов - в качестве данных отображается тот TfrxDBDataset, который создан первым, даже если явно прописывается 2-й TfrxDBDataset.
Пример тестового приложения здесь (рапида) и здесь (депозитфайл)
В папку с программой необходимо скопировать demo.mdb из стандартного демо FR

В обработчике procedure TForm1.FormCreate(Sender: TObject) динамически создаются 2 инстанса TfrxDBDataset:

Код: frxDBDataset1 := TfrxDBDataset.Create(Self);
frxDBDataset2 := TfrxDBDataset.Create(Self);
Автор: jonikDk
Дата сообщения: 31.05.2007 16:15
версия 4.2
Баг это или фича
Если использовать режим MDIChild у FrxReport почему автоматически свойство Modal не переводится в False ??
Поставил MDI в True а отчет все равно выходит модальным. Еще и с ошибкой.
Если это баг то лечение не сложное:

в классе TfrxPreviewOptions свойства MDIChild и Modal сделать зависимыми, чтобы при изменении одного свойства второе менялось автоматически...
Автор: A_V
Дата сообщения: 06.06.2007 13:59
FR4.2
при установленном св-ве OldStyleProgress невозможно отлаживать отчет (наблюдал такое на двухпроходном):
падает на брейкпойнтах в TfrxDesignerForm.OnRunLine на SetFocus c 'cant set focus on disabled or invisible window'
Решение: заменить EnableWindow(Handle, True) на Enabled := True
Автор: vshersh
Дата сообщения: 15.06.2007 10:09
Не баг, но все же...
Очень многие (причем достаточно давно) жаждят поиметь прозрачный TfrxPictureView для этого достаточно добавить опубликованное свойство

Код:
property Transparent: Boolean read FTransparent write SetTransparent;
...
procedure TfrxPictureView.SetTransparent(const Value: Boolean);
begin
if FTransparent <> Value then
begin
FTransparent := Value;
Picture.Graphic.Transparent := Value;
end;
end;
Автор: LulumbaZ
Дата сообщения: 20.06.2007 23:51
Версия 4.2.40
Если из окна "Предварительный просмотр" вызвать Designer по кнопке "Редактировать страницу", потом закрыть все окна и приложение, то FastMM4 показывает значительные утечки памяти.
Автор: Falk0ner
Дата сообщения: 25.06.2007 21:33


Автор: Jedinichka
Дата сообщения: 12.07.2007 16:42
Если странице поставить свойсво Landscape и при печати попробовать сделать Scale, страницу покурочит. Особенно хорошо это ощущается, когда скалишь с A4 на A4. Лечится изменением в frxPreviewPages функции TfrxPreviewPages.Print

(строка 1978)

Код:
// frxPrinters.Printer.SetViewParams(Report.PrintOptions.PrintOnSheet, 0, 0, poPortrait);
frxPrinters.Printer.SetViewParams(
Report.PrintOptions.PrintOnSheet, 0, 0, Page[0].Orientation);
Автор: AntonVA1
Дата сообщения: 27.08.2007 23:37
Вот у меня тут, в процессе чтения этой темы, созрело предложение к My_Way:
А не мог бы ты так же сообщать в этом топике о том, принят этот багофикс или нет. Нужно это по двум причинам:
1. Тогда мы мог ли бы починить свои Фасты на машинах, не дожидаясь выхода новой версии. (Правда, в этом случае нужно тем, кто сюда пишет, точно указывать версию).
2. Это могло бы стимулировать других к написанию сообщений в эту тему.

И сразу вопрос: А как будет учитываться, если я напишу новую фичу для Фастов?
Или толковые изменения? К примеру, модернизирую стандартную форму предпросмотра.

Страницы: 12345678910111213141516

Предыдущая тема: Числовой формат даты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.