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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.05.2011, 21:25   #1  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Помощь в построении кода по присоединению COM объектов в методы класса
Доброго времени суток, коллеги.
Система: MS Dynamics AX 4.0
Есть учебное задание у меня, построить генерируемый Аксаптой отчёт в MS Excel(не шаблон, к сожалению), в котором выводятся различные данные в столбцы. Данные я вывел, сделал шапки столбцов. А вот упёрся в то, что нужно ещё сделать:
1. Объединить ячейки с одинаковым значением номера ОС в одном столбце и отдельно Наименованием ОС в другом столбце;
2. Вывести в отчёт слово "Отчёт" и даты С___ По____, (в коде даты уже прописаны, и указываются при выборе в окне диалога);
3. Прорисовать границы таблицы отчёта;
4. Зафиксировать длину ячеек по столбцам этого отчёта.
Я понимаю, что это почти всё делается через COM объекты, но даже как начать не знаю.
На форуме видел примеры кода из тех пунктов, что я перечислил, но вот как интегрировать эти примеры в свой класс я не разобрался, тупой копи-паст мне не нужен ибо я так не научусь ни чему, но вот сейчас сроки сдачи моего задания подходят к концу, а я так и не продвинулся с этими COM объектами.
Помогите примерами кода пожалуйста начинающему программисту, как начать прописывать COM в мой класс и подскажите немного как делать. В книгах я такой информации не нашёл.
Во вложении прилагаю свой проект. Если кто может то примеры решения моего затруднения можно сделать прямо в нём или же в ответах на эту тему.
Заранее благодарен, Алексей.
Вложения
Тип файла: xpo SharedProject_ANDSup_Req06020_AKabanov (6).xpo (22.3 Кб, 421 просмотров)
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов

Последний раз редактировалось ZornFire; 31.05.2011 в 21:30.
Старый 31.05.2011, 22:20   #2  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,508 / 432 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Вы же наверняка умеете пользоваться макросами. Запишите макрос объединения несколько ячеек в одну. Это даст вам текст нужных манипуляций на Visual Basic. Перевести его в Х++ вам, думаю, труда не составит
__________________
С уважением,
Вячеслав
За это сообщение автора поблагодарили: ZornFire (1).
Старый 31.05.2011, 22:20   #3  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Что-то это не очень похоже на учебное задание, ибо нацелено оно на узкую конкретную задачу - взаимодействие с Excel и совсем не раскрывает внутреннюю архитектуру системы обучаемому.

А если по делу, то попробуйте в Excel записать макрос, выполняющий приведенные выше действия и переложить полученный VBA на X++ код.

