IPrxReport.CreateDocumentFormulaParser

Синтаксис Fore

CreateDocumentFormulaParser: IPrxDocumentExpressionParser;

Синтаксис Fore.NET

CreateDocumentFormulaParser(): Prognoz.Platform.Interop.Report.IPrxDocumentExpressionParser;

Описание

Метод CreateDocumentFormulaParser создаёт объект, осуществляющий разбор выражения формулы, заданной на текстовом листе регламентного отчёта.

Комментарии

Для получения коллекции листов регламентного отчёта используйте свойство IPrxReport.Sheets.

Пример Fore

Для выполнения примера предполагается наличие в репозитории регламентного отчёта с идентификатором «DOCUMENT». Отчёт содержит текстовый лист «Документ1», на котором размещено хотя бы одно текстовое поле.

Добавьте ссылки на системные сборки: Drawing, Metabase, Report.

Sub UserProc;
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Report: IPrxReport;
    Doc: IPrxDocument;
    DocExpr: IPrxDocumentExpression;
    Style: IPrxCellStyle;
    DataSource: IPrxDataSource;
    Points: IPrxCalculatedPoints;
    Point: IPrxCalculatedPoint;
    Parser: IPrxDocumentExpressionParser;
    Term: String;
    Expr: IExpression;
Begin
    MB := MetabaseClass.Active;
    MObj := MB.ItemById("DOCUMENT").Edit;
    Report := MObj As IPrxReport;
    Doc := Report.Sheets.FindByName("Документ1"As IPrxDocument;
    // Выражение:
    DocExpr := Doc.DocumentExpressions.Item(0);
    Style := DocExpr.Style;
    Style.BackgroundBrush := New GxSolidBrush.Create(GxColor.FromName("Blue"));
    Debug.WriteLine("Количество вычисляемых полей на листе: " + Doc.DocumentExpressions.Count.ToString);
    Debug.WriteLine("Выражение вычисляемого поля: " + DocExpr.Expression.AsString);
    Debug.WriteLine("Значение: " + DocExpr.Value);
    Debug.WriteLine("Отформатированное значение: " + DocExpr.FormattedValue);
    // Разбор выражения формулы:
    DataSource := Report.DataSources.Item(0);
    Points := DataSource.Points;
    Point := Points.Item(0);
    Parser := Report.CreateDocumentFormulaParser;
    Parser.ClearTerms;
    Parser.DocumentExpression := DocExpr;
    Term := Parser.AddTerm;
    Parser.TermType(Term) := PrxDocumentExpressionTermType.PointType;
    Parser.TermPointKey(Term) := Point.Key;
    Parser.TermSourceKey(Term) := 1;
    Parser.TermText(Term) := "Point1";
    Expr := Parser.Formula;
    Parser.Parse(Expr.AsString);
    Debug.WriteLine("Количество термов: " + Parser.TermCount.ToString);
    Debug.WriteLine("Терм с индексом 0: " + Parser.Term(0));
    (Report As IMetabaseObject).Save;
End Sub UserProc;

В результате выполнения примера в окно консоли будет выведено:

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Добавьте ссылки на системные сборки: Drawing, ForeSystem, Metabase, Report.

Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Drawing;
Imports Prognoz.Platform.Interop.ForeSystem;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    MObj: IMetabaseObject;
    Report: IPrxReport;
    Doc: IPrxDocument;
    DocExpr: IPrxDocumentExpression;
    Style: IPrxCellStyle;
    ColorCls: GxColorClass = New GxColorClassClass();
    Brush: GxSolidBrush = New GxSolidBrushClass();
    DataSource: IPrxDataSource;
    Points: IPrxCalculatedPoints;
    Point: IPrxCalculatedPoint;
    Parser: IPrxDocumentExpressionParser;
    Term: String;
    Expr: IExpression;
Begin
    MB := Params.Metabase;
    MObj := MB.ItemById["DOCUMENT"].Edit();
    Report := MObj As IPrxReport;
    Doc := Report.Sheets.FindByName("Документ1"As IPrxDocument;
    // Выражение:
    DocExpr := Doc.DocumentExpressions.Item[0];
    Style := DocExpr.Style;
    Brush.Create(ColorCls.FromName("Blue"));
    Style.BackgroundBrush := Brush;
    System.Diagnostics.Debug.WriteLine("Количество вычисляемых полей на листе: " + Doc.DocumentExpressions.Count.ToString());
    System.Diagnostics.Debug.WriteLine("Выражение вычисляемого поля: " + DocExpr.Expression.AsString);
    System.Diagnostics.Debug.WriteLine("Значение: " + DocExpr.Value[True]);
    System.Diagnostics.Debug.WriteLine("Отформатированное значение: " + DocExpr.FormattedValue[True]);
    // Разбор выражения формулы:
    DataSource := Report.DataSources.Item[0];
    Points := DataSource.Points;
    Point := Points.Item[0];
    Parser := Report.CreateDocumentFormulaParser();
    Parser.ClearTerms();
    Parser.DocumentExpression := DocExpr As PrxDocumentExpression;
    Term := Parser.AddTerm();
    Parser.TermType[Term] := PrxDocumentExpressionTermType.pdettPointType;
    Parser.TermPointKey[Term] := Point.Key;
    Parser.TermSourceKey[Term] := 1;
    Parser.TermText[Term] := "Point1";
    Expr := Parser.Formula;
    Parser.Parse(Expr.AsString);
    System.Diagnostics.Debug.WriteLine("Количество термов: " + Parser.TermCount.ToString());
    System.Diagnostics.Debug.WriteLine("Терм с индексом 0: " + Parser.Term[0]);
    (Report As IMetabaseObject).Save();
End Sub;

См. также:

IPrxReport