Представляем вашему вниманию долгожданное обновление для всей линейки продуктов Delphi и Lazarus. С версией 2025.2 вам становятся доступными: удобный инструмент для настройки водяных знаков, обновление серверных компонентов, новый механизм диалоговых страниц WEB отчета, новый объект отчета TfrxDeviceCommand для RFID меток, большие изменения в движке отчетов, улучшения экспортов и транспортов, поддержка тем и многое другое.
Обновите свой продукт и откройте новые горизонты возможностей вместе с нами!
Новые возможности FastReport VCL
Удобный инструмент для настройки водяных знаков
Добавлена возможность создавать настраиваемые водяные знаки для страниц отчета (Watermarks). Водяной знак часто используется для защиты или обозначения типа документа. Мы добавили удобный инструмент, который без лишних усилий позволяет настраивать водяные знаки для каждой страницы отчета.
Любая страница отчета может иметь несколько водяных знаков, позволяя настроить их индивидуально для печати, вывода или экспорта. Водяные знаки могут использовать как картинку, так и текст с большим набором настраиваемых параметров (вращение текста, стиль). Водяные знаки можно настраивать как в дизайнере отчетов, так и в предпросмотре.
Обновление серверных компонентов
С релизом 2025.2 все доступные фильтры экспортов из FastReport VCL теперь доступны и в серверных компонентах. Используйте потенциал всех этих форматов в своём WEB-приложении.
Новый механизм диалоговых страниц WEB отчета
Полностью переработанный механизм позволяет использовать контейнерные объекты такие как PageControl и группы, а также расширять функционал доступных контролов диалоговой страницы для WEB-диалогов.
Для диалоговых страниц в этом обновлении мы расширили поддержку новых компонентов. А именно были добавлены контролы диалоговой страницы, которые ранее не были доступны в WEB.
Список новых контролов диалоговой формы:
Date picker – выбор даты
DBComboBox – выпадающий список связанный с источником данных
List Box – список с выбором
CheckListBox – список с выбором (флажками)
MaskEdit (без маски) – поле ввода
Password edit – Поле ввода для пароля
PageControl – создание страниц с вкладками
GroupControl – панель группировки
Panel – панель
Также для своих проектов вы теперь можете применять настраиваемый HTTP заголовок.
Новый объект отчета TfrxDeviceCommand
Данный невизуальный объект переназначен для передачи команд на устройства (экспорты), которые могут обрабатывать эти команды. В текущей версии объект содержит класс настроек для RFID меток.
RFID метки передают невизуальные данные в ZPL экспорт чтобы записать эти данные на чип с использованием специализированного оборудования. Класс RFID меток имеет свой редактор и набор свойств для точной настройки записываемой информации. Подробнее вы можете почитать в нашей статье.
Читать статью
Объект отчета TfrxPDFView теперь позволяет настраивать диапазон выводимых страницы. Задать значения можно через выражения в свойстве TfrxPDFView.PagesRange. Таким образом вам доступна фильтрация выводимых страниц для PDF документа.
Изменения в движке отчетов
Комбинирование техник вывода объектов
Новые изменения в движке отчетов позволяют комбинировать разные техники вывода объектов давая свободу в вариативности создания сложных отчетов. Изменена работа механизма выравнивания по нижней границе (baBottom) растущего бэнда, когда один из объектов бэнда разбивается на несколько частей (страниц). В старой реализации объект со свойством baBottom выводится на первой же части разрыва данных.
Новый механизм работы такого отчета корректирует объекты с baBottom, помещая их на последнюю часть данных (в конец бэнда). Обратим ваше внимание, что такое поведение движка отчетов считается корректным и его следует учитывать при разработке отчетов.
Поддержка растягивания smMaxHeight для статической таблицы (только строки AllowSplit)
Растягивание smMaxHeight в таблице работает иначе, чем в объектах. Нужная высота устанавливается для всей таблицы на бэнде. Затем распределяется по строкам с установленным свойством AllowSplit=True и отключенным AutoSize=False. При этом также учитываются строки со значением MaxHeight. Такой подход позволяет выбирать, какие строки таблицы можно растягивать для заполнения пустого пространства, а какие нет.
Новое поведение разбиения объекта отчета TfrxRichView
Объект RichText позволяет использовать таблицы, картинки и другие объекты, которые невозможно разбить для определенного размера. Такие объекты иногда могли создавать целые неразбиваемые блоки контента, которые выходили за пределы страницы. В текущей версии разбиение TfrxRichView переработано и работает выборочно в зависимости от ситуации.
Поиск наименьшей разбиваемой части. Если в объекте встречается часть, которая не может поместиться на новую страницу, и она неразбиваемая (объект, или строка таблицы больше высоты всего листа). То для такой части теперь находится наименьшая «неразбиваемая» часть и выводится как есть. Разбиение при этом не прекращается. Если есть другие части, то они тоже будут разбиваться и выводиться. Основное отличие от старого механизма, это поиск наименьшего значения для неразбиваемой части и продолжение построения. Ранее весь контент попадал в «неразбиваемую» часть и разделение на этом прекращалась, часть текста при этом могла потеряться.
Поиск наибольшей разбиваемой части. Если встречается часть, которая не может поместиться на новую страницу, но она разбиваемая как та же таблица, то будет выполнен поиск наибольшей разбиваемой части и продолжение вывода.
Дизайнер отчетов
Добавлена поддержка темезации (Runtime Themes)
Дизайнер отчетов и его компоненты были адаптированы к поддержке тем, как системных, так и пользовательских. Теперь дизайнер отчета всегда будет в одном стиле с вашим приложением!
В версии Rad Studio 12.3 была улучшена работа с мониторами, имеющими высокий масштаб отображения. Это изменение направлено на повышение качества визуализации и удобства использования интерфейса в среде разработки при работе на мониторах с высоким разрешением и настройками масштабирования.
В этом обновлении был переработан редактор диалогов в дизайнере отчетов. Теперь это фиксированное рабочие пространство, как и у страницы отчетов. Позицию диалога можно менять через инспектор объектов.
Доработан Code completion в окне редактирования кода отчета. Для вашего удобства было добавлено всплывающее меню для окна watch list.
Помимо этого, мы также переработали окно «Опции дизайнера» для наилучшей поддержки небольших разрешений экрана.
Экспорты и транспорты
В экспортах PDF и SVG реализована поддержка символов определенных пользователем (EUDC). Также улучшено выравнивание RTL текста с лигатурами.
Добавлена поддержка ZUGFeRD 2.3 с используемыми профилями: “MINIMUM”,” BASIC WL”, ”BASIC”, ”EN 16931”, ”EXTENDED”, ”XRECHNUNG”. Пример с включением данных для этого формата вы можете найти в InvoiceDemo, которое идёт в поставке с продуктом.
В новой версии были усовершенствованы механизмы экспорта в форматы XLSX и DOCX. Это позволило повысить качество генерируемых документов и расширить возможности их настройки.
Транспорт e-mail (SMTP) улучшен нативной поддержкой TLS\STARTTLS и поддержкой XOAUTH авторизации. Используйте защищённые каналы для отправки ваших отчетов.
FastReport Lazarus
Кроме фундаментальных изменений, которые вошли в VCL и Lazarus версию, FastReport для Lazarus получил поддержку мониторов высокого разрешения (HiDPI).
FastCube VCL и FMX
В VCL версии FastCube все контролы TTreeView были заменены на TfrTreeView. Все версии получили индикацию фильтрации в списке доступных полей.
FMX версия получила возможность сохранения Custom Filter и Custom Group, а также ряд улучшений и исправлений.
FastQueryBuilder
Добавили поддержку мониторов высокого разрешения (HiDPI).
FastScript
В этом обновлении мы реализовали поддержку Android. Данное нововведение работает только при компиляции со строками, которые индексируются с единицы. Вы можете использовать всю мощь скриптового движка в ваших мобильных Android приложениях.
Добавлена поддержка классов работы с XML и JSON. Подробнее о том, как работать с этими форматами на примере загрузки данных в отчет, вы можете почитать в этой статье.
Читать статью
FastReport VCL Controls
Для контрола TfrShellTreeView появилась возможность создавать пользовательские узлы и ссылки быстрого доступа к другим узлам. Как настроить TfrShellTreeView и добавить пользовательские узлы можно прочитать в нашей статье.
Читать статью
Установщик
Теперь вы можете устанавливать наши продукты с поддержкой Android.
А также была добавлена поддержка установки пакетов на 64-битную версию IDE Embarcadero RAD Studio 12.3.
Полный список изменений версия 2025.2
========================
VCL.Core
[Localization]- исправлена сортировка в LocalizationEditor;
VCL.Controls
[Engine]+ добавлена возможность создавать кастомную структуру рутовых Shell Node и обычных Node;- в smartMemo исправлена поддержка HiDPI;- исправлено поведение, при котором контрол не масштабируется при назначении Parent, когда csFreeNotification установлен в ComponentState;- исправлены некоторые недочёты в отрисовке TfrTreeView и TfrShellTreeView;
[UI]- для tfrTreeView исправлена отрисовка кастомным цветом и в состояние disabled;
Lazarus.Controls
[Engine]+ добавлена возможность создавать кастомную структуру рутовых Shell Node и обычных Node;- в smartMemo исправлена поддержка HiDPI;
[UI]- для tfrTreeView исправлена отрисовка кастомным цветом и в состояние disabled;- реализована поддержка HiDPI для Lazarus;- исправлены некоторые недочёты в отрисовке TfrTreeView и TfrShellTreeView;
VCL.FastCube
[UI]+ в список доступных полей добавлена индикация фильтрации;+ добавлена возможность сохранения Custom Filter и Custom Group;* TreeView заменен на TfrTreeView;- исправлена локализация панели инструментов FastCube;
FMX.FastCube
[UI]+ в список доступных полей добавлена индикация фильтрации;+ добавлено удаление ActivePopup в TfcxSliceGrid.FullUpdate;* TreeView заменен на TfrTreeView;- исправлена локализация панели инструментов FastCube;- исправлена некорректная работа формы TfcxRangesEditor;- исправлена проблема позиционирования и видимости кнопок «OK», «Cancel»;- исправлена ошибка FastCube FMX в редакторе правил выбора;- исправлена работа incremental search в выпадающих списках;
[Engine]+ добавлена возможность сохранения Custom Filter и Custom Group;- исправлена ошибка при клике в области список Top-N фильтров после зануления TfcxSliceGrid.Slice := nil;
Lazarus.FastCube
[UI]+ в список доступных полей добавлена индикация фильтрации;* TreeView заменен на TfrTreeView;- исправлена локализация панели инструментов FastCube;
VCL.FastQueryBuilder
[UI]+ добавлена первая версия HiDPI;
Lazarus.FastQueryBuilder
[UI]+ добавлена первая версия HiDPI;
VCL.FastScript
[Engine]+ добавлена поддержка XML и JSON в FastScript;* улучшение TfsTree путём замены TTreeView на TfrTreeView;- исправлена ошибка в TfsScript.Destroy, которая могла привести к вылету;
FMX.FastScript
[Engine]+ добавлена поддержка Android;- исправлена ошибка в TfsScript.Destroy, которая могла привести к вылету;
Lazarus.FastScript
[Engine]+ добавлена поддержка XML и JSON в FastScript;* улучшение TfsTree путём замены TTreeView на TfrTreeView;- исправлена ошибка в TfsScript.Destroy, которая могла привести к вылету;- исправлен пакет fs_ibx для компиляции под Lazarus;
VCL.FastReport
[Preview]+ исправлено сворачивание при Application.MainFormOnTaskbar = True;
[Engine]+ Добавлена возможность настраивать водяные знаки страницам отчета;* изменен механизм разделения RichView, добавлено определение минимальной неразрывной части;- исправлен HTMLView при Page.EndlessHeight;- исправлена ошибка "Class not found" при использовании свойства UseFileCache с пустыми страницами в отчете;- исправлена функция frxDecompressStream;- исправлена ошибка с неверным значением в макросах CopyName;- исправлен экспорт дат и времен в XLSX;- исправлено разделение компонента RichView с пустой строкой в конце;- исправлено обновление границ SVG;- исправлен порядок загрузки таблицы 'hmtx' TTF шрифтов;- исправлена ошибка, при которой переименованный набор данных не изменял имя пользователя по умолчанию;- исправлена ошибка, из-за которой диалог печати сбрасывал настройки при перемещении диалога печати на дополнительный экран;- исправлен размер подписи для невизуальных компонентов;- для smartMemo исправлена поддержка HiDPI;- исправлено поведение бэнда с дополнительной высотой;- исправлена ошибка доступа к памяти при использовании внешнего DBX-подключения;- исправлена ошибка при печати вложенного отчета с несколькими столбцами на странице;- исправлено отсутствие конца строки в CellData.Text;- исправлена ошибка Memo AutoWidth с макросами, такими как TotalPages;- исправлена ошибка, при которой некоторые события таблицы срабатывали дважды;- исправлен baBottom, когда объект разбивается на несколько страниц, а также добавлена поддержка smMaxHeight для статической таблицы (только строки AllowSplit);- исправлена ошибка с ошибкой округления высоты разрыва бэнда;- исправлена левая координата подотчета при переходе на новую страницу;- исправлены пакеты AnyDAC продукта FastReport так, чтобы они автоматически устанавливались на RAD Studio XE3 и более старых IDE;- исправлена ошибка, когда макросы обновляются в design time;- исправлен режим выбора дуплекса;- исправлено поведение baBottom и smMaxHeight в нижнем колонтитуле страницы;- исправление, которое очищает синглтон ParentForm, когда родительская форма закрывается не из компонента отчета;
[Exports]+ улучшен экспорт rtl текста в pdf;+ добавлен экспорт внешних символов;+ добавлена поддержка ZUGfERD 2.3 в PDF экспорте;- убрано предупреждение компилятора;- исправлен экспорт длинных HTMLView;- исправлено формирование метаданных PDF/A;- исправлен pdf с ZUGFerd;- исправлен неверный переход фокуса ввода по Tab в диалогах экспорта;- исправлен числовой формат в XLS фильтре экспорта;- исправлен размер символов при подстановке в SVG и PDF экспортах;- удален плавающий якорь для таблицы docx, заменен на пустую строку;
[Client-server]+ добавлены новые контролы диалоговой формы: Date picker, DBComboBox, ListBox, CheckListBox, MaskEdit (без маски), Password edit, PageControl, GroupControl, Panel;+ добавлена возможность использования настраиваемого заголовка HTTP в клиент-серверных компонентах;* переработан движок формирования диалогов, поддержка вложенных контролов, возможность расширения своими контролами;* обновлены экспорты для клиент-серверных компонентов;- исправлена ошибка при работе с параметрами и диалогами;
[Designer]+ улучшена отрисовка и функционал элементов дизайнера в темах VCL;+ добавлено всплывающее меню для watch list окон в дизайнере отчетов;* переработано окно «Дизайн -> Опции» для небольших разрешений экрана;* переработан редактор диалогов в дизайнере отчетов;- исправлена ошибка у RichEditor при старых версиях msftedit.dll;- исправлено масштабирование диалогов (TfrxDialogPage);- исправлено TfrxLabel при AutoSize = True;- исправлена работа TfrxDesigner.DefaultFont при HiDPI;- исправлена работа TfrxDialogPage на дополнительном экране;- исправлено поведение редактирования штрихкодов в дизайнере отчетов через инспектор объектов;- исправлена работа Code completion во вложенных процедурах и функциях в скрипте, а также в скрипте при наличии выражений конкатенации строк;- исправлено поведение подсказок в окне кода;- исправлен стиль меню для дизайнера отчетов в RAD 12.2 в design time;
[Other]+ добавлена возможность переопределить форму поиска;* обновлены румынские ресурсы;- исправлена компиляция InvoiceDemo;- исправлен пример CustomScrollsDemo;
[Report object]+ добавлена поддержка одностраничного TIFF в TfrxPictureView;+ добавлен объект для RFID-Меток (TfrxDeviceCommand);+ реализован список отображаемых страниц PDF документа (Range) в TfrxPDFView;- исправлена совместимость с HTML Viewer;- исправлена отрисовка штрихкода при ((Rotation > 0) и (WideBarRatio > 2));- исправлен дефолтный размер шрифта для верхней надписи у штрихкодов при HiDPI;- исправлено поведение компонента HTMLView, когда ширина colgroup переопределяет настройки ширины тега td;- исправлено построение отчётов с RFID;- исправлен неправильный клип в RichView;- исправлена надпись у двумерных баркодов;- исправлена надпись у двумерных баркодов;- исправлен пресет "Swiss QRCode" для штрихкода QRCode;
FMX.FastReport
[Engine]- исправлена ошибка «Class not found» при использовании свойства UseFileCache с пустыми страницами в отчете;- исправлен перенос поворотного текста при экспорте в PDF;- исправлен экспорт дат и времен в XLSX;
[Exports]- убрано предупреждение компилятора;- исправлен WordWrap в PDF экспорте с простой визуализацией текста;
[Designer]- исправлен редактор заголовка группы;
Lazarus.FastReport
[Engine]+ Добавлена возможность настраивать водяные знаки страницам отчета;- исправлен HTMLView при Page.EndlessHeight;- исправлена ошибка «Class not found» при использовании свойства UseFileCache с пустыми страницами в отчете;- исправлена функция frxDecompressStream;- исправлена ошибка с неверным значением в макросах CopyName;- исправлен экспорт дат и времен в XLSX;- исправлен порядок загрузки таблицы 'hmtx' TTF шрифтов;- исправлена ошибка, при которой переименованный набор данных не изменял имя пользователя по умолчанию;- исправлена ошибка, из-за которой диалог печати сбрасывал настройки при перемещении диалога печати на дополнительный экран;- исправлена ошибка при создании TfrxComboEdit под Lazarus;- исправлен размер подписи для невизуальных компонентов;- для smartMemo исправлена поддержка HiDPI;- исправлено поведение бэнда с дополнительной высотой;- исправлена утечка памяти при экспорте PDF в Linux;- исправлена ошибка, когда макросы обновляются в design time;- исправлен режим выбора дуплекса;- исправлено поведение baBottom и smMaxHeight в нижнем колонтитуле страницы;- исправление, которое очищает синглтон ParentForm, когда родительская форма закрывается не из компонента отчета;
[Exports]+ улучшен экспорт RTL текста в PDF;+ добавлен экспорт внешних символов;- убрано предупреждение компилятора;- исправлен экспорт длинных HTMLView;- исправлено формирование метаданных PDF/A;- исправлен PDF с ZUGFerd;- исправлен PDF экспорт при HiDPI;- исправлены диалоги экспортов при HiDPI;- исправлено инвертирование картинок в ZPL экспорте;
[Client-server]+ добавлены новые контролы диалоговой формы: Date picker, DBComboBox, ListBox, CheckListBox, MaskEdit (без маски), Password edit, PageControl, GroupControl, Panel;+ добавлена возможность использования настраиваемого заголовка HTTP в клиент-серверных компонентах;* переработан движок формирования диалогов, поддержка вложенных контролов, возможность расширения своими контролами;* обновлены экспорты для клиент-серверных компонентов;- исправлена ошибка при работе с параметрами и диалогами;
[Designer]- исправлена ошибка у RichEditor при старых версиях msftedit.dll;- исправлено масштабирование диалогов (TfrxDialogPage);- исправлено TfrxLabel при AutoSize = True;- улучшена отрисовка и функционал элементов дизайнера в темах VCL;
[Other]+ добавлена возможность переопределить форму поиска;
[Report object]+ добавлен объект для RFID-Меток (TfrxDeviceCommand);- исправлено поведение компонента HTMLView, когда ширина colgroup переопределяет настройки ширины тэга «td»;- исправлена надпись у двумерных баркодов;- исправлена совместимость с HTML Viewer;- исправлено создание композитных штрихкодов;
[Preview]- исправлено превью при HiDPI.
С релизом 2025.2 подписка на Ultimate .NET стала еще выгодней! Все владельцы лицензии получили дополнительный плагин, который позволяет импортировать документы Microsoft Word (.docx). При открытии такого файла он преобразуется в шаблон отчета FastReport .NET (.frx). Стоимость подписки на Ultimate .NET осталась прежней.
Ввиду больших отличий в форматах полное соответствие двух документов не всегда возможно. Однако, данный плагин позволяет значительно сократить время создания шаблона на основе существующего docx-файла. На данный момент наш плагин не поддерживает: подсветку фона части строки, шейпы (Shapes), а также вложенную векторную графику Vector Markup Language (VML) и OLE объекты.
Чтобы уже сейчас начать использовать этот плагин в своём бизнес-решении обновите свою лицензию до версии 2025.2 в личном кабинете. Затем по инструкции ниже зарегистрируйте dll в FastReport, либо подключите nuget пакет FastReport.Plugins.OOXMLImport.
Об особенностях работы импорта и как подключить плагин, можно прочитать в статье.
Читать статью
Отличные новости для владельцев FastReport VCL и FastReport .NET лицензии Single!
Только до 30 апреля вы можете продлить свою лицензию с внушительной скидкой 50%.
Это отличный повод снова получить доступ ко всем свежим обновлениям, улучшениям и технической поддержке.
К тому же, вы экономите значительную сумму — от 20 000 рублей!
Почему это важно:
Снова с нами — продолжайте использовать FastReport с максимальной эффективностью.
Никаких рисков — продление гарантирует корректную работу и безопасность.
Максимум пользы — оставайтесь в курсе всех новых функций и улучшений.
Не откладывайте на потом — специальное предложение действует всего несколько недель! Напишите нам на sales@fastreport.ru, чтобы воспользоваться им.
Встречайте новый релиз 2025.2 для вариантов поставок FastReport .NET: WinForms, WPF, Avalonia, Mono, WEB, Ultimate. В этом обновлении вас ждёт поддержка .NET 9, библиотека для выполнения скриптов на языке C#, плагин импорта документов из Word, коннектор к Apache Ignite, улучшения дизайнера и экспортов, а также новые функции в WebReport.
Не упустите возможность обновить FastReport .NET и расширить свой функционал!
Импорт документов из Word
В наборе компонентов FastReport .NET Ultimate появился плагин, который позволяет импортировать документы Microsoft Word (.docx). При открытии такого файла он преобразуется в шаблон отчета FastReport .NET (.frx).
Ввиду больших отличий в форматах полное соответствие двух документов не всегда возможно. Однако, данный плагин позволяет значительно сократить время создания шаблона на основе существующего docx-файла.
На данный момент наш плагин не поддерживает: подсветку фона части строки, шейпы (Shapes), а также вложенную векторную графику Vector Markup Language (VML) и OLE объекты. Об особенностях работы импорта и как подключить плагин, можно прочитать в статье.
Читать статью
Поддержка .NET 9
Эта платформа повышает производительность приложений и добавляет множество новых возможностей для ваших проектов. В этом обновлении появилась поддержка .NET 9 для:
FastReport .NET,
FastReport.Core,
FastReport.Core.Skia,
FastReport.WPF,
FastReport.Avalonia,
FastReport.Web,
FastReport.Web.Skia,
FastReport.Blazor.Wasm.
Мы отказались от бинарной сериализации. BinaryFormatter стал причиной целого ряда проблем с безопасностью и Microsoft в .NET 9 отказались от его использования. Наша команда также убрала класс BinaryFormatter из исходного кода. Подробнее об этом можно прочитать по этой ссылке.
Узнать больше
Улучшения дизайнера отчетов
Также в этой версии были внедрены несколько полезных функций, упрощающих работу с отчётами.
Теперь в инспекторе объектов можно быстро копировать данные из списка свойств объекта с помощью горячих клавиш Ctrl + C. Это поможет легко переносить свойства объектов между различными частями документа или даже между разными отчётами.
Кроме того, появилась возможность копировать итоги и параметры с сохранением иерархии вложенности. Это означает, что при копировании сложных структур данных их первоначальная организация будет сохранена, что позволяет избежать необходимости вручную восстанавливать структуру после копирования.
Подключение к Apache Ignite и РЕД Квант
С этим обновлением был добавлен новый плагин, который значительно упрощает процесс работы с базами данных Apache Ignite и РЕД Квант при создании отчётов. Этот плагин позволяет напрямую подключать отчёты к указанным базам данных, обеспечивая удобный доступ к необходимым данным для анализа и визуализации.
Коннектор Apache Ignite реализован на основе .NET Thin Client Ignite.NET. Он предоставляет возможность подключения к кластерам Apache Ignite, работы с кэшами (включая SQL-таблицы) и обработки различных типов данных.
Кроме того, коннектор поддерживает подключение к одному или нескольким узлам Apache Ignite. Адреса узлов указываются в формате хост:порт и разделяются запятыми. Подключение возможно как с аутентификацией (если authenticationEnabled используется в конфигурации), так и без неё.
В коннекторе поддерживается работа с кэшами, созданными как ключ-значение, так и с SQL-таблицами. Для кэшей с метаданными QueryEntity поддерживаются операции получения списка полей и их типов данных. Подробнее можно прочитать в статье.
Читать статью
Улучшения окна предварительного просмотра
В OutlineControl мы добавили удобные кнопки с иконками для сворачивания и разворачивания. Эти кнопки были и раньше, но без иконок.
Помимо этого, были добавлены свойства, которые позволяют изменять ширину и высоту полос прокрутки в окне предварительного просмотра.
Улучшения экспортов
Добавлен экспорт форматов чисел, валюты, даты, времени и процентов в OpenOffice Calc (.ods).
В этом обновлении также был внедрён новый режим экспортов в виде параграфов для файлов формата OpenOffice Writer (.odt). Это упрощает редактирование сгенерированных документов и делает их более визуально понятными для человека. Новый режим экспорта не заменяет, а дополняет уже существующий режим и расширяет его возможности.
Кроме того, была добавлена опция "Автоподбор ширины" для MS Excel-экспорта.
Будет работать только при определенных значениях свойств текстового объекта: свойства AutoWidth и AutoShrink включены; значение свойства HorzAling любое, кроме Justify.
Изменения в WebReport
Поиск по всему отчету
Добавлен поиск текста по всему отчету, аналогично десктопной версии Viewer, при нахождении слова на другой странице, просмотр будет автоматически на нее переключен. Поиск доступен в WebReport с FastReport.Core, в WebReport для Blazor Server и WebReport для Blazor Wasm. Управлять отображением кнопки поиска можно с помощью свойства:
WebReport.Toolbar.ShowSearchButton = false;
Цвет подсветки найденных слов можно изменить с помощью свойства:
WebReport.Toolbar.SearchHighlight = Color.Red;
Улучшения в настройке кэширования для WebReport
С выходом новой версии в WebReport появились дополнительные возможности для настройки кэширования.
Во-первых, теперь можно задавать индивидуальные параметры кэширования для каждого конкретного экземпляра WebReport. Ранее были доступны только общие настройки, применявшиеся ко всем отчётам, что могло быть неудобно, особенно если требовалось дольше сохранять в памяти определённые отчёты. С помощью свойства webReport.CacheOptions вы можете настроить время хранения в кэше для конкретного отчёта.
Во-вторых, появилась более гибкая настройка времени хранения отчёта в кэше благодаря параметрам AbsoluteExpirationDuration и AbsoluteExpiration. Ранее использовалась только опция CacheDuration, основанная на скользящем принципе: если отчёт использовался в течение заданного времени, таймер сбрасывался, и отчёт оставался в памяти. Это могло привести к тому, что отчёт никогда не удалялся из кэша.
Новые параметры позволяют задать точное время, когда отчёт должен быть окончательно удалён из кэша, независимо от его использования. При этом CacheDuration и новые параметры AbsoluteExpiration и AbsoluteExpirationDuration можно использовать совместно.
// Общие настройки для всех WebReport
services.AddFastReport(options =>
{
options.CacheOptions.CacheDuration = TimeSpan.FromMinutes(10);
options.CacheOptions.AbsoluteExpirationDuration = TimeSpan.FromMinutes(20);
});
// Индивидуальные настройки WebReport, имеющие больший приоритет
webReport.CacheOptions = new WebReportCacheOptions()
{
CacheDuration = // ...,
AbsoluteExpiration = DateTime.Now.AddMinutes(30),
// или
AbsoluteExpirationDuration = // ...
};
Обновленное демонстрационное веб-приложение на ASP .NET Core
Мы обновили наше демо-приложение на ASP .NET Core, чтобы продукт радовал вас не только своим функционалом, но и внешним видом. Обновленное приложение доступно по ссылке.
Онлайн демо
Обновленное демо Online Designer
Кроме того, мы обновили демо-приложение Online Designer, на котором вы сможете посмотреть больше примеров наших отчётов, экспортировать их, а также попробовать обновленный онлайн дизайнер на них. Обновленное приложение доступно по ссылке.
Попробовать демо
Поддержка FastScript .NET
Добавлена возможность выполнения скрипта отчета, используя FastScript .NET.
FastScript .NET — это библиотека для выполнения скриптов на языке C#, которая не зависит от CodeDOM/Roslyn и может быть использована в средах, где запрещена кодогенерация (Native AOT, iOS, WASM).
FastScript .NET входит в состав следующих вариантов поставок FastReport .NET: WinForms, WPF, Avalonia, Mono, WEB, Ultimate.
Для использования FastScript .NET совместно с FastReport .NET:
добавьте в свое приложение ссылку на nuget пакет FastReport.Plugins.FastScript;
выполните следующий код перед первым использованием объекта Report:
FastReport.Code.CodeProvider.DefaultProvider = typeof(FastReport.Code.FastScript.FastScriptCodeProvider);
Теперь все отчеты будут использовать FastScript .NET для вычисления выражений и выполнения кода отчета.
В FastScript .NET нет поддержки языка скрипта VB.NET, а также не поддерживается тип dynamic. Некоторые отчеты, использующие объект "Улучшенная матрица", не будут работать.
Подробная документация по работе с FastScript .NET доступна по этой ссылке.
Онлайн документация
Полный список изменений
[Engine]+ добавлен новый движок скрипта - FastScript .NET;+ добавлена поддержка вертикальной табуляции;+ добавлен импорт документов DOCX в шаблон отчёта;+ добавлена поддержка кодировки для китайского (упрощенного) языка при конвертации RTF;+ добавлена возможность отключить интеграцию с МоиОтчеты Облако;+ добавлен штрих-код GS1 Datamatrix;+ добавлено преобразование SkBitmap в Bitmap и Image в FastReport.SkiaDrawing;- исправлена ошибка с RichObject в кодировке zh-tw;- исправлена ошибка одновременной компиляции скрипта отчёта при подготовке отчётов в нескольких потоках;- исправлена ошибка при печати пустой матрицы;- исправлена ошибка передаче null значения в параметр запроса MS SQL;- исправлены ошибки при компиляции библиотек под .NET 9;- исправлена ошибка приводящая к бесконечному циклу, когда включено свойство "StartNewPage" дочернего бэнда "Заголовка страницы" или "Заголовка колонки";- исправлена ошибка приводящая к System.ArgumentException при подключении к MySQL;- исправлена ошибка вычисления выражения PrintableExpression страницы;- исправлена ошибка приводящая к System.NullReferenceException в методе Report.GetParameterValue;
[Designer]+ добавлена возможность копировать данные из списка свойств объекта с помощью горячих клавиш Ctrl + C;+ добавлена возможность копировать итоги и параметры с сохранением иерархии вложенности;* в окне открытия страницы отчета осталась возможность выбрать только *.frx файл;* в настройках дизайнера Mono скрыта вкладка с недоступными настройками (Страница "Код");* изменена логика обработки стилей .rtf файла при его открытии в дизайнере;- исправлена ошибка, когда пропадало изображение PictureObject, после отмены изменений в дизайнере, при редактировании подготовленной страницы;- исправлена ошибка поискового фильтра в дереве данных, при которой сбрасывалось текущее состояние поиска;- удален пункт "Новый диалог" контекстного меню в Community версии, выбор которого приводил к необрабатываемому исключению;- исправлена ошибка при запуске просмотра отчета из дизайнера;- исправлено исключение System.InvalidOperationException при удалении столбца источника данных, если такого столбца больше нет в базе данных;- исправлено считывание штрихкода GS1 DataMatrix как DataMatrix;- исправлена ошибка с выбором размещения колонок бэнда в окне "Редактор колонок";- исправлено удаление объектов и категорий с боковой панели в дизайнере;- исправлена ошибка с отображением иконок, которая появилась с версией AvaloniaUI 11.1;- исправлена ошибка, когда при добавлении функции IsNull через "Редактор текста" добавлялась лишняя запятая;
[Preview]+ добавлена кнопка для отправки отчета по электронной почте при использовании MAPI в превью в WPF;+ добавлены кнопки сворачивания и разворачивания с иконками в OutlineControl;+ добавлена возможность изменять ширину и высоту полосы прокрутки через код;- исправлена ошибка с неправильным размером бумаги для принтеров без опции "Авторазмер бумаги" при нажатии кнопок "Настройки", а затем "Дополнительно" в окне "Печать";- исправлено отключение кнопки сохранения подготовленного отчета в превью;- исправлено отключение вкладки "Хранилище" в меню сохранения отчета в предварительном просмотре;- исправлена ошибка с "Улучшенной матрицей" при отсутствие фильтров;- исправлена ошибка при которой не появлялась форма печати в превью по нажатию Ctrl + P;
[Exports]+ добавлен экспорт свойства "Author" при экспорте в PDF/A;+ добавлена поддержка HTML тега неразрывного пробела при экспорте в Excel;+ добавлен экспорт форматов чисел, валюты, даты, времени и процентов в OpenOffice Calc (.ods);+ добавлена опция "Автоподбор ширины" для экспорта в MS Excel;+ добавлен новый режим экспорта по параграфам в документы OpenOffice Writer (формат .odt);* теперь при экспорте страниц со свойством ExportAlias в Excel, суффикс "-n" не будет добавляться к имени листа, если это возможно;- исправлена ошибка, когда название шрифта экспортировалось без кавычек в HTML;- исправлена ошибка в FastReport.Core с некоторыми пользовательскими шрифтами;- исправлена ошибка в HTML-экспорте при которой, не отображалась граница штрих-кода;- исправлена ошибка открытия файлов при экспорте отчета с спецсимволами в форматы ODT и ODS;- исправлено некорректное отображение и экспорт некоторых Unicode символов в Skia/Avalonia;- исправлен экспорт заливки TableObject в PDF-экспорте;- исправлен экспорт заливки TableObject и страниц в HTML-экспорте;- добавлен экспорт высоты для объединенных ячеек при экспорте в Excel;
[WebReport]+ добавлен поиск по WebReport для ASP.NET;+ добавлен поиск по WebReport для Blazor WASM;+ добавлена поддержка .NET 9 для FastReport.Blazor.Wasm;+ добавлена возможность создания подключения к хранимым процедурам в WebReport;- исправлена проблема, которая не позволяла изменить DataConnection после его создания в OnlineDesigner;- исправлено преобразование TextObject в SVG при предварительном просмотре в Blazor;- исправлена поддержка Size CommandParameter;- исправлена отрисовка кнопок переключения страниц в Blazor при их выключении;- исправлена ошибка, когда значение параметра RouteBasePath не учитывалось при настройке WebReport;
[.NET Core]+ добавлен фильтр таблиц подключений;+ добавлен класс JsonConnectionType для использования в методе JsonDataConnection.GetConnectionType и методы GetConnectionType() и GetParameterType() в коннектор JsonDataConnection;- исправлена ошибка с кодировкой при подключении файла данных CSV для отчета в .NET Core;
[Common]* изменена ширина окна "О программе...";
[Extras]+ добавлена возможность подключения к Apache Ignite и РЕД Квант;
[Demos]+ добавлен файл UsedPackages.version для паков WPF;- исправлено название Avalonia и WPF при запуске демо приложения.
Рады представить вам релиз FastReport Business Graphics .NET! В этом обновлении мы сконцентрировались на повышении совместимости, улучшении поддержки современных платформ и подготовке к будущим версиям .NET.
Совместимость с .NET 9
Одним из ключевых изменений стало добавление необходимых атрибутов в компоненты для обеспечения полной совместимости с .NET 9. Это означает, что теперь FastReport Business Graphics .NET корректно работает в самых актуальных средах, сохраняя стабильность, производительность и поддержку всех новых возможностей фреймворка.
Если вы планируете переходить на .NET 9 или уже используете его в своих проектах, можете быть уверены, что наши компоненты готовы к работе без дополнительных доработок!
Обновление поддерживаемых версий .NET
Мы обновили список целевых платформ, ориентируясь на современные требования разработчиков:
Основной версией теперь считается .NET 8 – это стабильный и производительный фреймворк, который рекомендован для большинства проектов.
Также сохраняется поддержка .NET 6 – для тех, кто еще не обновился, но использует долгосрочную поддержку (LTS).
Добавлена поддержка .NET 9 – для разработчиков, которые хотят использовать самые свежие технологии и возможности.
Благодаря этим изменениям FastReport Business Graphics .NET остается актуальным инструментом для работы с бизнес-графикой в ваших проектах.
Список изменений
[Common]+ добавлены атрибуты в компоненты необходимые для совместимости с .NET 9;+ обновлены версии .NET, основной версией теперь считается .NET 8, а поддерживаемые целевые платформы включают .NET 6, .NET 8 и .NET 9.
В этом обновлении мы сосредоточились на ускорении вычислений, улучшении совместимости с .NET 9 и упрощении понимания изменений.
Переход на инвариантную математику – до 2 раз быстрее!
Одним из самых значительных улучшений стало отказ от типа "вариант" в пользу инвариантной математики. Это изменение привело к существенному ускорению построения и пересчета куба, в некоторых случаях – более чем в 2 раза!
Кроме того, теперь куб работает корректно в различных локализациях, включая нестандартные (отличные от латиницы), что расширяет его применение для международных пользователей.
Разделение изменений по продуктам
Теперь обновления FastCube .NET разделены на разные продукты (WinForms, Web, Mono и общий FastCube .NET). Это сделало процесс обновления более прозрачным – вы можете сразу понять, какие изменения затрагивают нужную версию.
Исправлена ошибка считывания потока из сжатого файла
Ранее в некоторых случаях происходила некорректная обработка сжатых файлов, из-за чего данные могли загружаться неправильно или вовсе не загружаться.
Теперь этот баг устранён, и механизм работы со сжатыми файлами полностью исправлен. Это означает:
Корректное чтение данных из архивных файлов.
Более стабильная работа при загрузке больших файлов.
Отсутствие ошибок в многопоточном режиме, что особенно важно для Web-приложений.
Если ваш проект активно использует сжатие данных, рекомендуем обновиться до версии 2025.2, чтобы избежать возможные проблемы.
Сигнатура файла для куба теперь неизменяемая (const вместо static)
Ранее сигнатура файла была объявлена как static, что позволяло менять её в ходе выполнения программы. В ряде случаев это могло привести к ошибкам, связанным с изменением структуры данных или даже повреждению файла.
В новой версии:
- Сигнатура теперь объявлена как const, что делает её неизменяемой на уровне кода.- Гарантирована целостность структуры файла, независимо от изменений в коде программы.- Повышена стабильность работы с файлами куба в разных средах, включая Web и Mono.
Это особенно важно для разработчиков, которые работают в многопользовательских и распределённых системах.
Совместимость с .NET 9
Одним из ключевых улучшений стало добавление поддержки .NET 9. Теперь FastCube .NET полностью совместим с последней версией платформы, что позволяет использовать новые возможности и улучшения, предложенные Microsoft. Это важное обновление для разработчиков, которые переходят на .NET 9 или планируют использовать его в своих проектах.
Отдельно отметим, что поддержка новых версий позволяет обеспечить стабильность работы продукта и интеграцию с последними технологиями.
Обновление поддерживаемых версий .NET
Основной версией теперь считается .NET 8, что соответствует текущим стандартам для большинства корпоративных проектов. Тем не менее, сохранена поддержка .NET 6, которая представляет собой долгосрочную версию с расширенной поддержкой.
Кроме того, как уже было упомянуто, добавлена поддержка .NET 9, что даёт вам гибкость при выборе платформы для работы с FastCube .NET, будь то стабильность (через .NET 6) или новейшие возможности и улучшения производительности (.NET 9).
Исправления и улучшения в демонстрационном примере
В демонстрационном примере для формата boolean была исправлена ошибка, из-за которой корректность отображения данных была нарушена. Теперь данный формат работает правильно и не вызывает ошибок, что улучшает опыт пользователей, работающих с демонстрационными примерами.
В демонстрационном кубе "Sales by months" ранее возникали ситуации, когда заголовки отображались некорректно. Теперь эта ошибка устранена, и названия полей выводятся корректно, обеспечивая точность и удобство работы с данными.
Улучшение сериализации данных
Одним из важных улучшений является оптимизация процесса сериализация данных. Были добавлены новые методы и установлены свойства, благодаря чему значения по умолчанию теперь реже сериализуются.
Снижение объема сериализуемых данных уменьшает нагрузку на систему при сохранении и загрузке информации. Кроме того, эти изменения способствует улучшению производительности, что будет особенно заметно при работе с большими наборами данных.
Список изменений
FastCube .NET WinForms
[Common]- исправлена ошибка, при которой поток из сжатого файла считывался некорректно;* сигнатура файла для куба теперь имеет модификатор const вместо static и не может быть изменена;
FastCube .NET Web
[Common]- исправлена ошибка, при которой поток из сжатого файла считывался некорректно;* сигнатура файла для куба теперь имеет модификатор const вместо static и не может быть изменена;
FastCube .NET Mono
[Common]- исправлена ошибка, при которой поток из сжатого файла считывался некорректно;* сигнатура файла для куба теперь имеет модификатор const вместо static и не может быть изменена;
FastCube .NET
[Common]+ добавлена совместимость с .NET 9;+ обновлены версии .NET, основной версией теперь считается .NET 8, а поддерживаемые целевые платформы включают .NET 6, .NET 8 и .NET 9;* скрыта часть свойств от пользователя в редакторе WinForms;* тип "вариант" был заменён на вариантную математику;* улучшена сериализация, добавлены методы и установлены свойства, благодаря чему значения по умолчанию реже сериализуются;- исправлено отображение названия поля в демонстрационном кубе "Sales by months";- исправлена ошибка в демонстрационном примере для boolean format.
Другие критические изменения
Общие изменения для FastCube Web, FastCube WinForms и FastCube Mono
Устаревшие делегаты. Были заменены на совместимые, т.к. был убран тип Variant теперь вместо него используется боксинг через Object:
Нажмите сюда, чтобы развернуть
FastReport.Olap.Slice.Value2Delegate(System.Int32, System.Int32, FastReport.Olap.Utils.Variant, FastReport.Olap.Utils.Variant, System.Int32)
FastReport.Olap.Slice.ValueDelegate(System.Int32, System.Int32, FastReport.Olap.Utils.Variant, System.Int32)
FastReport.Olap.Slice.SliceChartDataHandler(FastReport.Olap.Slice.Slice, FastReport.Olap.Slice.ChartParams, System.String[], System.String[], FastReport.Olap.Utils.Variant[], System.Int32)
Устаревшие поля. Следующие поля были заменены на соответствующие свойства:
Нажмите сюда, чтобы развернуть
FastReport.Olap.Types.BoolValue -> public System.Boolean Value
FastReport.Olap.Types.ByteValue -> public System.Byte Value
FastReport.Olap.Types.DateTimeValue -> public System.DateTime Value
FastReport.Olap.Types.DecimalValue -> public System.Decimal Value
FastReport.Olap.Types.DoubleValue -> public System.Double Value
FastReport.Olap.Types.FloatValue -> public System.Single Value
FastReport.Olap.Types.IntValue -> public System.Int32 Value
FastReport.Olap.Types.LongValue -> public System.Int64 Value
FastReport.Olap.Types.SByteValue -> public System.SByte Value
FastReport.Olap.Types.ShortValue -> public System.Int16 Value
FastReport.Olap.Types.StringValue -> public System.String Value
FastReport.Olap.Types.TimeSpanValue -> public System.TimeSpan Value
FastReport.Olap.Types.UIntValue -> public System.UInt32 Value
FastReport.Olap.Types.ULongValue -> public System.UInt64 Value
FastReport.Olap.Types.UShortValue -> public System.UInt16 Value
FastReport.Olap.Slice.MeasureCell -> public FastReport.Olap.Utils.Variant Value
Устаревшие методы. Были заменены на совместимые методы, но вместо типа Variant теперь используется боксинг данных через Object что позволяет передавать не значения с копированием памяти а ссылку на объект.
Нажмите сюда, чтобы развернуть
FastReport.Olap.Types.BoolDTP -> public FastReport.Olap.Types.BoolValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.ByteDTP -> public FastReport.Olap.Types.ByteValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.CommonDataTypeProcessor``2<T, T2> -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.CommonDataTypeProcessor``2<T, T2> -> public T VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.DateTimeDTP -> public FastReport.Olap.Types.DateTimeValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.DecimalDTP -> public FastReport.Olap.Types.DecimalValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.DoubleDTP -> public FastReport.Olap.Types.DoubleValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.FloatDTP -> public FastReport.Olap.Types.FloatValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.IntDTP -> public FastReport.Olap.Types.IntValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.LongDTP -> public FastReport.Olap.Types.LongValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.Range -> public System.Boolean Match(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.Ranges -> public System.Boolean Match(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.SByteDTP -> public FastReport.Olap.Types.SByteValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.ShortDTP -> public FastReport.Olap.Types.ShortValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.StringDTP -> public FastReport.Olap.Types.StringValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.TimeSpanDTP -> public FastReport.Olap.Types.TimeSpanValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.UIntDTP -> public FastReport.Olap.Types.UIntValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.ULongDTP -> public FastReport.Olap.Types.ULongValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.UShortDTP -> public FastReport.Olap.Types.UShortValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Slice.AxisContainer -> public FastReport.Olap.Utils.Variant GetValue(System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public FastReport.Olap.Utils.Variant GetMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public FastReport.Olap.Utils.Variant GetSecondAdditionalTotalMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.Slice -> public System.Object Calc(FastReport.Olap.Types.Expression, FastReport.Olap.Utils.Variant)
FastReport.Olap.Slice.Slice -> public FastReport.Olap.Utils.Variant CalcFuncForSelectedArea(FastReport.Olap.Types.AggregateFunction, FastReport.Olap.Types.Selection)
FastReport.Olap.Slice.Slice -> public FastReport.Olap.Utils.Variant GetMeasureValue(System.Int32, System.Int32)
FastReport.Olap.Slice.SliceField -> public FastReport.Olap.Utils.Variant GetUniqueValue(System.Int32)
FastReport.Olap.Slice.SliceField -> public FastReport.Olap.Utils.Variant GetUniqueValueFromRecord(System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Int32 GetUniqueValueIdAndVariantFromRecord(System.Int32, FastReport.Olap.Utils.Variant&)
FastReport.Olap.Slice.UniqueValuesFieldFilter -> public System.Void SetAllowedUniqueValueByValue(FastReport.Olap.Utils.Variant, System.Boolean)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValueByAppend(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 GetValueIdAtValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public FastReport.Olap.Utils.Variant GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.CommonUniqueValues -> public FastReport.Olap.Utils.Variant GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.Cube -> public FastReport.Olap.Utils.Variant GetSourceValue(System.Int32, System.Int32)
FastReport.Olap.Cube.Cube -> public FastReport.Olap.Utils.Variant GetSourceValue(System.Int32, FastReport.Olap.Cube.CubeField)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, System.Int32, FastReport.Olap.Utils.Variant&)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant&)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(System.Int32, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(System.Int32, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DatePartUniqueValues -> public System.DateTime GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DayOfWeekPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DayOfYearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DayPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.HalfYearPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.HourPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.MillisecondPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.MinutePartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.MonthPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.QuarterPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.SecondPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.TimePartUniqueValues -> public System.TimeSpan GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValueByAppend(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public T2 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 GetValueIdAtValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public FastReport.Olap.Utils.Variant GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public FastReport.Olap.Utils.Variant GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.WeekNumberPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.YearMonthPartUniqueValues -> public System.Int32 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.YearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColRowOffsetValue(System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColRowOffsetWithLevelValue(System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetTotalValueForDims(System.String)
FastReport.Olap.Code.Measures -> public FastReport.Olap.Utils.Variant GetDetailValue(System.Int32, System.String)
Устаревшие свойства. Следующие свойства были заменены на использование боксинга вместо типа Variant:
Нажмите сюда, чтобы развернуть
FastReport.Olap.Types.BoolValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.ByteValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.DateTimeValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.DecimalValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.DoubleValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.FloatValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.IntValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.LongValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.Range -> FastReport.Olap.Utils.Variant HighRange { public get; public set; }
FastReport.Olap.Types.Range -> FastReport.Olap.Utils.Variant LowRange { public get; public set; }
FastReport.Olap.Types.SByteValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.ShortValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.StringValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.TimeSpanValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.UIntValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.ULongValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.UShortValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Slice.CalculateMeasureEventArgs -> FastReport.Olap.Utils.Variant Data { public get; public set; }
FastReport.Olap.Slice.CalculateValueEventArgs -> FastReport.Olap.Utils.Variant Value { public get; public set; }
FastReport.Olap.Slice.SliceField -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
FastReport.Olap.Code.ContainerFieldItem -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
FastReport.Olap.Code.Dimension -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
FastReport.Olap.Code.Dimensions -> FastReport.Olap.Utils.Variant DetailValue { public get; }
FastReport.Olap.Code.Measure -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
Устаревшие типы. Следующие типы устарели и были целиком удалены, т.к. теперь они не используются.
FastReport.Olap.Utils.Variant
FastReport.Olap.Types.IVariantable
FastReport.Olap.Types.UnAssigned
Новые делегаты заменили старые, которые использовали тип Variant.
FastReport.Olap.Slice.Value2Delegate(System.Int32, System.Int32, System.Object, System.Object, System.Int32)
FastReport.Olap.Slice.ValueDelegate(System.Int32, System.Int32, System.Object, System.Int32)
FastReport.Olap.Slice.SliceChartDataHandler(FastReport.Olap.Slice.Slice, FastReport.Olap.Slice.ChartParams, System.String[], System.String[], System.Object[], System.Int32)
Новое поле заменило существующие, теперь вместо типа Variant используется боксинг через Object.
FastReport.Olap.Slice.MeasureCell -> public System.Object Value
Новые методы заменили старые, где использовался тип Variant. Теперь вместо него используется боксинг и передача данных идёт по ссылке, а не по значению, что позволило значительно вырасти скорости.
Нажмите сюда, чтобы развернуть
FastReport.Olap.Types.Range -> public System.Boolean Match(System.Object)
FastReport.Olap.Types.Ranges -> public System.Boolean Match(System.Object)
FastReport.Olap.Slice.AxisContainer -> public System.Object GetValue(System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public System.Object GetMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public System.Object GetSecondAdditionalTotalMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.Slice -> public System.Object Calc(FastReport.Olap.Types.Expression, System.Object)
FastReport.Olap.Slice.Slice -> public System.Object CalcFuncForSelectedArea(FastReport.Olap.Types.AggregateFunction, FastReport.Olap.Types.Selection)
FastReport.Olap.Slice.Slice -> public System.Object GetMeasureValue(System.Int32, System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Object GetUniqueValue(System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Object GetUniqueValueFromRecord(System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Int32 GetUniqueValueIdAndVariantFromRecord(System.Int32, System.Object&)
FastReport.Olap.Slice.UniqueValuesFieldFilter -> public System.Void SetAllowedUniqueValueByValue(System.Object, System.Boolean)
FastReport.Olap.Cube.BaseDataReaderDataSet -> public System.Object GetValue(System.Int32)
FastReport.Olap.Cube.BaseDataSet -> public System.Object GetValue(System.Int32)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValue(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValue(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValueByAppend(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 GetValueIdAtValue(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Object GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Object GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.Cube -> public System.Object GetSourceValue(System.Int32, System.Int32)
FastReport.Olap.Cube.Cube -> public System.Object GetSourceValue(System.Int32, FastReport.Olap.Cube.CubeField)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, System.Int32, System.Object&)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, FastReport.Olap.Cube.CubeField, System.Object&)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(System.Int32, System.Object)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(FastReport.Olap.Cube.CubeField, System.Object)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(System.Int32, System.Object)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(FastReport.Olap.Cube.CubeField, System.Object)
FastReport.Olap.Cube.DatePartUniqueValues -> public System.DateTime GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.DayOfWeekPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.DayOfYearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.DayPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.HalfYearPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.HourPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.IBaseDataSet -> public System.Object GetValue(System.Int32)
FastReport.Olap.Cube.MillisecondPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.MinutePartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.MonthPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.QuarterPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.SecondPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.TimePartUniqueValues -> public System.TimeSpan GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 GetValueIdAtValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValueByAppend(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public T2 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Object GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Object GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.WeekNumberPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.YearMonthPartUniqueValues -> public System.Int32 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.YearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Code.Measure -> public System.Object GetColOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public System.Object GetColOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetColOffsetValue(System.Object)
FastReport.Olap.Code.Measure -> public System.Object GetColRowOffsetValue(System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetColRowOffsetWithLevelValue(System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetValue(System.Object)
FastReport.Olap.Code.Measure -> public System.Object GetTotalValueForDims(System.String)
FastReport.Olap.Code.Measures -> public System.Object GetDetailValue(System.Int32, System.String)
Новые свойства заменили или дополнили устаревшие:
Нажмите сюда, чтобы развернуть
FastReport.Olap.Types.BoolValue -> System.Boolean Value { public get; public set; }
FastReport.Olap.Types.ByteValue -> System.Byte Value { public get; public set; }
FastReport.Olap.Types.DateTimeValue -> System.DateTime Value { public get; public set; }
FastReport.Olap.Types.DecimalValue -> System.Decimal Value { public get; public set; }
FastReport.Olap.Types.DoubleValue -> System.Double Value { public get; public set; }
FastReport.Olap.Types.FloatValue -> System.Single Value { public get; public set; }
FastReport.Olap.Types.IntValue -> System.Int32 Value { public get; public set; }
FastReport.Olap.Types.LongValue -> System.Int64 Value { public get; public set; }
FastReport.Olap.Types.Range -> System.Object HighRange { public get; public set; }
FastReport.Olap.Types.Range -> System.Object LowRange { public get; public set; }
FastReport.Olap.Types.SByteValue -> System.SByte Value { public get; public set; }
FastReport.Olap.Types.ShortValue -> System.Int16 Value { public get; public set; }
FastReport.Olap.Types.StringValue -> System.String Value { public get; public set; }
FastReport.Olap.Types.TimeSpanValue -> System.TimeSpan Value { public get; public set; }
FastReport.Olap.Types.UIntValue -> System.UInt32 Value { public get; public set; }
FastReport.Olap.Types.ULongValue -> System.UInt64 Value { public get; public set; }
FastReport.Olap.Types.UShortValue -> System.UInt16 Value { public get; public set; }
FastReport.Olap.Slice.CalculateMeasureEventArgs -> System.Object Data { public get; public set; }
FastReport.Olap.Slice.CalculateValueEventArgs -> System.Object Value { public get; public set; }
FastReport.Olap.Slice.SliceField -> System.Object CurrentValue { public get; }
FastReport.Olap.Format.CustomFormat -> System.String DefaultFormatValue { public get; public set; }
FastReport.Olap.Code.ContainerFieldItem -> System.Object CurrentValue { public get; }
FastReport.Olap.Code.Dimension -> System.Object CurrentValue { public get; }
FastReport.Olap.Code.Dimensions -> System.Object DetailValue { public get; }
FastReport.Olap.Code.Measure -> System.Object CurrentValue { public get; }
Новые типы:
FastReport.Olap.Utils.VMath - заменил тип Variant, теперь математика происходит через инвариантные вычисления с помощью боксинга и преобразование типа.
FastReport.Olap.Types.IValueStruct``1<T> - интерфейс для реализации собственного типа боксинга.
FastReport.Olap.Types.SimpleCompareAction - перечисление для типов действий инвариантной математики.
Изменения для FastCube WinForms и FastCube Mono
Устаревшие поле было заменено на технически совместимое.
FastReport.Olap.Controls.SizingInfo -> public FastReport.Olap.Utils.Variant Data
Новое поле:
FastReport.Olap.Controls.SizingInfo -> public System.Int32 Data
Мы рады объявить о выпуске кроссплатформенной библиотеки для выполнения сложных скриптов на C# под названием FastScript .NET.
Библиотеки для выполнения сложных скриптов предоставляют возможность динамической генерации и исполнения кода, что может быть полезно в различных сценариях, таких как разработка плагинов, создание сценариев для пользователей и т. д.
Работа в ограниченных средах. FastScript .NET построен по классической схеме «лексер-парсер-интерпретатор». Он не использует компиляцию в машинный код и поэтому может работать в средах, где кодогенерация запрещена (Native AOT, iOS, WASM). Скорость работы сопоставима с другими решениями, использующими интерпретацию (lua, js), но она ниже, чем у скомпилированного C# кода.
C# в качестве скриптового языка. FastScript .NET имеет полную интеграцию с платформой .NET и позволяет использовать все библиотеки, фреймворки и API. Единая кодовая база на C# для скриптов позволяет избежать необходимости поддерживать код на нескольких языках.
Экономия памяти. При каждой компиляции скрипта FastScript .NET не создает отдельные dll сборки, а сохраняет информацию в кэше. Это сэкономит память вашего устройства.
С версии 2025.1.21 FastScript .NET входит в состав WinForms, WPF, WEB, Mono и Avalonia паков. Также наша библиотека входит в состав Ultimate .NET решения со всеми исходными кодами.
Узнать больше