BeginUpdate: Object;
Метод BeginUpdate инициализирует обновление измерения.
Метод рекомендуется использовать при изменении отметки управляющего измерения для блокировки обновления зависимых измерений. После выставления отметки по управляющему измерению снимите блокировку обновления зависимых измерений.
В разных версиях Prognoz Platform метод BeginUpdate имеет особенности использования:
для версии Prognoz Platform ниже 8.2.200 метод используется совместно с оператором Dispose:
при вызове метода BeginUpdate создается временный объект;
после оператора Dispose уничтожается временный объект и применяются все внесенные изменения;
для версии Prognoz Platform 8.2.200 и выше метод используется совместно с методом EndUpdate:
при вызове метода BeginUpdate блокируется обновление зависимых измерений;
после вызова метода EndUpdate обновляются зависимые измерения.
Метод используется для регламентного отчёта, где источником данных является куб с управляющими измерениями.
Для выполнения примера:
Создайте регламентный отчёт.
Добавьте в качестве источника данных стандартный куб с управляющими измерениями. Одно из измерений с идентификатором «Customers», от которого зависят другие измерения.
Добавьте в область данных срез.
Перенесите добавленный срез на лист отчёта, используя механизм Drag&Drop.
Создайте обработчик событий.
В модуле подключите системные сборки: Report, Dimensions.
Задайте для события OnBeforeExecuteReport обновление измерений при изменении отметки.
Пример использования метода BeginUpdate для версии Prognoz Platform ниже 8.2.200:
Public Sub OnBeforeExecuteReport(Report: IPrxReport; Var Cancel: Boolean);
Var
Selset: IDimSelectionSet;
Dims: IPRxSliceDimensions;
SliceDim: IDimSelection;
DtSources: IPrxDataSources;
Obj: Object;
Begin
Report := PrxReport.ActiveReport;
// Зададим область и источник данных отчета
DI := Report.DataIslands.Item(0);
DtSources := Report.DataSources;
// Определим отметку среза и объект, содержащий все измерения среза
Selset := DtSources.Item(0).Slices.Item(0).Selection;
Dims := DtSources.Item(0).Slices.Item(0).Dimensions;
// Зададим измерение среза по идентификатору
SliceDim := Selset.FindById("Customers");
// Инициализируем обновление измерения по заданным отметкам
Obj := Dims.FindById("Customers").BeginUpdate;
SliceDim.SelectElement(1, True);
SliceDim.SelectElement(2, True);
Dispose Obj;
End Sub OnBeforeExecuteReport;
Пример использования метода BeginUpdate совместно с методом EndUpdate для версии Prognoz Platform 8.2.200 и выше:
Public Sub OnBeforeExecuteReport(Report: IPrxReport; Var Cancel: Boolean);
Var
Selset: IDimSelectionSet;
Dims: IPRxSliceDimensions;
SliceDim: IDimSelection;
DtSources: IPrxDataSources;
Obj: Object;
Begin
Report := PrxReport.ActiveReport;
// Зададим область и источник данных отчета
DtSources := Report.DataSources;
// Определим отметку среза и объект, содержащий все измерения среза
Selset := DtSources.Item(0).Slices.Item(0).Selection;
Dims := DtSources.Item(0).Slices.Item(0).Dimensions;
// Зададим измерение среза по идентификатору
SliceDim := Selset.FindById("Customers");
// Инициализируем обновление измерения по заданным отметкам
Obj := Dims.FindById("Customers").BeginUpdate;
SliceDim.SelectElement(1, True);
SliceDim.SelectElement(2, True);
Dims.FindById("Customers").EndUpdate;
End Sub OnBeforeExecuteReport;
В регламентном отчёте после нажатия на кнопку «Обновить» на вкладке «Главная» ленты инструментов произойдет событие, при котором изменится отметка заданного измерения, а зависимые измерения перестроятся под данную отметку.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Пример использования метода BeginUpdate для версии Prognoz Platform ниже 8.2.200:
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Dimensions;
Public Sub OnBeforeExecuteReport(Report: IPrxReport; Var Cancel: Boolean);
Var
Selset: IDimSelectionSet;
Dims: IPRxSliceDimensions;
SliceDim: IDimSelection;
DtSources: IPrxDataSources;
Obj: Object;
Begin
// Зададим источник данных отчета
DtSources := Report.DataSources;
// Определим отметку среза и объект, содержащий все измерения среза
Selset := DtSources.Item[0].Slices.Item[0].Selection;
Dims := DtSources.Item[0].Slices.Item[0].Dimensions;
// Зададим измерение среза по идентификатору
SliceDim := Selset.FindById("Customers");
// Инициализируем обновление измерения по заданным отметкам
Obj := Dims.FindById("Customers").BeginUpdate();
SliceDim.SelectElement(1, True);
SliceDim.SelectElement(2, True);
System.Runtime.InteropServices.Marshal.ReleaseComObject(Obj);
End Sub OnBeforeExecuteReport;
Пример использования метода BeginUpdate совместно с методом EndUpdate для версии Prognoz Platform 8.2.200 и выше:
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Dimensions;
Public Sub OnBeforeExecuteReport(Report: IPrxReport; Var Cancel: Boolean);
Var
Selset: IDimSelectionSet;
Dims: IPRxSliceDimensions;
SliceDim: IDimSelection;
DtSources: IPrxDataSources;
Obj: Object;
Begin
// Зададим источник данных отчёта
DtSources := Report.DataSources;
// Определим отметку среза и объект, содержащий все измерения среза
Selset := DtSources.Item[0].Slices.Item[0].Selection;
Dims := DtSources.Item[0].Slices.Item[0].Dimensions;
// Зададим измерение среза по идентификатору
SliceDim := Selset.FindById("Customers");
// Инициализируем обновление измерения по заданным отметкам
Obj := Dims.FindById("Customers").BeginUpdate();
SliceDim.SelectElement(1, True);
SliceDim.SelectElement(2, True);
Dims.FindById("Customers").EndUpdate();
End Sub OnBeforeExecuteReport;
См. также: