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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.08.2010, 14:28   #1  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
Сводная таблица. Сворачивание
Добрый день. Есть кусок кода, который заполняет сводную таблицу данными. Таблица находится в шаблоне.
X++:
doc = new ComExcelDocument_RU()
 
comWorkBook = doc.getWorkBook();
 
comPivotCaches = comWorkBook.PivotCaches();
comPviotCache      = comPivotCaches.item(1);
 
qrStr1 = "select...";
comPviotCache.commandText(qrStr1);
 
comPviotCache.refresh();
 
doc.finalize();
Подскажите, как сделать так. чтобы не происходило раскрытие групп в сводной таблице при открытии отчета. (типа ShowDetales(false))
Старый 03.08.2010, 15:37   #2  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
т.е. чтобы при открытии отчета, не происходило разворачивание данных
Старый 03.08.2010, 16:17   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Если вам нужен такой эффект, который происходит при установке табличного курсора Excel на заголовок какого-нибудь поля сводной таблицы и последующем щелчке на кнопке "Спрятать детали" из тулбара сводной таблицы, то, наверное, вот это стоит попробовать: Помогите сделать действие в Excel через COM

P.S. Перед выполнением команды меню (464), описанной по ссылке, нужно выделить ячейку Excel, в которой содержится заголовок (метка) сворачиваемого поля. Соответствующая команда VBA, которую надо разложить в X++, может выглядеть примерно так:
Код:
Worksheets("ВашЛист").PivotTables(1).PivotFields("ВашеСворачиваемоеПоле").LabelRange.Select

и далее вызов: 
    
RunExcelMenu 464
P.P.S. Вот. Поженил свой джоб из блога http://www.axforum.info/forums/blog.php?bt=210 с джобом по ссылке выше. Дитё родилось такое:
X++:
#CCADO
#define.xlExternal(2)
#define.xlRowField(1)
#define.xlColumnField(2)

static void Job233_showUserGroupInExcelPivot_2(Args _args)
{
    UserGroupList   userGroupList;
    UserInfo        userInfo;
    UserGroupInfo   userGroupInfo;

    COM             rst, flds, fld;
    COM             xlApp, wbk, pc, ptb, pf;
    COM             rng = SysExcelApplication::construct().workbooks().add().worksheets().itemFromNum(1).range('A1').comObject();

    COM cmdBars, cmdBar, ctrls, ctrl;

    void runExcelMenu(int menuID)
    {
        cmdBars = xlApp.CommandBars();
        cmdBar = cmdBars.Add();
        ctrls = cmdBar.Controls();
        ctrl = ctrls.Add(1, menuID);

        ctrl.Execute();
        cmdBar.Delete();
    }

    ;

    rst = AdoRst::openRecordsetInMemory([
            ['UserId'    , #adVarChar,  5 ],
            ['UserName'  , #adVarChar, 40 ],
            ['GroupId'   , #adVarChar, 10 ],
            ['GroupName' , #adVarChar, 40 ]]);

    flds = rst.Fields();

    while select userGroupList
        join userInfo
            where userInfo.id == userGroupList.userId
        join userGroupInfo
            where userGroupInfo.id == userGroupList.groupId
    {
        rst.AddNew();
            fld = flds.Item('UserId'   ); fld.Value(userGroupList.userId );
            fld = flds.Item('UserName' ); fld.Value(userInfo.name        );
            fld = flds.Item('GroupId'  ); fld.Value(userGroupList.groupId);
            fld = flds.Item('GroupName'); fld.Value(userGroupInfo.name   );
        rst.Update();
    }

    wbk = rng.Parent(); wbk = wbk.Parent(); // ActiveWorkbook

    pc = wbk.PivotCaches(); pc = pc.Add(#xlExternal); // PivotCache
    pc.Recordset(rst);

    ptb = pc.CreatePivotTable(rng); // PivotTable

    pf = ptb.PivotFields('GroupId'  ); pf.Orientation(#xlRowField   ); pf.Position(1); pf.Subtotals(1,false);
    pf = ptb.PivotFields('UserName' ); pf.Orientation(#xlRowField   ); pf.Position(2); pf.Subtotals(1,false);
    pf = ptb.PivotFields('UserId'   ); pf.Orientation(#xlRowField   ); pf.Position(3); pf.Subtotals(1,false);

    pf = ptb.PivotFields('GroupName'); // PivotField
    ptb.AddDataField(pf, 'Участие пользователей в группах');
                                       pf.Orientation(#xlColumnField); pf.Position(1); pf.Subtotals(1,false);

    xlApp = rng.Application();

// --- этот блок сворачивает детали
    pf = ptb.PivotFields('GroupId');
    rng = pf.LabelRange();
    rng.Select();

    runExcelMenu(464); // Hide Detail
// ---

    xlApp.Visible(true);
}
Для сравнения запустите также с закомментированным оператором: // RunExcelMenu(464).

Последний раз редактировалось Gustav; 03.08.2010 в 17:07.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Excel, сводная таблица, проблемы с pivotItem bagyr DAX: Программирование 2 16.05.2007 09:27
Сводная таблица из Axapta kashperuk DAX: База знаний и проекты 5 20.03.2007 09:06
Сводная таблица xconsul DAX: Функционал 10 31.01.2007 15:26
select sum(amount) from временная таблица ATimTim DAX: Программирование 6 11.06.2004 14:16
Copyof Сводная таблица xconsul DAX: Программирование 0 19.05.2004 13:49

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

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

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