Последний раз редактировалось Андре; 31.05.2011 в 23:01.
За это сообщение автора поблагодарили: ZornFire (1).
Старый 31.05.2011, 22:23   #4  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
Я понимаю, что это почти всё делается через COM объекты, но даже как начать не знаю.
На форуме видел примеры кода из тех пунктов, что я перечислил, но вот как интегрировать эти примеры в свой класс я не разобрался
Интегрируйте эти примеры не в класс отчёта, а непосредственно в класс ComExcelDocument ну или в его наследник ComExcelDocumentExt_RU, который включён в ваш проект. Просто добавьте туда нужные вам методы. Требуемые вам для начала COM объекты уже объявлены в этих классах. Посмотрите например метод ComExcelDocumentExt_RU.autoFit(), который уже есть в вашем проекте. Там есть пример доступа к COM объекту приложения и COM объекту рабочего листа Excel
X++:
comWorkSheet   = this.getWorkSheet(_workSheet);
comApplication = m_comDocument.application();
За это сообщение автора поблагодарили: ZornFire (1).
Старый 01.06.2011, 07:38   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,309 / 3546 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Если бы это было бы не учебное задание - то я бы все-таки порекомендовал бы сделать шаблон с двумя макросами.
Первый макрос получает массив данных и кол-во столбцов, после чего "раскидывает" массив по ячейкам.
Второй макрос получает перечень столбцов и диапазон с данными и пытается группировать (объединять по строкам) данные в порядке, представленном в перечне столбцов (например, 1, 3, 4, 2).
Фраза "Дата С .. По.." хорошо выводится в именованную ячейку. Для этого можно воспользоваться методом findRange("ИмяЯчейки").value2("Значение");
А макрос вызывается с помощью класса ComDispFunction следующим образом:
X++:
        dispFunction = new COMDispFunction(m_comDocument, #dispFunctionName, COMDispContext::Method);

        dispFunction.call();
Плюс такого подхода - скорость. Минус такого подхода - невозможность использования ячеек с формулами в шаблоне (они будут перезатерты данными из АХ)
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: ZornFire (1).
Старый 02.06.2011, 16:32   #6  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Коллеги, есть ли у кого из Вас такой класс, где можно увидеть методы целиком, как присваиваются значения слияния ячеек(при чём если число значений AccountNum, например, не известно), метод с выводом простого текста, метод, где указывается длина столбцов в отчёте, метод где кодом которого наклабывается сетка на определённые координаты типа А1:А10?
На примере такого класса я смог бы научиться и полностью освоить программирование в построении отчётности с выводом в MS Excel.
Благодаря ответам выше, я понял как начать и добавил методы в класс ComExcelDocument_RU.
Затруднение вызвало не знание как прописывать присвоение параметров, вот, а дата сдачи моего отчёта в следующий понедельник, как бы очень уж хотелось бы уложиться в скроки без последствий для меня. Я так понимаю, что сам я не успею за оставшееся время разобраться.
Копи-пастом я заниматься не собираюсь, хочеться увидеть на живую и научиться как самому строить аналоговый код.
Заранее благодарен, Алексей.
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов

Последний раз редактировалось ZornFire; 02.06.2011 в 16:36.
Старый 02.06.2011, 16:42   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
заходишь в Excel. Записываешь макрос с нужными тебе действиями и потом смотришь в макросе код, затем перекидываешь его к себе в метод (для удобства анализа кода в макросе, записывай на каждое действие свой макрос).

P.S. конечно там надо будет код перевести из VB в X++, а не просто скопировать из макроса
Но те методы которые надо дернуть у кома ты увидишь.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 02.06.2011 в 16:44. Причина: добавил P.S.
Старый 03.06.2011, 08:41   #8  
online
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
Коллеги, есть ли у кого из Вас такой класс, где можно увидеть методы целиком, как присваиваются значения слияния ячеек(при чём если число значений AccountNum, например, не известно), метод с выводом простого текста, метод, где указывается длина столбцов в отчёте
Алексей, вам прямо всё разжевать и в рот пололжить... Вы бы так прямо и написали бы тогда, решите за меня мне тестовую задачу. А то "Копи-пастом я заниматься не собираюсь ..." Но дайте мне готовое решение, а то я по кусочкам не понимаю.

Вот, специально для вас написал пример работы с Excel. Джоб выполняет те действия, о которых вы спрашивали.
X++:
static void JobTESTExcel20110603(Args _args)
{
    ComExcelDocument_RU excelDocument;
    COM COMRange;
    ;

    excelDocument = new ComExcelDocumentExt_Ru();

    if (!excelDocument.newFile())
        return;

    //слияние ячеек
    COMRange = excelDocument.findRangePublic("A2:A4");
    COMRange.merge();

    // вывод простого текста
    excelDocument.insertValue(COMExceldocument_RU::numToNameCell(2, 5), "Hello, World!");

    // указание ширины столбца
    COMRange = excelDocument.findRangePublic("C:C");
    COMRange.ColumnWidth(100);

    excelDocument.visible(true);
    excelDocument.finalize();
}
Вроде всё элементарно. Что именно вызывает у вас вопросы? Может ваша проблема не в неумении работы с Excel...
Цитата:
Сообщение от mr.ZF Посмотреть сообщение
метод где кодом которого наклабывается сетка на определённые координаты типа А1:А10?
И поиском на форуме научитесь пользоваться
Форматирование на Excel


P.S.: "— Вы, чего, и конфеты за меня есть будете?" (Вовка в Тридевятом царстве)
За это сообщение автора поблагодарили: lev (2), ZornFire (1).
Старый 06.06.2011, 21:40   #9  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Интегрируйте эти примеры не в класс отчёта, а непосредственно в класс ComExcelDocument ну или в его наследник ComExcelDocumentExt_RU, который включён в ваш проект. Просто добавьте туда нужные вам методы. Требуемые вам для начала COM объекты уже объявлены в этих классах. Посмотрите например метод ComExcelDocumentExt_RU.autoFit(), который уже есть в вашем проекте. Там есть пример доступа к COM объекту приложения и COM объекту рабочего листа Excel
X++:
comWorkSheet   = this.getWorkSheet(_workSheet);
comApplication = m_comDocument.application();
Этот вариант, для размера(ширины) ячеек подошёл лучше всего, ещё раз спасибо!
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Метод "open" в COM-объекте класса "ADODB.Connection" возвратил код ошибки 0x80004005 (E_FAIL) Poleax DAX: Программирование 14 01.10.2013 14:15
Метод "version" не поддерживается интерфейсом Automation COM-объекта класса "<неизвестно>". Poleax DAX: Администрирование 2 02.11.2010 15:25
DynamicsAxSCM: Personalization of Role Centers in Dynamics AX 2009 Blog bot DAX Blogs 0 21.06.2010 16:05
msdynamicsax: VB script that test the com connector for Dynamics Ax 4.0 Blog bot DAX Blogs 0 25.08.2008 18:05
Dynamics AX: MSDynamicsWorld.com Names Five Dynamics Experts to Newly Formed Editorial Advisory Board Blog bot DAX Blogs 0 13.08.2008 01:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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