Miklix

Обновление значения финансового измерения из кода X++ в Dynamics 365

Опубликовано: 16 февраля 2025 г. в 12:01:33 UTC

В этой статье объясняется, как обновить значение финансового измерения из кода X++ в Dynamics 365, включая пример кода.


Эта страница была переведена с английского языка для того, чтобы сделать ее доступной как можно большему числу людей. К сожалению, машинный перевод еще не является совершенной технологией, поэтому возможны ошибки. Если вы хотите, вы можете просмотреть оригинальную английскую версию здесь:

Update Financial Dimension Value from X++ Code in Dynamics 365

Информация в этой статье основана на Dynamics 365. Она также должна работать в Dynamics AX 2012, но я специально не тестировал ее.

Недавно мне поручили обновить значение одного финансового измерения на основе некоторой логики формы.

Как вы, вероятно, знаете, начиная с Dynamics AX 2012 финансовые измерения хранятся в отдельных таблицах и ссылаются на них через RecId, обычно в поле DefaultDimension.

Вся структура обработки измерений довольно сложна, и мне часто приходится перечитывать документацию по ней, возможно, потому, что я не так уж часто с ней работаю.

В любом случае, обновление поля в существующем наборе измерений — это то, что случается часто, поэтому я подумал, что стоит написать свой любимый рецепт ;-)


Статический метод утилиты может выглядеть так:

public static DimensionDefault updateDimension( DimensionDefault    _defaultDimension,
                                                Name                _dimensionName,
                                                DimensionValue      _dimensionValue)
{
    DimensionAttribute                  dimAttribute;
    DimensionAttributeValue             dimAttributeValue;
    DimensionAttributeValueSetStorage   dimStorage;
    DimensionDefault                    ret;
    ;

    ret             = _defaultDimension;

    ttsbegin;

    dimStorage      = DimensionAttributeValueSetStorage::find(_defaultDimension);
    dimAttribute    = DimensionAttribute::findByName(_dimensionName);

    if (_dimensionValue)
    {
        dimAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(  dimAttribute,
                                                                                        _dimensionValue,
                                                                                        true,
                                                                                        true);
        dimStorage.addItem(dimAttributeValue);
    }
    else
    {
        dimStorage.removeDimensionAttribute(dimAttribute.RecId);
    }

    ret = dimStorage.save();

    ttscommit;

    return ret;
}

Метод возвращает новый (или тот же) DimensionDefault RecId, поэтому при обновлении значения измерения для записи (что, вероятно, является наиболее распространенным сценарием) вам следует обязательно обновить поле измерения в этой записи новым значением.

Поделиться на BlueskyПоделиться на FacebookПоделиться на LinkedInПоделиться на TumblrПоделиться на XПоделиться на LinkedInЗакрепить на Pinterest

Миккель Банг Кристенсен

Об авторе

Миккель Банг Кристенсен
Миккель - создатель и владелец сайта miklix.com. Он имеет более чем 20-летний опыт работы в качестве профессионального программиста/разработчика программного обеспечения и в настоящее время работает на полную ставку в крупной европейской IT-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.