|  22.07.2003, 09:53 | #1 | 
| Участник | Экспорт отчета в Excel 
			
			Добрый день. Есть такая задача: Есть обычный аксаптовский отчет. Отчет не очень простой - много чего делается программно. Есть желание данные, которые получаютcя в результате, отправить в Exсel - ну, чтоб не просто напечатать, а еще чего-нить с ними делать можно было. Расскажите пожалуйста, нет ли какого-нибудь более-менее стандартного / общепризнанного решения этой проблемы? Вообще, основная проблема, как мне видится, заключается в том, как после получения отчета поиметь доступ к его данным. Если это можно сделать, то отправить данные в Excel используя ComExсelDocument довольно просто. Возможно ли это? Или я для выполнения этой задачи должен фактически написать новый класс, который будет получать данные также, как это делает исходный отчет? Этого очень не хочется. Поделитесь мыслями на этот счет. | 
|  | 
|  22.07.2003, 10:04 | #2 | 
| Moderator | Цитата: 
		
			то отправить данные в Excel используя ComExсelDocument довольно просто. Возможно ли это?
		
	 Если у Вас более ранняя версия Аксапты и этого класса просто еще нет, то посмотрите сюда http://www.axforum.info/forums/showt...ighlight=Excel Если у Вас третья Аксапта и нет желания форматировать отчет вручную из Аксапты, что как правило занимает много времени и вызывает много отрицательных эмоций, можно сделать так - создать в Excel'е шаблон отчета, поместить его в Аксаптовские ресурсы, а при построении отчета выгружать этот шаблон например в папку Temp пользователя, заполняя необходимыми данными. Если вы собираетесь делать такие вещи постоянно можно задуматься о написании некоего Framework'а, который облегчит дальнейшее построение отчетов. | 
|  | 
|  22.07.2003, 10:10 | #3 | 
| Участник | 
			
			У на 3-я аксапта и там есть класс ComExсelDocument_RU. Вопрос не в том как в нужную ячейку Excel'a записать значение, а в том, как получить эти значения из готового аксаптовского отчета.
		 | 
|  | 
|  22.07.2003, 10:24 | #4 | 
| Moderator | Цитата: 
		
			а в том, как получить эти значения из готового аксаптовского отчета.
		
	 Поэтому и подход для переделки каждого отчета должен быть индивидуальным. Вам необходимо будет переделать все места где значения всатвляются в отчет так, чтобы они вставлялись в Excel. Ключевые места send(), fetch(), executeSection(). Не удивлюсь, если выяснится, что было проще начать писать отчет заново. p.s. Если отчет простой, то может стоит попробовать вывод в ASCII файл с последующим форматированием в Excel'е. p.s.s. ComExсelDocument_RU всего лишь обертка над COM объектом и ничего магического он не может. | 
|  | 
|  22.07.2003, 10:34 | #5 | 
| Участник | Цитата: 
		
			Изначально опубликовано Андре  Поэтому и подход для переделки каждого отчета должен быть индивидуальным. Вам необходимо будет переделать все места где значения всатвляются в отчет так, чтобы они вставлялись в Excel. Ключевые места send(), fetch(), executeSection(). Цитата: p.s. Если отчет простой, то может стоит попробовать вывод в ASCII файл с последующим форматированием в Excel'е. Цитата: p.s.s. ComExсelDocument_RU всего лишь обертка над COM объектом и ничего магического он не может. Пока видится такой вариант: 1. Дублированием создать класс и отчет на основе существующих 2. Изменить send(), fetch(), executeSection() так, чтоб печатать в Excel 3. Подавить появление исходного отчета Я правильно понял? Есть ли какие-нибудь другие мысли? | 
|  | 
|  22.07.2003, 10:52 | #6 | 
| Moderator | Цитата: 
		
			Я правильно понял? Есть ли какие-нибудь другие мысли?
		
	 Цитата: 
		
			Не удивлюсь, если выяснится, что было проще начать писать отчет заново.
		
	 Просто идеология построения простого отчета и отчета в Excel может сильно отличаться. | 
|  | 
|  22.07.2003, 10:56 | #7 | 
| Участник | 
			
			Спасибо. При этом придется лезть вглубь и понимать логику работы этого отчета. Я не говорю, что это очень трудно, но вообще-то хочется использовать готовый код как "черный ящик" 8-) | 
|  | 
|  22.07.2003, 11:05 | #8 | 
| ---------------- | Черный ящик 
			
			Помнится, на одном семинаре в CITP демонстрировали, что-то похожее.. при выводе отчета просто выбираешь "В excel" вместо принтера.  Может быть вам продадут, если доделали. | 
|  | 
|  22.07.2003, 11:13 | #9 | 
| Участник | 
			
			я делал такую штуку для Axapta 2.5 sp 4 - печать кучи  доков и репортов в Word и Excel.... ничего особо страшного нет. | 
