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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.05.2009, 17:33   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ну, не получается так просто. Не получается. Получаем усложнение, а не упрощение. Не в самом методе копирования, а в его использовании. Как с этим работать-то?

Чтобы использовать объектные параметры их предварительно надо создать. Значит, озаботится их хранением где-то во вне. Значит, в общем случае код получается примерно такой

ComSource = создатьCom(BookMark1)
ComTarget = создатьCom(BookMark2)
copyAndInsertRange(ComSource, ComTarget)

Это альтернатива существующему

copyAndInsertRange(BookMark1, BookMark2)

Имеем минимум 3 строчки кода против 1 (а реально больше, поскольку надо озаботится описанием переменных и дополнительными проверками). Хуже того, это придется постоянно повторять (писанину кода) при написании новых отчетов. Новый отчет - новые 3 строчки, вместо 1. Какие уж тут последующие удобства!

Когда такое будет оправдано? Только при многократном использовании, хотя бы одного из Com-объектов. Или же при копировании между разными файлами Excel. Это действительно настолько часто встречающаяся ситуация, чтобы создавать себе проблемы?
Старый 28.05.2009, 10:13   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Я написал постом выше, что можно не создавать отдельные переменные диапазонов для разового вызова. Диапазон как COM-объект можно передать методу при помощи волшебного слова Range с квалификатором родительского объекта, которым может выступать либо Worksheet, либо - и, возможно, это выглядит не столь естественно - Application (нужно помнить, что при использовании Application будет подразумеваться текущий активный Worksheet). В случае использования Worksheet выглядеть будет примерно так:
X++:
COM doc = new ComExcelDocument_RU();
COM worksheet;

worksheet = doc.getWorkSheet(1);

copyAndInsertRange( worksheet.Range(BookMark1), 
                    worksheet.Range(BookMark2) );
Интересно, что в нашей Аксапте (3.0 SP4) метод getWorkSheet на слое dis объявлен как protected, а на слое var копипастом "переписан" как public - т.е., видимо, тоже пошла трещина сомнения, что же первично: букмарки или объекты.

Что касается проверок, то их мы уже однажды пообсуждали: О проверках в классе ComExcelDocument_RU

Владимир, предлагаю на этом прервать нашу "битву парадигм" до будущих встреч в новых темах
Теги
columns, com connector, excel, колонки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Копирование листа Excel целиком ax3.0 sp4 KR3 hlopez DAX: Программирование 1 20.04.2009 11:34
Копирование листов в Excel с шаблоном Zoe DAX: Программирование 8 20.11.2008 15:50
Копирование листов в Excel Андрей К. DAX: База знаний и проекты 12 30.08.2007 08:44
Вывод в Excel в формате XML и ширина колонок gl00mie DAX: Программирование 1 30.10.2006 10:45
Копирование из Грида в Excel ArturK DAX: Программирование 5 09.03.2004 19:55

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

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

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