Setup: ICalendarSetup;
Setup: Prognoz.Platform.Interop.Dimensions.ICalendarSetup;
Свойство Setup возвращает параметры календаря, элементы которого были построены динамически.
Для динамического открытия календаря используйте метод ICalendarDimension.OpenAs.
Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «FC_COMM». Также должна существовать форма, содержащая кнопку с идентификатором «Button1» и два компонента Memo с идентификаторами «Memo1» и «Memo2». Добавьте ссылки на системные сборки «Metabase», «Cube», «Dimensions». Пример является обработчиком события OnClick для кнопки.
Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
mb: IMetabase;
Rub: IRubricator;
CalendarObj: IMetabaseObject;
Calendar: ICalendarDimension;
CalendDimInst: IDimInstance;
DynamicCalendInst: IDynamicCalendarInstance;
Setup: ICalendarSetup;
Iterator: IDimIterator;
Begin
mb := MetabaseClass.Active;
Rub := mb.ItemById("FC_COMM").Edit As IRubricator;
CalendarObj := Rub.EditCalendar As IMetabaseObject;
Calendar := CalendarObj As ICalendarDimension;
Calendar.DefaultOpenType := CalendarOpenType.Hierarchical;
CalendDimInst := Calendar.OpenAs(CalendarOpenType.Flat);
DynamicCalendInst := CalendDimInst As IDynamicCalendarInstance;
Setup := Calendar.Setup;
Iterator := DynamicCalendInst.Iterator(Setup);
Memo1.Clear;
Memo1.Lines.Add("Старые значения");
While Iterator.Next Do
Memo1.Lines.Add(CalendDimInst.Elements.Name(Iterator.Element));
End While;
Setup.Levels := DimCalendarLevelSet.Week Or DimCalendarLevelSet.Month Or DimCalendarLevelSet.Year;
Setup.StartDay := DateTime.Parse("01.01.2000");
Setup.EndDay := DateTime.Parse("01.01.2020");
Setup.WeekLevel.RestDays := DayOfWeekSet.SaturdaySunday;
CalendarObj.Save;
CalendDimInst := Calendar.OpenAs(CalendarOpenType.Flat);
DynamicCalendInst := CalendDimInst As IDynamicCalendarInstance;
Iterator := DynamicCalendInst.Iterator(Setup);
Memo2.Clear;
Memo2.Lines.Add("Новые значения");
While Iterator.Next Do
Memo2.Lines.Add(CalendDimInst.Elements.Name(Iterator.Element));
End While;
End Sub Button1OnClick;
После выполнения примера календарь базы данных временных рядов будет динамически открыт в плоском виде. Элементы календаря будут выведены в компонент «Memo1». Затем параметры календаря будут изменены и сохранены:
доступные уровни: недели, месяцы, годы;
начало календаря: 01.01.2000;
окончание календаря: 01.01.2020;
выходные дни: суббота, воскресенье;
по умолчанию календарь будет открываться в иерархическом виде.
Элементы календаря (в плоском виде с учетом изменений) будут выведены в компонент «Memo2».
Для выполнения примера в репозитории предполагается наличие базы данных временных рядов с идентификатором «FC_COMM». Также должна существовать форма .NET, содержащая кнопку с идентификатором «button1» и два компонента ListBox с идентификаторами «listBox1» и «listBox2». Пример является обработчиком события Click для кнопки.
Imports Prognoz.Platform.Interop.Dimensions;
Imports Prognoz.Platform.Interop.Cubes;
…
Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
Var
mb: IMetabase;
Rub: IRubricator;
CalendarObj: IMetabaseObject;
Calendar: ICalendarDimension;
CalendDimInst: IDimInstance;
DynamicCalendInst: IDynamicCalendarInstance;
Setup: ICalendarSetup;
Iterator: IDimIterator;
Begin
mb := Self.Metabase;
Rub := mb.ItemById["FC_COMM"].Edit() As IRubricator;
CalendarObj := Rub.EditCalendar() As IMetabaseObject;
Calendar := CalendarObj As ICalendarDimension;
Calendar.DefaultOpenType := CalendarOpenType.caoptyHierarchical;
CalendDimInst := Calendar.OpenAs(CalendarOpenType.caoptyFlat);
DynamicCalendInst := CalendDimInst As IDynamicCalendarInstance;
Setup := Calendar.Setup;
Iterator := DynamicCalendInst.Iterator[Setup];
listBox1.Items.Clear();
listBox1.Items.Add("Старые значения");
While Iterator.Next() Do
listBox1.Items.Add(CalendDimInst.Elements.Name[Iterator.Element]);
End While;
Setup.Levels := DimCalendarLevelSet.dclsWeek Or DimCalendarLevelSet.dclsMonth Or DimCalendarLevelSet.dclsYear;
Setup.StartDay := DateTime.Parse("01.01.2000");
Setup.EndDay := DateTime.Parse("01.01.2020");
Setup.WeekLevel.RestDays := DayOfWeekSet.dowsSaturdaySunday;
CalendarObj.Save();
CalendDimInst := Calendar.OpenAs(CalendarOpenType.caoptyFlat);
DynamicCalendInst := CalendDimInst As IDynamicCalendarInstance;
Iterator := DynamicCalendInst.Iterator[Setup];
listBox2.Items.Clear();
listBox2.Items.Add("Новые значения");
While Iterator.Next() Do
listBox2.Items.Add(CalendDimInst.Elements.Name[Iterator.Element]);
End While;
End Sub;
После выполнения примера календарь базы данных временных рядов будет динамически открыт в плоском виде. Элементы календаря будут выведены в компонент «listBox1». Затем параметры календаря будут изменены и сохранены:
доступные уровни: недели, месяцы, годы;
начало календаря: 01.01.2000;
окончание календаря: 01.01.2020;
выходные дни: суббота, воскресенье;
по умолчанию календарь будет открываться в иерархическом виде.
Элементы календаря (в плоском виде с учетом изменений) будут выведены в компонент «listBox2».
См. также: