Множество страници 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

Намерете повече информация за колекцията страници тук.

person Scott Willeke    schedule 12.02.2013