CalculationOption(Option: MsCalculationOptions): Boolean;
CalculationOption[Option: Prognoz.Platform.Interop.Ms.MsCalculationOptions]: boolean;
Option. Одна или несколько опций, которые могут применяться при расчете модели.
Свойство CalculationOption определяет, применяется ли указанная опция при расчете модели.
Для применения значения одной или нескольких опций установите значение True, для сброса - False.
Если при получении опция возвращает значение True, то она применяется, если False - нет. Если получается значение нескольких опций сразу, то True возвращается, если все запрашиваемые опции применяются, иначе возвращается False.
Если применяется опция MsCalculationOptions.IntersectPeriods и MsCalculationOptions.UseTransformPeriod,то есть выполняется пересечение периодов модели и её объекта-родителя, то учитывайте следующие особенности:
пересечения периодов идентификации и периодов прогнозирования рассчитываются отдельно;
если периоды модели и периоды объекта-родителя не пересекаются, то расчет модели произведен не будет. Будет выдано соответствующее предупреждение;
если периоды идентификации модели и объекта-родителя пересекаются, а периоды прогнозирования нет, то период прогнозирования будет выровнен на конец периода идентификации, полученного в результате пересечения периодов идентификации модели и объекта-родителя;
если периоды прогнозирования модели и объекта-родителя пересекаются, а периоды идентификации нет, то период идентификации будет выровнен на начало периода прогнозирования, полученного в результате пересечения периодов прогнозирования модели и объекта-родителя;
учитывается значение свойства IMsModelPeriod.AllowForecastBeforeIdent.
Пример пересечения периодов модели и её объекта-родителя:
Значение IMsModelPeriod.AllowForecastBeforeIdent | Периоды модели | Периоды объекта-родителя | Периоды после пересечения | |||
Идентификация | Прогнозирование | Идентификация | Прогнозирование | Идентификация | Прогнозирование | |
False | 1980-2000 | 2001-2010 | 1990-2005 | 2006-2020 | 1990-2000 | 2006-2010 |
False | 1980-2000 | 2001-2010 | 1970-1990 | 1991-1999 | 1980-1990 | 1990-1990 |
False | 1980-2000 | 2001-2010 | 2001-2005 | 2006-2008 | 2006-2006 | 2006-2008 |
False | 1980-2000 | 2001-2010 | 2011-2014 | 2014-2017 | Модель не рассчитывается | |
True | 1980-2000 | 1990-2010 | 1990-2001 | 1998-2005 | 1990-2000 | 1998-2005 |
Для выполнения примера в репозитории предполагается наличие контейнера моделирования с идентификатором «MS», содержащего задачу моделирования с идентификатором «PROBLEM_CALC_OPTIONS». В цепочку расчета данной задачи должна входить модель с идентификатором «MODEL_CALC_OPTIONS».
Добавьте ссылки на системные сборки: Metabase, Ms.
Sub UserProc;
Var
mb: IMetabase;
MsKey: Integer;
Problem: IMsProblem;
CalcChain: IMsCalculationChainEntries;
ChainModel: IMsCalculationChainModel;
Model: IMsModel;
Transform: IMsFormulaTransform;
Begin
// Получаем текущий репозиторий
mb := MetabaseClass.Active;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем задачу моделирования
Problem := mb.ItemByIdNamespace("PROBLEM_CALC_OPTIONS", MsKey).Bind As IMsProblem;
// Получаем цепочку расчета, используемую задачей
CalcChain := Problem.MetaModel.CalculationChain;
// Получаем модель
ChainModel := CalcChain.FindById("MODEL_CALC_OPTIONS") As IMsCalculationChainModel;
Model := ChainModel.EditModel;
// Получаем параметры расчета модели
Transform := Model.Transform;
// Указываем, что выполняется пересечение периодов модели и её объекта-родителя
Transform.CalculationOption(MsCalculationOptions.IntersectPeriods
Or MsCalculationOptions.UseExistingData) := True;
// Сохраняем изменения
(Model As IMetabaseObject).Save;
End Sub UserProc;
В результате выполнения примера для модели «MODEL_CALC_OPTIONS» будет применяться пересечение её периодов расчета и периодов расчета задачи моделирования «PROBLEM_CALC_OPTIONS».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Ms;
…
Public Shared Sub Main(Params: StartParams);
Var
mb: IMetabase;
MsKey: uinteger;
Problem: IMsProblem;
CalcChain: IMsCalculationChainEntries;
ChainModel: IMsCalculationChainModel;
Model: IMsModel;
Transform: IMsFormulaTransform;
Begin
// Получаем текущий репозиторий
mb := Params.Metabase;
// Получаем ключ контейнера моделирования
MsKey := mb.GetObjectKeyById("MS");
// Получаем задачу моделирования
Problem := mb.ItemByIdNamespace["PROBLEM_CALC_OPTIONS", MsKey].Bind() As IMsProblem;
// Получаем цепочку расчета, используемую задачей
CalcChain := Problem.MetaModel.CalculationChain;
// Получаем модель
ChainModel := CalcChain.FindById("MODEL_CALC_OPTIONS") As IMsCalculationChainModel;
Model := ChainModel.EditModel;
// Получаем параметры расчета модели
Transform := Model.Transform;
// Указываем, что выполняется пересечение периодов модели и её объекта-родителя
Transform.CalculationOption[MsCalculationOptions.mscoIntersectPeriods
Or MsCalculationOptions.mscoUseExistingData] := True;
// Сохраняем изменения
(Model As IMetabaseObject).Save();
End Sub;
См. также: