Показать сообщение отдельно
Старый 21.01.2019, 07:53   #1  
r2d2 is offline
r2d2
Участник
 
62 / 10 (1) +
Регистрация: 25.11.2013
Заполнение аналитики в разнесенных проводках.
Добрый день товарищи!
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 перезапускал. Подскажите пожалуйста как можно решить подобную проблему?