Возможно ли обратиться к итогам при выводе строки данных в Fastreport?
В отчете при выводе строки Masterdata и строки Группировки нужно вывести процент от общих итогов и итогов по группировки. Возможно ли это?
Или обратиться к уже выведенной ячейке отчета.
Нравится
Обратитесь к значению самого Memo.
В том Memo где хотите вывести процент от Итога запишите
[SummaryMemo.Value * ЗначениеПроцента]
Само значение советую вынести в системную переменную, которую считывайте в переменную отчета:
//----------------------------------------------------------------------------- // fr_ReportOnPreviewScript //----------------------------------------------------------------------------- function fr_ReportOnPreview(ReportPreviewer) { ... ReportPreviewer.Report.Attributes('ЗначениеПроцента') = GetSystemParameterValueEx('ЗначениеПроцента', false); }
Подробнее тут
Передача параметров тут не причем. Мне необходимо при выводе строки данных знать итоги для расчета процентов (пример в прикрепленном файле).
Значит в моем предыдущем сообщении Вам нужно читать следующее :
"АльфаКрыса" написал:Обратитесь к значению самого Memo.
В том Memo где хотите вывести процент от Итога запишите
[SummaryMemo.Value * ЗначениеПроцента]
Передавать параметры, а не жестко хардкодить в отчете - это хороший тон программирования
Поясню скриншотом:
Базовый отчет: Campaigns\Reports\Campaigns Profitability\fr_ReportCampaignsProfitability
P.S. А где прикрепленный файл?
Прикрепленный файл в первом сообщении - primer.doc.
Хороший тон программирования это давать доступ к итогам и в начале выборки и в конце.
Здравствуйте, Владимир.
Как вариант, в sq датасета отчета можно добавить поле Count(Id), которое будет считать общие итоги. А в FastReport, с помощью агрерирующей функции, посчитать итоги по группе, разделить на поле с общим итогом, и умножить на 100.
Просмотрел прикрепленный файл, строку Итого по ответственному легко можно реализовать в FastReport,
к примеру:
К-во контрагентов это [COUNT(название DetailDataset)]
Сумма маржи [SUM(Название поля с датасета), название DetailDataset)], после чего к этим ячейкам можно получить доступ так как я писал ранее, так как это есть Memo.
Я вижу это так : MasterDataset - это датасет ответственных, подчиненный DetailDataset - датасет самой таблицы по каждому из ответственных.
По сути FastReport сам делает запросы на Count и SUM с датасетов.
Для АльфаКрыса: лучше смотреть надо - итоги по ответственному там уже есть.
(И Memo это твой родственник?)
Добрый день, Дмитрий. Спасибо за проявленный интерес к теме.
Можно конечно в sq внести подзапрос SUM(Marga), но при задавании условий возникает проблема - нужно выбирать по ответственному (он есть в строке) и по периоду, который выбирает пользователь при формировании отчета.
Владимир, здравствуйте.
Добавьте и включите в данный подзапрос также фильтры. Параметры используйте те, которые уже существуют (дата, ответственный).
Добрый день, Дмитрий.
Ничего не понял.
Наводящий вопрос вы написали "в sq датасета отчета" - но у меня это два разных сервиса
SelectQuery и DBDataset. (версия 3.2.0.81)
Фильтр пользователь выставляет при начале работы с отчетом и каким образом передать его в SelectQuery?
Здравствуйте.
Раз окно фильтрации работает, значит параметры передаются корректно в сервис select query. Значит их можно использовать для нескольких фильтров, в т.ч. в подзапросе для подсчета общих итогов.
DBDataset - это и есть датасет.
SelectQuery - это сервис выборки данных, которая потом(выборка) будет хранится в датасете (DBDataset).
Добрый день, Дмитрий.
Я не знаю как пользоваться параметрами из DBDataset в SelectQuery.
Посмотрел в Profiler при работе отчета - это @P2 и @P3.
Сделаль подзапрос в SelectQuery
(
SELECT SUM(Marga)
FROM tbl_Opportunity AS Opportunity_Marga
WHERE Opportunity_Marga.ActualCloseDate>=@P2 AND Opportunity_Marga.ActualCloseDate<=@P3 AND Opportunity_Marga.OwnerID = tbl_Opportunity.OwnerID
)
Но теперь не открывается сервис отчета.
Пишет -
Невозможно редактировать сервис 'Common\Medinskiy\Report_Client_XYZ\fr_Report_Client_XYZ'. Ошибка открытия источника данных "ds_Report_Client_XYZ".
Оригинальное сообщение об ошибке: Необходимо объявить скалярную переменную "@P2"
Здравствуйте, Владимир.
Просто откройте сервис SelectQuery для отчета и перенесите (создайте аналогичные) фильтры Where для главного запроса в подзапрос:
Добрый день, Дмитрий.
Этого сделать нельзя. Установку фильтров мы получаем в момент нажатия кнопки ОК в окне формирования фильтров в отчете.
Я так понимаю кода скрипта в SelectQuery нет.
Если я не прав будьте добры пример для выделенного участка
Здравствуйте, Владимир.
Дело в том что в данном окне фильтрации вы устанавливаете значение параметров для фильтров, а также включаете фильтры. Сами фильтры должны присутствовать в сервисе selectQuery для отчета.
Вы можете предоставить сервисы, которые используются при построении отчета?
Добрый день!
Попробуйте загрузить сервисы с вложения.
Откройте отчет - Вы увидите, что в датасете добавлено новое поле Count(Количество), в котором хранится общее количество записей в выборке отчета.
Используйте его для реализации нужного Вам функционала.
Добрый день, Дмитрий.
При загрузке sq_Report_Client_XYZ.xml возникает ошибка
Он нужен для понимания?
Владимир, давайте запланируем удаленное подключение на завтра.
Пожалуйста, сообщите удобное для Вас время (можно в ЛС).
Добрый день, Дмитрий.
Если можно в 10-00 03.08.2012.
Если нет, то как вам удобнее.
Добрый день, Дмитрий.
С сожалению должен констатировать следующее.
Фильтры которые вы применили в подзапросе никакого отношения к фильтрам в отчете не имеют!!!
Фильтры AccountTypeID и DataOtchetaNotNull - постоянно действующие фильтры в selectQuery никак не завящие от выбора пользователем в отчете!
А фильтры StartDate и EndDate - это вообще технологические для быстрого построения отчета из Администратора! В рабочем режиме они вообще не работают!!!
А сервис не загружался потому что вы перевели его на версию 3.4.0.121 а у нас рабочая версия 3.2.0.81.
Владимир, доброе утро!
К сожалению не смог к Вам дозвониться.
Попробуйте следующий вариант:
в датасете отчета создайте вычисляемое поле Count. На событии OnDatasetCalcFields для датасета, пропишите следующий код:
var Count = Dataset.RecordsCount;
Dataset('Count') = Count;
И далее, добавьте данное поле в отчет.
Добрый день, Дмитрий.
И чем мне поможет количество записей в выборке?
Здравствуйте!
Насколько я понял, задача состоит в том, чтобы отобразить процентное соотношение итогов по группе, к общим итогам по выборке. С итогами по группе (detail data) мы разобрались. Вопрос был как получить итоги по выборке. Приведенный мною способ и позволяет посчитать их.
Добрый день, Дмитрий.
Вообще вопрос был совершенно в другом. Я думал вы поможете построить фильтры хотя бы на примере count(). Но ...
Всем спасибо за внимание.