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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.07.2013, 09:03   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
AX 2012 и OxmlRow_RU
Добрый день коллеги. Есть отличный класс для работы со строками OxmlRow_RU. Но где аналог оного (к примеру) OxmlColumn_RU. Я бы хотел всячески играться с колонками, дублировать, вставлять, копировать и тд. Кто то сталкивался с такой проблемой? И интересно как её обошли? Может кто сделал свой OxmlColumn_RU.

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

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

Чтобы понять, что надо сделать, надо понять, как устроен исходный формат. А чтобы понять исходный формат, надо на него посмотреть.
За это сообщение автора поблагодарили: gl00mie (2), alex55 (1), Kabardian (2).
Старый 30.07.2013, 09:34   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от belugin Посмотреть сообщение
А чтобы понять исходный формат, надо на него посмотреть.
Смотрю.... красиво наворотили. Вообще вопрос в другом, не как доделать, а может кто доделал? и почему этого нет в стандарте?

Последний раз редактировалось Sada; 30.07.2013 в 09:41.
Старый 30.07.2013, 10:00   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
В стандарте нет, потому, что для стандартных отчетов не понадобилось
Старый 30.07.2013, 10:03   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Неужто нет отчётов в стандарте с динамическим количеством столбцов?
Старый 30.07.2013, 10:33   #10  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Действительно, надо переименовать xlsx файл в zip и посмотреть что внутри, думаю это значительно облегчит работу
Дело в том что воркшит состоит из строк, а строки состоят из ячеек. А объект Columns служит только как шаблон для ячеек(ширина и другие свойства), то есть чтобы скопировать колонку нужно пройти по всем строкам, вытащить оттуда ячейки и снова вставить, что намного сложней чем скопировать строку. Если вам нужен отчёт с переменным количеством ячеек то копировать надо не колонку а ячейку. Пример можно увидеть в OXMLExcelReport_RTax25RegTrans_RU.createColumns(). В принципе мне кажется что не должно составить труда копировать при необходимости и объект Column в Columns чтобы задавать ширину.
MS Excel предоставляет огромное количество функционала, и полностью повторить его не представляется возможным в рамках модификации в AX. Кроме того, да, действительно не было необходимости копирования колонок(речь идёт именно о колонках, а не о размножении ячеек в конкретной строке). Поэтому в том виде как Вы хотите оно не было реализовано.
За это сообщение автора поблагодарили: belugin (5), Sada (5).
Старый 31.07.2013, 15:33   #11  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Коллеги, такой вопрос.
К примеру у меня есть 10 проименованных колонок. Мне нужно вывести в 11 и 12 колонки какие то значения. Аксапта копирует верхнее первое значение в нижние строки для 11 и 12 колонки, а для первых 10-ти работает нормально. Как это можно обойти? Не хотелось бы заморачиваться копированием ячеек(если это поможет)...

Последний раз редактировалось Sada; 31.07.2013 в 15:55.
Старый 05.08.2013, 01:51   #12  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Sada Посмотреть сообщение
Есть отличный класс для работы со строками OxmlRow_RU. Но где аналог оного (к примеру) OxmlColumn_RU?
Цитата:
Сообщение от belugin Посмотреть сообщение
Есть формат Office Open XML - являющийся текущим форматом сохранения для Office. Над ним есть обертка, под названием Open XML SDK, чтобы чуть поудобнее было работать с форматом. Над ней есть обертка уже в Ax чтобы удобнее было работать из X++. Поверх этой обертки есть некая логика, которая реализует кусочек экселя типа определения высоты строки. А еще имитирует интерфейс к которому привыкли (XMLExcelDocument_RU).
А еще есть, оказывается, ClosedXML - обертка над OpenXML, делающая работу с Excel-файлами более похожей на работу с объектной моделью Excel и менее завязанной на XML. Там есть и класс XLColumn, и такие вещи, как XLColumn.AdjustToContents()
За это сообщение автора поблагодарили: Sada (1), db (1), Logger (3).
Старый 05.08.2013, 11:50   #13  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Еще вопросик, не знаю сюда его задать или нет.

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

Там же

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

???? это что такое ?))
Старый 05.08.2013, 15:39   #14  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Тип mergeCells - DocumentFormat.OpenXML.Spreadsheet.MergeCells - это смерженные ячейки шаблона.

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

Последний раз редактировалось VORP; 05.08.2013 в 15:51.
Старый 05.08.2013, 15:51   #16  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
следовательно чтобы что то выводилось в 11 и 12 колонки надо либо задать полям в этих колонках namedRanges, либо, если шаблон динамический - размножить ячейки в соответствующей строке.
Старый 05.08.2013, 15:56   #17  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от VORP Посмотреть сообщение
Тип mergeCells - DocumentFormat.OpenXML.Spreadsheet.MergeCells - это смерженные ячейки шаблона.

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

Последний раз редактировалось Sada; 05.08.2013 в 16:03.
Старый 05.08.2013, 15:56   #18  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от VORP Посмотреть сообщение
следовательно чтобы что то выводилось в 11 и 12 колонки надо либо задать полям в этих колонках namedRanges, либо, если шаблон динамический - размножить ячейки в соответствующей строке.
С этим я разобрался, спасибо, решил по своему
Старый 05.08.2013, 16:14   #19  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Цитата:
Сообщение от Sada Посмотреть сообщение
Научите объединять ячейки программно
У вас templateMode = true?

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

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.