Creatio development guide
PDF

Настройка отчетов в Creatio

Glossary Item Box

Общие сведения

ВАЖНО

Настройка отчетов реализована в версиях 7.15.3 и выше.

Раздел "Настройка отчетов" позволяет пользователям встроенными средствами Creatio создавать отчеты и c помощью дизайнера отчетов FastReport выполнять их настройку. Элементы интерфейса раздела (рис. 1) подробно рассмотрены в статье "Раздел "Настройка отчетов".

Рис. 1. — Страница "Настройка отчетов"

Чтобы создать отчет, выполните следующие действия:

  1. Установите дизайнер отчетов FastReport.
  2. Создайте отчет в разделе настройки отчетов.
  3. Укажите источники данных отчета.
  4. Создайте провайдер данных отчета, который будет реализовывать логику обработки данных.
  5. Скачайте файл с источниками данных и настройте его в дизайнере отчетов FastReport.
  6. Загрузите настроенный шаблон отчета в Creatio.

Установка дизайнера отчетов FastReport

Для установки дизайнера отчетов FastReport cкачайте zip-архив по ссылке.

К СВЕДЕНИЮ

Для работы дизайнера отчетов требуются следующие компоненты:

  1. Операционная система Windows.
  2. 64-разрядный Microsoft .Net Framework 4.7.2.

Создание нового отчета

Чтобы создать новый отчет, выполните следующие действия:

  1. Перейдите в дизайнер системы по кнопке . В блоке [Настройка системы] перейдите по ссылке [Настройка отчетов] ([Report setup]).
  2. Нажмите кнопку [Добавить отчет] ([New report]) (рис. 1, 1).
  3. Задайте заголовок, выберите раздел, к которому относится отчет, а также задайте параметры отображения в области настройки параметров отображения раздела (рис. 1, 2).

Указание источников данных отчета

В блоке [Укажите источники данных для отчета] ([Specify data sources for the report]) рабочей области раздела (рис. 1, 4) укажите перечень объектов, их колонки и связи. Для указания источников данных используйте формат json. Пример представления источника данных:

{
    // Название класса провайдера данных.
    "ProviderName": "YourProviderName",
    // Структура таблиц для шаблона отчета.
    "Schemas": {
        // Имя таблиц базы данных или виртуальных таблиц, колонки которых необходимо добавить в отчет.
        "TableName1": {
            // Имя колонки, которую необходимо добавить в отчет.
            "ColumnName1": {
                // Тип данных колонки.
                "DataValueType": DataValueType1
            },
            "ColumnName2": {
                "DataValueType": DataValueType2
            }
        },
        "TableName2": {
            "ColumnName1": {
                "DataValueType": DataValueType1
            },
            "ColumnName2": {
                "DataValueType": DataValueType2
            }
        }
    }
}

К СВЕДЕНИЮ

Параметр DataValueType содержит значение из перечисления Terrasoft.core.enums.DataValueType.

Сохраните данные нажатием кнопки [Применить] ([Apply]) на панели инструментов (рис. 1, 1).

Создание провайдера данных отчета

Провайдер данных отчета — пользовательский класс на языке C#. Чтобы его создать, выполните следующие действия:

  1. В пакете разработки создайте схему типа [Исходный код] ([Source Code]).
  2. В исходном коде схемы создайте класс сервиса. Задействуйте пространство имен Terrasoft.Configuration или любое вложенное в него пространство имен. Пометьте класс атрибутом [DefaultBinding] с необходимыми параметрами. Класс сервиса должен быть наследником Terrasoft.Configuration.Reporting.FastReport.IFastReportDataSourceDataProvider.
  3. Добавьте в класс реализацию метода ExtractFilterFromParameters(UserConnection, Guid, IReadOnlyDictionary). Метод реализовывает добавление фильтров интерфейса.
  4. Добавьте в класс реализацию метода GetData(UserConnection, IReadOnlyDictionary), который должен возвращать значение типа Task<ReportDataDictionary>. В методе необходимо описать реализацию логики получения данных отчета.
  5. Опубликуйте схему исходного кода.

Пример реализации логики обработки данных отчета:

namespace Terrasoft.Configuration
{
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using Terrasoft.Configuration.Reporting.FastReport;
    using Terrasoft.Core;
    using Terrasoft.Core.Factories;
    
