Как разбить отчет на группы

отредактировано 18:44 Раздел: FastReport 4.0
Всем доброго времени суток!
Отчет делается в среде программирования Delphi 7, в качестве БД используется MS Access, в Delphi используется связка компонентов DataSource + ADOQuery + DBGridEh.
В общем суть вопроса такова. Есть таблица "Номенклатура", которая в свою очередь делится на несколько групп (к примеру "Товары" и "Услуги"). Необходимо напечатать прайс-лист, в котором, к примеру после заголовков столбцов, выводилась бы строка с надписью "Товары", затем шли данные из таблички "Номенклатура", которые относятся к группе "Товары", затем, строка "Услуги" и далее данные из той же таблички, которые относятся к группе "Услуги"
Для наглядности, я набросал в экселе, как должна выглядеть табличка в отчете.

d21948d51b9e.jpg

Заранее большое спасибо всем тем кто откликнется и уж тем более поможет!!! :)

Комментарии

  • отредактировано 18:44
    Вложенные отчеты, 2шт ADOQuery надо, цикл по группам, внутри каждой группы цикл по позициям.
  • отредактировано 18:44
    Yuraz.com, спасибо за ответ, только вот можно по подробнее? И что за вложенные отчеты?
  • gpigpi
    отредактировано 18:44
    Отсортируйте датасет по видам групп и используйте заголовок группы
  • отредактировано 18:44
    Ребята, объясните пожалуйста по подробнее, как и с чего начинать? Просто я совсем недавно начал работать с ФастРепортом и еще не совсем освоился.
    Заранее спасибо
  • gpigpi
    отредактировано 18:44
    скачайте FRDemo - там много примеров, в том числе и с группировками
  • отредактировано 18:44
    А может кто-нибудь на словах объяснит? Пожалуйста!
  • отредактировано April 2010
    Все, ребята, спасибо всем большое! Я разобрался!!!!!!!! УРА!!! :)
  • отредактировано 18:44
    Сам разобрался, а другим, значит, не надо? :)
  • HunterNSHunterNS Таганрог
    отредактировано 18:44
    написал:
    Сам разобрался, а другим, значит, не надо?

    Создаёшь один датасет, пишешь запрос, например (select group, name, cnt from my_table order by group, name). Сортируешь в запросе по группе.
    Потом в дизайнере добавляешь элементы Header, GroupHeader, MasterData (если нужно GroupFooter и Footer). В GroupHeader указываешь, что группировка идет по полю "group" и всё.
  • отредактировано 18:44
    HunterNS написал: »
    Создаёшь один датасет, пишешь запрос, например (select group, name, cnt from my_table order by group, name). Сортируешь в запросе по группе.
    Потом в дизайнере добавляешь элементы Header, GroupHeader, MasterData (если нужно GroupFooter и Footer). В GroupHeader указываешь, что группировка идет по полю "group" и всё.
    То есть это если уже есть поле группы в БД?
    А если нужно формировать группы на ходу? Например, есть количество заказов от клиентов. Нужно было сгруппировать их по заказам(Группы до 20-ти заказов, до 100, больше 100). Я сделал три бэнда, в каждом прописал в фильтре условия. Вроде работает, но мне кажется, что это не изящно :)
  • gpigpi
    отредактировано 18:44
    можно добавить в датасет вычисляемое поле (на стороне сервера), которое будет возвращать целое число в зависимости от количества заказов
    0 - до 20;
    1 - 21-100;
    2 - более 100
    и в условии группировки поставить это поле. Датасет должен быть отсортирован по этому полю
  • отредактировано 18:44
    gpi написал: »
    можно добавить в датасет вычисляемое поле (на стороне сервера)
    Спасибо, попробую! А разделители между группами можно будет поставить в этом случае(хотя бы жирную линию после каждой группы)?
  • gpigpi
    отредактировано 18:44
    Используйте подвал группы
  • отредактировано 18:44
    gpi написал: »
    Используйте подвал группы
    Спасибо!

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.