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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.01.2005, 12:58   #1  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Проект "Движок отчётов с поддержкой Excel"
Экспорт отчетов в Excel - больная тема для русскоязычного населения в Аксапте, особенно для новичков.
Предлагаю свой способ справится с этой проблемой - в присоединённом проекте.

Основа идеи - класс MegadomeReport, наследник RunBaseReport дающий своим наследникам способность довольно просто вывести аксаптовский отчёт в "плоский" Excel или txt файл.
При создании нового отчёта его нужно реализовывать следуя концепции RunbaseReport, которая является надстройкой RunbaseBatch и про которую можно почитать здесь: http://forum.mazzy.ru/index.php?showtopic=1846.
Кроме того нужно поддерживать концепцию самого MegadomeReport. Для всего этого надо создать сам отчёт и класс-наследник от MegadomeReport в котором переопределить (как минимум) следующие методы:
main (так чтобы он запускал экземпляр класса стандартным способом)
lastValueElementName (имя актуального отчёта в AOT - см. ссылку выше)
getSimpleHeader (контейнер заголовков при генерации отчёта в Excel)
getSimpleLineFormat (контейнер типов колонок при генерации отчёта в Excel, поддерживаются types::Integer, types::Real, types::String, types:ate)
getSimpleLine (контейнер текущей строки, извлекаемой из параметра QueryRun, особенность - значениями всегда должны являтся строки, даже если формат колонки число)
Далее надо оформить простой отчёт, чтобы он выдавал подобный результат.
Запускать по menuItem-ам надо не отчёт, а класс.

Плюс метода заключается в том что он в качестве основы для запроса берет Query из настоящего аксаптовского отчёта, поэтому для пользователя (да и программиста тоже) будут доступны все фишки, фильтры и прочие возможности, которые есть в функционале стандартных отчётов.

Примечания:
- тестовый отчёт выполненный в таком стиле наз-ся MegadomeReportInventTable и запустить его можно из проекта нажав на классе "открыть"
- вывод строк отчёта через метод getSimpleLine происходит через класс QueryRun, желательно полное понимание принципов работы с ним - тут на форуме где то проскальзывало
- вывод в Excel и TXT через такой функционал происходит исключительно квадратно-гнездовым методом, по сравнению например с обычным функционалом отчётов, которые тоже можно сохранять в txt файлы, но там система пытается (совершенно зря) сохранить дизайн секций
- класс Global нужен только из-за ф-ии real2str
- вывод в Excel зависим от настроек языка последнего и системных параметров - времени делать его системно-независимым не было - если кто то захочет доработать или переработать сопротивлятся не буду, авторских прав не предьявляю
- была идея переправить подобным, но более бесшовным методом класс xReport, но увы... там почти все важные моменты зарыты в системные классы, поэтому не редактируются. пришлось вот так вот извратится
- для сложных отчётов рекомендую создавать вспомогательный класс, занимающийся сложными вычислениями и пользоваться им из собственно вычислимых полей или программных секций отчёта и метода getSimpleLine.
- замечу что вывод в Excel выполняется в несколько раз быстрее, чем в стандартный аксаптовский отчёт
Вложения
Тип файла: zip excelreportengine.zip (42.1 Кб, 421 просмотров)
За это сообщение автора поблагодарили: mazzy (17).
Старый 05.01.2005, 13:09   #2  
sassas
Гость
 
n/a
то есть скорость самая минимальная?
Старый 05.01.2005, 13:11   #3  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Изначально опубликовано sassas
то есть скорость самая минимальная?
Попробуй узнаешь. Вывод в Excel выполняется в несколько раз быстрее чем в обычный отчёт Аксапты. Я дополнил свой первый пост этим примечанием.
Старый 05.01.2005, 13:18   #4  
sassas
Гость
 
n/a
прикольно. Попробую, когда понадобится. Спасибо.
Старый 05.01.2005, 13:46   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо. Переместил в проекты.
Старый 06.01.2005, 18:10   #6  
tm is offline
tm
Участник
 
7 / 10 (1) +
Регистрация: 19.09.2003
похоже потерялся метод "trn_findRange" у ComExcelDocument_Ru
Старый 07.01.2005, 02:53   #7  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Изначально опубликовано tm
похоже потерялся метод "trn_findRange" у ComExcelDocument_Ru
Упс... Да действительно, наследие тестовых проектов, которые в своё время не было особого смысла удалять. В классе ComExcelDocument_Ru в trn проекте было раскрыто для видимости два метода путём оборачивания их в открытые оболочки:

PHP код:
COM trn_findRange(MSOfficeBookMark_RU bookMarkint _workSheet 1)
{
    return 
this.findRange(bookMark_workSheet);

и
PHP код:
COM trn_getWorksheet(anyType _workSheetId)
{
    return 
this.getWorkSheet_workSheetId );

Теги
download, excel, отчет, полезное, экспорт, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Закупка на проект "Время и расходы" Sentry DAX: Функционал 6 19.02.2016 14:09
Классы для генерации отчетов в Excel Eldar9x DAX: Программирование 29 10.06.2011 13:18
в следующей версии, "6.0" (или 201Х) т.н. "страндартных" отчетов не будет. ВСЕ отчеты будут построены на RS George Nordic DAX Blogs 23 21.08.2009 09:56
Диаграмма Ганта в модуле "Проект". Spider DAX: Функционал 2 29.08.2007 09:10
ALEG: Проект "Фишка недели" и первый пост - Microsoft Dynamics™ AX .NET Business Connector Blog bot DAX Blogs 1 22.11.2006 09:43

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

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

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