Использование расширенных возможностей правила валидации «Сравнение по выражению»

В правилах валидации «Сравнение по выражению» возможно использовать в расчете ряды из разных баз данных временных рядов, данные из разных календарных динамик и данные из разных ревизий. Существует ряд особенностей:

Для выполнения примера необходимо:

Расчет будет настроен на формулу:

{RussiaPavel!Argentina|NGDP_D.Q} <> collapse({Argentina|NGDP_D.Q:LastRevision}, MsCollapseType.Average, MsFrequency.Annual)

Где:

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

Sub UserProc;
Var
    mb: IMetabase;
    filter: IValidationFilter;
    customV: IValidationCustom;
    Transform: IMsFormulaTransform;
    variable: IMsFormulaTransformVariable;
    dimSelection: IDimSelection;
    metaAttribute: IMetaAttribute;
    attrVal: IMsMetaAttributeValue;
    rub: IRubricator;
    BreadcrumbItems: IBreadcrumbItems;
    Slices: IMsFormulaTransformSlices;
Begin
    mb := MetabaseClass.Active;
    // получаем правило валидации по его ключу
    filter := mb.Item(111).Edit As IValidationFilter;
    customV := filter.Details As IValidationCustom;
    // переменная из другой базы
    Transform := customV.Transform;
    variable := Transform.Inputs.Item(0);
    rub := mb.Item(333).Bind As IRubricator;
    // меняем источник данных переменной
    variable.SetStub(rub As IVariableStub);
    // так как источник данных изменился, надо перенастроить отметку переменной
    // устанавливаем первый элемент справочника, на который ссылается атрибут «Страна»
    BreadcrumbItems := MetaAttributesBreadcrumb1.Items;
    metaAttribute := (BreadcrumbItems.Item(0As IMetaAttributeBreadcrumbItem).MetaAttribute;
    dimSelection := MetaAttributesBreadcrumb1.GetAttributeValue(metaAttribute);
    Slices := variable.Slices;
    Slices.Item(0).Selection.Item(0).DeselectAll;
    Slices.Item(0).Selection.Item(0).SelectElement(dimSelection.Element(0), False);
    //  устанавливаем первый элемент справочника, на который ссылается атрибут «Показатель»
    metaAttribute := (BreadcrumbItems.Item(1As IMetaAttributeBreadcrumbItem).MetaAttribute;
    dimSelection := MetaAttributesBreadcrumb1.GetAttributeValue(metaAttribute); 
    Slices.Item(0).Selection.Item(1).DeselectAll;
    Slices.Item(0).Selection.Item(1).SelectElement(dimSelection.Element(0), False);
    // устанавливаем квартальную динамику
    Slices.Item(0).MetaAttributeValueList.Clear;
    metaAttribute := rub.Facts.Attributes.FindByKind(MetaAttributeKind.CalendarLevel);
    attrVal := Slices.Item(0).MetaAttributeValueList.Add(metaAttribute);
    attrVal.Value := DimCalendarLevel.Quarter;
    // переменная с установленной динамикой и ревизией, но из текущей базы
    rub := variable.VariableStub As IRubricator;
    variable := Transform.Inputs.Item(1);
    Slices.Item(0).MetaAttributeValueList.Clear;
    // устанавливаем квартальную динамику
    metaAttribute := rub.Facts.Attributes.FindByKind(MetaAttributeKind.CalendarLevel);
    attrVal := Slices.Item(0).MetaAttributeValueList.Add(metaAttribute);
    attrVal.Value := DimCalendarLevel.Quarter;
    // устанавливаем ревизию на последнюю перед актуальными данными, поэтому передаем значение «-1»
    metaAttribute := rub.Facts.Attributes.FindByKind(MetaAttributeKind.Revision);
    attrVal := Slices.Item(0).MetaAttributeValueList.Add(metaAttribute);
    attrVal.Value := -1;
    // сохраняем правило валидации
    (filter As IMetabaseObject).Save;
End Sub UserProc;

После выполнения примера параметры расчета правила валидации «Сравнение по выражению» будут изменены.

См. также:

Примеры

IValidationCustom