FillWithTargetConstraints(TargetEntryKey: Integer;
EntryKeys:
Array;
Calculation:
IMsMethodCalculation;
[Workbook:
IMetabaseObject
= Null]);
FillWithTargetConstraints(TargetEntryKey: integer;
EntryKeys:
System.Array;
Calculation:
Prognoz.Platform.Interop.Ms.IMsMethodCalculation;
[Workbook:
Prognoz.Platform.Interop.Metabase.IMetabaseObject
= Null]);
TargetEntryKey. Ключ целевой функции;
EntryKeys. Массив ключей ограничений целевой функции;
Calculation. Параметры расчета модели, содержащей целевую функцию;
Workbook. Внешняя рабочая книга, в которую требуется выгрузить результаты.
Метод FillWithTargetConstraints заполняет рабочую книгу данными ограничений целевой функции.
Если Workbook = Null, то внутреннюю рабочую книгу с загруженными данными возвращает свойство IMsMetaModelVisualController.Workbook. В качестве значения параметра WorkbookType необходимо указывать значение MsWorkbookType.TargetConstraints.
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащим целевую задачу с идентификатором «FILLMODEL». Для задачи обязательно должен быть задан оптимизационный сценарий и одно или несколько ограничений целевой функции. Также в репозитории предполагается наличие рабочей книги с идентификатором «WBK_TARGET».
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserProc;
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Meta: IMsMetaModel;
MetaVisual: IMsMetaModelVisualController;
ScArr, ConstrArr: Array Of Integer;
pr: IMsProblem;
i, j, TarjetKey: Integer;
ChainEn: IMsCalculationChainEntries;
Model: IMsModel;
Transform: IMsFormulaTransform;
Calc: IMsMethodCalculation;
Wbk: IMetabaseObject;
ScenTree: IMsScenarioTreeEntries;
Target: IMsTargetProblem;
Constraints: IMsTargetConstraints;
Constr: IMsTargetConstraint;
Begin
mb := MetabaseClass.Active;
// Получаем контейнер моделирования
MsObj := mb.ItemById("MS");
// Получаем задачу моделирования
pr := mb.ItemByIdNamespace("FILLMODEL", MsObj.Key).Bind As IMsProblem;
// Получаем метамодель
Meta := pr.MetaModel;
MetaVisual := Meta.VisualController;
ChainEn := Meta.CalculationChain;
// Получаем ключ целевой функции
TarjetKey := -1;
For i := 0 To ChainEn.Count - 1 Do
If ChainEn.Item(i).Type = MsCalculationChainEntryType.Target Then
TarjetKey := ChainEn.Item(i).Key;
End If;
End For;
// Создаем массив ключей сценариев
ScArr := New Integer[2];
// Добавляем ключ сценария «Факт»
ScArr[0] := -1;
// Добавляем ключ сценария целевой задачи
ScenTree := (MsObj.Bind As IMsModelSpace).ScenarioTree;
Target := pr.AdditionalDetails.Item(0) As IMsTargetProblem;
j := Target.OptimisticScenario.InternalKey;
ScArr[1] := ScenTree.FindByInternalKey(j).Key;
Target := pr.AdditionalDetails.Item(0) As IMsTargetProblem;
Constraints := Target.Constraints;
ConstrArr := New Integer[Constraints.Count];
For i := 0 To Constraints.Count - 1 Do
Constr := Constraints.Item(i);
ConstrArr[i] := Constr.Key;
End For;
// Получаем модель, содержащую параметры целевой функции
Model := Target.Model;
// Создаем параметры расчета модели
Transform := Model.Transform;
Calc := Transform.CreateCalculation;
// Получаем рабочую книгу
Wbk := mb.ItemById("WBK_TARGET").Edit;
// Заполняем рабочую книгу данными целевой функции
MetaVisual.FillWithTargetConstraints(TarjetKey, ConstrArr, Calc, ScArr, Wbk);
// Сохраняем рабочую книгу
Wbk.Save;
End Sub UserProc;
В результате выполнения примера в рабочую книгу «WBK_TARGET» будут выгружены данные ограничений целевой функции.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsObj: IMetabaseObjectDescriptor;
Meta: IMsMetaModel;
MetaVisual: IMsMetaModelVisualController;
ScArr, ConstrArr: Array Of Integer;
pr: IMsProblem;
i, TarjetKey: Integer;
j: uinteger;
ChainEn: IMsCalculationChainEntries;
Model: IMsModel;
Transform: IMsFormulaTransform;
Calc: IMsMethodCalculation;
Wbk: IMetabaseObject;
ScenTree: IMsScenarioTreeEntries;
Target: IMsTargetProblem;
Constraints: IMsTargetConstraints;
Constr: IMsTargetConstraint;
Begin
mb := Params.Metabase;
// Получаем контейнер моделирования
MsObj := mb.ItemById["MS"];
// Получаем задачу моделирования
pr := mb.ItemByIdNamespace["FILLMODEL", MsObj.Key].Bind() As IMsProblem;
// Получаем метамодель
Meta := pr.MetaModel;
MetaVisual := Meta.VisualController;
ChainEn := Meta.CalculationChain;
// Получаем ключ целевой функции
TarjetKey := -1;
For i := 0 To ChainEn.Count - 1 Do
If ChainEn.Item[i].Type = MsCalculationChainEntryType.mccetTarget Then
TarjetKey := ChainEn.Item[i].Key As integer;
End If;
End For;
// Создаем массив ключей сценариев
ScArr := New Integer[2];
// Добавляем ключ сценария «Факт»
ScArr[0] := -1;
// Добавляем ключ сценария целевой задачи
ScenTree := (MsObj.Bind() As IMsModelSpace).ScenarioTree;
Target := pr.AdditionalDetails.Item[0] As IMsTargetProblem;
j := Target.OptimisticScenario.InternalKey;
ScArr[1] := ScenTree.FindByInternalKey(j).Key As integer;
Target := pr.AdditionalDetails.Item[0] As IMsTargetProblem;
Constraints := Target.Constraints;
ConstrArr := New Integer[Constraints.Count];
For i := 0 To Constraints.Count - 1 Do
Constr := Constraints.Item[i];
ConstrArr[i] := Constr.Key As integer;
End For;
// Получаем модель, содержащую параметры целевой функции
Model := Target.Model;
// Создаем параметры расчета модели
Transform := Model.Transform;
Calc := Transform.CreateCalculation();
// Получаем рабочую книгу
Wbk := mb.ItemById["WBK_TARGET"].Edit();
// Заполняем рабочую книгу данными целевой функции
MetaVisual.FillWithTargetConstraints(TarjetKey, ConstrArr, Calc, ScArr, Wbk);
// Сохраняем рабочую книгу
Wbk.Save();
End Sub;
См. также: