Цитата:
Сообщение от
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.