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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2004, 12:53   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Немного покопался... Да, по человечески (без программирования) сделать это нельзя. Но, можно немного доработать напильником.

Немного теории для начала. В интерфейсах Excel есть два метода для выбора Range: один в интерфейсе Worksheet (range выбирается в контексте листа книги Excel), другой в интерфейсе Application (range можно выбирать вообще как угодно, хоть из другого файла). Так вот, в документообороте Axapta используется первый метод, но приложив минимум усилий можно заставить его использовать второй.

Во-первых, надо написать обертку для второго метода. В класс SysExcelApplication добавьте абстрактный метод range:
Код:
abstract public SysExcelRange range(str _rangeName = '')
{
}
В расширяющие его классы тоже добавьте этот метод. В SysExcelApplication_2000:
Код:
public SysExcelRange range(str _rangeName = "")
{
    return SysExcelRange::construct(MSOfficeVersion::Office2000,
                                    _rangeName ? 
                                        application.range(_rangeName) : 
                                        application.range());
}
В SysExcelApplication_XP:
Код:
public SysExcelRange range(str _rangeName = "")
{
    return SysExcelRange::construct(MSOfficeVersion::OfficeXP,
                                    _rangeName ? 
                                        application.range(_rangeName) : 
                                        application.range());
}
Теперь завершающий штрих. Нужно заставить класс DocuActionCOM_Excel использовать правильный метод выбора range. Для этого в методе gotoBookmark исправьте
Код:
sysExcelRange = sysExcelWorksheet.range(bookmark);
на
Код:
sysExcelRange = sysExcelApplication.range(bookmark);
В принципе, это все, но есть один маленький нюанс: можно выделять только range, который расположен на активном листе. Выделение range осуществляется методом range.select, поэтому лучше избавиться от его вызовов. Если Вы исправляли метод mainInsertField так, как я рекомендовал в одном из предыдущих постов, то там как раз есть вызов range.select и его следует убрать. Еще один вызов range.select есть в методе insertHardLineBreak. Его тоже лучше убрать.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 


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

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

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