|  | 
|  22.07.2003, 13:43 | #10 | 
| Участник | 
			
			Вот вариант с выбором "Excel" вместо принтера мне понравился больше. А может кто-нить сказать, каким образом изменяется алгоритм печати? Я пока дошел до формы SysPrintForm, где выбираются варианты, но как указанные там значения влияют на печать пока не нашел. Может, кто-нить знает?
		 | 
|  | 
|  23.07.2003, 10:55 | #11 | 
| Участник | 
			
			Для этого, скорее всего, необходимо использовать класс ReportOutputUser. Справка по нему есть во встроенной документации, там же дан небольшой и очень простой пример. В свое время я попытался было сделать печать отчета в Ексель, но мой энтузиазм быстро угас, когда я понял, что красиво все равно не получится. В итоге это оказалось не столь уж необходимым. В крайнем случае можно печатать отчет в HTML, а потом открывать в Екселе. Выглядит, конечно, страшно, но крайней мере все на месте. | 
|  | 
|  23.07.2003, 11:01 | #12 | 
| Участник | Еще одна подсказка 
			
			В качестве работающих (ну или почти работающих   ) классов рекомендую посмотреть PDFViewer и WebReportHTML. | 
|  | 
|  23.07.2003, 13:44 | #13 | 
| Участник | 
			
			Большое спасибо!
		 | 
|  | 
|  10.02.2006, 11:49 | #14 | 
| Участник | 
			
			У меня вопрос по етой же теме. Я создал наследника класса ReportOutputUser и перегрузил все методи так как надо. Вопрос в том как его теперь подклучить к общей логике. Я столкнулся с такойже проблемой. Как это можно обойти? Ко всему прочему в классе ClassFactory.createViewer тоже хотелось бы что-то сделать а не исполйзовать case ReportOutputUserType:: Default: как было приведено в доке для класса ReportOutputUser. Я имею ввиду например case ReportOutputUserType::XLS. Microsoft позакривал все енумы и классы вокруг этой рутини. Наверняка кто-то делал что-то подобное раньше. Поделитесь секретом как ето можно обойти? С уважением Анатолий | 
|  | 
|  10.02.2006, 16:24 | #15 | 
| Участник |   
			
			Сам задал вопрос и сам отвечу. Посидел подумал и придумал: HTML использует очень похожие теги как и MS Excel. Тоесть достаточно изменить концовку фаила на .xls и добавить пару значений в используемые емуны и макроси и рапорти со свистом сохраняются в Excel. Если кому интересно могу пояснить как сделал.     С Уважением Анатолий | 
|  | 
|  10.02.2006, 17:14 | #16 | 
| Moderator | 
			
			В "Правилах форума AXForum" в пункте 2.8 есть такой стринг: "Ни у кого нет желания вытягивать из Вас эти сведения клещами." Мораль: если Вам самому хочется - расскажите, остальные буду Вам только благодарны, пусть даже и молчаливо. Зайти в ветку и увидеть блок конкретных действий без необходимости делать еще один шаг - запрос автору, всегда удобнее, чем ловить автора, спустя, например, 2-3 года. Подумайте о благодарных потомках...   | 
|  | 
|  10.02.2006, 18:07 | #17 | 
| Участник | 
			
			Рецепт следующий: 1) добавить формат .xls в макрос "File" 2) добавить элемент XLS в энум SysPrintFileType 3) добавить соответствующий уже существующему код в SysPrintForm.findFileNameType() 4) в SysPrintForm.changeFormat() добавить: PHP код: 
			Всем удачного пользования.  С уважением Анатолий | 
|  | |
| За это сообщение автора поблагодарили: Gustav (1). | |
|  13.02.2006, 16:13 | #18 | 
| Участник | 
			
			Вариант с HTML файлом катит слабо.  В Excel между данными появляются пустые столбцы и Axapta выводит шапку страницы не только на первой странице, но и на всех последующих, т.е. в Excel появляются ненужные строчки и данные никуда не скопируешь.   В свое время была задача по реализации вывода любого отчета в Excel, которая и выродилась в создание утилиты. Главная идея вывода, что все данные в отчете выводятся строго по столбцам без прерываний, все остальные элементы подгоняются под них. Технически - создается класс, наследник от reportOutputUser, которые предлагался как viewer при печати, на нем перекрываете большинство методов writeString, writeEnum и т.д. и т.п. Таким образом по завершении работа этого класса у вас есть все элементы и их координаты. Дальше уже ваша фантазия  - надо их как-то отобразить на ячейки Excel Описание того, что получилось прилагаю, если есть вопросы по приобретению, то к селзам в Колумбус, утилита продается, если какие-то технические вопросы, то задавайте здесь | 
|  |