Цитата:
Сообщение от
mazzy
она не зависает, а вычитывает практически весь АОТ из псевдо-таблицы UtilElements.
Эта таблица отражает содержимое AOD файлов и содержит всю бизнес-логику.
При последующих выборках, UtilElements будет брать объекты из кэша, поэтому зависаний не заметно.
Подскажите а если наблюдается такая проблема что зависание происходит постоянно.
Т.е. не только висит 1 минуту, но и при повторной попытке снова висит? По идее должно со второй попытки не должно тормозить.
По таблице Ledgerjournaltrans. Ее размеры:

Что это может быть?
У меня догатка что в коде не происходит сохранения в кэш.
Т.к. после ожидания 1 минуты и выбора какого то пункта в подменю Перекрестные ссылки, выводится как обычно таблица перекрестных ссылок но в добавок выводится infolog - Недопустимый тип контейнера данных.
Если словить его:
[c] \Classes\Info\add 14
[c] \Classes\Global\error 3
[c] \Classes\AfDataContainerDescriptors\createDataContainerDescriptor 69
[c] \Classes\AfDataContainerDescriptors\getDataContainerDescriptor 46
[c] \Classes\AfDataContainer\new 23
[c] \Classes\AfStronglyTypedDataContainer\new 20
[c] \Classes\CustCollectEInvoice_CustTable_NO\new 3
В методе createDataContainerDescriptor - 69:
X++:
private static AfDataContainerDescriptor createDataContainerDescriptor(str _dataContainerType, Map _constructionContext)
{
str methodName;
SysDictClass metadataDictClass;
container dataContainerMetadata, dataContainerDescriptorPackage;
AfDataContainerDescriptor dataContainerDescriptor;
// Check if the requested data container descriptor is persisted in the runtime cache
dataContainerDescriptorPackage = AifRuntimeCacheManager::retrieveEntry(AifRuntimeCacheEntryType::AfDataContainerDescriptors, _dataContainerType);
if (conlen(dataContainerDescriptorPackage) > 0)
{
// Construct the data container descriptor.
dataContainerDescriptor = AfDataContainerDescriptor::constructFromPackage(dataContainerDescriptorPackage, _constructionContext);
}
else
{
// Get a dictionary for AfDataContainerDescriptors class.
metadataDictClass = new SysDictClass(classnum(AfDataContainerDescriptors));
// Build the name of the method.
methodName = strfmt('get\%1Metadata', _dataContainerType);
// Check if the method exists.
if (metadataDictClass.hasStaticMethod(methodName))
{
// The method exists, call it to get the metadata.
new ExecutePermission().assert();
// BP deviation documented
dataContainerMetadata = metadataDictClass.callStatic(methodName, _dataContainerType);
CodeAccessPermission::revertAssert();
}
else
{
// The method does not exist, try to get Axd data container metadata.
dataContainerMetadata = AfDataContainerDescriptors::createAxdDataContainerMetadata(_dataContainerType);
}
if (conlen(dataContainerMetadata) > 0)
{
// Check the type of the returned metadata
if (_dataContainerType != conpeek(dataContainerMetadata, #DataContainerTypeIndex))
{
// The type of the returned metadata does not match the requested data container type,
// throw an error.
throw error("@SYS125458");
}
// Construct a data container descriptor from the metadata.
dataContainerDescriptor = AfDataContainerDescriptor::constructFromMetadata(dataContainerMetadata, _constructionContext);
}
else
{
// The metadata was not found. Throw an error.
throw error("@SYS125462"); // <- ошибка тут
}
// Persist the data container descriptor in the runtime cache
AifRuntimeCacheManager::cacheEntry(AifRuntimeCacheEntryType::AfDataContainerDescriptors, _dataContainerType, dataContainerDescriptor.pack());
}
return dataContainerDescriptor;
}
Указывает на то что контейнер dataContainerMetadata - пустой.
Я конечно буду смотреть по коду, где данный контейнер должен заполнятся.
Просто вдруг кто сталкивался?