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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.07.2003, 09:53   #1  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Экспорт отчета в Excel
Добрый день.
Есть такая задача:
Есть обычный аксаптовский отчет. Отчет не очень простой - много чего делается программно. Есть желание данные, которые получаютcя в результате, отправить в Exсel - ну, чтоб не просто напечатать, а еще чего-нить с ними делать можно было.
Расскажите пожалуйста, нет ли какого-нибудь более-менее стандартного / общепризнанного решения этой проблемы?

Вообще, основная проблема, как мне видится, заключается в том, как после получения отчета поиметь доступ к его данным. Если это можно сделать, то отправить данные в Excel используя ComExсelDocument довольно просто. Возможно ли это?

Или я для выполнения этой задачи должен фактически написать новый класс, который будет получать данные также, как это делает исходный отчет? Этого очень не хочется.

Поделитесь мыслями на этот счет.
Старый 22.07.2003, 10:04   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
то отправить данные в Excel используя ComExсelDocument довольно просто. Возможно ли это?
Возможно.

Если у Вас более ранняя версия Аксапты и этого класса просто еще нет, то посмотрите сюда

http://www.axforum.info/forums/showt...ighlight=Excel

Если у Вас третья Аксапта и нет желания форматировать отчет вручную из Аксапты, что как правило занимает много времени и вызывает много отрицательных эмоций, можно сделать так - создать в Excel'е шаблон отчета, поместить его в Аксаптовские ресурсы, а при построении отчета выгружать этот шаблон например в папку Temp пользователя, заполняя необходимыми данными.

Если вы собираетесь делать такие вещи постоянно можно задуматься о написании некоего Framework'а, который облегчит дальнейшее построение отчетов.
Старый 22.07.2003, 10:10   #3  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
У на 3-я аксапта и там есть класс ComExсelDocument_RU. Вопрос не в том как в нужную ячейку Excel'a записать значение, а в том, как получить эти значения из готового аксаптовского отчета.
Старый 22.07.2003, 10:24   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
а в том, как получить эти значения из готового аксаптовского отчета.
Хм.. Если идет речь о том, как считать значения с канвы, то есть уже выведенного на экран отчета - то это невозможно. По крайне мере я не знаю о таких возможностях.
Поэтому и подход для переделки каждого отчета должен быть индивидуальным. Вам необходимо будет переделать все места где значения всатвляются в отчет так, чтобы они вставлялись в Excel. Ключевые места send(), fetch(), executeSection().
Не удивлюсь, если выяснится, что было проще начать писать отчет заново.

p.s. Если отчет простой, то может стоит попробовать вывод в ASCII файл с последующим форматированием в Excel'е.

p.s.s. ComExсelDocument_RU всего лишь обертка над COM объектом и ничего магического он не может.
Старый 22.07.2003, 10:34   #5  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Цитата:
Изначально опубликовано Андре


Поэтому и подход для переделки каждого отчета должен быть индивидуальным. Вам необходимо будет переделать все места где значения всатвляются в отчет так, чтобы они вставлялись в Excel. Ключевые места send(), fetch(), executeSection().
За ключевые места - спасибо.
Цитата:

p.s. Если отчет простой, то может стоит попробовать вывод в ASCII файл с последующим форматированием в Excel'е.
Тоже хорошая идея.
Цитата:

p.s.s. ComExсelDocument_RU всего лишь обертка над COM объектом и ничего магического он не может.
Я вполне отдаю себе в этом отчет. Ничего магического я от него и не жду. 8-)))

Пока видится такой вариант:
1. Дублированием создать класс и отчет на основе существующих
2. Изменить send(), fetch(), executeSection() так, чтоб печатать в Excel
3. Подавить появление исходного отчета
Я правильно понял? Есть ли какие-нибудь другие мысли?
Старый 22.07.2003, 10:52   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Я правильно понял? Есть ли какие-нибудь другие мысли?
Да. Вот эта:

Цитата:
Не удивлюсь, если выяснится, что было проще начать писать отчет заново.
То есть, взять и написать класс, который собирает все необходимые данные и передает их в excel.
Просто идеология построения простого отчета и отчета в Excel может сильно отличаться.
Старый 22.07.2003, 10:56   #7  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Спасибо.
При этом придется лезть вглубь и понимать логику работы этого отчета. Я не говорю, что это очень трудно, но вообще-то хочется использовать готовый код как "черный ящик" 8-)
Старый 22.07.2003, 11:05   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Черный ящик
Помнится, на одном семинаре в CITP демонстрировали, что-то похожее.. при выводе отчета просто выбираешь "В excel" вместо принтера.
Может быть вам продадут, если доделали.
Старый 22.07.2003, 11:13   #9  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
я делал такую штуку для Axapta 2.5 sp 4 - печать кучи
доков и репортов в Word и Excel....

ничего особо страшного нет.
Старый 22.07.2003, 13:43   #10  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Вот вариант с выбором "Excel" вместо принтера мне понравился больше. А может кто-нить сказать, каким образом изменяется алгоритм печати? Я пока дошел до формы SysPrintForm, где выбираются варианты, но как указанные там значения влияют на печать пока не нашел. Может, кто-нить знает?
Старый 23.07.2003, 10:55   #11  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Для этого, скорее всего, необходимо использовать класс ReportOutputUser. Справка по нему есть во встроенной документации, там же дан небольшой и очень простой пример.

В свое время я попытался было сделать печать отчета в Ексель, но мой энтузиазм быстро угас, когда я понял, что красиво все равно не получится. В итоге это оказалось не столь уж необходимым. В крайнем случае можно печатать отчет в HTML, а потом открывать в Екселе. Выглядит, конечно, страшно, но крайней мере все на месте.
Старый 23.07.2003, 11:01   #12  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Еще одна подсказка
В качестве работающих (ну или почти работающих ) классов рекомендую посмотреть PDFViewer и WebReportHTML.
Старый 23.07.2003, 13:44   #13  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Большое спасибо!
Старый 10.02.2006, 11:49   #14  
braathe is offline
braathe
Участник
 
90 / 13 (1) ++
Регистрация: 16.02.2005
У меня вопрос по етой же теме. Я создал наследника класса ReportOutputUser и перегрузил все методи так как надо. Вопрос в том как его теперь подклучить к общей логике. Я столкнулся с такойже проблемой. Как это можно обойти? Ко всему прочему в классе ClassFactory.createViewer тоже хотелось бы что-то сделать а не исполйзовать case ReportOutputUserType:: Default: как было приведено в доке для класса ReportOutputUser. Я имею ввиду например case ReportOutputUserType::XLS. Microsoft позакривал все енумы и классы вокруг этой рутини. Наверняка кто-то делал что-то подобное раньше. Поделитесь секретом как ето можно обойти?

С уважением
Анатолий
Старый 10.02.2006, 16:24   #15  
braathe is offline
braathe
Участник
 
90 / 13 (1) ++
Регистрация: 16.02.2005
Lightbulb
Сам задал вопрос и сам отвечу. Посидел подумал и придумал: HTML использует очень похожие теги как и MS Excel. Тоесть достаточно изменить концовку фаила на .xls и добавить пару значений в используемые емуны и макроси и рапорти со свистом сохраняются в Excel. Если кому интересно могу пояснить как сделал.

С Уважением
Анатолий
Старый 10.02.2006, 17:14   #16  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
В "Правилах форума AXForum" в пункте 2.8 есть такой стринг:
"Ни у кого нет желания вытягивать из Вас эти сведения клещами."

Мораль: если Вам самому хочется - расскажите, остальные буду Вам только благодарны, пусть даже и молчаливо.
Зайти в ветку и увидеть блок конкретных действий без необходимости делать еще один шаг - запрос автору, всегда удобнее, чем ловить автора, спустя, например, 2-3 года.
Подумайте о благодарных потомках...
Старый 10.02.2006, 18:07   #17  
braathe is offline
braathe
Участник
 
90 / 13 (1) ++
Регистрация: 16.02.2005
Рецепт следующий:
1) добавить формат .xls в макрос "File"
2) добавить элемент XLS в энум SysPrintFileType
3) добавить соответствующий уже существующему код в SysPrintForm.findFileNameType()
4) в SysPrintForm.changeFormat() добавить:
PHP код:
case SysPrintFileType::XLS  //for Excel
 
case SysPrintFileType::HTML :
       
ret PrintFormat::HTML;
       break; 
Каша готова. Единственная особенноесть этого варианта это то, что при повторном использовании когда откриваешь диалог SysPrintForm вместо XLS отображается HTML. Но пока не открываешь диалог программа помнит что формат XLS.
Всем удачного пользования.

С уважением
Анатолий
За это сообщение автора поблагодарили: Gustav (1).
Старый 13.02.2006, 16:13   #18  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Вариант с HTML файлом катит слабо.
В Excel между данными появляются пустые столбцы и Axapta выводит шапку страницы не только на первой странице, но и на всех последующих, т.е. в Excel появляются ненужные строчки и данные никуда не скопируешь.
В свое время была задача по реализации вывода любого отчета в Excel, которая и выродилась в создание утилиты. Главная идея вывода, что все данные в отчете выводятся строго по столбцам без прерываний, все остальные элементы подгоняются под них.

Технически - создается класс, наследник от reportOutputUser, которые предлагался как viewer при печати, на нем перекрываете большинство методов writeString, writeEnum и т.д. и т.п. Таким образом по завершении работа этого класса у вас есть все элементы и их координаты. Дальше уже ваша фантазия - надо их как-то отобразить на ячейки Excel

Описание того, что получилось прилагаю, если есть вопросы по приобретению, то к селзам в Колумбус, утилита продается, если какие-то технические вопросы, то задавайте здесь
Вложения
Тип файла: doc Описание утилиты вывода отчетов Axapta в Excel.doc (71.5 Кб, 513 просмотров)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Экспорт в Excel exodus DAX: Программирование 1 23.01.2008 09:35
Экспорт в Excel. Проблема с '\n' axaLearner DAX: Программирование 12 17.04.2006 18:43
Не идет выгрузка отчета в Excel. Слабая машина. asabin DAX: Администрирование 27 29.06.2005 10:48
Печать отчета в Excel. Axapta 3.0 Fedr Kuzmich DAX: Функционал 2 19.05.2004 18:26
Экспорт в Excel через WorkBooks.OpenText() Владимир Максимов DAX: Программирование 2 09.04.2004 17:16

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

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

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