ILanerCalculateSerie.ApplyFormulaOnce

Синтаксис

ApplyFormulaOnce(Transform: IFormulaTransformModel);

Параметры

Transform. Параметры расчета вычисляемого ряда.

Описание

Метод ApplyFormulaOnce выполняет однократный расчет вычисляемого ряда по заданным параметрам.

Комментарии

Параметры расчета ряда можно создать используя ILanerCalculateSerie.CreateTemporaryTransform.

Значения, которые рассчитаны при вызове ApplyFormulaOnce, будут записаны в ячейки таблицы рабочей книги с флагом изменения данных. Для ячейки, содержащей рассчитанное значение, свойство ILanerTable.IsChangedCell будет возвращать значение True. Этим метод ApplyFormulaOnce и отличается от метода ILanerCalculateSerie.Calculate, после выполнения которого значения в ячейки рабочей книги записываются без признака изменения данных.

Пример

Для выполнения примера предполагается наличие формы, расположенной на ней кнопки с идентификатором «Button1», компонента LanerBox с идентификатором «LanerBox1» и компонента UiErAnalyzer, являющегося источником данных для LanerBox. В UiErAnalyzer должна быть загружена рабочая книга базы данных временных рядов, содержащая ряды данных. Также необходимо добавить ссылки на системные сборки «Ms» и «Cubes».

В рабочей книге выделите только один ряд и нажмите кнопку «Button1». Будет выполнена процедура:

Sub Button1OnClick(Sender: Object; Args: IMouseEventArgs);
Var
    pSeries: ILanerCalculateSerie;
    pTransformModel: IFormulaTransformModel;
    pTransform: IMsFormulaTransform;
    pSlice: IMsFormulaTransformSlice;
    pSelector: IMsFormulaTransformSelector;
    pFormula: IMsFormula;
    pIdentity: IMsDeterministicTransform;
    pInputSlice: IMsFormulaTransformSlice;
    pTerm: IMsFormulaTerm;
Begin
    pSeries := LanerBox1.SelectedSeries(0As ILanerCalculateSerie;
    pTransformModel := pSeries.CreateTemporaryTransform;
    pTransformModel.AddInputVariable(pSeries.SourceStub);
    pTransform := pTransformModel.Transform As IMsFormulaTransform;
// Настраиваем преобразование
    pSlice := pTransform.Outputs.Item(0).Slices.Add(Null);
    pSelector := pTransform.CreateSelector;
    pSelector.Slice := pSlice;
    pFormula := pTransform.Transform(pSelector);
    pFormula.Kind := MsFormulaKind.Deterministic;
    pFormula.Level := pSeries.Level;
    pIdentity := pFormula.Method As IMsDeterministicTransform;
    pInputSlice := pTransform.Inputs.Add(pSeries.Stub).Slices.Add(Null);
    pTerm := pIdentity.Operands.Add(pInputSlice);
    pIdentity.Expression.AsString := pTerm.TermToInnerText + " + 10";
// Применяем преобразование и сохраняем данные
    pSeries.ApplyFormulaOnce(pTransformModel);
    LanerBox1.ExecuteOperation(LanerBoxOperation.SaveData);
End Sub Button1OnClick;

После выполнения примера значения выделенного ряда будут увеличены на десять и сохранены.

См. также:

ILanerCalculateSerie