Здравствуйте!
Как создать отчет с группировкой по созданным пользователями группам? (пардон за тавтологию:mrgreen:)

Нравится

16 комментариев

Здравствуйте, Алексей.

Теоретически, вы можете это сделать десериализовав фильтры групп из таблицы, затем, распарсив результат использовать полученные значения для сборки фильтров на событии OnBeforeOpen набор данных.
Фильтры хранятся в колонке FilterData, посмотреть формат хранения данных можно выбрав значения:

select cast(cast(FilterData as varbinary(max)) as varchar(max)) from tbl_ContactGroup

Парсить можно используя регулярные выражения, они в Террасофте поддерживаются. Или методы работы со строками, фильтры в xml, проблем возникнуть не должно.

Но в целом, задача достаточно трудоемкая и, как по мне, не стоит того.

Здравствуйте, Максим!

Ок, тогда какие на ваш взгляд возможны варианты реализации формирования печатных форм прайс-листов с группировкой и выборкой по определённым типам продукта?
Совсем не хочется велосипед городить.

Алексей, FastReport позволяет фильтровать выводимые в отчет данные.
А группировать что нужно?
Возможна сложная сортировка, в несколько позиций в сервисе запроса отчета.

Максим, нужна возможность выбора определённого типа товаров, причем, с группировкой по типу.
Например, пусть, у нас магазин спортоваров, сейчас скоро открытие велосезона, нужен прайс по велосипедным запчастям со следующей группировкой: трансмиссия, тормоза, колёса, фрэймсеты и т.д., при этом нужна поддержка иерархии типов (хотя бы 3 уровня), то есть, например, тормоза бывают разных типов: гидравлические механические. И вот нам нужно отобразить все товары типа велозапчасти с группровкой по типам на всех этих уровнях иерархии.

Ранее мы добавили новое поле "Тип продукта", но по нему можно лишь отфильтровать или отгруппировать только по одному уровню иерархии, а надо чтобы можно было выбрать подтипы для группировки.

Можно конечно добавить поле подгруппа, но такой способ масштабирования иерархии мне кажется не очень удачным.

Нашел, что можно в свойствах отчета выбрать тип фильтрации "Для выделенных записей".
Тогда, если заранее была выбрана интересующая группа товаров, то фильтрация будет просто осуществлена заранее, но вопрос с группировкой остаётся открытым.

Для группировки используйте бенд GroupHeader, пример приведен в теме http://www.community.terrasoft.ru/forum/topic/8512

Наталия, в вашем примере используются футеры, это не то, что мне нужно, мне нужна просто двухуровневая иерархия заголовков группировки вместо стандартной одноуровневой
То есть нужны не только группы объединять под общими заголовками, как в стандартном отчете, но и подгруппы. Попробовал просто добавить ещё один GroupHeader и прописать у него в Condition [PriceByAccount."SubType"] (где SubType - Подгруппа, новое добавленное поле). В документации по FastReport не нашёл информации про иерархическую множественную группировку

Алексей, что не получилось, на первый взгляд все верно?
Что касается группировки - число уровней вложенности не ограничено.

Изменение структуры Fast Report никак не отобразилось на реальном представлении отчета, вложенной группировки нет.
Обнаружил, что при просмотре справочника подтипов продуктов (справочника того самого нового добавленного поля о котором шла речь выше) почему-то не отображаются записи, хотя они точно есть. Нет, когда только добавишь новую запись, то в открытом справочнике она появится, но отображается только она, а как только закроешь форму справочника и откроешь заново уже не видно ни одной записи. Хотя я думаю, что это никак не связано с вложенной группировкой, потому как в разделе продукты у продуктов можно выбирать в поле подтип добавленные позиции (то есть справочник подтип всё-таки наполняется хоть и на форме почему-то записи не отображаются)

Алексей, залейте сервисы отчета, пожалуйста.

Я залил не только сервисы отчёта, но и другие сервисы раздела продукты, т.к. у меня добавлены новые поля.

Сервисы интересующего отчёта: папка Offering Price1
Сервисы справочников Подтип и Тип: папки Offering Type и OfferingSubType
Сервисы General->Main Grid: папка Main Grid

Архив лежит в облаке Google Drive:
https://drive.google.com/file/d/0B3vdHXcADJ3kd2hDRXNHei1saGc/edit?usp=s…

Алексей, установите еще корректно сортировку, чтобы в отчете происходила необходимая группировка.
Я установил три уровня сортировки, 0 по типу, 1 по подтипу и 2 по заголовку. В итоге FastReport отлично сгруппировал продукты.

Maxim, сортировка по умолчанию уже и так назначена (по возрастанию) на выбранные в SELECT поля Name, Type и SubType в сервисе sq_ReportOfferingsPriceByAccount1. Может я не там смотрю?

Алексей, в сервисах sq в свойствах колонки есть еще позиция сортировки:

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

Maxim, я установил значения позиций сортировки в соответствии с вашими рекомендациями, но по подтипам продукта не группируется. Надо-ли ещё что-то где-то изменять? (справочник подтипов, естественно заполнен, нескольким продуктам присвоены значения в поле "Подтип продукта").

Алексей, думаю оптимальным вариантом будет провести удаленный доступ и совместно посмотреть вопрос.
Напишите, пожалуйста, в личном сообщении либо на support@terrasoft.ru (со ссылкой на данную тему) удобный период проведения удаленного доступа.

Показать все комментарии