    // Название класса провайдера данных для отчета, логику которого необходимо реализовать.
    [DefaultBinding(typeof(IFastReportDataSourceDataProvider), Name = "YourProviderName")]
    public class YourProviderName : IFastReportDataSourceDataProvider
    {
        // Код реализации логики получения данных для отчета.
        
        // Добавление фильтров интерфейса.
        private IEntitySchemaQueryFilterItem ExtractFilterFromParameters(UserConnection userConnection, Guid entitySchemaUId,
                IReadOnlyDictionary<string, object> parameters) {
            var managerItem = userConnection.EntitySchemaManager.GetItemByUId(entitySchemaUId);
            return parameters.ExtractEsqFilterFromReportParameters(userConnection, managerItem.Name) ?? throw new Exception();
        }
        
        // Добавление данных в отчет.
        public Task<ReportDataDictionary> GetData(UserConnection userConnection, IReadOnlyDictionary<string, object> parameters) {            
            
        }

    }
}

Настройка шаблона в дизайнере отчетов FastReport

Скачайте файл с источниками данных. Для этого в блоке [Скачайте файл с источниками данных и сформируйте шаблон отчета] ([Download file with data sources to design a report in the FastReport Designer]) раздела (рис. 1, 4) нажмите кнопку [Скачать файл] ([Download file]). Файл будет иметь расширение *.frx.

Двойным кликом откройте скачанный файл в дизайнере отчетов FastReport и настройте внешний вид шаблона. Выполнение настройки описано в документации FastReport.

К СВЕДЕНИЮ

В файле сохраняется структура источников данных, которая была реализована в разделе настройки отчетов.

ВАЖНО

Дизайнер отчетов FastReport является сторонним приложением и функция предпросмотра настроенного отчета недоступна.

Загрузка настроенного шаблона отчета в Creatio

Нажатие кнопки [Загрузить шаблон] ([Upload template]) в блоке [Загрузите настроенный шаблон отчета в Creatio] ([Import a file with the report template]) (рис. 1, 4) позволяет загрузить подготовленный шаблон отчета в Creatio. После загрузки шаблона готовый отчет, в зависимости от настроек, установленных в области настройки параметров отображения, появится в выпадающем списке кнопки [Печать] ([Print]) раздела или страницы записи. Отчет можно скачать в формате pdf.

ВАЖНО

Кнопка [Печать] ([Print]) появляется только при наличии хотя бы одного отчета, для которого разрешено отображение.

Описание примера

Создать базовый отчет "Contact Data", который отображает следующую информацию о контакте:

  • [ФИО] ([Full name]);
  • [Дата рождения] ([Birthday]);
  • [Пол] ([Gender]);
  • [Контрагент] ([Account]).

Исходный код

Пакет с реализацией примера можно скачать по ссылке.

Алгоритм реализации примера

1. Выполните настройку параметров отображения отчета

Для создаваемого отчета в области настройки параметров отображения установите (рис. 2):

  • [Название отчета] ([Report title]) — "Contact Data".
  • [Раздел] ([Section]) — "Contacts".
  • [Отображать в разделе] ([Show in section]) — оставить установленным.
  • [Отображать на странице записи] ([Show in card]) — оставить установленным.

Рис. 2. — Настройка параметров отображения отчета

2. Укажите источники данных

В блоке [Укажите источники данных для отчета] ([Specify data sources for the report]) рабочей области раздела (рис. 1, 4) добавьте следующий код:

{
    // Название класса провайдера данных.
    "ProviderName": "ContactDataProvider",
    "Schemas": {
        "ContactData": {
            "Full name": {"DataValueType": 1},
            "Birthday": {"DataValueType": 1},
            "Gender": {"DataValueType": 1},
            "Account": {"DataValueType": 1}
        },
        // Добавляется для локализации.
        "LocalizableStrings": {
            "ReportTitle": {"DataValueType": 1},
            "FullNameLabel": {"DataValueType": 1},
            "BirthdayLabel": {"DataValueType": 1},
            "GenderLabel": {"DataValueType": 1},
            "AccountLabel": {"DataValueType": 1}
        }
    }
}

Для применения внесенных изменений нажмите кнопку [Применить] ([Apply]) на панели инструментов раздела (рис. 1, 1).

