AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 30.07.2013, 09:03   #1  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
AX 2012 и OxmlRow_RU
Добрый день коллеги. Есть отличный класс для работы со строками OxmlRow_RU. Но где аналог оного (к примеру) OxmlColumn_RU. Я бы хотел всячески играться с колонками, дублировать, вставлять, копировать и тд. Кто то сталкивался с такой проблемой? И интересно как её обошли? Может кто сделал свой OxmlColumn_RU.

Заранее спасибо!
Alt 30.07.2013, 09:11   #2  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Можно сделать свою обертку над DocumentFormat.OpenXml.Spreadsheet.Column
Alt 30.07.2013, 09:14   #3  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Можно, но в лоб не получилось
Alt 30.07.2013, 09:19   #4  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Надо изучить, в каком контексте ты ее используешь (стандартный функционал Ax делает некоторую постобработку в конце - это надо учитывать). Так как, ячейки ЕМНИП, хранятся внутри строки, а колонка - это только описатель. То есть при копировании столбца, надо проходить по строчкам и копировать там ячейки. Вообще Open XML SDK - достаточно тонкая обертка над форматом. Попробуй переименовать xslx в zip и посмотреть, как оно там устроено.
Alt 30.07.2013, 09:21   #5  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Максим, я не понимаю о чём ты А еще есть такое понятие как ВРЕМЯ, которого нет для того, чтобы лицезреть все это дело.
Alt 30.07.2013, 09:30   #6  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
Есть формат Office Open XML - являющийся текущим форматом сохранения для Office.
Он представляет собой зазипованную кучу xml файлов.
Над ним есть обертка, под названием Open XML SDK, чтобы чуть поудобнее было работать с форматом.
Над ней есть обертка уже в Ax чтобы удобнее было работать из X++.
Поверх этой обертки есть некая логика, которая реализует кусочек экселя типа определения высоты строки. А еще имитирует интерфейс к которому привыкли (XMLExcelDocument_RU).

Поверх этого гордо сидит XMLExcelReport_RU - который управляет жизненным циклом типового отчета.

Чтобы понять, что надо сделать, надо понять, как устроен исходный формат. А чтобы понять исходный формат, надо на него посмотреть.
This post has been rated by: gl00mie (2), alex55 (1), Kabardian (2).
Alt 30.07.2013, 09:34   #7  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Zitat:
Zitat von belugin Beitrag anzeigen
А чтобы понять исходный формат, надо на него посмотреть.
Смотрю.... красиво наворотили. Вообще вопрос в другом, не как доделать, а может кто доделал? и почему этого нет в стандарте?

Geändert von Sada (30.07.2013 um 09:41 Uhr)
Alt 30.07.2013, 10:00   #8  
belugin ist offline
belugin
Участник
Benutzerbild von belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.622 / 2925 (107) +++++++++
Registriert seit: 16.01.2004
Blog-Einträge: 5
В стандарте нет, потому, что для стандартных отчетов не понадобилось
Alt 30.07.2013, 10:03   #9  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Неужто нет отчётов в стандарте с динамическим количеством столбцов?
Alt 30.07.2013, 10:33   #10  
VORP ist offline
VORP
Участник
Benutzerbild von VORP
 
147 / 95 (4) ++++
Registriert seit: 26.05.2006
Действительно, надо переименовать xlsx файл в zip и посмотреть что внутри, думаю это значительно облегчит работу
Дело в том что воркшит состоит из строк, а строки состоят из ячеек. А объект Columns служит только как шаблон для ячеек(ширина и другие свойства), то есть чтобы скопировать колонку нужно пройти по всем строкам, вытащить оттуда ячейки и снова вставить, что намного сложней чем скопировать строку. Если вам нужен отчёт с переменным количеством ячеек то копировать надо не колонку а ячейку. Пример можно увидеть в OXMLExcelReport_RTax25RegTrans_RU.createColumns(). В принципе мне кажется что не должно составить труда копировать при необходимости и объект Column в Columns чтобы задавать ширину.
MS Excel предоставляет огромное количество функционала, и полностью повторить его не представляется возможным в рамках модификации в AX. Кроме того, да, действительно не было необходимости копирования колонок(речь идёт именно о колонках, а не о размножении ячеек в конкретной строке). Поэтому в том виде как Вы хотите оно не было реализовано.
This post has been rated by: belugin (5), Sada (5).
Alt 31.07.2013, 15:33   #11  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Коллеги, такой вопрос.
К примеру у меня есть 10 проименованных колонок. Мне нужно вывести в 11 и 12 колонки какие то значения. Аксапта копирует верхнее первое значение в нижние строки для 11 и 12 колонки, а для первых 10-ти работает нормально. Как это можно обойти? Не хотелось бы заморачиваться копированием ячеек(если это поможет)...

Geändert von Sada (31.07.2013 um 15:55 Uhr)
Alt 05.08.2013, 01:51   #12  
gl00mie ist offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.684 / 5813 (201) ++++++++++
Registriert seit: 28.11.2005
Ort: Москва
Blog-Einträge: 3
Zitat:
Zitat von Sada Beitrag anzeigen
Есть отличный класс для работы со строками OxmlRow_RU. Но где аналог оного (к примеру) OxmlColumn_RU?
Zitat:
Zitat von belugin Beitrag anzeigen
Есть формат Office Open XML - являющийся текущим форматом сохранения для Office. Над ним есть обертка, под названием Open XML SDK, чтобы чуть поудобнее было работать с форматом. Над ней есть обертка уже в Ax чтобы удобнее было работать из X++. Поверх этой обертки есть некая логика, которая реализует кусочек экселя типа определения высоты строки. А еще имитирует интерфейс к которому привыкли (XMLExcelDocument_RU).
А еще есть, оказывается, ClosedXML - обертка над OpenXML, делающая работу с Excel-файлами более похожей на работу с объектной моделью Excel и менее завязанной на XML. Там есть и класс XLColumn, и такие вещи, как XLColumn.AdjustToContents()
This post has been rated by: Sada (1), db (1), Logger (3).
Alt 05.08.2013, 11:50   #13  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Еще вопросик, не знаю сюда его задать или нет.

