Иногда происходит вылет в функции
void CTableWrapEx::DecrRef(void)
{
int aRefCount = m_RefCount;
CSheetDoc* pSheetDoc = m_pSheetDocIn;
(this->*pDestructor)();
// пытаемся очистить ранее созданные нами CSheetDoc
// artbear: временная заглушка - код sedmin-а из 203
// --- так было -----
//if((--aRefCount == 0) && pSheetDoc && (*(DWORD*)pSheetDoc == dwCSheetDocVTable) && (CTemplate7::GetDocumentID(pSheetDoc) == 0))
// delete pSheetDoc;
// ------- ---------
// * Source/TableEx.cpp [z_1cpp_2-0-3] 1.9.4.4:
// [-] устранена ошибка, приводившая к падению 1С во время печати документа
{
if (--aRefCount || !pSheetDoc) return;
try {
if (*(DWORD*)pSheetDoc != dwCSheetDocVTable) return;
}
catch (...) {}
DeleteOwnCreatedSheetDoc(pSheetDoc);
}
}
конкретно, происходит ошибка здесь ... if (*(DWORD*)pSheetDoc ! ...
несмотря на try/catch - 1С завершается с ошибкой.
Пока вышел из ситуации, заменив на
__try {
if (*(DWORD*)pSheetDoc != dwCSheetDocVTable) return;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return;
}
Добавлю, что ошибка возникает только на двух компьютерах и то не всегда, чистка ветки реестра Moxel не помогает, проявляется при пакетной печати, код примерно такой
Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
пар = СоздатьОбъект("СписокЗначений");
Для й = 1 По 10 Цикл
пар.ДобавитьЗначение(Таб,"Таблица");
ОткрытьФормуМодально("Отчет",пар,КаталогИБ()+"ExtForms\testprn.ert");
Таб=пар.Получить("Таблица");
Таб.НоваяСтраница();
пар.УдалитьВсе();
КонецЦикла;
Таб.напечатать(1);
КонецПроцедуры