Создание круговой диаграммы в Генераторе отчетов

Avatar
  • обновлен
  • Отвечен

Есть 4 канала: А1, А2, А3, A. A = A1 + A2 + A3.


Хочу вставить в отчет круговую диаграмму. 

На этой диаграмме должны отображаться доли этих каналов в общей сумме:

А1 / А, А2 / А, А3 / А.


В руководстве на FastReport приводится пример с таблицей из БД.

Но у нас нет БД, мы работаем с каналами.

Как тогда формировать исходные данные для сегментов диаграммы?

Avatar
Константин Лаптев

Добрый день, Станислав С. 


Возникает ошибка при нажатии кнопки:
23.08.2021 17:40:19.380 Invalid floating point operation - [Report_Energy_Create]

У вас в скрипте происходит деление на 0. Это вызывает ошибку времени выполнения.

Указал путь: OpenReport('Templates\Energy1');

В вашем проекте, который мы получили, путь до отчета указан верно. Папку Templates указывать не нужно.

Почему для Источник Истории Каналов (THistorySet) я могу выводить значения поканально,
а для Источник Каналов (TChannelSet) не могу.
Чем они отличаются принципиально?

   

   HistorySet выводит значения канала в определенный момент времени с определенным агрегатором в виде записей. В настройках компонента настраиваются конечные поля через указание канала, его свойства, агрегатора записей в поддиапазоне. В пределах поддиапазона, полученного делением диапазона на интревал, для полученных записей с диска(ssd) применяется агрегатор и выводится в запись источника данных соответствующую этому поддиапазону.

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

  Для начала нужно определиться, что означает вывести поканально.

Что это за ошибка?

Ошибка системная. Подробнее опишите что делали при её получении.

Avatar
Станислав С

Что это за ошибка?

Avatar
Станислав С

Почему для Источник Истории Каналов (THistorySet) я могу выводить значения поканально,

а для Источник Каналов (TChannelSet) не могу. 

Чем они отличаются принципиально?

Avatar
Станислав С

У меня шаблон отчета находится здесь:

d:\slProject\Reports\Templates\

Указал путь:  OpenReport('Templates\Energy1');

Скриншот ошибки во вложении.

Avatar
Константин Лаптев
Цитата от Станислав С

?

Добрый день. ИсточникКаналов позволяет получить каналы в виде записей в FastReport. При редактировании этого компонента указываются каналы, которые будут получены генератором отчетов от Монитора. Поля "Наименование", "ФорматированноеЗначение" относятся к свойствам каналов, а не к самим тегам. Компонент "Диаграмма" FastReport работает с записями источника данных, а не с каналами на прямую.

В вашем проекте отчет сгенерировался по нажатию на кнопку, а в моем нет!
И как понять почему?

Убедитесь, что отчет находится в корне дерева отчетов в редакторе отчетов либо укажите до него путь, если он находится внутри папки. Например, Отчеты\Отчет пресса №4
https://simplight.ru/manual_next/razdel/openreport

Avatar
Станислав С

Возникает ошибка при нажатии кнопки:

23.08.2021 17:40:19.380 Invalid floating point operation - [Report_Energy_Create]

Что это означает? Тег бинарный.

Avatar
Станислав С

Скрипт, формирующий отчет:

var
lStart: TDateTime;
lEnd: TDateTime;

var
W1, W2, W3, W4, W5, W6, WG, WC: Double;

begin
lStart := ReadValue('Report_Energy_Start');
lEnd := ReadValue('Report_Energy_End');

W1 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_Engines_H');
W2 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_Solar_H');
WG := W1 + W2;

WriteValue('W_Generation', WG);
WriteValue('W_Share_Engines_H', W1 / WG);
WriteValue('W_Share_Solar_H', W2 / WG);

W3 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_AC_Load_H');
W4 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_DC_Load_H');
W5 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_AC_Load_H');
W6 := GetConsumptionValueFromDB(lStart, lEnd, 'Device1.All.Calc.W_DC_Load_H');

WC := W3 + W4 + W5 + W6;
WriteValue('W_Consumption', WC);
WriteValue('W_Share_AC_Load_H', W3 / WC);
WriteValue('W_Share_DC_Load_H', W4 / WC);
WriteValue('W_Share_DC_Aux_H', W5 / WC);
WriteValue('W_Share_W_Bat_H_In', W6 / WC);

OpenReport('Energy1');
end.

Avatar
Станислав С

Все-таки, я не понимаю логику работы.

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

"Наименование", "ФорматированноеЗначение" к какому тегу относятся?!

В вашем проекте отчет сгенерировался по нажатию на кнопку, а в моем нет!

И как понять почему?!