Отчеты FastReport

Легкий

Важно. В Creatio версии 8.0.3 будет прекращена поддержка функциональности отчетов FastReport.

Отчет FastReport — документ, который сгенерирован на основе записей разделов Creatio в формате *.pdf.

Настроить доступ к разделу [ Настройка отчетов ] 

Доступ к разделу [ Настройка отчетов ] ([ Report setup ]) настраивается на уровне системных операций. Если пользователь не имеет доступа к разделу [ Настройка отчетов ] ([ Report setup ]), то отображается стандартное сообщение с указанием операции и недостающих прав. По умолчанию доступ к основным системным операциям имеют только администраторы приложения. Creatio предоставляет возможность настройки доступа к системным операциям для пользователей или групп пользователей. Подробнее читайте в статье Настроить права доступа на системные операции.

Чтобы настроить доступ к разделу [ Настройка отчетов ] ([ Report setup ]):

  1. Перейдите в дизайнер системы по кнопке . В блоке [ Пользователи и администрирование ] ([ Users and administration ]) перейдите по ссылке [ Права доступа на операции ] ([ Operation permissions ]).
  2. Выберите системную операцию [ Доступ к разделу "Настройка отчетов" ] ([ Access to "Report setup" section ], код CanManageReports).
  3. На детали [ Доступ к операции ] ([ Operation permission ]) нажмите и укажите получателя прав.

В результате запись отобразится на детали [ Доступ к операции ] ([ Operation permission ]) в колонке [ Уровень доступа ] ([ Access level ]) со значением [ Да ] ([ Yes ]). Пользователи, которые входят в указанную роль, получат доступ к системной операции [ Доступ к разделу "Настройка отчетов" ] ([ Access to "Report setup" section ], код CanManageReports).

