|  10.05.2011, 12:15 | #1 | 
| MS Dynamics AX 2012 R3 |  Методы для постройки екселевского отчёта 
			
			Мне нужно создать екселевский отчёт в MS Dynamics AX 4.0 Система сама генерит екселевский файл, т.е. без шаблонов, скелет проекта уже есть и некоторая часть мною уже сделана, но ходу выполнения сего у меня возникло несколько вопросов: 1. Как и каким методом объединить скажем 2(две) ячейки в таком отчёте в 1(одну); 2. 3. Каким методом и как "прорисовать" границы таблицы в таком отчёте? Коллеги, я только учусь делать такие вещи, если кто знает ответ, то приведите пожалуйста примеры кода) Буду признателен. С Уважением Алексей. 
				__________________ "Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов Последний раз редактировалось ZornFire; 10.05.2011 в 13:12. Причина: Убрал пункт 2. Позднее задам вопрос по этой теме отдельно | 
|  | 
|  10.05.2011, 12:43 | #2 | 
| Молодой, подающий надежды | 
			
			Если используете класс ComExcelDocument_RU, то можно добавить следующие методы: Цитата: X++: public void mergeCells(MSOfficeBookMark_RU _bookMark, int _worksheet = 1) { COM comRange; ; comRange = this.findRange(_bookMark, _worksheet); if (comRange) { comRange.Merge(); } } PHP код: 
			 | 
|  | |
| За это сообщение автора поблагодарили: S.Kuskov (2), ZornFire (1). | |
|  10.05.2011, 12:49 | #3 | 
| Участник | 
			
			Чтобы ответить на вопросы номер 1 и 3 и на многие другие следует понять следующее. Аксапта работает с Excel через COM. Объектная структура COM Excel совпадает с внутренней структурой объектов Excel VBA.  Поэтому для того чтобы узнать как то или иное действие над Excel осуществить извне, нужно собственными средствами Excel записать макрос с необходимыми действиями, посмотреть его код и сделать также, только через COM и в аксапте. Вопрос номер 2 выбивается из общего контекста, т.к. не имеет отношения к способу вывода отчёта. | 
|  | |
| За это сообщение автора поблагодарили: lev (2). | |
|  10.05.2011, 12:53 | #4 | 
| MS Dynamics AX 2012 R3 | Цитата: 
		
			Вопрос номер 2 выбивается из общего контекста, т.к. не имеет отношения к способу вывода отчёта.
		
	 
				__________________ "Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов | 
|  | 
|  10.05.2011, 12:54 | #5 | 
| Участник | 
			
			Примеры кода Вы найдете на этом сайте, если воспользуетесь поиском. Однако для начала Вам следует все-таки понять несколько вещей. Цитата: 
		
			Сообщение от mr.ZF
			
			 Система сама генерит екселевский файл, т.е. без шаблонов  Программист сам, своими руками, подкладывает под себя здоровоенную мину замедленного действия. Когда "рванет" - не ясно, но то, что "рванет" - сомнений не вызывает  "Идеальный" экспорт в Excel с точки зрения программиста - это "гладкая" выгрузка таблицы "как есть". Т.е. тупо выгрузить "сетку" на отдельный лист. А потом уже, средствами самого Excel распредилить полученные данные по ячейкам другого листа. Это достаточно просто сделать через шаблоны Excel При таком подходе четко разделяется внешний вид отчета и данные, его наполняющие. Настраивать внешний вид может и специально обученный пользователь. Как ему удобно. Программист никак не привязан к этому внешнему виду и нет необходимости переписывать программный код по формированию отчета. Конечно, это идеал. Не всегда так получается. Но, по возможности, к этому надо стремиться, чтобы не превратится просто в изготовителя отчетов. Цитата: 
		
			Сообщение от mr.ZF
			
			 1. Как и каким методом объединить скажем 2(две) ячейки в таком отчёте в 1(одну); (...) 3. Каким методом и как "прорисовать" границы таблицы в таком отчёте? Для "старых" версий Excel это пункт системного меню: Сервис \ Макрос \ Начать запись. Для Excel 2007 посмотрите на ленте аналогичный пункт Разумеется, перенести код макроса в Axapta один-в-один нельзя, но адаптировать его для использования в Axapta никакой проблемы не составляет. Тем более есть куча примеров на данном сайте. Цитата: 
		
			Сообщение от mr.ZF
			
			 2. Как правильно прописать запрос и связь, если в отчёте используются несколько связанных таблиц, например RAssetTable и RAssetStandards; | 
