В отчете при выводе строки Masterdata и строки Группировки нужно вывести процент от общих итогов и итогов по группировки. Возможно ли это? Или обратиться к уже выведенной ячейке отчета. primer.doc
Обратитесь к значению самого Memo.
В том Memo где хотите вывести процент от Итога запишите
[SummaryMemo.Value * ЗначениеПроцента]
Само значение советую вынести в системную переменную, которую считывайте в переменную отчета:
//-----------------------------------------------------------------------------// fr_ReportOnPreviewScript//-----------------------------------------------------------------------------
function fr_ReportOnPreview(ReportPreviewer){
...
ReportPreviewer.Report.Attributes('ЗначениеПроцента')= GetSystemParameterValueEx('ЗначениеПроцента', false);}
Как вариант, в sq датасета отчета можно добавить поле Count(Id), которое будет считать общие итоги. А в FastReport, с помощью агрерирующей функции, посчитать итоги по группе, разделить на поле с общим итогом, и умножить на 100.
Просмотрел прикрепленный файл, строку Итого по ответственному легко можно реализовать в FastReport,
к примеру:
К-во контрагентов это [COUNT(название DetailDataset)]
Сумма маржи [SUM(Название поля с датасета), название DetailDataset)], после чего к этим ячейкам можно получить доступ так как я писал ранее, так как это есть Memo.
Я вижу это так : MasterDataset - это датасет ответственных, подчиненный DetailDataset - датасет самой таблицы по каждому из ответственных.
По сути FastReport сам делает запросы на Count и SUM с датасетов.
Добрый день, Дмитрий. Спасибо за проявленный интерес к теме.
Можно конечно в sq внести подзапрос SUM(Marga), но при задавании условий возникает проблема - нужно выбирать по ответственному (он есть в строке) и по периоду, который выбирает пользователь при формировании отчета.
Раз окно фильтрации работает, значит параметры передаются корректно в сервис 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 нет.
Если я не прав будьте добры пример для выделенного участка
Дело в том что в данном окне фильтрации вы устанавливаете значение параметров для фильтров, а также включаете фильтры. Сами фильтры должны присутствовать в сервисе selectQuery для отчета.
Вы можете предоставить сервисы, которые используются при построении отчета?
Попробуйте загрузить сервисы с вложения.
Откройте отчет - Вы увидите, что в датасете добавлено новое поле Count(Количество), в котором хранится общее количество записей в выборке отчета.
Используйте его для реализации нужного Вам функционала.
Фильтры которые вы применили в подзапросе никакого отношения к фильтрам в отчете не имеют!!!
Фильтры AccountTypeID и DataOtchetaNotNull - постоянно действующие фильтры в selectQuery никак не завящие от выбора пользователем в отчете!
А фильтры StartDate и EndDate - это вообще технологические для быстрого построения отчета из Администратора! В рабочем режиме они вообще не работают!!!
А сервис не загружался потому что вы перевели его на версию 3.4.0.121 а у нас рабочая версия 3.2.0.81.
Насколько я понял, задача состоит в том, чтобы отобразить процентное соотношение итогов по группе, к общим итогам по выборке. С итогами по группе (detail data) мы разобрались. Вопрос был как получить итоги по выборке. Приведенный мною способ и позволяет посчитать их.