IMsDatePeriod.Assign

Синтаксис Fore

Assign(Preiod: IMsDatePeriod);

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

Assign(Preiod: Prognoz.Platform.Interop.Ms.MsDatePeriod);

Параметры

Preiod. Копируемый период.

Описание

Метод Assign копирует параметры указанного периода в текущий период.

Комментарии

Данный метод позволяет полностью скопировать параметры периода, включая внутренние свойства.

Пример Fore

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

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

Sub UserProc;
Var
    mb: IMetabase;
    MsKey: Integer;
    CrInfo: IMetabaseObjectCreateInfo;
    ProblemCopied, ProblemCopy: IMsProblem;
    i: Integer;
    CalcSettCopied, CalcSettCopy: IMsProblemCalculationSettings;
    PeriodCopied, PeriodCopy: IMsModelPeriod;
    OutputPeriodCopied, OutputPeriodCopy: IMsDatePeriod;
    ProblemCalc: IMsProblemCalculation;
Begin
    mb := metabaseClass.Active;
    // Получаем ключ контейнера моделирования
    MsKey := mb.GetObjectKeyById("MS");
    // Получаем копируемую задачу
    ProblemCopied := mb.ItemByIdNamespace("PROBLEM_COPIED", MsKey).Edit As IMsProblem;
    // Создаем объект для задачи-копии
    CrInfo := MB.CreateCreateInfo;
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSPROBLEM;
    CrInfo.Id := MB.GenerateId("PROBLEM_COPY", MsKey);
    CrInfo.Name := "Задача моделирования (копия)";
    CrInfo.Parent := ProblemCopied.MetabaseObject.Parent;
    ProblemCopy := MB.CreateObject(CrInfo).Edit As IMsProblem;
    // Копируем метамодель  
    ProblemCopy.MetaModel := ProblemCopied.MetaModel;
    // Копируем параметры задачи
    ProblemCopy.Details := ProblemCopied.Details;
    // Копируем сценарии
    For i := 0 To ProblemCopied.Scenarios.Count - 1 Do
        ProblemCopy.Scenarios.AddScenario(ProblemCopied.Scenarios.Item(i));
    End For;
    // Копируем параметры периода выгрузки данных
    CalcSettCopied := ProblemCopied.CreateCalculationSettings;
    OutputPeriodCopied := CalcSettCopied.OutputPeriod As IMsDatePeriod;
    CalcSettCopy := ProblemCopy.CreateCalculationSettings;
    OutputPeriodCopy := CalcSettCopy.OutputPeriod As IMsDatePeriod;
    OutputPeriodCopy.Assign(OutputPeriodCopied);
    // Копируем периоды расчета задачи
    PeriodCopied := CalcSettCopied.Period;
    PeriodCopy := CalcSettCopy.Period;
    PeriodCopy.Assign(PeriodCopied);
    // Сохраняем копию
    (ProblemCopy As IMetabaseObject).Save;
    // Выполняем расчет задачи-копии
    ProblemCalc := ProblemCopy.Calculate(CalcSettCopy);
    ProblemCalc.Run;
End Sub UserProc;

В результате выполнения примера будет скопирована задача «PROBLEM_COPIED». Созданная копия будет рассчитана.

Пример Fore.NET

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

Imports Prognoz.Platform.Interop.Ms;

Public Shared Sub Main(Params: StartParams);
Var
    mb: IMetabase;
    MsKey: uinteger;
    CrInfo: IMetabaseObjectCreateInfo;
    ProblemCopied, ProblemCopy: IMsProblem;
    i: Integer;
    CalcSettCopied, CalcSettCopy: IMsProblemCalculationSettings;
    PeriodCopied, PeriodCopy: IMsModelPeriod;
    OutputPeriodCopied, OutputPeriodCopy: IMsDatePeriod;
    ProblemCalc: IMsProblemCalculation;
Begin
    mb := Params.Metabase;
    // Получаем ключ контейнера моделирования
    MsKey := mb.GetObjectKeyById("MS");
    // Получаем копируемую задачу
    ProblemCopied := mb.ItemByIdNamespace["PROBLEM_COPIED", MsKey].Edit() As IMsProblem;
    // Создаем объект для задачи-копии
    CrInfo := MB.CreateCreateInfo();
    CrInfo.ClassID := MetabaseObjectClass.KE_CLASS_MSPROBLEM As integer;
    CrInfo.Id := MB.GenerateId("PROBLEM_COPY", MsKey);
    CrInfo.Name := "Задача моделирования (копия)";
    CrInfo.Parent := ProblemCopied.MetabaseObject.Parent;
    ProblemCopy := MB.CreateObject(CrInfo).Edit() As IMsProblem;
    // Копируем метамодель  
    ProblemCopy.MetaModel := ProblemCopied.MetaModel;
    // Копируем параметры задачи
    ProblemCopy.Details := ProblemCopied.Details;
    // Копируем сценарии
    For i := 0 To ProblemCopied.Scenarios.Count - 1 Do
        ProblemCopy.Scenarios.AddScenario(ProblemCopied.Scenarios.Item[i]);
    End For;
    // Копируем параметры периода выгрузки данных
    CalcSettCopied := ProblemCopied.CreateCalculationSettings();
    OutputPeriodCopied := CalcSettCopied.OutputPeriod As IMsDatePeriod;
    CalcSettCopy := ProblemCopy.CreateCalculationSettings();
    OutputPeriodCopy := CalcSettCopy.OutputPeriod As IMsDatePeriod;
    OutputPeriodCopy.Assign(OutputPeriodCopied As MsDatePeriod);
    // Копируем периоды расчета задачи
    PeriodCopied := CalcSettCopied.Period;
    PeriodCopy := CalcSettCopy.Period;
    PeriodCopy.Assign(PeriodCopied);
    // Сохраняем копию
    (ProblemCopy As IMetabaseObject).Save();
    // Выполняем расчет задачи-копии
    ProblemCalc := ProblemCopy.Calculate(CalcSettCopy);
    ProblemCalc.Run();
End Sub;

См. также:

IMsDatePeriod