Создать простой отчет FastReport 

  1. Создайте отчет FastReport.

    1. Перейдите в дизайнер системы по кнопке . В блоке [ Настройка системы ] ([ System setup ]) перейдите по ссылке [ Настройка отчетов ] ([ Report setup ]).
    2. Выполните действие [ Добавить отчет ] —>[ FastReport ] ([ New report ] —>[ FastReport ]).

    3. На панели свойств заполните свойства отчета:

      • [ Название отчета ] ([ Report title ]) — пользовательское название отчета (обязательное свойство). Отображается на соответствующей панели инструментов, которая зависит от установленных признаков [ Отображать в разделе ] ([ Show in the section list view ]), [ Отображать на странице записи ] ([ Show in the section record page ]), [ Отображать в аналитике раздела ] ([ Show in the section analytics view ]).
      • [ Раздел ] ([ Section ]) — выберите раздел, из которого планируется генерировать отчет (обязательное свойство). Например, чтобы отобразить отчет в разделе [ Контрагенты ] ([ Accounts ]), в выпадающем списке выберите соответствующий раздел.
      • Признак [ Отображать в разделе ] ([ Show in the section list view ]) — указывает необходимость отображения отчета в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов раздела.
      • Признак [ Отображать на странице записи ] ([ Show in the section record page ]) — указывает необходимость отображения отчета в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов страницы записи.
      • Признак [ Отображать в аналитике раздела ] ([ Show in the section analytics view ]) — указывает необходимость отображения отчета в выпадающем меню кнопки [ Отчеты ] ([ Reports ]) панели инструментов аналитики раздела. При установленном признаке позволяет использовать пользовательскую страницу дополнительной фильтрации записей для отчета.
      • [ Страница фильтрации ] ([ Filter page ]) — пользовательская страница дополнительной фильтрации записей для отчета. Свойство отображается при установленном признаке [ Отображать в аналитике раздела ] ([ Show in the section analytics view ]). Позволяет задать параметры фильтрации записей после выбора отчета в выпадающем меню кнопки [ Отчеты ] ([ Reports ]) аналитики раздела. Можно выбрать стандартную страницу фильтрации [ SimpleReportFilterPage ] или создать пользовательскую страницу фильтрации. Для пользовательской страницы фильтрации в качестве родительского объекта (обязательное свойство [ Родительский объект ] ([ Parent object ]) клиентской схемы) выберите схему BaseReportFilterPage пакета FastReport.

      Страница фильтрации [ SimpleReportFilterPage ] — клиентская схема, которая содержит реализацию стандартных простых фильтров.

      Параметры фильтрации, которые позволяет выбрать страница фильтрации SimpleReportFilterPage:

      • [ По выделенным записям ] ([ Selected records ]).
      • [ По отфильтрованным в разделе записям ] ([ Filtered records in list ]).
      • [ По всем записям без учета фильтрации ] ([ All records in list ]).
  2. Укажите источники данных.

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

      Данные, которые необходимо указать:

      • Перечень объектов.
      • Колонки объектов.
      • Связи колонок объектов, которые используются для получения данных.
      • Локализуемые строки (опционально).

      Шаблон, который необходимо использовать для указания источника данных, приведен ниже.

      Шаблон источника данных
      Code copied
      {
          "ProviderName": "YourProviderName",
          "Schemas": {
              "TableName1": {
                  "ColumnName1": {"DataValueType": DataValueType1},
                  ...,
                  "ColumnNameN": {"DataValueType": DataValueTypeN}
              },
              ...,
              "TableNameN": {
                  "ColumnName1": {"DataValueType": DataValueType1},
                  ...,
                  "ColumnNameN": {"DataValueType": DataValueTypeN}
              },
              "LocalizableStrings": {
                  "LocalizableString1": {"DataValueType": 1},
                  ...,
                  "LocalizableStringN": {"DataValueType": 1}
              }
          }
      }

      ProviderName — класс провайдера данных.

      Schemas — структура таблиц для шаблона отчета.

      TableName1...TableNameN — имена таблиц базы данных или виртуальных таблиц, колонки которых необходимо добавить в отчет.

      ColumnName1...ColumnNameN — имена колонок, которые необходимо добавить в отчет.

      DataValueType1...DataValueTypeN — типы данных соответствующих колонок ColumnName1...ColumnNameN.

      LocalizableStrings — локализуемые строки.

      LocalizableString1...LocalizableStringN — имена локализуемых строк отчета.

      "DataValueType": 1 — тип данных TEXT соответствующих локализуемых строк LocalizableString1...LocalizableStringN.

      DataValueType — параметр, который содержит значение из перечисления Terrasoft.core.enums.DataValueType. Перечисление Terrasoft.core.enums.DataValueType описано в Библиотеке .NET классов.

    2. На панели инструментов страницы настройки отчета нажмите [ Применить ] ([ Apply ]).
  3. Реализуйте провайдер данных отчета.

    Провайдер данных отчета — пользовательский класс на языке C#.

    1. Создайте схему типа [ Исходный код ] ([ Source code ]). Для этого воспользуйтесь инструкцией, которая приведена в статье Исходный код (C#).
    2. В дизайнере исходного кода реализуйте класс провайдера данных.

      • В дизайнере исходного кода добавьте пространство имен Terrasoft.Configuration или любое вложенное в него пространство имен.
      • Для класса добавьте атрибут [DefaultBinding] с необходимыми параметрами. Параметр Name совпадает с параметром YourProviderName, который был указан в источнике данных.
      • Создайте класс, который является наследником Terrasoft.Configuration.Reporting.FastReport.IFastReportDataSourceDataProvider.
      • Реализуйте методы класса провайдера данных.

        • GetLocalizableStrings(UserConnection) — метод, который локализует поля отчета.
        • ExtractFilterFromParameters(UserConnection, Guid, IReadOnlyDictionary) — метод, который добавляет фильтры интерфейса.
        • GetData(UserConnection, IReadOnlyDictionary) — метод, который возвращает значение типа Task<ReportDataDictionary>. Содержит реализацию логики получения данных отчета.
  4. Настройте шаблон отчета.

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

      В результате скачан файл в формате *.frx.

    2. Откройте шаблон отчета.

      1. Откройте дизайнер отчетов FastReport.

        Компоненты, которые необходимы для работы дизайнера отчетов FastReport:

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

        Разархивируйте *.zip-архив и запустите файл Terrasoft.Reporting.FastReport.Designer.exe.

      2. Выберите отчет FastReport, который планируется настроить. Для этого в блоке [ Open a Recent Item ] окна [ Welcome to FastReport ] нажмите на кнопку [ Open... ].

      3. Перейдите в каталог со скачанным отчетом (обычно это каталог Downloads), выберите предварительно скачанный *.frx-файл и нажмите на кнопку [ Open ].

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

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

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

    4. Сохраните шаблон отчета. Для этого в меню [ File ] панели инструментов нажмите на кнопку [ Save ].

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

      1. В блоке [ Загрузите настроенный шаблон отчета в Creatio ] ([ Import a file with the report template ]) рабочей области страницы настройки отчета нажмите на кнопку [ Загрузить шаблон ] ([ Upload template ]).

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

    В результате настроенный шаблон отчета загружен в Creatio.

Способы генерации отчета FastReport, которые зависят от настроек на странице настройки отчета:

  • Выпадающее меню кнопки [ Печать ] ([ Print ]) панели инструментов раздела.
  • Выпадающее меню кнопки [ Отчеты ] ([ Reports ]) панели инструментов аналитики раздела.
  • Кнопка [ Печать ] ([ Print ]) активной записи реестра раздела.
  • Выпадающее меню кнопки [ Печать ] ([ Print ]) панели инструментов страницы записи.

Отчет генерируется в формате *.pdf.

Если в реестре раздела не выбрана запись, то отчет не активен.

Чтобы сгенерировать отчет FastReport по нескольким записям раздела:

  1. Обновите страницу соответствующего раздела.
  2. Выберите несколько записей раздела.

    Способы выбора нескольких записей раздела:

    • В реестре раздела (на странице настройки отчета установлен признак [ Отображать в разделе ] ([ Show in the section list view ])). Для этого на панели инструментов раздела выполните действие [ Действия ] —> [ Выбрать несколько записей ] ([ Actions ] —> [ Select multiple records ]).

    • В аналитике раздела (на странице настройки отчета установлен признак [ Отображать в аналитике раздела ] ([ Show in the section analytics view ])).

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

        В результате откроется страница фильтрации.

      4. Отфильтруйте записи (опционально). Для этого на странице фильтрации выберите опцию [ По отфильтрованным в разделе записям ] ([ Filtered records in list ]).
      5. Для скачивания отчета нажмите на кнопку [ Создать отчет ] ([ Create report ]).

Создать отчет FastReport с изображением 

  1. Выполните шаги 1-4 алгоритма создания простого отчета FastReport.
  2. На шаге 4 настройте отображение изображения в шаблоне отчета.

    1. На вкладке [ Data ] панели свойств [ Data ] выполните [ Data Sources ] —> [ Creatio ] —> [ Data ] и кликните по элементу, который является изображением. Например, элемент [ Logo ], как представлено на рисунке ниже.

    2. В группе [ Design ] панели свойств [ Properties ] элемента, который является изображением, в выпадающем списке свойства [ BindableControl ] выберите значение "Picture".

    3. Добавьте элемент, который является изображением, в рабочую область дизайнера отчетов.

Настроить мультиязычие элементов интерфейса отчета FastReport 

Чтобы настроить мультиязычие элементов интерфейса отчета FastReport, используйте раздел [ Переводы ] ([ Translations ]) дизайнера системы. Работа с разделом [ Переводы ] ([ Translations ]) описана в статье Перевести элементы интерфейса в разделе [ Переводы ].

Особенности поиска элементов интерфейса отчета FastReport в разделе [ Переводы ] ([ Translations ]):

  • Для поиска ранее локализуемых строк отчета используйте шаблон ключа Configuration:НазваниеCхемы (например, Configuration:UsrContactDataSourceCode).
  • Для поиска полей отчета используйте шаблон ключа Configuration:НазваниеСхемы:НазваниеПоля.Value (например, Configuration:UsrContactDataSourceCode:LocalizableStrings.ReportTitle.Value).
  • Для поиска отображаемого названия отчета при установленых на странице настройки отчета признаках [ Отображать в разделе ] ([ Show in the section list view ]) и [ Отображать на странице записи ] ([ Show in the section record page ]) используйте шаблон ключа Configuration:НазваниеСхемы:Caption (например, Configuration:UsrContactDataSourceCode:Caption).
  • Для поиска отображаемого названия отчета при установленом на странице настройки отчета признаке [ Отображать в аналитике раздела ] ([ Show in the section analytics view ]) используйте шаблон ключа Data:SysModuleAnalyticsReport.Caption:ИдентификаторПоля (например, Data:SysModuleAnalyticsReport.Caption:d52e8b78-772b-77ee-3394-bdb3616d859a).

Если на странице настройки отчета установлен хотя бы один из признаков [ Отображать в разделе ] ([ Show in the section list view ]), [ Отображать на странице записи ] или [ Отображать в аналитике раздела ] ([ Show in the section analytics view ]), то обязательно выполняется перевод отображаемого названия отчета.

Привязать отчет FastReport к пакету 

  1. Перейдите в раздел [ Конфигурация ] ([ Configuration ]) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите [ Добавить ] —> [ Данные ] ([ Add ] —> [ Data ]).

  3. Выполните привязку данных. Для этого воспользуйтесь инструкцией, которая приведена в статье Привязать данные к пакету.

    Элементы, привязку которых необходимо выполнить:

    • FastReportTemplate_ReportName — шаблон отчета. Подключается по идентификатору отчета (колонка [Id] таблицы [FastReportTemplate] базы данных).
    • FastReportDataSource_ReportName — источник данных отчета. Подключается по идентификатору отчета (колонка [Id] таблицы [FastReportDataSource] базы данных).
    • SysModuleReport_ReportName — отчет. Подключается по идентификатору отчета (колонка [Id] таблицы [SysModuleReport] базы данных).
Создать простой отчет FastReport
Средний

Важно. В Creatio версии 8.0.3 будет прекращена поддержка функциональности отчетов FastReport.

Пример. На страницу раздела [ Контакты ] ([ Contacts ]) и страницу контакта добавить отчет [ Информация контакта ] ([ Contact Data ]).

Поля, которые содержит отчет [ Информация контакта ] ([ Contact Data ]):

  • [ ФИО ] ([ Full name ]) — имя контакта.
  • [ Дата рождения ] ([ Birthday ]) — дата рождения контакта.
  • [ Пол ] ([ Gender ]) — пол контакта.
  • [ Контрагент ] ([ Account ]) — контрагент, который связан с контактом.

1. Создать отчет 

  1. Перейдите в дизайнер системы по кнопке . В блоке [ Настройка системы ] ([ System setup ]) перейдите по ссылке [ Настройка отчетов ] ([ Report setup ]).
  2. Выполните действие [ Добавить отчет ] —>[ FastReport ] ([ New report ] —>[ FastReport ]).

  3. На панели свойств заполните свойства отчета:

    • [ Название отчета ] ([ Report title ]) — "Информация контакта" ("Contact Data").
    • [ Раздел ] ([ Section ]) — выберите "Контакты" ("Contacts").
    • Установите признак [ Отображать в разделе ] ([ Show in the section list view ]).
    • Установите признак [ Отображать на странице записи ] ([ Show in the section record page ]).
    • Установите признак [ Отображать в аналитике раздела ] ([ Show in the section analytics view ]).
    • [ Страница фильтрации ] ([ Filter page ]) — выберите "SimpleReportFilterPage".

2. Указать источники данных 

  1. В блоке [ Укажите источники данных для отчета ] ([ Specify data sources for the report ]) рабочей области страницы настройки отчета укажите источники данных.

    Данные, которые необходимо указать:

    • Перечень объектов.
    • Колонки объектов.
    • Связи колонок объектов, которые используются для получения данных.
    • Локализуемые строки (опционально).

    Исходный код источника данных ContactDataProvider приведен ниже.

    ContactDataProvider
    Code copied
    {
        "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}
            }
        }
    }

    ProviderName — класс провайдера данных.

    DataValueType — типы данных соответствующих колонок. 1 — тип данных TEXT. Перечисление Terrasoft.core.enums.DataValueType описано в Библиотеке .NET классов.

    LocalizableStrings — локализуемые строки.

  2. На панели инструментов страницы настройки отчета нажмите [ Применить ] ([ Apply ]).

