Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport: дублирование пунктов меню / 25 сообщений из 25, страница 1 из 1
09.12.2018, 03:33
    #39744836
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Сменил в D2007 FR 4.14 на 6.1.1

После первого запуска приложение компильнулось нормально, но при попытке экспорта ругнулась с AV. Удалил и заново положил те же визуальные компоненты на форму. После чего в меню экспорта Items с этими компоненты стали дублироваться по 2-3 раза. Глянул в dfm - там вроде все пристойно
кусочек
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
object GZipCompr: TfrxGZipCompressor
    Left = 248
    Top = 40
  end
  object frxPDFExport1: TfrxPDFExport
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    EmbeddedFonts = True
    OpenAfterExport = True
    PrintOptimized = True
    Outline = False
    Background = True
    HTMLTags = True
    Quality = 95
    Transparency = False
    ProtectionFlags = []
    HideToolbar = False
    HideMenubar = False
    HideWindowUI = False
    FitWindow = True
    CenterWindow = False
    PrintScaling = True
    PdfA = True
    Left = 176
    Top = 40
  end
  object frxRTFExport1: TfrxRTFExport
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    PictureType = gpJPG
    OpenAfterExport = True
    Wysiwyg = True
    SuppressPageHeadersFooters = False
    HeaderFooterMode = hfText
    AutoSize = True
    Left = 144
    Top = 40
  end
  object frxODTExport1: TfrxODTExport
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    PictureType = gpJPG
    ExportPageBreaks = False
    OpenAfterExport = True
    Background = True
    EmptyLines = False
    SingleSheet = False
    Language = 'ru'
    SuppressPageHeadersFooters = False
    Left = 112
    Top = 40
  end
  object frxHTMLExport1: TfrxHTMLExport
    FileName = '.html'
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    OpenAfterExport = True
    FixedWidth = True
    Background = True
    Centered = False
    EmptyLines = False
    Print = False
    PictureType = gpJPG
    Left = 208
    Top = 40
  end
  object RepTitul: TfrxReport
    Version = '6.1.1'
    DotMatrixReport = False
    IniFile = '\Software\Fast Reports'
    PreviewOptions.Buttons = [pbPrint, pbExport, pbZoom, pbNavigator]
    PreviewOptions.Zoom = 1.000000000000000000
    PrintOptions.Printer = #1055#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102
    PrintOptions.PrintOnSheet = 0
    ReportOptions.CreateDate = 43443.111541597200000000
    ReportOptions.LastChange = 43443.111541597200000000
    ScriptLanguage = 'PascalScript'
    ScriptText.Strings = (
      'begin'
      ''
      'end.')
    Left = 16
    Top = 48
    Datasets = <>
    Variables = <>
    Style = <>
    object Data: TfrxDataPage
      Height = 1000.000000000000000000
      Width = 1000.000000000000000000
    end
    object Page1: TfrxReportPage
      PaperWidth = 210.000000000000000000
      PaperHeight = 297.000000000000000000
      PaperSize = 9
      LeftMargin = 10.000000000000000000
      RightMargin = 10.000000000000000000
      TopMargin = 10.000000000000000000
      BottomMargin = 10.000000000000000000
      Frame.Typ = []
    end
  end


Где еще можно копнуть?
=================
Док.

Win7 Ultim x64/Deb 9.3(GNOME, MATE; gtk2) i386:
...
Рейтинг: 0 / 0
09.12.2018, 07:44
    #39744841
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Док,

в исходниках дизайнера найди место, где формируется меню вариантов экспорта. Оттуда крути - что за источник данных используется и как он формируется.
...
Рейтинг: 0 / 0
09.12.2018, 12:30
    #39744891
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Это дважды создаются фильтры экпорта
...
Рейтинг: 0 / 0
09.12.2018, 12:31
    #39744892
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Где копнуть ? Поставить бряку в Create фильтра
...
Рейтинг: 0 / 0
09.12.2018, 13:23
    #39744906
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
А просто ребилд не помогает что ли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.12.2018, 13:29
    #39744908
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
...
Рейтинг: 0 / 0
09.12.2018, 14:09
    #39744921
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Или создаётся несколько экземпляров формы/датамодуля с фильтрами экспорта. В этом случае можно перенести фильтры экспорта на главную форму
...
Рейтинг: 0 / 0
09.12.2018, 14:11
    #39744923
_Den_Z_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Док,

Фильтры которые кладутся на форму регистрируются в глобальном списке.
Где-то дублируется создание фильтра.

А вот с AV непонятная проблема, если будет повторятся приложите стек вызовов.
В целом конвертация должна быть минимальной - переоткрытие и пересохранение форм с компонентами отчета.
...
Рейтинг: 0 / 0
10.12.2018, 09:44
    #39745127
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
_Den_Z_Фильтры которые кладутся на форму регистрируются в глобальном списке.
Где-то дублируется создание фильтра.
у меня тоже сложилось такое же впечатление.

В предыдущей версии,когда у меня на 3-4 формах лежало по 1 объекту TfrxReport, и никто ни с кем не конфликтовал. Теперь же кол-во дублируемых пунктов меню пропорционально кол-ву объектов frxReport.

_Den_Z_А вот с AV непонятная проблема, если будет повторятся приложите стек вызовов.
AV (с сообщением об обращении к адресу 000000, очевидно, к несуществующему объекту ) вылезает при вызове только некоторых пунктов (см. скрин).

Видимо, придется немного переделать логику работы.
...
Рейтинг: 0 / 0
10.12.2018, 10:40
    #39745162
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
[quot Док]_Den_Z_В предыдущей версии,когда у меня на 3-4 формах лежало по 1 объекту TfrxReport, и никто ни с кем не конфликтовал. Теперь же кол-во дублируемых пунктов меню пропорционально кол-ву объектов frxReport.
Пропорционально количеству ФИЛЬТРОВ, а не отчётов
...
Рейтинг: 0 / 0
10.12.2018, 13:46
    #39745314
_Den_Z_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Док,

Как написал DimaBr , кол-во фильтров растет пропорционально созданию экземпляров этих фильтров.
Если часть из них не работает (половина), то могут предположить разве что такой вариант:

Фильтры создаются в нескольких местах (может на нескольких формах), но в момент создания одного из экземпляров происходит исключение (возможно в конструкторе , дальше чем идет регистрация фильтров в список).
Как следствие памяти под эти фильтры не была выделена, в список они добавились, деструктор не отработал и не удалил их из списка.


Если есть исходники, можно поставить точку останова в TfrxCustomExportFilter.Create на frxExportFilters.Register(Self);
По стеку можно определить откуда идет создание.
Возможно пытается загрузить dfm с ошибками и валится на его загрузке, но почему тогда пропускает это исключение сказать не могу.
...
Рейтинг: 0 / 0
10.12.2018, 14:17
    #39745340
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
DimaBrПропорционально количеству ФИЛЬТРОВ, а не отчётов
монопенисуально. Все равно пришлось делать единый обработчик для всех отчетов через костыль. Потому что в нынешней версии приходится держать один отчет и по одному виду фильтра на все приложение.

_Den_Z_Если есть исходники
Спасибо. Как появятся сорцы в паблике на Rio, попробую на нем поэкспериментировать. D2007 стоит в виртуалке, периодические лаги при кодинге не совсем располагают к экспериментам :)
...
Рейтинг: 0 / 0
10.12.2018, 14:43
    #39745377
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
constructor TfrxCustomExportFilter.Create(AOwner: TComponent);
begin
  inherited;
  if not FNoRegister then
    frxExportFilters.Register(Self);
  FShowDialog := True;
  FUseFileCache := True;
  FDefaultPath := '';
  FShowProgress := True;
  FSlaveExport := False;
  FOverwritePrompt := False;
  FFiles := nil;
end;

procedure TfrxPreviewForm.Init;
var
  i, j, k: Integer;
  m, e: TMenuItem;
begin
  ...
  for i := 0 to frxExportFilters.Count - 1 do // перебираем все зарегистрированные фильтры
  begin
    if frxExportFilters[i].Filter = frxDotMatrixExport then
      continue;
    if pbExport in Report.PreviewOptions.Buttons then
      if TfrxCustomExportFilter(frxExportFilters[i].Filter).ClassName <> 'TfrxMailExport' then
      begin
        m := TMenuItem.Create(ExportPopup);
        ExportPopup.Items.Add(m);
        m.Caption := TfrxCustomExportFilter(frxExportFilters[i].Filter).GetDescription + '...';
        m.Tag := i;
        m.O
...
Рейтинг: 0 / 0
10.12.2018, 14:45
    #39745382
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
То есть на каждый созданный Фильтр создаётся пункт меню (кроме TfrxMailExport)
...
Рейтинг: 0 / 0
10.12.2018, 14:56
    #39745390
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
DimaBrТо есть на каждый созданный Фильтр создаётся пункт меню (кроме TfrxMailExport)
Спасибо за основательные разъяснения, для меня очень познавательно. Но я ведь не спорю, причины проблемы выяснил и исправил :)

