Потребность в пользовательских отчетах возникает в случае, когда функционала отчетов по итогам не хватает и необходимо реализовать нестандартный отчет, например, с дополнительной детализацией данных, которой нельзя добиться с помощью измерений.
Список всех пользовательских отчетов можно найти в справочнике "Custom reports":
Записи справочника можно фильтровать по Названию отчета (Name).
Открыть скрипт выбранного пользовательского отчета в форме редактирования можно прямо из списковой формы справочника, выбрав пункт Edit script в контекстном меню.
Кнопка в панели инструментов формы редактирования пользовательского отчета позволяет открыть отчет (форму параметров отчета). Функционал работает только для уже созданных отчетов:
Пользовательский отчет обладает следующими свойствами:
•Name – название отчета;
•Caption – отображаемое в экранных формах название отчета;
•Guid – используется для идентификации пункта меню.
Guid генерируется автоматически случайным образом и при необходимости (при совпадении с Guid другого объекта) может быть изменен:
•Script – ссылка на скрипт. При создании нового пользовательского отчета скрипт создается автоматически при его сохранении. Нажатие на ссылку Click here to edit the script... при создании нового пользовательского отчета приведет к сохранению отчета и его перезагрузке, затем откроется форма редактирования скрипта;
•Icon – иконка отчета (размером 16 на 16 пикселей).
Кнопки справа от области предпросмотра иконки позволяют:
– загрузить иконку;
– сохранить загруженную ранее иконку на компьютер;
– удалить иконку;
•Large icon – большая иконка (размером 32 на 32 пикселя);
•User help – комментарий к отчету, который конечный пользователь может видеть в виде подсказки (hint), выпадающей при наведении курсора мыши на отчет. Комментарий вводится для каждого из языков системы в открывающейся по клику по ссылке форме;
•Metadata tags – теги, используемые для описания функционала отчета;
•Developer's comments – комментарии прикладного разработчика.
Пользовательские отчеты используют функционал отчетов по итогам, реализуемый системой. Отсюда следует задача прикладного разработчика при написании пользовательского отчета – представить данные своего отчета аналогично данным итога, с которыми может работать механизм отчета.
Скрипты пользовательских отчетов реализуют интерфейс IReportDataSource (из пространства имен Ultima.Server.Reporting.DataSources), который в свою очередь реализует следующие методы:
•GetTransactionsSql – возвращает запрос для транзакций (движений);
•GetBalanceSql – возвращает запрос для балансов (входящих остатков);
•GetReportColumns – возвращает колонки отчета (измерения и переменные):
public IEnumerable<TotalColumn> GetReportColumns() { return new TotalColumn[] { // дата new DateTotalColumn { Name = "TransactionDate", Caption = "Process date", DatabaseName = "TRANSACTION_DATE", TransactionsOnly = true }, // документ new DocumentTotalColumn { Name = "Document", Caption = "Document", DatabaseName = "DOCUMENT_ID", TransactionsOnly = true }, // измерение (dimension) new SpaceTotalColumn { Name = "ProductID", Caption = "Product", DatabaseName = "PRODUCT_ID", DictionaryType = typeof(Goods), DisplayFormat = "{ID}:{Name}" }, // переменная (variable) new VariableTotalColumn { Name = "Amount", Caption = "Amount", DatabaseName = "AMOUNT", Modifiers = new[] { VariableTotalColumnModifier.In, VariableTotalColumnModifier.Add, VariableTotalColumnModifier.Sub, VariableTotalColumnModifier.Out }.ToList() } }; } |
Базовый класс колонок отчета TotalColumn обладает следующими свойствами:
▪Name, типа string – возвращает или устанавливает имя колонки;
▪Caption, типа string – возвращает или устанавливает описание колонки;
▪DatabaseName, типа string – возвращает или устанавливает имя колонки в базе данных;
▪ColumnType, типа TotalColumnTypes– возвращает или устанавливает тип колонки, может принимать значения:
▪Identity – идентификатор;
▪Number – число;
▪Date – дата;
▪Parent, типа TotalColumn– возвращает или устанавливает родителя колонки;
▪RootColumn, типа TotalColumn– возвращает корневого родителя колонки;
▪TransactionsOnly, типа bool – возвращает или устанавливает флаг, указывающий, что значения колонки аналитические (рассчитываемые);
▪FullName, типа string – возвращает или устанавливает полное имя колонки;
▪FullCaption, типа string – возвращает или устанавливает полное описание колонки;
▪FullDatabaseName, типа string – возвращает или устанавливает полное имя колонки в базе данных.
Класс DimensionTotalColumn описывает колонки измерений, наследуется от базового класса TotalColumn, обладает следующими свойствами:
▪Nullable, типа bool – возвращает или устанавливает флаг, указывающий, могут ли значения колонки быть нулевыми Null.
Класс DateTotalColumn описывает колонки временных измерений, наследуется от класса DimensionTotalColumn.
Класс DocumentTotalColumn описывает колонки измерений-документов, наследуется от класса DimensionTotalColumn.
Класс SpaceTotalColumn описывает колонки прочих измерений, наследуется от класса DimensionTotalColumn, обладает следующими свойствами:
▪DictionaryType, типа Type – возвращает или устанавливает тип справочника, являющегося измерением колонки;
▪DisplayFormat, типа string – возвращает или устанавливает формат отображения значений колонки;
▪TreeLevel, типа long – возвращает или устанавливает уровень родителя колонки.
Класс VariableTotalColumn описывает колонки переменных, наследуется от базового класса TotalColumn, обладает следующими свойствами:
▪Modifiers, типа VariableTotalColumnModifier – возвращает или устанавливает список модификаторов переменной, может принимать значения:
▪Default = 0;
▪In = 1;
▪Add = 2;
▪Sub = 3;
▪Out = 4.
•GetSortOrderColumns – возвращает набор колонок для сортировки движений:
public IEnumerable<string> GetSortOrderColumns() { return new[] { "Document", "TransactionDate" }; } |
•GetCalculatedTransactionsDate – возвращает дату, по которую рассчитаны транзакции;
•GetActualTransactionsDate – возвращает дату актуальности транзакций (самая ранняя дата, на которую существует измененный документ).