Добрый день товарищи!
MS DAX 2012 R3 6.3.4000.127.
Добавил новый сегмент в существующую структуру счета. Далее необходимо установить значение новой аналитики в проводки по ГК . Написал простенький код, который генерит новый LedgerDimension:
X++:
private LedgerDimensionAccount getLedgerDimVal(
LedgerDimensionAccount _ledgerDimension,
DimensionValue _val,
RefRecId _attrRecid)
{
RefRecId ret;
DimensionStorageSegment dimensionStorageSegment;
DimensionStorage dimensionStorage = DimensionStorage::findById(_ledgerDimension);
MainAccount mainacc = MainAccount::findByLedgerDimension(_ledgerDimension);
RefRecId dimHierId = DimensionHierarchy::getAccountStructure(mainacc.RecId);
DimensionHierarchyLevel dimHierLevel = DimensionHierarchyLevel::findByDimensionHierarchyAndDimAttribute(
dimHierId,
_attrRecid);
DimensionAttributeValue dimAttraValue;
dimAttraValue = DimensionAttributeValue::findByDimensionAttributeAndValue(
DimensionAttribute::find(_attrRecid),
_val,
false,
true);
dimensionStorageSegment = DimensionStorageSegment::construct(
dimAttraValue.getValue(),
dimAttraValue.RecId,
dimAttraValue.HashKey);
dimensionStorage.setSegment(dimHierLevel.Level, dimensionStorageSegment);
ret = dimensionStorage.save();
return ret;
}
Но при попытке запуска код валится с ошибкой "Функция DimensionStorage.setSegment была неверно вызвана." В отладке прошел по стеку DimensionStorage и обнаружил что в методе DimensionStorage::findById(),есть строка:
X++:
packedDimensionStorage = DimensionCache::getValue(DimensionCacheScope::DimensionStorageInstance, [_dimensionCombinationId, _validateStructureChanges]);
Контейнер packedDimensionStorage содержит набор параметров DimensionStorage в т.ч. и количество сегментов. При этом количество неверно, не хватает мною добавленного. Сделал
X++:
DimensionCache::clearAllScopes();
- не помогло. AOS перезапускал. Подскажите пожалуйста как можно решить подобную проблему?