генирация в определенном порядке
Существует определенной количество записей, скажем N (порядка 10 000).
Необходимо чтобы отчет формировался по две записи на листе следующим образом:
первый лист
первая запись
N/2 запись
второй лист
вторая запись
N/2+1 запись
...
N/2-1 лист
N/2-1 запись
N запись
Есть идея печатать отчет в два прохода. На первом проходе печатаем первую половину каждого листа. На втором - вторую половину. Но вот не могу найти способа возврата к первому листу. Или есть какие-нибудь другие варианты решить такую задачу?
Необходимо чтобы отчет формировался по две записи на листе следующим образом:
первый лист
первая запись
N/2 запись
второй лист
вторая запись
N/2+1 запись
...
N/2-1 лист
N/2-1 запись
N запись
Есть идея печатать отчет в два прохода. На первом проходе печатаем первую половину каждого листа. На втором - вторую половину. Но вот не могу найти способа возврата к первому листу. Или есть какие-нибудь другие варианты решить такую задачу?
Комментарии
Вариант 1:
А возможности произвести сортировку данных в запросе нет?
Тогда можно было бы свести к использованию такого скрипта:
где MasterData1OnBeforePrint - это обработчик для события OnBeforePrint вашего Master-бэнда.
Вариант 2:
Разделить данные на два датасета - DataSet1, DataSet2. DataSet1 привязать к MasterData и в обработчике OnBeforePrint выполнять На MasterData выводить поля DataSet1 и DataSet2
ну и плюс
Хотя всеже лучше отсортировать в запросе.
И записи это скорее готовые отчеты в которых есть masterData и много DetailData и почти на каждый бенд есть onBefore....
Можно по подробнее про два DataSet`а?
Сортировка в запросе тоже не возможна.
А можно увидеть запрос (SQL) или таблицы-dataset в Delfi (указание индексного поля) ?, список полей ?
Если невозможна сортировка, то может стоит попробовать создать виртуальный датасет и скопировать записи из исходного источника с нужным порядком записей?
Еще вариант - использовать событие OnManualBuild для страницы отчета, гонять указатель на нужные номера записей и печатать бэнды.
Если SQL-сервер позволяет, можно сначала определить N, а затем в первый датасет отобрать SELECT FIRST N/2 .... ,а во второй - SELECT SKIP N/2 .... или что-нибудь подобное
Чем гонять, next и prior не подходят. Получается надо в цикле 5000 раз next потом 4999 вверх и так для каждой строчки.
Если кто-нибудь знает как перемещаться иным способом подскажите.
А как при это будут отрабатывать другие DataSet`ы т.е. остальные 6 привязанные к первому по id?
Как альтернатива. Есть ли возможность вы водить на печать (на принтер) готовые страницы отчета в заданном порядке, т.е. печатать страницы: 1, н/2+1, 2, н/2+2 итд?