Объединение ячеек.
В OXMLWorksheet_RU есть метод saveMergeCells. там нужен контейнер, в котором [fromrow, toRow, fromCol, ToCol].но есть еще переменная MergeCells, которую никак не пойму как проинитить.

Там же

метод initMergeCells()
а в нем
if (!mergeCells)
{
return;
}

???? это что такое ?))
Alt 05.08.2013, 15:39   #14  
VORP ist offline
VORP
Участник
Benutzerbild von VORP
 
147 / 95 (4) ++++
Registriert seit: 26.05.2006
Тип mergeCells - DocumentFormat.OpenXML.Spreadsheet.MergeCells - это смерженные ячейки шаблона.

if (!mergeCells)
{
return;
}
Означает что если нет в воркшите объединённых ячеек то в аксаптовый мап с этими ячейками вычитывать нечего
This post has been rated by: Sada (2).
Alt 05.08.2013, 15:48   #15  
VORP ist offline
VORP
Участник
Benutzerbild von VORP
 
147 / 95 (4) ++++
Registriert seit: 26.05.2006
Касательно колонок - не совсем понял. Именованных колонок или ячеек?
Идея в том что отчёт состоит из секций которые задаются посредством выделения и задания именованных ренжей СТРОКам, например с 1 по 10 шапка отчёта, потом с 11 по 15 шапка страницы, потом 16 строки и так далее.
В рамках каждой секции задаются с помощью именованных диапазонов поля(а не колонки)(ItemName, Amount и так далее). Пример - шаблон ТОРГ-12 который можно выгрузить из ресурса TORG_12.
Когда шаблон открывается(при установленной переменной templateMode = true), из него вычитываются все строки в память, содержимое удаляется. Дальше когда вызывается execute на некую секцию всё содержимое секции скидывается обратно в файл. например Execute("REPORTHEADER") скинет в файл 10 строк(см пример выше).
Ещё раз - ещё десять и так далее.

Geändert von VORP (05.08.2013 um 15:51 Uhr)
Alt 05.08.2013, 15:51   #16  
VORP ist offline
VORP
Участник
Benutzerbild von VORP
 
147 / 95 (4) ++++
Registriert seit: 26.05.2006
следовательно чтобы что то выводилось в 11 и 12 колонки надо либо задать полям в этих колонках namedRanges, либо, если шаблон динамический - размножить ячейки в соответствующей строке.
Alt 05.08.2013, 15:56   #17  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Zitat:
Zitat von VORP Beitrag anzeigen
Тип mergeCells - DocumentFormat.OpenXML.Spreadsheet.MergeCells - это смерженные ячейки шаблона.

if (!mergeCells)
{
return;
}
Означает что если нет в воркшите объединённых ячеек то в аксаптовый мап с этими ячейками вычитывать нечего
Научите объединять ячейки программно

Geändert von Sada (05.08.2013 um 16:03 Uhr)
Alt 05.08.2013, 15:56   #18  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Zitat:
Zitat von VORP Beitrag anzeigen
следовательно чтобы что то выводилось в 11 и 12 колонки надо либо задать полям в этих колонках namedRanges, либо, если шаблон динамический - размножить ячейки в соответствующей строке.
С этим я разобрался, спасибо, решил по своему
Alt 05.08.2013, 16:14   #19  
VORP ist offline
VORP
Участник
Benutzerbild von VORP
 
147 / 95 (4) ++++
Registriert seit: 26.05.2006
Zitat:
Zitat von Sada Beitrag anzeigen
Научите объединять ячейки программно
У вас templateMode = true?

Я особо не вижу смысла в объединении ячеек, можно всё это нарисовать в шаблоне - одну объединённую вторую разединенную, и вызывать какую надо в зависимости от ситуации.
Но если очень хочется - надо добавить в DocumentFormat.openXml.Spreadsheet.Worksheet узел MergeCells(строго на нужном месте а то будет ошибка). Для этого можно воспользоваться методами InsertBefore или InsertAfter, для чего можно использовать:
OXML_RU::invokeGeneric(row, 'InsertBefore', cell.GetType(), parameters);
Дело в том что эти функции generic и из аксапты по нормальному не вызываются.
Если mergeCells узел уже есть его добавлять не надо
ну а дальше положить просто данные в аксаптовый мап mergeCellsSet аналогично тому как это делается в initMergeCells. в нем хранятся координаты левого верхнего и правого нижнего углов.
Alt 05.08.2013, 16:43   #20  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
templateMode = true. У меня динамическое количество столбцов, и вот группа, объединяющая эти столбцы(верхний уровень) - ее хочу объеденить. Заранее количество столбцов в ней не известно . Надеюсь понятно объяснил
Stichworte
open xml, ax2012

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ax-erp: Creation and Posting of Purchase order in MS Dynamics AX 2012 Blog bot DAX Blogs 0 06.11.2012 15:11
dynamicsaxtraining: Vendor returns Blog bot DAX Blogs 0 11.10.2012 00:11
ax-erp: Creating SSRS-Reports in Dynamics AX 2012 – What’s no longer possible in AX-reports Blog bot DAX Blogs 0 18.07.2012 12:11
emeadaxsupport: Overview of AX build numbers Blog bot DAX Blogs 3 24.05.2012 19:44
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 02:31 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.