
0
Отвечен
Создание круговой диаграммы в Генераторе отчетов
Есть 4 канала: А1, А2, А3, A. A = A1 + A2 + A3.
Хочу вставить в отчет круговую диаграмму.
На этой диаграмме должны отображаться доли этих каналов в общей сумме:
А1 / А, А2 / А, А3 / А.
В руководстве на FastReport приводится пример с таблицей из БД.
Но у нас нет БД, мы работаем с каналами.
Как тогда формировать исходные данные для сегментов диаграммы?
Сервис поддержки клиентов работает на платформе UserEcho
Добрый день. Соотношение текущих значений каналов вы можете вывести на круговую диаграмму с помощью компонентов ИсточникКаналов(Вкладка Данные, TChannelSet) и Объект "Диаграмма" (Вкладка Page*, TfrxChartView). На данный момент не получится получить коэффициенты на уровне FastReport. Однако Вы можете использовать отдельные виртуальные каналы для хранения коэффициентов, которые могут быть установлены из скрипта.
Я не понял ваш ответ. Какие должны быть виртуальные каналы?
Добрый день. Виртуальные каналы могут быть добавлены в активные каналы в модуле Редактор каналов из источников. Это каналы, используемые только внутри системы. Их значения могут быть установлены из скрипта.
https://simplight.ru/manual_next/rabota-s-kanalami/redaktor-virtualnykh-kanalov#:~:text=%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B3%D1%80%D1%83%D0%BF%D0%BF)%20%D1%83%D0%B4%D0%B0%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F.-,%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D0%B0%D0%BC%D0%B8,-%D0%94%D0%BB%D1%8F%20...
https://simplight.ru/manual_next/nastroyki-virtualnykh-kanalov/dobavlenie-skriptov-virtualnym-kanalam
Пример исходного кода скрипта:
https://pastebin.com/ZKrgErCD
Это все понятно. Что писать в полях Значения: Pie, Color?
Вам необходимо выбрать поле источника данных со значением канала для поля Pie. Поле Color может быть оставлено пустым.
Т. е. Pie1 - А1, Pie2 - А2, Pie3 - А3
Для вывода текущих значений каналов вам требуется компонент TChannelSet. Пример заполнения полей ряда диаграммы:
Также укажите для бенда MasterData1 ваш источник данных. Открыть окно можно сделав двойной клик.
Что вы мне загадками отвечаете?! Я конкретный вопрос задал про каналы!
Что такое бенд?
Каков вопрос таков ответ. Сформулируйте вашу задачу более конкретно, опишите сделанные вами шаги.
Бенд - это полоска на странице отчета. Предназначена для вывода записей источника данных. Записи выводятся добавлением объекта Текст на бенд с указанием внутри поля источника данных.
А1, А2, А3 куда писать?
Сделайте нормальные примеры для редактора отчетов!
Руководство на Fast Reports криво написано - только методом тыка разбираться!
Есть 4 канала: А1, А2, А3, A. A = A1 + A2 + A3.
Хочу вставить в отчет круговую диаграмму.
На этой диаграмме должны отображаться доли этих каналов в общей сумме:
А1 / А, А2 / А, А3 / А.
Как еще написать?! Прочитайте сами свой ответ и попробуйте его понять!
"Наименование" и "Форматированное значение" это вообще к чему относится?!
Вы используете виртуальные каналы для хранения коэффициентов и наполняете их из скрипта? Вам требуются текущие значения вывести или записанные ранее в базу данных?
Высылаю инструкцию по созданию вашего отчета.
Пример создания круговой диаграммы в отчете.docx
Мне нужно вывести соотношение разных выработок (потребления) мощности в балансе за день.
Решаю задачу следующим образом.
Накопленным итогом считаю по каждому каналу выработку.
Затем вычисляю разность двух значений за день. Эти данные попадут в каналы А1, А2, А3.
A = A1 + A2 + A3
Теперь на круговую диаграмму нужно вывести доли этих каналов в общей сумме:
А1 / А, А2 / А, А3 / А.
Простите, вмешаюсь. Для меня тоже тема нужная.
Станислав, у вас затруднение в формировании отчета с элементом вставки диаграммы или в методе подготовки данных (скриптовая математика) к выводу в отчет, или то и другое?
Что писать в настройках диаграммы? В мануале дан пример для базы данных, которой нет в SimpLight!
Я посмотрел ваш пример. У вас в источнике каналов 6 тегов, а на диаграмме только 3.
А где остальные? По настройкам я не вижу, чтобы вы их явным образом где-то прописывали.
В мануале указано, что каналы должны быть выбраны в настройках источника данных. Для этого необходимо выбрать каналы в дереве слева, затем нажать кнопку переноса в список справа. Этот список справа и содержит используемые источником данных каналы.
У меня окно выбора каналов выглядит по-другому.Screenshot - 18.08.2021 , 10_50_25.png
Какая связь между страницами 7 и 8? Как теги привязываются к диаграмме?!
Один и тот же вопрос по кругу уже 4й раз задаю!
Вам нужно использовать Текущее значение каналов вместо истории каналов (THistorySet) (2 иконка вместо 3-ей) на вкладке Данные в панели инструментов слева от инспектора объектов. Теги к диаграмме не привязывается на прямую. В документе написано что через источник данных. Диаграмма работает только с источником данных. Связь между 7 и 8 страницей заключается в открытии предварительного просмотра отчета. На последнем скриншоте показан результат.
Проект к мануалу: Reporter test v 4.7.7.slz
Мне как раз нужна история каналов, потому что нужно посчитать выработку за день!
Ну и как?
?
День добрый, Станислав.
Наши специалисты ответят Вам в порядке очереди. Ожидайте. Уточните какая версия СИМП установлена у Вас на данный момент (лайт, про, ент и цифры версии)?
4.7.7.37
Enterprise
Добрый день, Станислав.
Компонент THistorySet не может быть использован для решения этой задачи. Я предлагаю вам проект и видео к нему к нему с примером реализации вашей задачи.
Отчет.Круговая диаграмма.slz
Спасибо.
Но мне кажется, что это неправильное решение.
Вы выгружаете данные поканально за сутки притом, что каждый тег обновляется раз в секунду.
А потом вы суммируете эти данные.
За 24 часа мне нужно сложить 86400 значений, равных примерно 1000.
Во-первых, будет переполнение, во-вторых, такой объем данных сразу намертво подвесит скаду, если таких каналов будет с десяток.
У меня была идея считать нарастающим итогом энергию, а потом из значения конца дня вычитать значение начала дня. В общем, ваша идея с использованием функций StreamReadFromDatabase и GetValueFromStream мне понятна:
считать все в скрипте, а данные для отчета брать из Монитора.
Думаю, что смогу сейчас это реализовать.
Да, вы правы что может быть переполнение. Точность типа double составляет [15 цифр точности в диапазоне от 2.23 x 10-308 до 1.79 x 10308], так что это мало вероятное событие. В этом примере показано сложение за месяц при наполнении с 60 сек. интервалом. Скрипты выполняются в фоновом потоке, следовательно скаду он не повесит, просто придется ждать расчет после запуска скрипта.
Все-таки, я не понимаю логику работы.
Если я в редакторе отчетов открываю источник каналов, то почему я не могу указать конкретные теги, которые мне нужно прочитать.
"Наименование", "ФорматированноеЗначение" к какому тегу относятся?!
В вашем проекте отчет сгенерировался по нажатию на кнопку, а в моем нет!
И как понять почему?!
Скрипт, формирующий отчет:
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.
Возникает ошибка при нажатии кнопки:
23.08.2021 17:40:19.380 Invalid floating point operation - [Report_Energy_Create]
Что это означает? Тег бинарный.
?
Добрый день. ИсточникКаналов позволяет получить каналы в виде записей в FastReport. При редактировании этого компонента указываются каналы, которые будут получены генератором отчетов от Монитора. Поля "Наименование", "ФорматированноеЗначение" относятся к свойствам каналов, а не к самим тегам. Компонент "Диаграмма" FastReport работает с записями источника данных, а не с каналами на прямую.
Убедитесь, что отчет находится в корне дерева отчетов в редакторе отчетов либо укажите до него путь, если он находится внутри папки. Например, Отчеты\Отчет пресса №4
https://simplight.ru/manual_next/razdel/openreport
У меня шаблон отчета находится здесь:
d:\slProject\Reports\Templates\
Указал путь: OpenReport('Templates\Energy1');
Скриншот ошибки во вложении.
Почему для Источник Истории Каналов (THistorySet) я могу выводить значения поканально,
а для Источник Каналов (TChannelSet) не могу.
Чем они отличаются принципиально?
Что это за ошибка?
Добрый день, Станислав С.
У вас в скрипте происходит деление на 0. Это вызывает ошибку времени выполнения.
В вашем проекте, который мы получили, путь до отчета указан верно. Папку Templates указывать не нужно.
HistorySet выводит значения канала в определенный момент времени с определенным агрегатором в виде записей. В настройках компонента настраиваются конечные поля через указание канала, его свойства, агрегатора записей в поддиапазоне. В пределах поддиапазона, полученного делением диапазона на интревал, для полученных записей с диска(ssd) применяется агрегатор и выводится в запись источника данных соответствующую этому поддиапазону.
ChannelSet выводит выбранные каналы в виде записей, а поля соответствуют свойствам каналов. Выбрать каналы можно в окне настройки источника данных. Открыть его можно двойным кликом по компоненту. Нужные для дальнейшего использования каналы нужно переместить в список справа, используя кнопку со стрелкой вправо.
Для начала нужно определиться, что означает вывести поканально.
Ошибка системная. Подробнее опишите что делали при её получении.