Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Лицензия FastReport за багрепорты и багофиксы

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Открыть новую тему     Написать ответ в эту тему

My_Way



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Объявлена раздача лицензий за найденные баги и багофиксы по продукту от разработчиков
 
Постите здесь свои багрепорты и багофиксы по ФастРепорту,и получайте лицензии на ФастРепорт.
 
Расценки на версии FastReport 4:
 
FR Basic - 1 багрепорт
FR Standard - 3 багрепорта или  1 багофикс
FR Professional - 6 багрепортов или  2 багофикса
FR Enterprise - 9 багрепортов или 3 багофикса
FR Studio Single - 9 багрепортов или 3 багофикса
FR Server - 9 багрепортов или 3 багофикса
 
 
Полезная информация:

 
Найденные баги и багофиксы, использованные для получения лицензии младшего уровня учитываются при получении лицензии следующего уровня. Например,набрав один багрепорт, получаешь FR Basic, а набрав еще 2  - получаешь лицензию на FR Standard, и т.д.  
 
Один багофикс= 3 багрепорта.
Например,если вы нашли баг, и его пофиксили, то у вас в сумме 1 багрепорт+1 багофикс = 4 багрепорта.
 
За лицензиями при накоплении необходимого количества бонусов обращаться в ПМ к My_Way (В письме указывать Имя и емайл, на какой выслать регистрационную инфу)
 
Информация для новичков
Для вновь прибывших, внимательно читать вот ЭТО, чтобы не повторять уже исправленные баги

А еще и это ЭТУ ИНФУ  
 
P.S. Некоторые баги согласно My_Way являются фичами (Правда не знаю в документации это описано, так как баг считается фичей если он задокументирован, иначе это баг).
 
Результаты по подсчетам My Way:

Ник участника Багрепорты Багофиксы Итого: Лицензия Остатки      
gpi Четырнадцать Десять Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
GloThin Двадцать четыре Пять Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
DroN_S Одинадцать Семь Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
SerVal777 Двадцать семь Три Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
Nicka_Grey Двадцать четыре Четыре Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
LadyOfWood Двадцать девять Три Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
QuickeneR Шестнадцать Четыре Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
Garrett Двадцать семь Ноль Двадцать семь FR Ent+FR Studio+FR Server Больше не на что    
RUSer Двадцать восемь Ноль Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
mLex Двадцать пять Один Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
mrrex Тридцать один Ноль Двадцать семь+ FR Ent+FR Studio+FR Server Больше не на что    
Jedinichka Двадцать пять Ноль Двадцать пять FR Ent+FR Studio Семь    
aralekin Девятнадцать Два Двадцать пять FR Ent+FR Studio Семь    
vadson6666 Двадцать пять Ноль Двадцать пять FR Ent+FR Studio Семь    
DmLam Двадцать Ноль Двадцать FR Ent+FR Studio Два    
jonikDk Десять Три Девятнадцать FR Ent+FR Studio Один    
Alex_Yagolnik Девятнадцать Ноль Девятнадцать FR Ent+FR Studio Один    
karioth Восемьнадцать Ноль Восемьнадцать FR Ent+FR Studio Ноль    
denger2k Пятнадцать Один Восемьнадцать FR Ent+FR Studio Ноль    
martyanov Одинадцать Два Семьнадцать FR Ent Восемь    
EmeJIbka Десять Два Шестнадцать FR Ent Семь    
motrik Шестнадцать Ноль Шестнадцать FR Ent Семь    
exteris Шестнадцать Ноль Шестнадцать FR Ent Семь    
JustAMaaan Шестнадцать Ноль Шестнадцать FR Ent Семь    
Delphis11 Шестнадцать Ноль Шестнадцать FR Ent Семь    
mity Пятнадцать Ноль Пятнадцать FR Ent Шесть    
benchik Пятнадцать Ноль Пятнадцать FR Ent Шесть    
Darken Пятнадцать Ноль Пятнадцать FR Ent Шесть    
tomegadeth Пятнадцать Ноль Пятнадцать FR Ent Шесть    
MageSlayerDen Пятнадцать Ноль Пятнадцать FR Ent Шесть    
stalker780 Восемь Один Одинадцать FR Ent Три    
Vic26 Восемь Один Одинадцать FR Ent Два    
Wise Десять Ноль Десять FR Ent Один    
ultima Девять Ноль Девять FR Ent Ноль    
jzk Восемь Ноль Восемь FR Pro Восемь    
wbsg Восемь Ноль Восемь FR Pro Восемь    
royt Восемь Ноль Восемь FR Pro Восемь    
vshersh Восемь Ноль Восемь FR Pro Восемь    
vidic777 Восемь Ноль Восемь FR Pro Восемь    
Erazer Восемь Ноль Восемь FR Pro Восемь            


 
 
Примечание от My Way:
1. Передавать только остатки другим участникам нельзя...
2. Если хотите поделиться своими изысканиями с кем-нибудь из участников, до опубликования в ветке можно передать свои результаты через ПМ...
3. Остатки после лицензии на FR Studio Single, можно использовать, для получения лицензии на FR Server (цена такая же. как на FR Enterprise и FR Studio Single = 9 багрепортов )
4. Багофиксы к багофиксам (багофиксаторы, по термину GloThin), пока засчитываются, как отдельные, но возможно, в будущем будут делиться между решившими указанную проблему...  
 
Также мы премируем за написание статей на тему FastReport, как FastReport 3, так и FastReport Studio, стати начиная от технических, и заканчивая очень прикладными, например, первые
шаги в матричных отчетах, или анализатор логов в FastReport Studio, все
авторские права сохраняются, плюс мы содействуем в размещении этих статей
в изданиях. Есть что публиковать - пишите в ПМ

Всего записей: 80 | Зарегистр. 16-09-2004 | Отправлено: 14:16 23-08-2005 | Исправлено: My_Way, 16:15 30-03-2007
gpi

Alone Wanderer
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не то просто особенность, не то баг:
Скрипт в отчёте:

Код:
 
procedure MasterData2OnBeforePrint(Sender: TfrxComponent);
begin
     if IsFirstLine then
       begin
         Memo164.Frame.Typ:=[ftleft,ftRight,ftTop];    //ошибка
         Memo164.Text:='I';
         IsFirstLine:=False;
       end
     else
       begin
         Memo164.Frame.Typ:=[ftleft,ftRight];           //ошибка
         Memo164.Text:='';
       end;
end;
 

не работает, т.к. в fs_iinterpreter.pas в

Код:
 
procedure TfsPropertyHelper.SetValue(const Value: Variant);
var
  p: PPropInfo;
  Instance: TObject;
  IntVal: Integer;
begin
  if IsReadOnly then Exit;
  Instance := TObject(Integer(ParentValue));
 
  if FIsPublished then
  begin
    p := GetPropInfo(Instance.ClassInfo, Name);
    if p <> nil then
      case p.PropType^.Kind of
        tkInteger, tkSet, tkEnumeration, tkClass:
        begin
          if Typ = fvtBool then
            if Value = True then
              IntVal := 1 else
              IntVal := 0
          else
            IntVal := Integer(Value);     //в качестве параметра должно быть значение типа Integer
          SetOrdProp(Instance, p, IntVal);
        end;
 

а вот такой вариант работает

Код:
 
procedure MasterData2OnBeforePrint(Sender: TfrxComponent);
begin
     if IsFirstLine then
       begin
         Memo164.Frame.Typ:=ftleft+ftRight+ftTop;
         Memo164.Text:='I';
         IsFirstLine:=False;
       end
     else
       begin
         Memo164.Frame.Typ:=ftleft+ftRight;
         Memo164.Text:='';
       end;
end;
 

Всего записей: 432 | Зарегистр. 30-05-2004 | Отправлено: 11:44 08-10-2005
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю, нужна ли эта функция для фаста, но лично я использую её часто и при написании программ для любых расчётов для бухгалтерии она очень часто пригождается...  
Название функции: ConvertSumToPropis - преобразование числа к прописным

Код:
 
модуль fs_isysrtti.pas
{сама функция преообразования}
//begin fix
function ConvertSumToPropis(Number:real):string;
var
  PartNum, TruncNum, NumTMP, D: integer;
  NumStr : string;
  i, R   : byte;
  Flag11 : boolean;