3. Создайте провайдер данных отчета

В разделе [Конфигурация] ([Configuration]) пользовательского пакета на вкладке [Схемы] ([Schemas]) выполните действие [Добавить] —> [Исходный код] ([Add] —> [Source Code]). Процесс создания схемы типа [Исходный код] ([Source Code]) описан в статье "Создание схемы [Исходный код]".

Для создаваемой схемы объекта установите (рис. 3):

  • [Заголовок] ([Title]) — "Contact Data";
  • [Название] ([Name]) — "UsrContactDataSourceCode".

Рис. 3. — Настройка схемы объекта типа [Исходный код] ([Source Code])

Полностью исходный код представлен ниже.

namespace Terrasoft.Configuration
{
    using System;
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Linq;
    using System.Threading.Tasks;
    using Terrasoft.Common;
    using Terrasoft.Configuration.Reporting.FastReport;
    using Terrasoft.Core;
    using Terrasoft.Core.Entities;
    using Terrasoft.Core.Factories;
    using Terrasoft.Nui.ServiceModel.Extensions;
    using EntitySchema = Terrasoft.Core.Entities.EntitySchema;
    using EntitySchemaColumn = Terrasoft.Core.Entities.EntitySchemaColumn;

    // Название класса провайдера данных для отчета, логику которого необходимо реализовать.
    [DefaultBinding(typeof(IFastReportDataSourceDataProvider), Name = "ContactDataProvider")]
    public class ContactDataProvider : IFastReportDataSourceDataProvider
    {

        private Guid _entitySchemaUId = new Guid("16BE3651-8FE2-4159-8DD0-A803D4683DD3");
        // Название схемы c исходным кодом.
        private readonly string _resourceManagerName = "UsrContactDataSourceCode";
        private readonly string[] _localizableStringNames = new[] {
            "ReportTitle",
            "FullNameLabel",
            "BirthdayLabel",
            "GenderLabel",
            "AccountLabel"
        };

        // Заполнение колонок в отчете.
        private IEnumerable<IReadOnlyDictionary<string, object>> GetContactData(
            UserConnection userConnection,
            Guid entitySchemaUId,
            IEntitySchemaQueryFilterItem filter) {
                // Получить схему объекта.
                var entitySchema = userConnection.EntitySchemaManager.GetInstanceByUId(entitySchemaUId);
                // Создание объекта класса EntitySchemaQuery.
                EntitySchemaQuery query = new EntitySchemaQuery(entitySchema);
                // Добавление колонок в запрос.
                query.AddColumn("Name");
                query.AddColumn("BirthDate");
                var gender = query.AddColumn("Gender.Name");
                var account = query.AddColumn("Account.Name");
                // Добавление созданного фильтра.
                query.Filters.Add(filter);
                // Получить коллекцию контактов.
                var contacts = query.GetEntityCollection(userConnection);
                var contactsCollection = new Collection<Dictionary<string, object>>();
                // Заполнение колонок в отчете.
                foreach (var entity in contacts)
                {
                    contactsCollection.Add(new Dictionary<string, object> {
                        ["Full name"] = entity.GetTypedColumnValue<string>("Name"),
                        ["Birthday"] = entity.GetTypedColumnValue<string>("BirthDate"),
                        ["Gender"] = entity.GetTypedColumnValue<string>(gender.Name),
                        ["Account"] = entity.GetTypedColumnValue<string>(account.Name)
                    });
                }
                return contactsCollection;
        }
        
        // Локализация заголовков отчета.
        private IEnumerable<IReadOnlyDictionary<string, object>> GetLocalizableStrings(UserConnection userConnection) {
            var localizableStrings = _localizableStringNames.ToDictionary(
                x => x,
                x => (object)(new LocalizableString(userConnection.ResourceStorage, _resourceManagerName, $"LocalizableStrings.{x}.Value")).Value);
            return new[] { localizableStrings };
        }
        
        // Добавление фильтров интерфейса.
        private IEntitySchemaQueryFilterItem ExtractFilterFromParameters(UserConnection userConnection, Guid entitySchemaUId,
                IReadOnlyDictionary<string, object> parameters) {
            var managerItem = userConnection.EntitySchemaManager.GetItemByUId(entitySchemaUId);
            return parameters.ExtractEsqFilterFromReportParameters(userConnection, managerItem.Name) ?? throw new Exception();
        } 

        // Получить данные.
        public Task<ReportDataDictionary> GetData(UserConnection userConnection, IReadOnlyDictionary<string, object> parameters) {
            var filter = ExtractFilterFromParameters(userConnection, _entitySchemaUId, parameters);
            var result = new ReportDataDictionary {
                // Заполнить колонки в отчете.
                ["ContactData"] = GetContactData(userConnection, _entitySchemaUId, filter),
                ["LocalizableStrings"] = GetLocalizableStrings(userConnection)
            };
            return Task.FromResult(result);
        }
    }
}

Опубликуйте схему.

4. Скачайте шаблон из Creatio и настройте его внешний вид в FastReport

Чтобы скачать файл ContactData.frx, в блоке [Скачайте файл с источниками данных и сформируйте шаблон отчета] ([Download file with data sources to design a report in the FastReport Designer]) рабочей области раздела (рис. 1, 4) нажмите кнопку [Скачать файл] ([Download file]).

Чтобы открыть шаблон в дизайнере отчетов, выполните следующие действия:

  1. Откройте дизайнер отчетов FastReport, запустив файл Terrasoft.Reporting.FastReport.Designer.exe из zip-архива (рис. 4).

    Рис. 4. — Файл с дизайнером отчетов FastReport

  2. Нажмите кнопку [Open...] в появившимся окне (рис. 5).

    Рис. 5. — Кнопка [Open...]


    Также перейти к выбору шаблона отчета можно в меню [File] по нажатию кнопки [Open...] (рис. 6) или по нажатию клавиш [Ctrl+O].

    Рис. 6. — Кнопка [Open...] в меню [File]

  3. Перейдите в папку со скачанным отчетом (обычно Downloads), выберите файл с шаблоном отчета и нажмите кнопку [Open] (рис. 7).

    Рис. 7. — Открытие шаблона отчета в FastReport

Настройте внешний вид шаблона (рис. 8).

Рис. 8. — Настройка шаблона в дизайнере отчетов FastReport

5. Загрузите настроенный шаблон в Creatio

Чтобы загрузить файл ContactData.frx, нажмите кнопку [Загрузить шаблон] ([Upload template]) в блоке [Загрузите настроенный шаблон отчета в Creatio] ([Import a file with the report template]) рабочей области раздела (рис. 1, 4). Подтвердите успешность загрузки шаблона.

Отчет "Contact Data" доступен на странице записи в разделе [Контакты] ([Contacts]) по нажатию кнопки [Печать] ([Print]) (рис. 9).

Рис. 9. — Отображение отчета "Contact Data" на странице записи раздела [Контакты] ([Contacts])

Отчет имеет следующий вид (рис. 10).

Рис. 10. — Отчет "Contact Data"

Отчет из нескольких записей раздела

ВАЖНО

Получить отчет, состоящий из нескольких записей, возможно только при установленном признаке [Отображать в разделе] ([Show in section]) (рис. 2).

Чтобы включить в отчет информацию из нескольких записей раздела, выполните следующие действия (рис. 11):

  1. Перейдите в раздел.
  2. При необходимости установите фильтр.
  3. Выполните [Действия] —> [Выбрать все] ([Actions] —> [Select multiple records]).
  4. Выберите соответствующий отчет в выпадающем списке кнопки [Печать] ([Print]).

Рис. 11. — Получение отчета "Contact Data" из нескольких записей раздела [Контакты] ([Contacts])

Отчет имеет следующий вид (рис. 12).

Рис. 12. — Отчет "Contact Data" из нескольких записей

Перенос пакета с отчетом на другую среду разработки

Чтобы перенести пакет с отчетом на другую среду, в разделе [Конфигурация] ([Configuration]) перейдите на вкладку [Данные] ([Data]) и выполните привязку данных следующих элементов:

  • FastReportDataSource_ReportName — источник данных отчета. Подключается по Id источника из таблицы [dbo.FastReportDataSource] базы данных.
  • FastReportTemplate_ReportName — шаблон отчета. Подключается по Id шаблона из таблицы [dbo.FastReportTemplate] базы данных.
  • SysModuleReport_ReportName — отчет. Подключается по Id отчета из таблицы [dbo.SysModuleReport] базы данных.
© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?