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

Код: 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
18.12.2017, 11:25
    #39571269
шК0ДЕР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport построить диаграмму
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
18.12.2017, 11:33
    #39571274
minva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport построить диаграмму
шК0ДЕР, зачем? это SQLServer, и так нормально запрос выпоолняется
...
Рейтинг: 0 / 0
18.12.2017, 12:47
    #39571328
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport построить диаграмму
minvaИз других источников нарыл, что нужно добавлять созданный frxDAtaSet в список датасетов отчета, но там был пример из кода Delphi. А при работе из скрипта эта строка не работает. Как решить проблему?
Через регистрацию такого функционала в скрипте
...
Рейтинг: 0 / 0
18.12.2017, 12:52
    #39571331
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.
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
18.12.2017, 14:07
    #39571390
minva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport построить диаграмму
DimaBr, спасибо, я тоже уже нарыл, что они много казалось бы очевидных вещей не доделали в RTTI модулях. Ту же сортировку значений для серии из скрипта нельзя сделать без доработок и еще кое что...
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport построить диаграмму / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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