Несколько страниц N из M в одном VB6 ActiveReport

У меня есть активный отчет, который генерирует отчет из нескольких страниц. Мне нужно, чтобы страница N из M отображалась несколько раз на основе поля «COID», присутствующего в разделе «Подробности». Например, если есть 10 страниц (2 для COID 1001, 1 для COID 1002 и 7 для COID 1003). Итак, мне нужны такие страницы, как «Страницы 1 из 2», «Страницы 2 из 2», «Страницы 1 из 1 ", "Страницы 1 из 7", "Страницы 2 из 7".... "Страницы 7 из 7".

Пожалуйста помоги.


person icodefullstack    schedule 12.02.2013    source источник
comment
Какую версию Active Reports вы используете? Обычно я запускаю первый проход отчета в фоновом режиме только для того, чтобы получить количество для каждой группы (вместо этого размещая N из N), а затем второй проход отображает текст N из M, надеясь, что он не будет разбит на две строки и не изменит макет отчета. .   -  person wqw    schedule 12.02.2013
comment
Активные отчеты версии 1.x. Это самый старый. Не могли бы вы немного уточнить вашу процедуру и можно ли ее использовать в этой версии?   -  person icodefullstack    schedule 12.02.2013
comment
Поместите скрытое поле в поле PageHeader и привяжите его к полю COID. Создайте новый экземпляр отчета, привяжите его и соберите карту (коллекцию VB6 или аналогичную) Page‹-›COID, используя скрытое поле. Используйте эту карту для подсчета страниц на COID и визуализации N из M в отчете, представленном пользователю.   -  person wqw    schedule 12.02.2013
comment
Спасибо wqw, я пробую описанный выше метод. Я хочу знать, как создать несколько экземпляров отчета. В настоящее время у меня есть Private Sub ActiveReport_Initialize() и Private Sub ActiveReport_ReportEnd() в коде. Будучи новичком в VB6, я не очень хорошо об этом знаю. Спасибо   -  person icodefullstack    schedule 12.02.2013
comment
Добавьте в отчет общедоступный метод, например Init, который связывает отчет и показывает его. Не звоните ActiveReport1.Show напрямую. Сделайте это: Set myReport = New ActiveReport1 : myReport.Init rsData. В Init вы можете создать экземпляр самого себя с Set myCopy = New ActiveReport1 : myCopy.CalcPages rsData, где CalcPages просто привязывается, инициализирует карту, ждет завершения рендеринга и возвращает коллекцию.   -  person wqw    schedule 12.02.2013
comment
Я не получаю, он не поддерживает Init. Можете ли вы предоставить мне пример кода? или вы хотите, чтобы я предоставил вам то же самое? Я сильно застрял в этой проблеме.   -  person icodefullstack    schedule 12.02.2013
comment
Нет, не здесь. Вы можете найти фрилансера, который быстро сделает вашу работу   -  person wqw    schedule 12.02.2013


Ответы (2)


Я работал только с AR версии 3.00 на подопечных. В них это может быть достигнуто очень быстро и легко с помощью подотчета.

Я быстро изучил этот вопрос и обнаружил, что более ранняя версия поддерживает вложенные отчеты.

Как это сделать с помощью подотчета, следуйте статье по ссылке и создайте родительский и дочерний/подотчеты. Для данных родительского отчета вы просто запускаете группу запросов SQL по COID и передаете каждый COID во вспомогательный отчет. Я бы предположил, что почти пустой родительский отчет с разделом сведений в этом разделе сведений вставляет элемент управления подотчетом. Назначьте существующий отчет элементу управления вложенным отчетом.

У подчиненного отчета есть свои проблемы, пока мы сохраняем связь между родительским отчетом и подчиненным отчетом простым. А также создайте только один объект экземпляра подотчета в родительском отчете. Используйте один и тот же экземпляр для передачи параметра из каждой строки в родительском наборе данных, который является COID.

person Tony Shih    schedule 13.02.2013

Есть два способа сделать это. Запустите один отчет и сбросьте нумерацию страниц в каждой группе, запустите отчет несколько раз и объедините страницы в один отчет.

Сброс номера страницы для каждой группы

См. эту тему в ActiveReports для ActiveX/COM документация. Это просто вопрос установки правильных свойств элемента управления текстовым полем.

Объединение отчетов

В этом методе вы можете запустить отчет отдельно для каждой группы COID (например, используя предложение WHERE для получения правильных данных). Это позволит получить номера страниц так, как вы хотите, в каждом отчете COID. Затем вы можете объединить страницы из каждой из них в один отчет. Итак, что-то вроде следующего:

For iRpt = 0 to myReports.Count - 1
    rpt = myReports[iRpt]
    For iPage = 0 to rpt.Pages.Count – 1
        mainReport.Pages.Insert(rpt.Pages(iPage))
    Next iPage
Next iRpt

Дополнительную информацию о коллекции Pages можно найти здесь.

person Scott Willeke    schedule 12.02.2013