Не простой композит

отредактировано 17:06 Раздел: FastReport 4.0
ХАй.

У мну такая проблема.

Есть отчет Мастер-Деталь.

такого формата:

- Мастер запись
- Деталь 1
- Деталь 2
- Мастер запись
- Деталь 3
- Деталь 4

Мастер данные - это заголовок в виде Шапки (клиент такой-то, дата такая то, общая сумма.)

Деталь представляет из себя отчетик ровно на одну страницу заданного формата и идут детали за мастером одна за одной каждая с новой страницы.

ПРОБЛЕМА. Деталей весьма много + вообще мне их нужно печатать и отдельно.

Мне хотелось бы сделать композит такого вида:

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

- При событии AfterScroll мастера - печатать отдельный отчет приложение и добавлять В СТРОЯЩИЙСЯ ОТЧЕТ.
- Затем идет следующая мастер запись.

Т.е. чтобы Детальки печатались по середине печати мастер записей и вставлялись между.


Идея в том, чтобы вынести Детали в отдельные отчеты. Во первых чтобы их можно было отдельно печатать, и во вторых - сейчас у меня тупо дублирование кода.

Потому что сейчас я сделал два отчета - один с Мастер записями, а второй только с Деталями (та самая отдельная печать деталей) - соотвественно есть дублирование Деталей. И если что то меняется приходится и там и там лопатить + скрипты копировать.... Короче муторно.


Я попробовал сделать, но не совсем получилось.

Вот так делал:


Кинул на форму два репорта. Первый это мастер запрос - в нем кинул мастер бенд, привязал к данным. Во второй кинул просто мемку.

Кинул кнопочку в ней такой код:
frxReport1.PrepareReport();
frxReport1.ShowPreparedReport;

Т.е. я тупо попросил подготовится отчет с мастер записями.


И еще сделал обработчик AfterScroll для датасета. Вот такой код:

frxReport2.Variables := i; // это просто чтобы детальки отличать - эта цифра просто на мемке показывается.
frxReport2.PrepareReport();
frxReport1.PreviewPages.AddFrom(frxReport2);

Т.е. я на афтерскролле делаю внешний отчет и пытаюсь вставить его в текущий...


Ну вот.
А результат не тот что хотелось а наоборот странный.

Сначала идут ВСЕ записи мастера - в виде совершенно обычно табличке. ТАк как будто это обычнй отчет - т.е. друг под дружко, без разрывов на одной странице. Короче обычная таблица.

А затем идут детали каждая на новой странице.


В общем странно что Мастер данные вместе получились... Я ожидал что Детали влезут внутрь мастер записей.



Подскажите как можно это реализовать. Т.к. копи-паст в два отчета немного муторен.

Комментарии

  • отредактировано 17:06
    Прикладывать особо нечего - но выложу для понятности

    НА форме два репорта, датасет и кнопка.



    На форме расположен TVirtualDataSet - это просто чтобы не возьтся с конекшеном и квериками (удобная штукенция).

    Если нету такого компонента подставьте любой свой датасет датасет - и поправьте в frxReport1 текст в мемке (там сейчас стоит Master: [frxDBDataset1."SomeField"]) - и все.

    Также подцепите к вашему датасету обработчик AfterScroll - если вы свой датасет подключите.
  • отредактировано 17:06
    ЧТо скажете - можно ли составлять составные композиты перемежая их между собой ? оч бы пригодилось....
  • отредактировано 17:06
    Ну кто нить ну подскажите плиз ))
    Возможно ли это вообще ?...
  • gpigpi
    отредактировано 17:06
    Можно. Пример в аттаче
  • отредактировано 17:06
    Сори, но то что вы мне дали это не то что мне нужно....
    Вы ен поняли чего мне надо....

    У вас просто мастер-деталь, где деталька расположена на друго странице ОДНОГО отчета......



    ТЫк а мне то принципиально чтобы они были СОВЕРШЕННО РАЗНЫМИ ОТЧЕТАМИ....


    Посмотрите мой пример пожалуйста... Я там показал что мне примерно нужно...


    Мне нужно чтобы на форме было Два разных компонента frxReport'а, и чтобы в одном был мастер,а в другом деталь..


    Понимаете - ПРИНЦИПИАЛЬНО чтобы они были в разных компонентах.....


    Почему мне это надо.

    У меня есть детали (документы), которых больше 10 типов.

    А если где то 3 разных мастера (шапки отчета)....


    И вот понимаете - сейчас у меня полное дублирование отчетов в 4 разных отчетов... Это ужос просто... Мне приходится вот эти детали копировать вот между этими 3 разными отчетами.... И если что то гдже то меняется - или добавляется новый тип, то мнге приходится его копировать между всеми этими 3 разными отетами (((( Это так не удобно...


    PS. Если нельзя это сделать, то вот вам пожелание чего бы сделать в FR 5 :) )))
  • gpigpi
    отредактировано 17:06
    Установите TfrxDBDataSet.RangeBegin в rbCurrent и TfrxDBDataSet.RangeEnd в reCurrent и стройте композитный отчёт для каждой записи мастера
    написал:
    У меня есть детали (документы), которых больше 10 типов.

    А если где то 3 разных мастера (шапки отчета)....
    Это можно поместить на страницы одного отчёта и скрывать неиспользуемые страницы перед печатью отчёта

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

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