ICalcLinearOptimizationBlock.ExpressionDimension

Синтаксис

ExpressionDimension: IDimInstance;

Описание

Свойство ExpressionDimension определяет измерение источника данных для хранения значений выражений при сложных ограничениях управляющих переменных.

Комментарии

Для хранения значений выражений при сложных ограничениях управляющих переменных используется внутреннее измерение, недоступное для редактирования в навигаторе объектов. Для работы с измерением используйте свойство IDimInstance.Dimension и приведите его к интерфейсу IRdsDictionary. Значения нижней и верхней границ задавайте с помощью атрибутов измерения с идентификаторами:

Пример

Для выполнения примера предполагается наличие в репозитории алгоритма расчёта с идентификатором ALGORITHM. В алгоритме создан блок линейной оптимизации с какими-либо настройками.

Добавьте ссылки на системные сборки: Algo, Dimensions, Metabase, Rds. Также добавьте ссылки на сборки, которые необходимы для работы с алгоритмами расчёта.

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObjectDescriptor;
    Algo, CalcBlock: ICalcObject;
    List: ICalcObjectsList;
    CalcAlgo: ICalcAlgorithm;
    LinearBlock: ICalcLinearOptimizationBlock;
    Dict: IRdsDictionary;
    DictInst: IRdsDictionaryInstance;
    Data: IRdsDictionaryElementData;
    Attr: IRdsAttributes;
    AttrKey, AttrInd, ElemKey: Integer;
    AttrBottom: IRdsAttribute;
    Elements: IRdsDictionaryElements;
    ParentElement: IRdsDictionaryElement;
Begin
    MB := MetabaseClass.Active;
    // Получим алгоритм расчёта
    MObj := MB.ItemById("ALGORITHM");
    Algo := CalcObjectFactory.CreateCalcObject(MObj, True);
    CalcAlgo := Algo As ICalcAlgorithm;
    // Получим список объектов алгоритма расчёта
    List := CalcAlgo.Items;
    // Получим первый блок линейной оптимизации
    CalcBlock := List.Item(0);
    LinearBlock := CalcBlock As ICalcLinearOptimizationBlock;
    // Получим измерение для хранения значений выражений
    Dict := LinearBlock.ExpressionDimension.Dimension As IRdsDictionary;
    DictInst := Dict.Open(Null);
    // Создадим ограничение на выражение
    Data := DictInst.CreateElementData;
    Attr := Dict.Attributes;
    Data.Attribute(Attr.Name.Key) := "Ограничение";
    // Зададим значение нижней границы
    AttrBottom := Attr.FindById("BOTTOM_LIMIT");
    AttrKey := AttrBottom.Key;
    AttrInd := Data.AttributeIndex(AttrKey);
    Data.SetAttributeValue(AttrInd, 0);
    // Зададим значение верхней границы
    AttrBottom := Attr.FindById("TOP_LIMIT");
    AttrKey := AttrBottom.Key;
    AttrInd := Data.AttributeIndex(AttrKey);
    Data.SetAttributeValue(AttrInd, 200);
    // Получим ключ родительского элемента измерения
    Elements := DictInst.Elements;
    ParentElement := Elements.Item(0);
    ElemKey := ParentElement.Key;
    // Добавим заданные элементы в измерение    
    DictInst.Insert(ElemKey, Data);
    // Сохраним изменения
    LinearBlock.SaveObject;
End Sub UserProc;

При выполнения примера в блоке линейной оптимизации будет добавлено ограничение для управляющих переменных.

См. также:

ICalcLinearOptimizationBlock