begin
  D:=1000000;
  R:=4;
  TruncNum:=Trunc(Number);
  if TruncNum<>0
    then
      repeat
        PartNum:=TruncNum div D;
        Dec(R);
        D:=D div 1000;
      until PartNum<>0
    else
      R:=0;
 
  for i:=R downto 1 do
  begin
    Flag11:=False;
    NumTMP:=PartNum div 100;
    case NumTMP of
      1: NumStr:=NumStr+'сто ';
      2: NumStr:=NumStr+'двести ';
      3: NumStr:=NumStr+'триста ';
      4: NumStr:=NumStr+'четыреста ';
      5: NumStr:=NumStr+'пятьсот ';
      6: NumStr:=NumStr+'шестьсот ';
      7: NumStr:=NumStr+'семьсот ';
      8: NumStr:=NumStr+'восемьсот ';
      9: NumStr:=NumStr+'девятьсот ';
    end;
      NumTMP:=(PartNum mod 100) div 10;
        case NumTMP of
        1: begin
           NumTMP:=PartNum mod 100;
           case NumTMP of
            10: NumStr:=NumStr+'десять ';
            11: NumStr:=NumStr+'одиннадцать ';
            12: NumStr:=NumStr+'двенадцать ';
            13: NumStr:=NumStr+'тринадцать ';
            14: NumStr:=NumStr+'четырнадцать ';
            15: NumStr:=NumStr+'пятнадцать ';
            16: NumStr:=NumStr+'шестнадцать ';
            17: NumStr:=NumStr+'семнадцать ';
            18: NumStr:=NumStr+'восемнадцать ';
            19: NumStr:=NumStr+'девятнадцать ';
           end;
           case i of
             3: NumStr:=NumStr+'миллионов ';
             2: NumStr:=NumStr+'тысяч ';
             1: NumStr:=NumStr+'рублей ';
           end;
           Flag11:=True;
         end;
      2: NumStr:=NumStr+'двадцать ';
      3: NumStr:=NumStr+'тридцать ';
      4: NumStr:=NumStr+'сорок ';
      5: NumStr:=NumStr+'пятьдесят ';
      6: NumStr:=NumStr+'шестьдесят ';
      7: NumStr:=NumStr+'семьдесят ';
      8: NumStr:=NumStr+'восемьдесят ';
      9: NumStr:=NumStr+'девяносто ';
    end;
    NumTMP:=PartNum mod 10;
    if not Flag11 then
      begin
        case NumTMP of
          1: if i=2 then
               NumStr:=NumStr+'одна '
             else NumStr:=NumStr+'один ';
          2: if i=2 then
               NumStr:=NumStr+'две '
             else NumStr:=NumStr+'два ';
          3: NumStr:=NumStr+'три ';
          4: NumStr:=NumStr+'четыре ';
          5: NumStr:=NumStr+'пять ';
          6: NumStr:=NumStr+'шесть ';
          7: NumStr:=NumStr+'семь ';
          8: NumStr:=NumStr+'восемь ';
          9: NumStr:=NumStr+'девять ';
        end;
        case i of
          3: case NumTMP of
               1    : NumStr:=NumStr+'миллион ';
               2,3,4: NumStr:=NumStr+'миллиона ';
               else
                 NumStr:=NumStr+'миллионов ';
             end;
          2: case NumTMP of
               1    : NumStr:=NumStr+'тысяча ';
               2,3,4: NumStr:=NumStr+'тысячи ';
               else
                 if PartNum<>0 then
                   NumStr:=NumStr+'тысяч ';
             end;
          1: case NumTMP of
               1    : NumStr:=NumStr+'рубль ';
               2,3,4: NumStr:=NumStr+'рубля ';
               else NumStr:=NumStr+'рублей ';
             end;
        end;
      end;
    if i>1 then
      begin
        PartNum:=(TruncNum mod (D*1000)) div D;
        D:=D div 1000;
      end;
  end;
 
  PartNum:=Round(Frac(Number)*100);
  if PartNum=0 then
    begin
      ConvertSumToPropis:=NumStr+'00 копеек';
      Exit;
    end;
  NumTMP:=PartNum div 10;  
  if NumTMP=0 then
    NumStr:=NumStr+'0'+IntToStr(PartNum)+' '
  else
    NumStr:=NumStr+IntToStr(PartNum)+' ';
  NumTMP:=PartNum mod 10;
  case NumTMP of
    1: if PartNum<>11 then
         NumStr:=NumStr+'копейка'
       else
         NumStr:=NumStr+'копеек';
    2,3,4: if (PartNum<5) or (PartNum>14) then
             NumStr:=NumStr+'копейки'
           else
             NumStr:=NumStr+'копеек';
    else NumStr:=NumStr+'копеек';
  end;
  ConvertSumToPropis:=NumStr;
end;
//end fix
constructor TFunctions.Create;
begin
  FCatStr := 'ctString';
  FCatDate := 'ctDate';
  FCatConv := 'ctConv';
  FCatFormat := 'ctFormat';
  FCatMath := 'ctMath';
  FCatOther := 'ctOther';
//.....
//begin fix
    AddMethod('function ConvertSumToPropis(Number:real):string', CallMethod1, FCatConv);
//end fix
//.....
function TFunctions.CallMethod1(Instance: TObject; ClassType: TClass;
  const MethodName: String; var Params: Variant): Variant;
var
{$IFDEF Delphi6}
  i: Int64;
{$ELSE}
  i: Integer;
{$ENDIF}
begin
  if MethodName = 'INTTOSTR' then
  begin
    i := Params[0];
    Result := IntToStr(i)
  end
  else if MethodName = 'FLOATTOSTR' then
    Result := FloatToStr(Params[0])
  else if MethodName = 'DATETOSTR' then
    Result := DateToStr(Params[0])
  else if MethodName = 'TIMETOSTR' then
    Result := TimeToStr(Params[0])
  else if MethodName = 'DATETIMETOSTR' then
    Result := DateTimeToStr(Params[0])
//begin fix
  else if MethodName = 'CONVERTSUMTOPROPIS' then
    Result := ConvertSumToPropis(Params[0])
//end fix
end;
 

не знаю, станут ли разработчики это воспринимать как фикс или дополнение, но для меня это очень удобно...

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 12:49 09-10-2005
gpi

Alone Wanderer
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DroN_S

Цитата:
не знаю, станут ли разработчики это воспринимать как фикс или дополнение, но для меня это очень удобно...

Не думаю, что разработчики включат такую функцию в модуль fs_isysrtti.pas, т.к. ФастРепорт создаётся с локализациями для многих языков. Я тоже использую подобные функции для русского и украинского языков. А подобные функции можно подключать способом, описанным в Руководстве разработчика (стр. 40-42):  

Цитата:
 
Если вы собираетесь подключать большое количество функций, имеет
смысл вынести всю логику в отдельный модуль. Вот пример такого модуля:
 
unit myfunctions;
 
interface
 
implementation
 
uses SysUtils, Classes, fs_iinterpreter;
 
type
  TFunctions = class(TObject)
private
  function CallMethod(Instance: TObject; ClassType: TClass; const  
  MethodName: String; var Params: Variant): Variant;
public
  constructor Create;
  destructor Destroy; override;
end;
 
var
Functions: TFunctions;
....................
 

Такими модулями можно значительно расширить возможности Фаста. Неплохо было бы, если кто-то взялся собирать новые функции в отдельный модуль, а FR Team выкладывала этот модуль у себя на сайте.  

Всего записей: 432 | Зарегистр. 30-05-2004 | Отправлено: 15:21 09-10-2005
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот функция которая преобразует дату вида "10.10.2005" к виду "10 октября 2005 года"
тоже очень нужная вещь...

Код:
 
модуль fs_isysrtti.pas
{сама функция преобразования даты}
//begin function
function DateToPropis(e: Extended):string;
var
  den, mes, god : word;
  mess:string;
begin
 DecodeDate(e,god,mes,den);
 
 case mes of
  1: mess:='Января';
  2: mess:='Февраля';
  3: mess:='Марта';
  4: mess:='Апреля';
  5: mess:='Мая';
  6: mess:='Июня';
  7: mess:='Июля';
  8: mess:='Августа';
  9: mess:='Сентября';
  10: mess:='Октября';
  11: mess:='Ноября';
  12: mess:='Декабря';
 end;
 
  Result := IntToStr(den) + ' ' + mess + ' ' +IntToStr(god) + ' года';
end;
//end function
constructor TFunctions.Create;
begin
  FCatStr := 'ctString';
  FCatDate := 'ctDate';
  FCatConv := 'ctConv';
  FCatFormat := 'ctFormat';
  FCatMath := 'ctMath';
  FCatOther := 'ctOther';
 
  with fsGlobalUnit do
  begin
    AddedBy := Self;
    AddMethod('function IntToStr(i: Integer): String', CallMethod1, FCatConv);
    AddMethod('function FloatToStr(e: Extended): String', CallMethod1, FCatConv);
    AddMethod('function DateToStr(e: Extended): String', CallMethod1, FCatConv);
//begin method
    AddMethod('function DateToPropis(e: Extended): String', CallMethod1, FCatConv);
//end method
    AddMethod('function TimeToStr(e: Extended): String', CallMethod1, FCatConv);
    AddMethod('function DateTimeToStr(e: Extended): String', CallMethod1, FCatConv);
//...........
function TFunctions.CallMethod1(Instance: TObject; ClassType: TClass;
  const MethodName: String; var Params: Variant): Variant;
var
{$IFDEF Delphi6}
  i: Int64;
{$ELSE}
  i: Integer;
{$ENDIF}
begin
  if MethodName = 'INTTOSTR' then
  begin
    i := Params[0];
    Result := IntToStr(i)
  end
  else if MethodName = 'FLOATTOSTR' then
    Result := FloatToStr(Params[0])
  else if MethodName = 'DATETOSTR' then
    Result := DateToStr(Params[0])
//begin method
  else if MethodName = 'DATETOPROPIS' then
    Result := DateToPropis(Params[0])
//end method
  else if MethodName = 'TIMETOSTR' then
    Result := TimeToStr(Params[0])
  else if MethodName = 'DATETIMETOSTR' then
    Result := DateTimeToStr(Params[0])
//*********************************************************
  else if MethodName = 'CONVERTSUMTOPROPIS' then
    Result := ConvertSumToPropis(Params[0])
//*********************************************************
end;
 

вот и всё...

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 22:46 09-10-2005
GloThin



Тобольский шашлычник
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DroN_S

Цитата:
Вот функция которая преобразует дату вида "10.10.2005" к виду "10 октября 2005 года"

Функция то конечно полезная, но как было сказано:
Цитата:
Не думаю, что разработчики включат такую функцию в модуль fs_isysrtti.pas, т.к. ФастРепорт создаётся с локализациями для многих языков.

Такие функции специфичны для группы славянских языков и в комплект продукта вряд ли будут включены.
Единственный разумный вариант для функций такого рода выделить их в отдельный модуль и размещать его в News-groups. Как в принципе реализованы многие специфические вещи для использования совместно с ФастРепортом.По-моему,там даже пробегала функция  

Цитата:
преобразование числа к прописным
.  


----------
Все принципиальное-просто,а все простое-принципиально!
На каждого мудреца достаточно простоты!
Не изменишь существующее,не изменив себя!!

Всего записей: 706 | Зарегистр. 28-04-2004 | Отправлено: 06:39 10-10-2005
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GloThin

Цитата:
Единственный разумный вариант для функций такого рода выделить их в отдельный модуль и размещать его в News-groups. Как в принципе реализованы многие специфические вещи для использования совместно с ФастРепортом.

Такая идея уже была предложена gpi
 
На счёт всех этих функций, это все те функции которые требуются людям в их работе. Здесь предложено решение проблемы многих пользователей, а локализацию сделать уже не проблема

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 10:09 10-10-2005 | Исправлено: DroN_S, 10:15 10-10-2005
stalker780



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
QBuilder в Фаст 3.15 не видит вьюхи и отказывается с ними работать, даже если ручками написать запрос.  
использую TfrxFIBQuery... может это конечно их баг. Но все равно.
Как лечить пока не разобрался, но пытаюсь

Всего записей: 216 | Зарегистр. 01-07-2003 | Отправлено: 10:33 10-10-2005
martyanov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
баг 1:  
Запускаем FRDemo. В дизайнере открываем любой отчёт. Смещаем любой Мемо. Становятся активными кнопки Undo и Save. Сохраняем отчёт. Кнопка Save становится неактивной, Undo - активна. Жмём Undo - никаких изменений, но Redo - становится тоже активной. Жмём Undo ещё раз - объект возвращается на прежнее место, Save - неактивна.  
баг 2:  
Запускаем FRDemo. В дизайнере открываем любой отчёт. Переходим в редактор кода, ничего не меняя.Undo - активна. Нажимаем пробел. Save - активна. Сохраняем отчёт. Undo - активна. Жмём Undo - сообщение об ошибке.  
фикс с багу 2:  
 

Цитата:
//frxSynMemo.pas  
public  
...  
procedure ClearUndo; // fix  
function GetUndoCount: Integer; // fix  
...  
 
//begin of fix  
procedure TfrxSyntaxMemo.ClearUndo;  
begin  
FUndo.Clear;  
end;  
 
function TfrxSyntaxMemo.GetUndoCount: Integer;  
begin  
Result := FUndo.Count;  
end;  
//end of fix  
 
//frxDsgn.pas  
procedure TfrxDesignerForm.UpdateControls;  
...  
N15cpiMI.Checked := fsx15cpi in DMPFontStyle;  
 
UndoCmd.Enabled := (FUndoBuffer.UndoCount > 1) or ((FPage = nil) and (CodeWindow.GetUndoCount > 0));// fix  
RedoCmd.Enabled := (FUndoBuffer.RedoCount > 0) and (FPage <> nil);  
...  
 
procedure TfrxDesignerForm.OnCodeChanged(Sender: TObject);  
begin  
if FPage = nil then  
begin  
FModified := True;  
SaveCmd.Enabled := True;  
UndoCmd.Enabled := True; // fix  
end;  
end;  
 
procedure TfrxDesignerForm.UndoCmdExecute(Sender: TObject);  
var  
i: Integer;  
begin  
if IsPreviewDesigner then Exit;  
 
if FPage = nil then  
begin  
CodeWindow.Undo;  
UndoCmd.Enabled := CodeWindow.GetUndoCount > 0; // fix  
Exit;  
end;  
 
procedure TfrxDesignerForm.SaveFile(SaveAs: Boolean; UseOnSaveEvent: Boolean);  
...  
if Saved then  
begin  
Modified := False;  
CodeWindow.ClearUndo; // fix  
UpdateControls; // fix  
end;  
...


Всего записей: 290 | Зарегистр. 02-06-2003 | Отправлено: 12:50 10-10-2005
stalker780



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В общем выкладываю нормальный фикс для frxFIB из FR 3.15
 
Теперь он отображает и таблицы и вьюхи и процедуры, пришлось написать свою процедуру, ибо штатными средствами фибов оказалось это сделать невозможно.
 
unit frxFIBComponents
 

Код:
 
uses
  Graphics, Windows, Classes, SysUtils, frxClass, frxCustomDB, DB,
  FIBDatabase, pFIBDatabase, FIBDataSet, pFIBDataSet, pFIBProps, pFIBCacheQueries,
  FIBQuery
{$IFDEF Delphi6}
 
...
 
type
...
  TfrxEngineFIB = class(TfqbEngine)
...
  public
...
    procedure GetTableNames(TableNames: TStrings; WithSystem: Boolean);
...
 
procedure TfrxEngineFIB.ReadTableList(ATableList: TStrings);
begin
  ATableList.Clear;
  GetTableNames(ATableList, ShowSystemTables);
end;
 
