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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.05.2011, 12:15   #1  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
? Методы для постройки екселевского отчёта
Мне нужно создать екселевский отчёт в MS Dynamics AX 4.0
Система сама генерит екселевский файл, т.е. без шаблонов, скелет проекта уже есть и некоторая часть мною уже сделана, но ходу выполнения сего у меня возникло несколько вопросов:

1. Как и каким методом объединить скажем 2(две) ячейки в таком отчёте в 1(одну);
2.
3. Каким методом и как "прорисовать" границы таблицы в таком отчёте?

Коллеги, я только учусь делать такие вещи, если кто знает ответ, то приведите пожалуйста примеры кода)

Буду признателен.
С Уважением Алексей.
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов

Последний раз редактировалось ZornFire; 10.05.2011 в 13:12. Причина: Убрал пункт 2. Позднее задам вопрос по этой теме отдельно
Старый 10.05.2011, 12:43   #2  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Если используете класс ComExcelDocument_RU, то можно добавить следующие методы:
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
1. Как и каким методом объединить скажем 2(две) ячейки в таком отчёте в 1(одну);
X++:
public void mergeCells(MSOfficeBookMark_RU _bookMark, int _worksheet = 1)
{
    COM     comRange;
    ;

    comRange = this.findRange(_bookMark, _worksheet);

    if (comRange)
    {
        comRange.Merge();
    }
}
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
3. Каким методом и как "прорисовать" границы таблицы в таком отчёте?
PHP код:
public void setBorderStyle(MSOfficeBookMark_RU  _bookMark,
                           
int                  _lineStyle,
                           
int                  _weight,
                           
int                  _worksheet 1)
{
    
COM     comRange;
    
COM     comBorders;
    ;

    
comRange this.findRange(_bookMark_worksheet);

    if (
comRange)
    {
        
comBorders comRange.Borders();
        
comBorders.LineStyle(_lineStyle);
        
comBorders.Weight(_weight);
    }

За это сообщение автора поблагодарили: S.Kuskov (2), ZornFire (1).
Старый 10.05.2011, 12:49   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Чтобы ответить на вопросы номер 1 и 3 и на многие другие следует понять следующее. Аксапта работает с Excel через COM. Объектная структура COM Excel совпадает с внутренней структурой объектов Excel VBA.
Поэтому для того чтобы узнать как то или иное действие над Excel осуществить извне, нужно собственными средствами Excel записать макрос с необходимыми действиями, посмотреть его код и сделать также, только через COM и в аксапте.

Вопрос номер 2 выбивается из общего контекста, т.к. не имеет отношения к способу вывода отчёта.
За это сообщение автора поблагодарили: lev (2).
Старый 10.05.2011, 12:53   #4  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Цитата:
Вопрос номер 2 выбивается из общего контекста, т.к. не имеет отношения к способу вывода отчёта.
Из общего контекста да, но я ведь и это хочу знать, уж коли начал проект)
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов
Старый 10.05.2011, 12:54   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Примеры кода Вы найдете на этом сайте, если воспользуетесь поиском. Однако для начала Вам следует все-таки понять несколько вещей.

Цитата:
Сообщение от mr.ZF
Система сама генерит екселевский файл, т.е. без шаблонов
Подобный подход означает, что программист будет вынужден постоянно заниматься правкой кода, когда у пользователя возникнут очередные "хотелки" по поводу того, как улучшить внешний вид отчета. Ну, там "белый верх, черный низ" или "черный верх, белый низ".

Программист сам, своими руками, подкладывает под себя здоровоенную мину замедленного действия. Когда "рванет" - не ясно, но то, что "рванет" - сомнений не вызывает

"Идеальный" экспорт в Excel с точки зрения программиста - это "гладкая" выгрузка таблицы "как есть". Т.е. тупо выгрузить "сетку" на отдельный лист. А потом уже, средствами самого Excel распредилить полученные данные по ячейкам другого листа. Это достаточно просто сделать через шаблоны Excel

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

Конечно, это идеал. Не всегда так получается. Но, по возможности, к этому надо стремиться, чтобы не превратится просто в изготовителя отчетов.

Цитата:
Сообщение от mr.ZF
1. Как и каким методом объединить скажем 2(две) ячейки в таком отчёте в 1(одну);
(...)
3. Каким методом и как "прорисовать" границы таблицы в таком отчёте?
В самом Excel есть средство, позволяющее делать запись всех выполняемых операций в макрос. Т.е. запускаете в Excel процедуру записи макроса, выполняете все операции в Excel, останавливаете запись макроса и смотрите код получившегося макроса. Ну, естесственно, не забывая сверяться со справкой Excel о том, какие параметры и в какой последовательности должны быть указаны в том или ином методе.

Для "старых" версий Excel это пункт системного меню: Сервис \ Макрос \ Начать запись. Для Excel 2007 посмотрите на ленте аналогичный пункт

Разумеется, перенести код макроса в Axapta один-в-один нельзя, но адаптировать его для использования в Axapta никакой проблемы не составляет. Тем более есть куча примеров на данном сайте.

Цитата:
Сообщение от mr.ZF
2. Как правильно прописать запрос и связь, если в отчёте используются несколько связанных таблиц, например RAssetTable и RAssetStandards;
А какое это имеет отношение к выгрузке в Excel?
За это сообщение автора поблагодарили: lev (2), S.Kuskov (1), ZornFire (1), pedrozzz (1).
Старый 10.05.2011, 12:57   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
Из общего контекста да, но я ведь и это хочу знать, уж коли начал проект)
Наверное лучше создать отдельную тему для обсуждения этого вопроса
Старый 10.05.2011, 12:58   #7  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
pedrozzz
Цитата:
Если используете класс ComExcelDocument_RU
А если я использую свой класс, например ReportTemplate, то это меняет суть?
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов
Старый 10.05.2011, 13:04   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
pedrozzz

А если я использую свой класс, например ReportTemplate, то это меняет суть?
Суть не меняет. Главное что бы у вас был COM объект ExcelApplication. Через него вы уже сможете управлять екселем.
За это сообщение автора поблагодарили: ZornFire (1).
Старый 10.05.2011, 13:07   #9  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Владимир Максимов,
Я конечно понимаю что в идеале так и нужно поступить и ценю Ваш ответ и так и буду в последствии вести работу.
Но. В данном случае мне нужно построить именно такой отчёт как я описал. В нём грубо говоря будут жить списанные, проданные и закрытые основные средства, а именно такие данные:
Отчет с __ по __
  1. Номер ОС
  2. Название ОС
  3. Модели учета
  4. Дата ввода в эксплуатацию
  5. Начисленную амортизацию
  6. Текущий статус
  7. Дату списания, закрытия, продажи.
Только это должно будет быть в виде екселевсной таблицы.
Ни каких хотелок в данном случае не возникнет
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов
Старый 10.05.2011, 13:10   #10  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Хотелось бы подитожить и добавить от себя.

1. Всегда используй шаблоны Excel (как советует Владимир Максимов). Это по максимуму избавит тебя от проблем рисования в Excel из аксапты.
2. Если нужно добавить какую либо функцию в аксапте, которая будет что то делать в Excel, но ты не знаешь какой код написать, то макрос тебе поможет увидеть те методы, которые тебе необходимо дернуть в Excel. (как советует S.Kuskov и Владимир Максимов).
3. Напиши (ну или попроси у кого нибудь, может бесплатно дадут ) обертку (класс или иерархию классов, в которых будут содержаться методы для работы с объектом Excel) для выгрузки данных в Excel по шаблонам. Пусть ты сейчас потратишь больше времени, за то в будущем экспорт данных будет занимать минимум времени.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 10.05.2011, 13:13   #11  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
...
Ни каких хотелок в данном случае не возникнет
Неправильный ход мыслей
Хотелки возникнут после первого осмысления отчета пользователем (ну или второго, или третьего, не важно ), в 90% случаев именно так и случается!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 10.05.2011, 13:16   #12  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А еще, если у автора действительно решение Retail и не очень старое, то там уже есть иерархия классов для вывода excel-отчетов через шаблоны
__________________
Ivanhoe as is..
Старый 10.05.2011, 13:17   #13  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Не возникнет хотелок
100%
Если я позднее буду строить отчёты, то буду их делать именно по шаблонам)
В данном случае мне нужно научиться делать как я описал.
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов
Старый 10.05.2011, 13:28   #14  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
А еще, если у автора действительно решение Retail и не очень старое, то там уже есть иерархия классов для вывода excel-отчетов через шаблоны
Да, это ретаил. MS Dynamics AX 4.0

Только я уже давно не работаю у того клиента, у кого было решение от Корус Консалтинг

Из группы клиентов я вышел
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов

Последний раз редактировалось ZornFire; 10.05.2011 в 13:55.
Старый 10.05.2011, 13:33   #15  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Наверное лучше создать отдельную тему для обсуждения этого вопроса
Я так и сделаю
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов
За это сообщение автора поблагодарили: S.Kuskov (0).
Старый 11.05.2011, 11:53   #16  
Yaroslav is offline
Yaroslav
Участник
 
12 / 15 (1) ++
Регистрация: 19.12.2006
Еще один вариант релизовать форматирование отчета - записать требуемый макрос, сохранить файл с этим макросом как шаблон, использовать этот шаблон для создания файла, а после завершения вывода данных вызвать этот макрос с помощью метода Run COM-объекта Excel.
Теги
ax4.0, excel, экспорт, экспорт в excel, экспорт отчета

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Infolog при печати отчета samolalex DAX: Программирование 9 09.09.2010 18:49
Найти display методы MrVisual DAX: Программирование 12 15.05.2007 09:53
Как изменить заголовок окна предв.просмотра отчета Владимир Максимов DAX: Программирование 6 03.07.2006 15:34
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Формирование отчета с динамически изменяемым числом столбцов. rumpleteazer DAX: Программирование 1 06.09.2002 11:25

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

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

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