Обновление значения финансового измерения из кода 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.
Вся структура обработки измерений довольно сложна, и мне часто приходится перечитывать документацию по ней, возможно, потому, что я не так уж часто с ней работаю.
В любом случае, обновление поля в существующем наборе измерений — это то, что случается часто, поэтому я подумал, что стоит написать свой любимый рецепт ;-)
Статический метод утилиты может выглядеть так:
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, поэтому при обновлении значения измерения для записи (что, вероятно, является наиболее распространенным сценарием) вам следует обязательно обновить поле измерения в этой записи новым значением.