|  | |
| За это сообщение автора поблагодарили: lev (2), S.Kuskov (1), ZornFire (1), pedrozzz (1). | |
|  10.05.2011, 12:57 | #6 | 
| Участник | |
|  | 
|  10.05.2011, 12:58 | #7 | 
| MS Dynamics AX 2012 R3 | 
			
			pedrozzz Цитата: 
		
			Если используете класс ComExcelDocument_RU
		
	 
				__________________ "Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов | 
|  | 
|  10.05.2011, 13:04 | #8 | 
| Участник | |
|  | |
| За это сообщение автора поблагодарили: ZornFire (1). | |
|  10.05.2011, 13:07 | #9 | 
| MS Dynamics AX 2012 R3 | 
			
			Владимир Максимов, Я конечно понимаю что в идеале так и нужно поступить и ценю Ваш ответ и так и буду в последствии вести работу. Но. В данном случае мне нужно построить именно такой отчёт как я описал. В нём грубо говоря будут жить списанные, проданные и закрытые основные средства, а именно такие данные: Отчет с __ по __ 
 Ни каких хотелок в данном случае не возникнет   
				__________________ "Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов | 
|  | 
|  10.05.2011, 13:10 | #10 | 
| Ищущий знания... | 
			
			Хотелось бы подитожить и добавить от себя. 1. Всегда используй шаблоны Excel (как советует Владимир Максимов). Это по максимуму избавит тебя от проблем рисования в Excel из аксапты. 2. Если нужно добавить какую либо функцию в аксапте, которая будет что то делать в Excel, но ты не знаешь какой код написать, то макрос тебе поможет увидеть те методы, которые тебе необходимо дернуть в Excel. (как советует S.Kuskov и Владимир Максимов). 3. Напиши (ну или попроси у кого нибудь, может бесплатно дадут  ) обертку (класс или иерархию классов, в которых будут содержаться методы для работы с объектом Excel) для выгрузки данных в Excel по шаблонам. Пусть ты сейчас потратишь больше времени, за то в будущем экспорт данных будет занимать минимум времени. 
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | 
|  10.05.2011, 13:13 | #11 | 
| Ищущий знания... | 
			
			Неправильный ход мыслей   Хотелки возникнут после первого осмысления отчета пользователем (ну или второго, или третьего, не важно  ), в 90% случаев именно так и случается! 
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | 
|  10.05.2011, 13:16 | #12 | 
| Участник | 
			
			А еще, если у автора действительно решение Retail и не очень старое, то там уже есть иерархия классов для вывода excel-отчетов через шаблоны    
				__________________ Ivanhoe as is.. | 
|  | 
|  10.05.2011, 13:17 | #13 | 
| MS Dynamics AX 2012 R3 | 
			
			Не возникнет хотелок  100% Если я позднее буду строить отчёты, то буду их делать именно по шаблонам) В данном случае мне нужно научиться делать как я описал. 
				__________________ "Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов | 
|  | 
|  10.05.2011, 13:28 | #14 | 
| MS Dynamics AX 2012 R3 | Цитата: Только я уже давно не работаю у того клиента, у кого было решение от Корус Консалтинг  Из группы клиентов я вышел   
				__________________ "Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов Последний раз редактировалось ZornFire; 10.05.2011 в 13:55. | 
|  | 
|  10.05.2011, 13:33 | #15 | 
| MS Dynamics AX 2012 R3 | 
			
			Я так и сделаю
		 
				__________________ "Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов | 
|  | |
| За это сообщение автора поблагодарили: S.Kuskov (0). | |
|  11.05.2011, 11:53 | #16 | 
| Участник | 
			
			Еще один вариант релизовать форматирование отчета - записать требуемый макрос, сохранить файл с этим макросом как шаблон, использовать этот шаблон для создания файла, а после завершения вывода данных вызвать этот макрос с помощью метода Run COM-объекта Excel.
		 | 
|  |