Для выполнения примера предполагается наличие области данных или табличного визуализатора с идентификатором «EaxObject», размещенного на активном листе регламентного отчета.
Для создания макроса в окне «Навигатор объектов» выполните команду контекстного меню «Создать > Среда разработки > Модуль». Будет открыто окно среды разработки.
Добавьте ссылки на системные сборки: Dimensions, Express, Matrix, Pivot, Report, Tab, Ui. Для этого выполните команду «Сборка > Редактировать ссылки». В открывшемся окне «Ссылки сборки» на вкладке «Системные сборки» установите флажки напротив наименований необходимых сборок.
В окне среды разработки введите следующий код:
Sub AttributeValue(Row: Integer; Column: Integer);
Var
rep: IPrxReport;
tab: ITabSheet;
sheet: IPrxTable;
DataArea: IEaxDataAreaViews;
grid: IEaxGrid;
result_eax: IEaxDrillResult;
result_prx: IPrxDrillCellResult;
slice_eax: IEaxDataAreaPivotSlice;
slice_prx: IPrxSlice;
dim: IDimInstance;
DimSelection: IDimSelection;
dim_prx: IPrxSliceDimension;
DimAttr: IDimAttributeInstance;
DimElements: IDimElements;
DataBinding: IPrxTableDataBinding;
FocusedRow, FocusedColumn, dimInd, ind: Integer;
AttrValue: Variant;
Begin
rep := PrxReport.ActiveReport;
sheet := rep.ActiveSheet As IPrxTable;
tab := sheet.TabSheet;
// индекс строки, в которой находится ячейка с фокусом:
FocusedRow := Row;
// индекс столбца, в котором находится ячейка с фокусом:
FocusedColumn := Column;
// === Табличный визуализатор ===
DataArea := rep.DataArea.Views;
grid := DataArea.FindById("EaxObject") As IEaxGrid;
result_eax := grid.DrillCellResult(FocusedRow, FocusedColumn);
If result_eax <> Null Then
slice_eax := grid.Slice As IEaxDataAreaPivotSlice;
dim := slice_eax.Pivot.LeftHeader.Dim(0);
DimSelection := result_eax.Selection.FindByKey(dim.Key);
WinApplication.InformationBox("Значение атрибута элемента: " + #10 + #13 + DimSelection.ToString);
End If;
// === Область данных ===
DataBinding := (rep.ActiveSheet As IprxTable).DataBinding;
result_prx := DataBinding.DrillCell(FocusedRow, FocusedColumn);
If result_prx <> Null Then
slice_prx := rep.DataSources.Item(0).Slices.Item(0);
dim_prx := slice_prx.LeftHeader.Item(0);
dimInd := slice_prx.Selection.IndexOfKey(dim_prx.Key);
ind := result_prx.Coord.Item(dimind);
DimAttr := dim_prx.Dimension.Attributes.Item(0);
DimSelection := result_prx.Selection.Item(dimind);
DimElements := DimSelection.Dimension.Elements;
AttrValue := DimElements.AttributeValueO(ind, DimAttr);
WinApplication.InformationBox("Значение атрибута элемента: " + #10 + #13 + AttrValue);
End If;
End Sub AttributeValue;
После написания и сохранения модуля подключите его к отчету.
Если необходимо, чтобы ссылка работала в веб-приложении, то создайте пользовательскую js-функцию, аналогичную процедуре Fore, и подключите её к отчёту. Сигнатура функции указана в разделе «Гиперссылка». Для получения подробной информации о подключении функции к отчету обратитесь к статье «Подключение пользовательской js-функции к отчёту».
Для ячейки в регламентном отчете откройте окно «Формат ячейки». Перейдите на вкладку «Гиперссылка» и в соответствующих полях укажите наименования созданного модуля, процедуры и js-функции:
Примечание. В рассматриваемом примере в качестве параметров процедуры указываются номера строки и столбца области данных: AttributeValue(3, 3).
Ячейка, содержащая гиперссылку, выглядит следующим образом:
Нажмите на ячейку с гиперссылкой.
В результате выполнения примера будут получены атрибуты элемента области данных по введённым координатам ячейки области данных. Например:
См. также: