06.07.2012, 17:20 | #1 |
Участник
|
Как работает генерируемый дизайн (последовательность)
Я программист на Делфи, новичек в Аксапте. Возникла проблема при переносе отчета с 4-ки на Ах 2009 . Отчет- кассовая книга для Украины. Отчет переносился копи-пастом с одной машины на другую (методы), а все объекты создавались заново, и свойства менялись вручную на оригинал Ах 4. Отчет запускается из класса, отчет имеет генериремый дизайн из кучи секций.
Проблема следующая: в оригинале отчет выводит проведенные записи из журнала ордеров, каждая дата-в новом листе. Если за один день было 5 кассовых ордеров --то на одном листе список ордеров кассы из 5 штук(плюс кучу разных итогов). У меня отчет выводит 5 листов, по одному листу на каждый ордер. Причем на каждом листе все выглядит нормально- все хидеры и футеры на месте. Только итоговые суммы за день выводятся на первом листе, на остальных они пустые, но секции прорисовываются. В отчете метод run не перекрыт, зато перекрыт fetch, сокращенно такой: X++: if (this.queryRun().prompt()) { while (this.queryRun().next()) { RCashTrans = this.queryRun().get(tableNum(RCashTrans)); _rCashTrans = RCashTrans::find(cashAccount, RCashTrans.DocId, RCashDocType::Correction, RCashTrans.TransDate); RCashTrans = this.queryRun().get(tableNum(RCashTrans)); element.send(RCashTrans); } } По Андерсену dialog->run->fetch->send->print, т.е. element.send(RCashTrans) посылает первую запись запроса, для нее обрабатываются prolog, header, groupSection.Header, groupSection.Body, groupSection.Footer, Footer, Epilog. Если в какой-то секции есть element.execute(название), то выполняется она и снова та секция, из которой она вызвалась? Потом то же самое для следующей записи (while (this.queryRun().next())? Как тогда попадают все записи запроса в секцию Body одним списком? Или, все секции выполняются единожды, а секция Body прорабатывает все записи? Или, все секции execute для каждой записи, а потом неперекрытый метод run делает им print, и тут то они печатают, все что наделали? А заголовки и футеры тогда как? |
|
06.07.2012, 17:29 | #2 |
Участник
|
Проходила пошагово с element.send(RCashTrans);
Первая запись: Prolog, GroupSection.Header, из него в 5 разных ProgrammableSections, затем в GroupSection.Body и возврат в fetch, переход на вторая запись: groupSection.Footer из него в 6 ProgrammableSections, вставка NewPage(), потом GroupSection.Header и т.д. Вот этого вообще понять не могу. Или body по всем записям выполнять, или пройти уже все футеры, и только потом на следующую запись переходить... |
|
06.07.2012, 17:38 | #3 |
Участник
|
включите трассировку и увидите последовательность вызовов
|
|
06.07.2012, 17:59 | #4 |
Участник
|
Трассировка это "пользователь"/"разработка"/"трассировка клиента и сервера"? Запустить отчет и потом куда смотреть?
|
|
07.07.2012, 01:12 | #5 |
Участник
|
С трассировкой не разобралась. Зато в начало каждой секции, перед добавлением новой страницы и при проходе element.send(RCashTrans) добавила
X++: //--------------- print ''; //без этой строки компилятор ругается на info, не знаю почему :( info("Prolog"); //--------------. X++: Info (00:01:54) RCashTrans.AmountCur= -250,00 Info (00:01:54) Prolog Info (00:01:54) GroupSection.Header Info (00:01:54) PageHeader Info (00:01:54) ProgrammableSection(13).Header Info (00:01:54) ProgrammableSection(3).RestInCash Info (00:01:54) Section(9).separator Info (00:01:54) info GroupSection.CashTransBody Info (00:01:54) RCashTrans.AmountCur= 400,00 Info (00:01:54) GroupSection.Footer Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(5).CashDayTotal Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(7).RestInCashEnd Info (00:01:54) Section(9).separator Info (00:01:54) GroupSection.CashTransFooter NewPage() Info (00:01:54) GroupSection.Header Info (00:01:54) PageHeader Info (00:01:54) ProgrammableSection(13).Header Info (00:01:54) ProgrammableSection(3).RestInCash Info (00:01:54) Section(9).separator Info (00:01:54) info GroupSection.CashTransBody Info (00:01:54) RCashTrans.AmountCur= 200,00 Info (00:01:54) GroupSection.Footer Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(5).CashDayTotal Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(7).RestInCashEnd Info (00:01:54) Section(9).separator Info (00:01:54) GroupSection.CashTransFooter NewPage() Info (00:01:54) GroupSection.Header Info (00:01:54) PageHeader Info (00:01:54) ProgrammableSection(13).Header Info (00:01:54) ProgrammableSection(3).RestInCash Info (00:01:54) Section(9).separator Info (00:01:54) info GroupSection.CashTransBody Info (00:01:54) RCashTrans.AmountCur= 100,00 Info (00:01:54) GroupSection.Footer Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(5).CashDayTotal Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(7).RestInCashEnd Info (00:01:54) Section(9).separator Info (00:01:54) GroupSection.CashTransFooter NewPage() Info (00:01:54) GroupSection.Header Info (00:01:54) PageHeader Info (00:01:54) ProgrammableSection(13).Header Info (00:01:54) ProgrammableSection(3).RestInCash Info (00:01:54) Section(9).separator Info (00:01:54) info GroupSection.CashTransBody Info (00:01:54) GroupSection.Footer Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(5).CashDayTotal Info (00:01:54) Section(9).separator Info (00:01:54) ProgrammableSection(7).RestInCashEnd Info (00:01:54) Section(9).separator Info (00:01:54) GroupSection.CashTransFooter NewPage() Info (00:01:54) Epolig Info (00:01:54) Epilog NewPage() Info (00:01:54) Prolog Но как-то же в исходном отчете на Ах4.0 это все работает правильно? |
|
10.07.2012, 11:41 | #6 |
Участник
|
Проблема разрешилась.
Когда другой человек с другого рабочего стола запустил отчет, и он сработал правильно, в душу закрались подозрения. Помогла очистка кеша и выбор направления печати с экрана на pdf-файл и обратно. (Причем pdf получился вообще левый) Вот, как должен работать отчет, ПРАВИЛЬНАЯ последовательность: X++: RCashTrans.AmountCur= -250,00 Prolog GroupSection.Header PageHeader GroupSection.CashTransBody---------RCashTrans.AmountCur=-250,00 RCashTrans.AmountCur= 400,00 GroupSection.CashTransBody---------RCashTrans.AmountCur=400,00 RCashTrans.AmountCur= 200,00 GroupSection.CashTransBody---------RCashTrans.AmountCur=200,00 RCashTrans.AmountCur= 100,00 GroupSection.CashTransBody---------RCashTrans.AmountCur=100,00 GroupSection.Footer Epolig Prolog |
|
Теги |
body, fetch, footer, header, генерируемый, дизайн, отчет, секции |
|
|