IMsCalculationChainIterator.UseDates

Синтаксис Fore

UseDates: Boolean;

Синтаксис Fore.NET

UseDates: boolean;

Описание

Свойство UseDates определяет, рассчитывать ли цикл по датам.

Комментарии

Возможные значения:

Примечание. Не допускается одновременное использование свойств UseDates и IMsCalculationChainIterator.Frequencies.

Пример Fore

Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего метамодель с идентификатором «METAMODEL_ITERATOR» и модель с идентификатором «MODEL_ITERATOR».

Добавьте ссылки на системные сборки :Dimensions, Metabase, Ms.

Sub UserProc;
Var
    mb: IMetabase;
    MsKey: Integer;
    MetaModel: IMsMetaModel;
    Param: IMsModelParam;
    CalcChain: IMsCalculationChainEntries;
    Iterator: IMsCalculationChainIterator;
    Model: IMsModel;
    Formula: IMsFormula;
    Expr: IExpression;
    Calend: IMsCalendarSettings;
Begin
    // Получаем текущий
    mb := MetabaseClass.Active;
    // Получаем ключ контейнера моделирования
    MsKey := mb.GetObjectKeyById("MS");
    // Получаем метамодель
    MetaModel := mb.ItemByIdNamespace("METAMODEL_ITERATOR", MsKey).Edit As IMsMetaModel;
    // Очищаем коллекцию параметров метамодели
    MetaModel.Params.Clear;
    // Добавляем параметр, который будет отвечать за расчет цикла
    Param := MetaModel.Params.Add;
    Param.DefaultValue := 0;
    Param.Id := "THRESHOLD";
    Param.Name := "Порог";
    // Получаем и очищаем цепочку расчета метамодели
    CalcChain := MetaModel.CalculationChain;
    CalcChain.Clear;
    // Создаем цикл в цепочке расчета метамодели
    Iterator := CalcChain.AddIterator("Цикл");
    // Задаем условия выполнения цикла
    Iterator.PostCondition := True;
    Iterator.MaxIterations := 600;
    Expr := Iterator.Expression;
    Expr.AsString := "{THRESHOLD}<5";
    // Получаем модель
    Model := mb.ItemByIdNamespace("MODEL_ITERATOR", MsKey).Edit As IMsModel;
    // Сбрасываем динамику расчета модели
    Formula := Model.Transform.FormulaItem(0);
    Formula.Level := DimCalendarLevel.Root;
    // Сохраняем изменения в модели
    (Model As IMetabaseObject).Save;
    // Добавляем данную модель в цикл
    Iterator.Contents.AddModel(model);
    // Указываем что цикл будет производить итерацию по датам
    Iterator.UseDates := True;
    // Задаем даты итераций
    Iterator.StartDate := DateTime.Parse("01.01.2000");
    Iterator.EndDate := DateTime.Parse("01.01.2017");
    // Задаем шаг дат для итераций
    Iterator.Step_ := DimCalendarLevel.Week;
    // Получаем параметры календарной динамики цикла
    Calend := Iterator.CalendarSettings;
    // Указываем, что выходными днями являются пятница и суббота
    Calend.RestDays := DayOfWeekSet.Friday Or DayOfWeekSet.Saturday;
    // Сохраняем изменения в метамодели
    (MetaModel As IMetabaseObject).Save;

В результате выполнения примера итерация цикла будет выполняться по указанным датам с заданным шагом.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MsKey: uinteger;
    MetaModel: IMsMetaModel;
    Param: IMsModelParam;
    CalcChain: IMsCalculationChainEntries;
    Iterator: IMsCalculationChainIterator;
    Model: IMsModel;
    Formula: IMsFormula;
    Expr: IExpression;
    Calend: IMsCalendarSettings;
Begin
    // Получаем текущий
    mb := Params.Metabase;
    // Получаем ключ контейнера моделирования
    MsKey := mb.GetObjectKeyById("MS");
    // Получаем метамодель
    MetaModel := mb.ItemByIdNamespace["METAMODEL_ITERATOR", MsKey].Edit() As IMsMetaModel;
    // Очищаем коллекцию параметров метамодели
    MetaModel.Params.Clear();
    // Добавляем параметр, который будет отвечать за расчет цикла
    Param := MetaModel.Params.Add();
    Param.DefaultValue := 0;
    Param.Id := "THRESHOLD";
    Param.Name := "Порог";
    // Получаем и очищаем цепочку расчета метамодели
    CalcChain := MetaModel.CalculationChain;
    CalcChain.Clear();
    // Создаем цикл в цепочке расчета метамодели
    Iterator := CalcChain.AddIterator("Цикл");
    // Задаем условия выполнения цикла
    Iterator.PostCondition := True;
    Iterator.MaxIterations := 600;
    Expr := Iterator.Expression;
    Expr.AsString := "{THRESHOLD}<5";
    // Получаем модель
    Model := mb.ItemByIdNamespace["MODEL_ITERATOR", MsKey].Edit() As IMsModel;
    // Сбрасываем динамику расчета модели
    Formula := Model.Transform.FormulaItem[0];
    Formula.Level := DimCalendarLevel.dclRoot;
    // Сохраняем изменения в модели
    (Model As IMetabaseObject).Save();
    // Добавляем данную модель в цикл
    Iterator.Contents.AddModel(model);
    // Указываем что цикл будет производить итерацию по датам
    Iterator.UseDates := True;
    // Задаем даты итераций
    Iterator.StartDate := DateTime.Parse("01.01.2000");
    Iterator.EndDate := DateTime.Parse("01.01.2017");
    // Задаем шаг дат для итераций
    Iterator.@Step := DimCalendarLevel.dclWeek;
    // Получаем параметры календарной динамики цикла
    Calend := Iterator.CalendarSettings;
    // Указываем, что выходными днями являются пятница и суббота
    Calend.RestDays := DayOfWeekSet.dowsFriday Or DayOfWeekSet.dowsSunday;
    // Сохраняем изменения в метамодели
    (MetaModel As IMetabaseObject).Save();
End Sub;

См. также:

IMsCalculationChainIterator