Показать сообщение отдельно
Старый 25.10.2011, 19:31   #38  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,535 / 4955 (173) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Цитата:
Сообщение от AlexSD Посмотреть сообщение
Цитата:
Сообщение от gl00mie Посмотреть сообщение
А может кто-нить разъяснить, что за таймауты такие появились, где про них написано, и в чем суть макроса EndSafeCall_RU?
Я этот прием подсмотрел в функции выгрузки данных таблицы в ексель.
Пытаясь переключить вывод данных с grid'а в Excel на работу через .NET, нашел это позорное место
\Classes\SysGridExportToExcel\performPushAndFormatting
X++:
for (retryCount = 1; retryCount <= 3; retryCount++)
{
    try
    {
        // Format the range...
        break;
    }
    catch (Exception::Error)
    {
        if (retryCount == 3)
        {
            return;
        }
        infolog.clear(0);
        infolog.addTimeOut(infolog, #NotifyMethod, 1000);
        infolog.wait();
    }
}
Там вообще затейливый код встречается:
X++:
sysDictClass = new SysDictClass(classnum(COM));
lcidExist = sysDictClass.hasObjectMethod("lcid");
// ...
if(lcidExist)
{
    listSep = WinAPI::getLocaleInfo(#xlEnglishUSLocale, #xlLocaleListSeperator);
}
else
{
    listSep = excel.international(#xlListSeperator);
}
// ...
cell = cells.item(_numberOfRows + 2, columnToFormat);
if(lcidExist)
{
    // Set the locale used by the IDispatch->Invoke method to en-us indicating to
    // Excel that the formulas are in the en-us locale. Otherwise, we need to
    // localize to each version of Excel.
    sysDictClass.callObject("lcid",cell.comObject(),#xlEnglishUSLocale);
}
Это также к вопросу о том, как выводить в ячейки Excel формулы, не заморачиваясь тем, какой у пользователя выбран язык (локаль), см. тему Строка в Excel.
За это сообщение автора поблагодарили: Logger (10).