3. Реализовать провайдер данных отчета 

  1. Перейдите в раздел [ Конфигурация ] ([ Configuration ]) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите [ Добавить ] —> [ Исходный код ] ([ Add ] —> [ Source code ]).

  3. В дизайнере исходного кода заполните свойства схемы:

    • [ Код ] ([ Code ]) — "UsrContactDataSourceCode".
    • [ Заголовок ] ([ Title ]) — "Информация контакта" ("Contact Data").

    Для применения изменений свойств нажмите [ Применить ] ([ Apply ]).

  4. Добавьте локализуемую строку, которая содержит заголовок отчета.

    1. В контекстном меню узла [ Локализуемые строки ] ([ Localizable strings ]) нажмите кнопку .
    2. Заполните свойства локализуемой строки:

      • [ Код ] ([ Code ]) — "ReportTitle".
      • [ Значение ] ([ Value ]) — "Информация контакта" ("Contact Data").
    3. Для добавления локализуемой строки нажмите [ Добавить ] ([ Add ]).
  5. Аналогично добавьте локализуемые строки, которые соответствуют полям отчета.

    Значения локализуемых строк, которые необходимо добавить, приведены в таблице ниже.

    Значения локализуемых строк
    [ Код ]
    ([ Code ])
    [ Значение ]
    ([ Value ])
    "FullNameLabel"
    "ФИО" ("Full name")
    "BirthdayLabel"
    "Дата рождения" ("Birthday")
    "GenderLabel"
    "Пол" ("Gender")
    "AccountLabel"
    "Контрагент" ("Account")
  6. В дизайнере исходного кода реализуйте логику работы класса провайдера данных для отчета.

    Исходный код схемы типа [ Исходный код ] ([ Source code ]) представлен ниже.

    UsrContactDataSourceCode
    Code copied
    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;
    
        /* Название класса провайдера данных для отчета, логику которого необходимо реализовать. Совпадает с названием ProviderName, который был указан на шаге 2. */
        [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);
            }
        }
    }
  7. На панели инструментов дизайнера исходного кода нажмите [ Опубликовать ] ([ Publish ]) для выполнения изменений на уровне базы данных.