procedure TfrxEngineFIB.GetTableNames(TableNames: TStrings; WithSystem: Boolean);
const
 TablesSQL='SELECT RDB$RELATION_NAME as TABLENAME FROM RDB$RELATIONS WHERE @SYS '+
           'UNION ALL '+
           'SELECT RDB$PROCEDURE_NAME as TABLENAME FROM RDB$PROCEDURES WHERE @SYS '+
           'ORDER BY 1 ';
var qry :TFIBQuery;
begin
  qry := GetQueryForUse(FQuery.Transaction,TablesSQL);
  try
  with qry do begin
    Close;
    TableNames.BeginUpdate;
    Options:=[qoStartTransaction,qoTrimCharFields];
    if not WithSystem then
      Params[0].asString:='RDB$SYSTEM_FLAG = 0';
    ExecQuery;
    while not Eof do begin
      TableNames.Add(Fields[0].asString);
      Next;
    end;
  end;
  finally
    if FQuery.Transaction.Active then FQuery.Transaction.Commit;
    TableNames.EndUpdate;
    FreeQueryForUse(qry);
  end;
end;
...
 
 


Всего записей: 216 | Зарегистр. 01-07-2003 | Отправлено: 16:46 10-10-2005 | Исправлено: stalker780, 13:23 11-10-2005
Vic26

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Баг при использовании в отчете frxCheckBoxObject, возникает если поле в БД имеет значение NULL.
Мое решение в frxChBox.pas правим TfrxCheckBoxView.GetData
 
было

Код:
 
procedure TfrxCheckBoxView.GetData;
begin
  inherited;
  if IsDataField then
    begin
      FChecked := DataSet.Value[DataField]
    end
  else if FExpression <> '' then
    FChecked := Report.Calc(FExpression);
end;
 

стало

Код:
 
procedure TfrxCheckBoxView.GetData;
begin
  inherited;
  if IsDataField then
    begin
      if DataSet.Value[DataField]=Null then FChecked := False
        else FChecked := DataSet.Value[DataField]
    end
  else if FExpression <> '' then
    FChecked := Report.Calc(FExpression);
end;
 


Всего записей: 69 | Зарегистр. 02-02-2003 | Отправлено: 23:00 18-10-2005 | Исправлено: Vic26, 23:01 18-10-2005
Alex_Yagolnik



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это не баг, а скорее пожелание разработчикам. Есть тип TfrxPreviewForm с проработанной логикой событий нажатия на кнопки, загрузкой PopupMenu и выпадающих списков и прочими проверенными алгоритмами. Однако, если пользователь решил создать своё окно предосмотра, то вынужден сам рисовать свои кнопки, придумывать обработчики и прочее. Т.е. повторять работу разработчиков.
 
Моё предложение такое. Добавить новый компонент TfrxPreviewToolBar, который будет загружать на форму ToolBar со всеми стандартными кнопками (Print, NextPage, etc.). При этом должна быть возможность использовать как стандартные обработчики каждой кнопки, так и добавлять свои.
Характерный пример такого компонента: TDBNavigator
 
Есть ещё более простой вариант: добавлять FR набор в Standart Actions.
 
Кстати, знания стандартного Help явно недостаточно для того, чтобы написать "стандартный" обработчик кнопки Print :

Код:
 

  if not frxPrinters.HasPhysicalPrinters then
    frxErrorMsg(frxResources.Get('clNoPrinters'))
  else
    frxPreview1.Print;
  Enabled := True;

 

 

Всего записей: 14 | Зарегистр. 19-10-2005 | Отправлено: 13:40 19-10-2005 | Исправлено: Alex_Yagolnik, 14:03 19-10-2005
gpi

Alone Wanderer
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что-то My_Way сюда вообще не заглядывает

Всего записей: 432 | Зарегистр. 30-05-2004 | Отправлено: 16:52 19-10-2005
Alex_Yagolnik



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нашёл БАГ!
версия 3.18 триал
 
В стандартном окне Preview изменяем масштаб так, чтобы страница вышла за горизонтальные границы (например, 200%). Двигаем "рукой" страницу влево. Переходим к масштабу "страница целиком". Страница "убегает" влево, т.е. становится невидна. Любое движение "Hand" центрует страницу.
 
Добавлено:
Ещё одно пожелание.
 
