AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.07.2012, 17:20   #1  
alicedr is offline
alicedr
Участник
 
175 / 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, и тут то они печатают, все что наделали? А заголовки и футеры тогда как?
Старый 06.07.2012, 17:29   #2  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Проходила пошагово с 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  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
включите трассировку и увидите последовательность вызовов
Старый 06.07.2012, 17:59   #4  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Трассировка это "пользователь"/"разработка"/"трассировка клиента и сервера"? Запустить отчет и потом куда смотреть?
Старый 07.07.2012, 01:12   #5  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
С трассировкой не разобралась. Зато в начало каждой секции, перед добавлением новой страницы и при проходе 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  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Проблема разрешилась.
Когда другой человек с другого рабочего стола запустил отчет, и он сработал правильно, в душу закрались подозрения. Помогла очистка кеша и выбор направления печати с экрана на 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, генерируемый, дизайн, отчет, секции

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 2012 Enterprise Portal: Не работает Add indicators в Business Overview Web Part Maxim Gorbunov DAX: Администрирование 1 07.07.2012 14:49
Не работает поиск в лукапе на ГТД Bega DAX: Функционал 0 08.12.2011 09:09
почему на работает common.(fieldId)[idx] maze DAX: Программирование 3 31.08.2007 06:48
JOIN программно на форме не работает rohlenko DAX: Программирование 2 31.03.2005 15:41
CRM ABC, SWOT анализ Как это работает и работает ли вообще. ShadowFromXZone DAX: Функционал 16 02.03.2004 18:09
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:51.