4. Настроить шаблон отчета 

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

    В результате скачан файл ContactData.frx.

  2. Откройте шаблон отчета.

    1. Откройте дизайнер отчетов FastReport. Для этого разархивируйте *.zip-архив и запустите файл Terrasoft.Reporting.FastReport.Designer.exe.

    2. Выберите отчет FastReport, который планируется настроить. Для этого в блоке [ Open a Recent Item ] окна [ Welcome to FastReport ] нажмите на кнопку [ Open... ].

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

  3. Настройте шаблон отчета.

    Настроенный шаблон отчета [ Информация контакта ] ([ Contact Data ]) приведен на рисунке ниже.

  4. Сохраните шаблон отчета. Для этого в меню [ File ] панели инструментов нажмите на кнопку [ Save ].

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

    1. В блоке [ Загрузите настроенный шаблон отчета в Creatio ] ([ Import a file with the report template ]) рабочей области страницы настройки отчета нажмите на кнопку [ Загрузить шаблон ] ([ Upload template ]).

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

В результате настроенный шаблон отчета [ Информация контакта ] ([ Contact Data ]) загружен в Creatio.

Для переноса изменений между рабочими средами, привяжите отчет к пакету. Для этого воспользуйтесь инструкцией, которая приведена в статье Отчеты FastReport.

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера, обновите страницу раздела [ Контакты ] ([ Contacts ]).

В результате выполнения примера на страницу раздела [ Контакты ] ([ Contacts ]) добавлен отчет [ Информация контакта ] ([ Contact Data ]). Отчет доступен в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов раздела.

Отчет [ Информация контакта ] ([ Contact Data ]) имеет вид, который представлен на рисунке ниже.

Если в реестре раздела [ Контакты ] ([ Contacts ]) не выбрана запись, то отчет [ Информация контакта ] ([ Contact Data ]) не активен в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов.

В результате выполнения примера в аналитику раздела [ Контакты ] ([ Contacts ]) также добавлен отчет [ Информация контакта ] ([ Contact Data ]). Отчет доступен в выпадающем меню кнопки [ Отчеты ] ([ Reports ]) панели инструментов раздела.

В результате выполнения примера на страницу контакта также добавлен отчет [ Информация контакта ] ([ Contact Data ]). Отчет доступен в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов страницы контакта.

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

  1. Обновите страницу раздела [ Контакты ] ([ Contacts ]).
  2. Выберите несколько записей раздела.

    Способы выбора нескольких записей раздела:

    • В реестре раздела (на странице настройки отчета установлен признак [ Отображать в разделе ] ([ Show in the section list view ])). Для этого на панели инструментов раздела выполните действие [ Действия ] —> [ Выбрать несколько записей ] ([ Actions ] —> [ Select multiple records ]).

    • В аналитике раздела (на странице настройки отчета установлен признак [ Отображать в аналитике раздела ] ([ Show in the section analytics view ])).

      1. На панели инструментов раздела выполните действие [ Действия ] —> [ Выбрать несколько записей ] ([ Actions ] —> [ Select multiple records ]).
      2. Нажмите на кнопку .
      3. В выпадающем меню кнопки [ Отчеты ] ([ Reports ]) панели инструментов раздела выберите отчет [ Информация контакта ] ([ Contact Data ]).

        В результате откроется страница фильтрации.

      4. Отфильтруйте записи (опционально). Для этого на странице фильтрации выберите опцию [ По отфильтрованным в разделе записям ] ([ Filtered records in list ]).
      5. Для скачивания отчета нажмите на кнопку [ Создать отчет ] ([ Create report ]).

Отчет [ Информация контакта ] ([ Contact Data ]) по нескольким записям имеет вид, который представлен на рисунке ниже.

Создать отчет FastReport с изображением
Средний

Важно. В Creatio версии 8.0.3 будет прекращена поддержка функциональности отчетов FastReport.

Пример. На страницу раздела [ Контрагенты ] ([ Accounts ]) и страницу контрагента добавить отчет [ Информация контрагента ] ([ Account Info ]).

Поля, которые содержит отчет [ Информация контрагента ] ([ Account Info ]):

  • [ Название контрагента ] ([ Name ]) — название контрагента.
  • [ Логотип ] ([ Logo ]) — логотип контрагента.

1. Создать отчет 

  1. Перейдите в дизайнер системы по кнопке . В блоке [ Настройка системы ] ([ System setup ]) перейдите по ссылке [ Настройка отчетов ] ([ Report setup ]).
  2. Выполните действие [ Добавить отчет ] —>[ FastReport ] ([ New report ] —>[ FastReport ]).

  3. На панели свойств заполните свойства отчета:

    • [ Название отчета ] ([ Report title ]) — "Информация контрагента" ("Account Info").
    • [ Раздел ] ([ Section ]) — выберите "Контрагенты" ("Accounts").
    • Установите признак [ Отображать в разделе ] ([ Show in the section list view ]).
    • Установите признак [ Отображать на странице записи ] ([ Show in the section record page ]).

2. Указать источники данных 

  1. В блоке [ Укажите источники данных для отчета ] ([ Specify data sources for the report ]) рабочей области страницы настройки отчета укажите источники данных.

    Данные, которые необходимо указать:

    • Перечень объектов.
    • Колонки объектов.
    • Связи колонок объектов, которые используются для получения данных.
    • Локализуемые строки (опционально).

    Исходный код источника данных AccountInfoProvider приведен ниже.

    AccountInfoProvider
    Code copied
    {
        "ProviderName": "AccountInfoProvider",
        "Schemas": {
            "Data": {
                "Name": {"DataValueType": 1},
                "Logo": {"DataValueType": 14}
            },
            "LocalizableStrings": {
                "ReportTitle": {"DataValueType": 1},
                "NameLabel": {"DataValueType": 1},
                "LogoLabel": {"DataValueType": 1}
            }
        }
    }

    ProviderName — класс провайдера данных.

    DataValueType — типы данных соответствующих колонок. Перечисление Terrasoft.core.enums.DataValueType описано в Библиотеке .NET классов.

    • 1 — тип данных TEXT.
    • 14 — тип данных IMAGE.

    LocalizableStrings — локализуемые строки.

  2. На панели инструментов страницы настройки отчета нажмите [ Применить ] ([ Apply ]).

3. Реализовать провайдер данных отчета 

  1. Перейдите в раздел [ Конфигурация ] ([ Configuration ]) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите [ Добавить ] —> [ Исходный код ] ([ Add ] —> [ Source code ]).

  3. В дизайнере исходного кода заполните свойства схемы:

    • [ Код ] ([ Code ]) — "UsrAccountInfoSourceCode".
    • [ Заголовок ] ([ Title ]) — "Информация контрагента" ("Account Info").

    Для применения изменений свойств нажмите [ Применить ] ([ Apply ]).

  4. Добавьте локализуемую строку, которая содержит заголовок отчета.

    1. В контекстном меню узла [ Локализуемые строки ] ([ Localizable strings ]) нажмите кнопку .
    2. Заполните свойства локализуемой строки:

      • [ Код ] ([ Code ]) — "ReportTitle".
      • [ Значение ] ([ Value ]) — "Информация контрагента" ("Account Info").
    3. Для добавления локализуемой строки нажмите [ Добавить ] ([ Add ]).
  5. Аналогично добавьте локализуемые строки, которые соответствуют полям отчета.

    Значения локализуемых строк, которые необходимо добавить, приведены в таблице ниже.

    Значения локализуемых строк
    [ Код ]
    ([ Code ])
    [ Значение ]
    ([ Value ])
    "NameLabel"
    "Название контрагента" ("Name")
    "LogoLabel"
    "Логотип" ("Logo")
  6. В дизайнере исходного кода реализуйте логику работы класса провайдера данных для отчета.

    Исходный код схемы типа [ Исходный код ] ([ Source code ]) представлен ниже.

    UsrAccountInfoSourceCode
    Code copied
    namespace Terrasoft.Configuration
    {
        using System;
        using System.Collections.Generic;
        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;
    
        /* Название класса провайдера данных для отчета, логику которого необходимо реализовать. Совпадает с названием ProviderName, который был указан на шаге 2. */
        [DefaultBinding(typeof(IFastReportDataSourceDataProvider), Name = "AccountInfoProvider")]
        public class AccountInfoProvider : IFastReportDataSourceDataProvider
        {
            /* Название схемы c исходным кодом. */
            private readonly string _resourceManagerName = "UsrAccountInfoSourceCode";
            private readonly string[] _localizableStringNames = new[] {
                "ReportTitle",
                "NameLabel",
                "LogoLabel"
            };
    
            /* Заполнение колонок в отчете. */
            private IEnumerable<IReadOnlyDictionary<string, object>> GetData(UserConnection userConnection, IEntitySchemaQueryFilterItem filter) {
                var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Account");
                /* Добавление колонок в запрос. */
                var nameColumn = esq.AddColumn("Name").OrderByDesc();
                var logoColumn = esq.AddColumn("AccountLogo.Data");
                /* Добавление созданного фильтра. */
                esq.Filters.Add(filter);
                return esq.GetEntityCollection(userConnection)
                    .Select(x => new Dictionary<string, object> {
                        ["Name"] = x.GetTypedColumnValue<string>(nameColumn.Name),
                        ["Logo"] = x.GetStreamValue(logoColumn.Name)?.ToArray()
                    });
            }
            
            /* Локализация заголовков отчета. */
            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, IReadOnlyDictionary<string, object> parameters) {
                return parameters.ExtractEsqFilterFromReportParameters(userConnection, "Account") ?? throw new Exception();
            }
    
            /* Получить данные. */
            public Task<ReportDataDictionary> GetData(UserConnection userConnection, IReadOnlyDictionary<string, object> parameters) {
                var filter = ExtractFilterFromParameters(userConnection, parameters);
                var result = new ReportDataDictionary {
                    /* Заполнить колонки в отчете. */
                    ["Data"] = GetData(userConnection, filter),
                    ["LocalizableStrings"] = GetLocalizableStrings(userConnection)
                };
                return Task.FromResult(result);
            }
        }
    }
  7. На панели инструментов дизайнера исходного кода нажмите [ Опубликовать ] ([ Publish ]) для выполнения изменений на уровне базы данных.

4. Настроить шаблон отчета 

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

    В результате скачан файл AccountInfo.frx.

  2. Откройте шаблон отчета.

    1. Откройте дизайнер отчетов FastReport. Для этого разархивируйте *.zip-архив и запустите файл Terrasoft.Reporting.FastReport.Designer.exe.

    2. Выберите отчет FastReport, который планируется настроить. Для этого в блоке [ Open a Recent Item ] окна [ Welcome to FastReport ] нажмите на кнопку [ Open... ].

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

  3. Настройте шаблон отчета.

    Чтобы изображение отобразилось в сформированном отчете:

    1. На вкладке [ Data ] панели свойств [ Data ] выполните [ Data Sources ] —> [ Creatio ] —> [ Data ] и кликните по элементу [ Logo ].

    2. В группе [ Design ] панели свойств [ Properties ] элемента [ Logo ] в выпадающем списке свойства [ BindableControl ] выберите значение "Picture".

    3. Добавьте элемент [ Logo ] в рабочую область дизайнера отчетов.

    Настроенный шаблон отчета [ Информация контрагента ] ([ Account Info ]) приведен на рисунке ниже.

  4. Сохраните шаблон отчета. Для этого в меню [ File ] панели инструментов нажмите на кнопку [ Save ].

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

    1. В блоке [ Загрузите настроенный шаблон отчета в Creatio ] ([ Import a file with the report template ]) рабочей области страницы настройки отчета нажмите на кнопку [ Загрузить шаблон ] ([ Upload template ]).

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

В результате настроенный шаблон отчета [ Информация контрагента ] ([ Account Info ]) загружен в Creatio.

Для переноса изменений между рабочими средами, привяжите отчет к пакету. Для этого воспользуйтесь инструкцией, которая приведена в статье Отчеты FastReport.

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера, обновите страницу раздела [ Контрагенты ] ([ Accounts ]).

В результате выполнения примера на страницу раздела [ Контрагенты ] ([ Accounts ]) добавлен отчет [ Информация контрагента ] ([ Account Info ]). Отчет доступен в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов раздела.

Отчет [ Информация контрагента ] ([ Account Info ]) имеет вид, который представлен на рисунке ниже.

Если в реестре раздела [ Контрагенты ] ([ Accounts ]) не выбрана запись, то отчет [ Информация контрагента ] ([ Account Info ]) не активен в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов.

В результате выполнения примера на страницу контрагента также добавлен отчет [ Информация контрагента ] ([ Account Info ]). Отчет доступен в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов страницы контрагента.

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

  1. Обновите страницу раздела [ Контрагенты ] ([ Accounts ]).
  2. Выберите несколько записей раздела. Для этого на панели инструментов раздела выполните действие [ Действия ] —> [ Выбрать несколько записей ] ([ Actions ] —> [ Select multiple records ]).

  3. В реестре раздела выберите несколько контрагентов.
  4. Выберите отчет [ Информация контрагента ] ([ Account Info ]) в выпадающем меню кнопки [ Печать ] ([ Print ]) панели инструментов раздела.

Отчет [ Информация контрагента ] ([ Account Info ]) по нескольким записям имеет вид, который представлен на рисунке ниже.