TfrxPreview наследник TControl. Почему бы не сделать  Published следующие свойства: OnMouseDown, OnMouseMove, OnMouseUp, OnMouseWheel, OnMouseWheelDown, OnMouseWheelUp ?
            
            
 
Добавлено:

Цитата:
Что-то My_Way сюда вообще не заглядывает  

 
Лицензии кончились

Всего записей: 14 | Зарегистр. 19-10-2005 | Отправлено: 17:21 19-10-2005
gpi

Alone Wanderer
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Yagolnik

Цитата:
Нашёл БАГ!  

А версию для печати почитать?

Всего записей: 432 | Зарегистр. 30-05-2004 | Отправлено: 20:31 19-10-2005
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Yagolnik

Цитата:
Нашёл БАГ!

даже в шапке написано

Цитата:
Информация для новичков  
Для вновь прибывших, внимательно читать вот ЭТО, чтобы не повторять уже исправленные баги  

читайте внимательно

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 22:46 19-10-2005
Alex_Yagolnik



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интересное кино! Ошибка найдена полтора месяца назад!
В новой версии - всё то же.
 
У меня предложение: если баг был найден в старой версии и сохранился в новой, то засчитывать его обнаружения как новый баг
 
PS: читаю в changes_rus.txt

Цитата:
 
 
Текущая
-------------
...
"- исправлен баг в превью (отображение страницы при смене масштаба)"
...
 
Версия 3.18
-------------
...
 

 
Это как понимать?

Всего записей: 14 | Зарегистр. 19-10-2005 | Отправлено: 13:27 20-10-2005 | Исправлено: Alex_Yagolnik, 13:30 20-10-2005
GloThin



Тобольский шашлычник
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alex_Yagolnik

Цитата:
У меня предложение: если баг был найден в старой версии и сохранился в новой, то засчитывать его обнаружения как новый баг  

Ну на это разработчики врядли пойдут. Уних так лицензии точно закончатся.

----------
Все принципиальное-просто,а все простое-принципиально!
На каждого мудреца достаточно простоты!
Не изменишь существующее,не изменив себя!!

Всего записей: 706 | Зарегистр. 28-04-2004 | Отправлено: 15:18 20-10-2005
DroN_S

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Yagolnik

Цитата:
У меня предложение: если баг был найден в старой версии и сохранился в новой, то засчитывать его обнаружения как новый баг  

Ну ты гений
с такими предложения, можно смело открывать ветку на странице семь и зароботать себе лицензию в пару минут

Всего записей: 1143 | Зарегистр. 09-04-2005 | Отправлено: 15:25 20-10-2005
GloThin



Тобольский шашлычник
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
и зароботать себе лицензию в пару минут  

И не только на Энт, но и на старшую версию Студио, их ведь теперь четыре.

----------
Все принципиальное-просто,а все простое-принципиально!
На каждого мудреца достаточно простоты!
Не изменишь существующее,не изменив себя!!

Всего записей: 706 | Зарегистр. 28-04-2004 | Отправлено: 15:49 20-10-2005
Alex_Yagolnik



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
с такими предложения, можно ... зароботать себе лицензию в пару минут  

 
Угу. Только почему разработчики пишут, что проблема решена, а она не решена?
В чём заключается работа тестера? Наступать на одни и те же грабли до тех пор, пока программист не удосужится их убрать .
А всякий труд должен оплачиватся. Например, лицензией
 
И ещё, можно ли считать багом явную недоработку?
Есть в стандартном Preview такая фишка: пользуемся инструментом Zoom, и в соответствующем окошке меняется значение процентов.
Если посмотреть исходники, то событие TfrxPreview.UpdateZoom глубоко зарыто под private в трёх классах TfrxPreviewWorkspace, TfrxPreview и TfrxPreviewForm.
Если бы у TfrxPreview было событие OnAfterZoom, то и вопроса бы не было. А так - класс TfrxPreview носит чисто декоративный, а не прикладной характер.
 
 

Всего записей: 14 | Зарегистр. 19-10-2005 | Отправлено: 16:56 20-10-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Лицензия FastReport за багрепорты и багофиксы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru