powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport построить диаграмму
8 сообщений из 8, страница 1 из 1
FastReport построить диаграмму
    #39570249
minva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно в FastReporte построить линейную диаграмму. По оси X месяц года(или день месяца), по оси Y количество товара. Когда по одному объекту- вопросов нет. Но нужно нарисовать несколько линий, каждая для своего объекта. Количество объектов естественно неизвестно.
Отчет полностью должен быть независимый, т.е. в теле программы кода быть не должно, только в отчете.
Пока только вижу что надо динамически создавать датасеты и серии.
Кодить подобную мутотень в FR ну очень не хочется, неудобно с кодом там работаеть. Но видимо придется...
Но на всякий случай спрашиваю, вдруг не знаю каких-то возможностей.
Можно ли из датасета, состоящего из трех полей:
Объект, Месяц(день), количество
построить несколько линий на диаграмме, где каждая линия соответствует своему объекту
...
Рейтинг: 0 / 0
FastReport построить диаграмму
    #39570281
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minvaОтчет полностью должен быть независимый, т.е. в теле программы кода быть не должно, только в отчете. В экселе это делается влет через сводную таблицу/диаграмму.
В FR нужно сделать аналог сводной таблицы через memory-датасет, может есть готовое 3p решение.
...
Рейтинг: 0 / 0
FastReport построить диаграмму
    #39571254
minva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то кое в чем разобрался. В итоге получился такой код

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure GetSeries;  
var
  qData: TfrxADOQuery;                                            
begin
   qData := TfrxADOQuery.Create(CardChart);
   qData.DataBase := qMain.DataBase;                                           
     
   qData.SQL.Text := 'select 23 as UseCount, 1 as RowNumber	union select 2, 2 union select 21, 3 union select 12, 4 union select 32, 5';
   qData.Open;

   Report.DataSets.Add(qData);    // !!!! Не работает!   
     

    CardChart.AddSeries(csLine);
     with CardChart.SeriesData[1] do
       begin
         DataType := dtDBData;
         DataSet := qData;                                       
         XSource := 'qData."RowNumber"';
         YSource := 'qData."UseCount"';
       end;       
end;



Если работать не с датасетом, а с фиксированными значениями, то все норм.
если строчки Report.DataSets.Add(qData); нет, то ошибка

CardChart: Ошибка в выражении 'qData."RowNumber"': Identifier expected

Из других источников нарыл, что нужно добавлять созданный frxDAtaSet в список датасетов отчета, но там был пример из кода Delphi. А при работе из скрипта эта строка не работает. Как решить проблему?
...
Рейтинг: 0 / 0
FastReport построить диаграмму
    #39571269
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minva qData.SQL.Text := 'select 23 as UseCount, 1 as RowNumber union select 2, 2 union select 21, 3 union select 12, 4 union select 32, 5';

Запрос изменили перед публикацией?
Код: plsql
1.
FROM dual

не хватает))
...
Рейтинг: 0 / 0
FastReport построить диаграмму
    #39571274
minva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК0ДЕР, зачем? это SQLServer, и так нормально запрос выпоолняется
...
Рейтинг: 0 / 0
FastReport построить диаграмму
    #39571328
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minvaИз других источников нарыл, что нужно добавлять созданный frxDAtaSet в список датасетов отчета, но там был пример из кода Delphi. А при работе из скрипта эта строка не работает. Как решить проблему?
Через регистрацию такого функционала в скрипте
...
Рейтинг: 0 / 0
FastReport построить диаграмму
    #39571331
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
type
TFunctions = class(TfsRTTIModule)
  public
    function CallMethod(Instance: TObject; ClassType: TClass;const AName: String; Caller: TfsMethodHelper): Variant;
    constructor Create(AScript: TfsScript); override;
end;

constructor TFunctions.Create(AScript: TfsScript);
begin
  inherited Create(AScript);
  with AScript do begin
    with AddClass(TfrxReportDataSets, 'TCollection') do begin
      AddMethod('procedure Add(ds: TfrxDataSet)',CallMethod);
      AddMethod('procedure Delete(Name: string)',CallMethod);
    end;
    with FindClass('TfrxReport') do
      AddMethod('function DataSets:TfrxReportDataSets;', CallMethod);
  end;
end;

function TFunctions.CallMethod(Instance: TObject; ClassType: TClass; const AName: String; Caller: TfsMethodHelper): Variant;
begin
  if ClassType = TfrxReportDataSets then begin
    if AName = 'ADD' then
      TfrxReportDataSets(Instance).Add(TfrxDataSet(integer(Caller[0]))) else
    if AName = 'DELETE' then
      TfrxReportDataSets(Instance).Delete(string(Caller[0]));
  end;
    if ClassType = TfrxReport then begin
      if AName = 'DATASETS' then Result := integer(TfrxReport(Instance).DataSets);
end;

initialization
  fsRTTIModules.Add(TFunctions);

finalization
  fsRTTIModules.Remove(TFunctions);
end.
...
Рейтинг: 0 / 0
FastReport построить диаграмму
    #39571390
minva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, спасибо, я тоже уже нарыл, что они много казалось бы очевидных вещей не доделали в RTTI модулях. Ту же сортировку значений для серии из скрипта нельзя сделать без доработок и еще кое что...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport построить диаграмму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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