CreateDocumentFormulaParser: IPrxDocumentExpressionParser;
CreateDocumentFormulaParser(): Prognoz.Platform.Interop.Report.IPrxDocumentExpressionParser;
Метод CreateDocumentFormulaParser создаёт объект, осуществляющий разбор выражения формулы, заданной на текстовом листе регламентного отчёта.
Для получения коллекции листов регламентного отчёта используйте свойство IPrxReport.Sheets.
Для выполнения примера предполагается наличие в репозитории регламентного отчёта с идентификатором «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;
В результате выполнения примера в окно консоли будет выведено:
количество вычисляемых полей на текстовом листе указанного регламентного отчёта;
выражение вычисляемого поля;
значение и отформатированное значение вычисляемого поля;
общее количество термов;
значение терма с индексом «0».
Необходимые требования и результат выполнения примера 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;
См. также: