Возникла проблема с многоуровневым отчетом
Господа, добрый день! Помогите разобраться с многоуровневым отчетом, а точнее подскажите, как можно реализовать перенос интересующих меня заголовков в случае непомещения группы оных на одной странице. Сначала скажу пару слов о структуре отчета:
1. MasterData1: "Разбиение 1"
2. MasterData1: "Разбиение 2"
Итак, я хочу "объединить" группу заголовков 1., 1.1., 1.1.1 в одну "группу", т.е. если один из них не помещается на одну страницу, то все три переносятся на следующую страницу. Тоже самое необходимо проделать с:
1.2 и 1.2.1;
2., 2.1., 2.1.1.;
2.2. 2.2.1
Может быть стоит воспользоваться другими объектами FR, изменив структуру отчета без использования подотчетов и данных второго уровня? Или же проще написать скрипт для переноса интересующих меня "групп"?
1. MasterData1: "Разбиение 1"
Сhild: SubReport1:
1.1. MasterData2: "Подгруппа 1"
1.1.1. Header1: "Квадратная матрица"
1.1.2. DetailData1: Кросс-таблица
1.1.3. Header2: "Треугольная матрица"
1.1.4. DetailData2: Кросс-таблица
1.2. MasterData2: "Подгруппа 2"
1.2.1. Header1: "Квадратная матрица"
1.2.2. DetailData1: Кросс-таблица
1.2.3. Header2: "Треугольная матрица"
1.2.4. DetailData2: Кросс-таблица
2. MasterData1: "Разбиение 2"
Сhild: SubReport1:
2.1. MasterData2: "Подгруппа 1"
2.1.1. Header1: "Квадратная матрица"
2.1.2. DetailData1: Кросс-таблица
2.1.3. Header2: "Треугольная матрица"
2.1.4. DetailData2: Кросс-таблица
2.2. MasterData2: "Подгруппа 2"
2.2.1. Header1: "Квадратная матрица"
2.2.2. DetailData1: Кросс-таблица
2.2.3. Header2: "Треугольная матрица"
2.2.4. DetailData2: Кросс-таблица
Итак, я хочу "объединить" группу заголовков 1., 1.1., 1.1.1 в одну "группу", т.е. если один из них не помещается на одну страницу, то все три переносятся на следующую страницу. Тоже самое необходимо проделать с:
1.2 и 1.2.1;
2., 2.1., 2.1.1.;
2.2. 2.2.1
Может быть стоит воспользоваться другими объектами FR, изменив структуру отчета без использования подотчетов и данных второго уровня? Или же проще написать скрипт для переноса интересующих меня "групп"?
Комментарии
Установите в True и группа будет "Держатся Вместе", если конечно размер группы не превышает размер страницы.
Используйте groupHeader в отчете для разбиение на группы.
смотрите пример из mainDemo "Other features" - "Keep group together" (33.fr3).
Привязка к датасету не обязательна, можно использовать выражения.
Не понял, поясните. Или лучше отошлите к какому-то конкретному параграфу Руководства Пользователя, если там есть интересующая меня информация.
А вообще, меня в целом устраивает приведенная в первом посте структура отчета. Так что, может, проще написать коротенький скрипт, учитывающий выход за пределы страницы одного из группообразующих заголовков?
З.Ы. Вопрос, конечно, можно было задать в отдельной теме, но он все равно тесно примыкает к данной задаче, поэтому я поместил его здесь.
З.З.Ы. Если необходимо, готовый отчет или его скрин я приложу.
Т.е. можно сделать пользовательскую функцию, которая будет возвращать какой-то признак группы.
Можно сделать и скриптом, отчет должен быть двухпроходными.
первый проход вычисляет высоты для групп (можно сохранять в список), на втором в зависимости от вычисленной высоты и свободного места (Engine.FreeSpace) переносить группу(Engine.NewPage).
По поводу кросса, знакомое описание ошибки.
Возможно даже исправлял, какую версию используете ?
Если с последней такая же ошибка, присылайте отчет (рабочий, желательно на базе из mainDemo. т.е чтобы не требовалось БД), буду разбираться.
Версию использую 4.8.46
UPD. Проблему решил запуском "Install Packages", где выбрал все файлы *.bpl из папки C:\Program Files\Borland\BDS\4.0\Bin.
Но все равно компоненты не должны исчезать.
Скачать новый билд можно будет завтра.
Есть DetailData c расположенными на нем мемками, берущими свои значения из некоего дэйта-сета, и есть заголовок над ним. И, как не сложно догадаться, я хочу, чтобы в случае, когда заголовок находится на предыдущей странице, а ДетэилДэйта на следующий, чтобы заголовок переносился вослед за бэндом. Я выставляю у бэнда KeepHeader в True, но это ни к чему не приводит. Может, кто-то подскажет другое решение?
С АвтоРазмером данное событие не работает.
Как оно было
Выслал.
Т.е. с autosize=true столбцы не скрываются ?
таким способом должно скрываться все, кроме заголовков и итогов.
Посмотрел отчет, т.е. у вас первая запись которая печатается после хидера отрывается от него ?
или все-таки вы имеете введу отрыв остальных записей, к примеру :
заголовок
запись1
новая страница
запись 2
Да, как раз-таки первая запись не должна отрываться от заголовка в отличие от остальных, т.е. может произойти картина, которую вы описали. Но не должно возникать следующего, когда заголовок сам по себе болтается на одной странице, а записи на другой:
заголовок
новая страница
запись1
запись 2
Это именно то, с чем я пока что безуспешно борюсь.
Так же и со скрытием колонок кросс таблицы.
отчеты прилагаются.
Первый шаблон полный аналог вашего, но без данных, обратите внимание на 3-ю страницу - заголовок не оторвался.
Второй шаблон скрывает вторую колонку в кросс таблице.
У вас они работают ?
Да, действительно, в первом шаблоне заголовок не отрывается. Но я подозреваю, что моя проблема в том, что я вывожу не все данные в MasterData, а лишь те, которые отфильтровываются в событии DetailData3OnBeforePrint. Может, здесь кроется корень проблемы? Иных разумных объяснений я не вижу. Пойду еще голову поломаю...
Со вторым шаблоном у вас тоже все в порядке. Когда я в OnCalcWidth прописываю Width = 0, то таблица почти полностью схлопывается. Чудеса да и только!..
Не имеет значения скрыт бэнд в скрипте или нет, он все равно обрабатывается в цикле вывода и механизм "держать вместе" сработает именно для этого бэнда.
Если есть возможность лучше реализовать фильтр в запросе
Вдогонку пущу второй вопрос, дабы не плодить темы: пытаюсь по правой кнопке мыши через контекстное меню вкладочки "SubReport" посмотреть настройки страницы. Ничего не происходит, хотя в контекстном меню такой пункт присутствует. Это ошибка разработчиков, не доведенная до конца возможность или у подотчетов просто нет свойств страницы? Использую FR 4.9.1.