Не простой композит
ХАй.
У мну такая проблема.
Есть отчет Мастер-Деталь.
такого формата:
- Мастер запись
- Деталь 1
- Деталь 2
- Мастер запись
- Деталь 3
- Деталь 4
Мастер данные - это заголовок в виде Шапки (клиент такой-то, дата такая то, общая сумма.)
Деталь представляет из себя отчетик ровно на одну страницу заданного формата и идут детали за мастером одна за одной каждая с новой страницы.
ПРОБЛЕМА. Деталей весьма много + вообще мне их нужно печатать и отдельно.
Мне хотелось бы сделать композит такого вида:
Мастер отчет сделать в виде отдельного отчета, Детали каждый тип в своем отчете.
И дальше хочется сделать такого вида композитный отчет:
- При событии AfterScroll мастера - печатать отдельный отчет приложение и добавлять В СТРОЯЩИЙСЯ ОТЧЕТ.
- Затем идет следующая мастер запись.
Т.е. чтобы Детальки печатались по середине печати мастер записей и вставлялись между.
Идея в том, чтобы вынести Детали в отдельные отчеты. Во первых чтобы их можно было отдельно печатать, и во вторых - сейчас у меня тупо дублирование кода.
Потому что сейчас я сделал два отчета - один с Мастер записями, а второй только с Деталями (та самая отдельная печать деталей) - соотвественно есть дублирование Деталей. И если что то меняется приходится и там и там лопатить + скрипты копировать.... Короче муторно.
Я попробовал сделать, но не совсем получилось.
Вот так делал:
Кинул на форму два репорта. Первый это мастер запрос - в нем кинул мастер бенд, привязал к данным. Во второй кинул просто мемку.
Кинул кнопочку в ней такой код:
frxReport1.PrepareReport();
frxReport1.ShowPreparedReport;
Т.е. я тупо попросил подготовится отчет с мастер записями.
И еще сделал обработчик AfterScroll для датасета. Вот такой код:
frxReport2.Variables := i; // это просто чтобы детальки отличать - эта цифра просто на мемке показывается.
frxReport2.PrepareReport();
frxReport1.PreviewPages.AddFrom(frxReport2);
Т.е. я на афтерскролле делаю внешний отчет и пытаюсь вставить его в текущий...
Ну вот.
А результат не тот что хотелось а наоборот странный.
Сначала идут ВСЕ записи мастера - в виде совершенно обычно табличке. ТАк как будто это обычнй отчет - т.е. друг под дружко, без разрывов на одной странице. Короче обычная таблица.
А затем идут детали каждая на новой странице.
В общем странно что Мастер данные вместе получились... Я ожидал что Детали влезут внутрь мастер записей.
Подскажите как можно это реализовать. Т.к. копи-паст в два отчета немного муторен.
У мну такая проблема.
Есть отчет Мастер-Деталь.
такого формата:
- Мастер запись
- Деталь 1
- Деталь 2
- Мастер запись
- Деталь 3
- Деталь 4
Мастер данные - это заголовок в виде Шапки (клиент такой-то, дата такая то, общая сумма.)
Деталь представляет из себя отчетик ровно на одну страницу заданного формата и идут детали за мастером одна за одной каждая с новой страницы.
ПРОБЛЕМА. Деталей весьма много + вообще мне их нужно печатать и отдельно.
Мне хотелось бы сделать композит такого вида:
Мастер отчет сделать в виде отдельного отчета, Детали каждый тип в своем отчете.
И дальше хочется сделать такого вида композитный отчет:
- При событии AfterScroll мастера - печатать отдельный отчет приложение и добавлять В СТРОЯЩИЙСЯ ОТЧЕТ.
- Затем идет следующая мастер запись.
Т.е. чтобы Детальки печатались по середине печати мастер записей и вставлялись между.
Идея в том, чтобы вынести Детали в отдельные отчеты. Во первых чтобы их можно было отдельно печатать, и во вторых - сейчас у меня тупо дублирование кода.
Потому что сейчас я сделал два отчета - один с Мастер записями, а второй только с Деталями (та самая отдельная печать деталей) - соотвественно есть дублирование Деталей. И если что то меняется приходится и там и там лопатить + скрипты копировать.... Короче муторно.
Я попробовал сделать, но не совсем получилось.
Вот так делал:
Кинул на форму два репорта. Первый это мастер запрос - в нем кинул мастер бенд, привязал к данным. Во второй кинул просто мемку.
Кинул кнопочку в ней такой код:
frxReport1.PrepareReport();
frxReport1.ShowPreparedReport;
Т.е. я тупо попросил подготовится отчет с мастер записями.
И еще сделал обработчик AfterScroll для датасета. Вот такой код:
frxReport2.Variables := i; // это просто чтобы детальки отличать - эта цифра просто на мемке показывается.
frxReport2.PrepareReport();
frxReport1.PreviewPages.AddFrom(frxReport2);
Т.е. я на афтерскролле делаю внешний отчет и пытаюсь вставить его в текущий...
Ну вот.
А результат не тот что хотелось а наоборот странный.
Сначала идут ВСЕ записи мастера - в виде совершенно обычно табличке. ТАк как будто это обычнй отчет - т.е. друг под дружко, без разрывов на одной странице. Короче обычная таблица.
А затем идут детали каждая на новой странице.
В общем странно что Мастер данные вместе получились... Я ожидал что Детали влезут внутрь мастер записей.
Подскажите как можно это реализовать. Т.к. копи-паст в два отчета немного муторен.
Комментарии
НА форме два репорта, датасет и кнопка.
На форме расположен TVirtualDataSet - это просто чтобы не возьтся с конекшеном и квериками (удобная штукенция).
Если нету такого компонента подставьте любой свой датасет датасет - и поправьте в frxReport1 текст в мемке (там сейчас стоит Master: [frxDBDataset1."SomeField"]) - и все.
Также подцепите к вашему датасету обработчик AfterScroll - если вы свой датасет подключите.
Возможно ли это вообще ?...
Вы ен поняли чего мне надо....
У вас просто мастер-деталь, где деталька расположена на друго странице ОДНОГО отчета......
ТЫк а мне то принципиально чтобы они были СОВЕРШЕННО РАЗНЫМИ ОТЧЕТАМИ....
Посмотрите мой пример пожалуйста... Я там показал что мне примерно нужно...
Мне нужно чтобы на форме было Два разных компонента frxReport'а, и чтобы в одном был мастер,а в другом деталь..
Понимаете - ПРИНЦИПИАЛЬНО чтобы они были в разных компонентах.....
Почему мне это надо.
У меня есть детали (документы), которых больше 10 типов.
А если где то 3 разных мастера (шапки отчета)....
И вот понимаете - сейчас у меня полное дублирование отчетов в 4 разных отчетов... Это ужос просто... Мне приходится вот эти детали копировать вот между этими 3 разными отчетами.... И если что то гдже то меняется - или добавляется новый тип, то мнге приходится его копировать между всеми этими 3 разными отетами (((( Это так не удобно...
PS. Если нельзя это сделать, то вот вам пожелание чего бы сделать в FR 5 )))