Единственно, если там есть какой-то баг (это я про AV), надо выложить тестовый проект. А его я смогу сделать, как только сорцы под D10.3 появятся (D2007 на чистую ОСь ставить нет никакого желания)
...
Рейтинг: 0 / 0
10.12.2018, 15:03
    #39745398
Любезный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Я уже давно пришел к выводу, что держать более одного компонента TfrxReport на приложение - это аэпрямой путь к глюкам, сбоям и подобным дупликациям.
...
Рейтинг: 0 / 0
10.12.2018, 15:34
    #39745421
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
ЛюбезныйЯ уже давно пришел к выводу, что держать более одного компонента TfrxReport на приложение - это аэпрямой путь к глюкам, сбоям и подобным дупликациям.
Глупость полная
...
Рейтинг: 0 / 0
10.12.2018, 16:11
    #39745443
_Den_Z_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Любезный,

Никаких проблем это не должно создавать.
Только стоит учитывать, что если это интравебовски дата модуль, который создается из потока, то отчет лучше создавать из кода.
По умолчанию для реализации делфийской компонентной модели (когда компоненты разбросаны по разным формам) используются глобальные списки для компонентов экспорта и датасетов. Через код все это отключается.
...
Рейтинг: 0 / 0
10.12.2018, 17:12
    #39745499
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
_Den_Z_Через код все это отключается.
как, например?

зы. ко всем: на сайте FR есть user's manual. А есть аналогичный developer's manual? Или о назначении свойств придется по исходникам догадываться?
...
Рейтинг: 0 / 0
10.12.2018, 19:39
    #39745592
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Док> зы. ко всем: на сайте FR есть user's manual.
Док> А есть аналогичный developer's manual?

Раньше точно был. И в комплект доки входил отдельным PDF-ом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.12.2018, 19:40
    #39745593
_Den_Z_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Доккак, например?

зы. ко всем: на сайте FR есть user's manual. А есть аналогичный developer's manual? Или о назначении свойств придется по исходникам догадываться?

Можно воспользоваться старым , там эти св-ва есть. "1.22 Multithreading Page 22"
Для 6ки Девелопер и Программер сейчас переписываются.

Если коротко:

Report.EngineOptions.UseGlobalDataSetList := False - отключает использование глобальных датасетов этим экземпляром TfrxReport.
Но придется добавлять датасет вручную : Report.EnabledDataSets.Add(frxDataSet).

Report.EngineOptions.EnableThreadSafe := True; отключает всякие ProcessMessage которые используются для синхронизации в главном потоке.

Чтобы фильтры не регистрировались их нужно создавать из кода TfrxPDFExport.CreateNoRegister, тогда правда его придется ручками регистрировать для просмотра в frxExportFilters.Register(Filter) (но в потоках оно не нужно, там Report.Export(Filter)).

Для потоков лучше использовать последний 6.2.X. Там даже у превью убрал глобальный инстанс рендера текста. Осталось принтеры почистить, чтобы еще совместимость не убить старым пользователям.
...
Рейтинг: 0 / 0
10.12.2018, 21:00
    #39745631
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
_Den_Z_> Можно воспользоваться старым

Я не понял, релиз сорцов выходит отдельно от доки что ли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10.12.2018, 21:28
    #39745634
_Den_Z_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
Гаджимурадов РустамЯ не понял, релиз сорцов выходит отдельно от доки что ли?


Дока есть и была выложена с релизом. Сейчас занимаемся обновлением, т.к. после релиза были изменения.
Отсутствие некоторых мануалов на странице на сайте это ошибка на сайте, поправим.
...
Рейтинг: 0 / 0
10.12.2018, 22:31
    #39745647
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
_Den_Z_Можно воспользоваться старым , там эти св-ва есть. "1.22 Multithreading Page 22"
Для 6ки Девелопер и Программер сейчас переписываются.

Спасибо, даже русский вариант отыскался методом тыка :)

Но, коль, существенные изменения произошли в 6-ке, с интересом жду релиза доков по ней.

Пока вышел из положения тем, что сделал 1 глобальный отчет с фильтрами для всех форм. А загрузку шаблонов и заполнение некоторых свойств (InitialDir, FileName и проч.) сделал локально в формах.
...
Рейтинг: 0 / 0
10.12.2018, 23:42
    #39745673
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport: дублирование пунктов меню
ДокКак появятся сорцы в паблике на Rio, попробую на нем поэкспериментировать.
Поддержка 10.3 есть, начиная с FR VCL 6.2.10
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport: дублирование пунктов меню / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]