Показать сообщение отдельно
Старый 06.07.2012, 17:20   #1  
alicedr is offline
alicedr
Участник
 
173 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Как работает генерируемый дизайн (последовательность)
Я программист на Делфи, новичек в Аксапте. Возникла проблема при переносе отчета с 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, и тут то они печатают, все что наделали? А заголовки и футеры тогда как?