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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.06.2011, 12:46   #1  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
DDE в Ax2009
Когда-то очень давно я уже поднимал вопрос о работе с DDE в Аксапте. Если в 3.0 все работало на ура, то в 4.0 заставить нормально работать так и не получилось (подробностей за давностью лет уже не помню). Настала пора версии 2009.

Вроде в данной версии все должно работать. Однако цветочек каменный что-то пока не выходит, да и слово "счастье" из известных четырех букв тоже не складывается.

1. Имеется следующий простой джоб:

X++:
static void DDETest1(Args _args)
{
    DDEClient   DDEClient;
;
    dDEClient = new DDEClient( 'excel', 'system' );
    info(DDEClient.request('SysItems'));
}
В случае 2003 офиса в инфолог выводится нечто в непонятной кодировке. В 2007 и 2010 - все ок. В чем причина? Что надо подправить, чтобы и в 2003 все было нормально?

2. В случае, если первый тест пройден успешно, создайте в С:\Temp шаблон DDETest.xlt и запустите следующий вырванный из контекста джоб (в 3.0 работает без проблем):

X++:
static void DDETest2(Args _args)
{
    ComExcelDocument_RU excellDocument = new ComExcelDocument_RU();
    DDEClient           dDEClientPar;
    str                 sDocName;
    Array               arDDEClient;
    COM                 comDoc;

    void addDDEClient( str _chanelName )
    {
        DDEClient   dDEClient;
        str         sWorkSheetName;
        int sheetIdx;
        COM     workSheets;

        if( StrScan( _chanelName, sDocName, 1, strlen( _chanelName ) ) )
        {
            dDEClient = new DDEClient('excel', _chanelName );
            if ( !dDEClient.isValid())
            {
                return;
            }
             workSheets = comDoc.worksheets();
            for( sheetIdx = 1; sheetIdx <= workSheets.count(); sheetIdx++  )
            {
                sWorkSheetName = excellDocument.getWorkSheetName( sheetIdx );
                sWorkSheetName = substr( sWorkSheetName, 2, strlen( sWorkSheetName ) - 2 );
                if( StrScan( _chanelName, sWorkSheetName, 1, strlen( _chanelName ) ) )
                {
                    arDDEClient.value( sheetIdx, dDEClient );
                    break;
                }
            }
        }
    }

    DDEClient getDDEClient( int _workSheet = 1 )
    {
        DDEClient   dDEClientExcelSystem;

        str         channelList;
        str         channelName;
        str 1       tab     = num2char(9);
        int         foundTab;
        int         sheetIdx;
        int         resStrScan;
        int         resStrLen;
        ;
        if( arDDEClient.lastIndex() == 0 )
        {
            dDEClientExcelSystem = new DDEClient( 'excel', 'system' );
            if  ( !dDEClientExcelSystem.isValid() )
            {
                throw error( "Excel не запущен!" );
            }
            comDoc = excellDocument.getComDocument();
            sDocName = comDoc.name();

            channelList = dDEClientExcelSystem.request('Topics');
            foundTab = strScan(channelList, tab, 1, strLen(channelList));
            while (foundTab)
            {
                addDDEClient( subStr(channelList, 1, foundTab - 1) );
                channelList = strDel(channelList, 1, foundTab);

                foundTab = strScan(channelList, tab, 1, strLen(channelList));
            }
            if (strLen(channelList) > 0)
            {
                addDDEClient( channelList );
            }
        }

        return arDDEClient.value( _workSheet );
    }
;
    arDDEClient = new Array( Types::Class );
    excellDocument.newFile('C:\\Temp\\'+ 'DDETest.xlt', false);
    dDEClientPar = getDDEClient(1);
    dDEClientPar.poke('R1C1', 'Тест' );
    dDEClientPar.poke('R2C1', 'Test');
    excellDocument.visible(true);
}
Проверьте, пожалуйста, что у вас в Эксель выведется? Какая версия Аксапты/ОС/Эксель? Русский текст у меня попадает в непонятной кодировке, а английский обрезается до первого символа. От версий девятки вроде не зависит, проверял на разных. Версии ОС тоже разные. Excel 2007 и 2010. Что я делаю не так? Где и что надо подправить?
Теги
dde, баг, экспорт в excel, ax2009, ax2012

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Shekhar: AX2009 Misc Charges Blog bot DAX Blogs 0 24.02.2011 15:11
sumitax: SharePoint 2010 and AX2009 Blog bot DAX Blogs 0 11.11.2010 11:11
Khue Trinh: Fill Utility in AX2009 Blog bot DAX Blogs 0 28.09.2010 10:05
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
ax2009 & SSRS kitty DAX: Программирование 6 02.04.2009 10:38

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

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

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