В моем случае был сценарий «размеры по умолчанию», поэтому мне пришлось немного адаптироваться.
Это метод, который я в конечном итоге использовал:
В таблице DimensionAttribute
добавьте новое имя поля Number
, затем добавьте этот метод:
public static DimensionAttribute findByNumber(DimensionOrdinal _number)
{
DimensionAttribute dimensionAttribute;
select firstonly dimensionAttribute where dimensionAttribute.Number == _number;
return dimensionAttribute;
}
Это явно идентифицирует измерение с соответствующим номером.
В классе DimensionAttributeValueSetStorage
добавьте метод:
public void addItemNumber(DimensionOrdinal _idx, SysDim _value)
{
DimensionAttributeValue attrValue;
DimensionAttribute attr = DimensionAttribute::findByNumber(_idx);
if (!attr)
throw error(strFmt("@SYS342559", _idx));
attrValue = DimensionAttributeValue::findByDimensionAttributeAndValue(attr, _value, false, true);
this.addItemValues(attr.RecId, attrValue.RecId, attrValue.HashKey);
}
DimensionAttributeValueSetStorage
обрабатывает «размеры по умолчанию», как описано в упомянутом техническом документе @dlannoye.
Тогда соответствующий код читается так:
dimensionStorage = DimensionAttributeValueSetStorage::find(salesTable.DefaultDimension);
dimensionStorage.addItemNumber(1, "abc");
salesTable.DefaultDimension = dimensionStorage.save();