FastScript .NET

Кроссплатформенная библиотека для выполнения сложных скриптов на C# в средах без генерации кода (Native AOT, WASM, iOS)

v. 2025.2.0
Отчеты в системах для бизнеса, история основателя u4et.ru

Кейс: Отчеты в системах для бизнеса, история основателя u4et.ru

«Быстрые отчеты» — набор мощных инструментов для генерации документов из больших данных. Продукты спокойно решают задачи корпораций. А как они помогают малому бизнесу? Рассказываем, как платформа «u4et.ru» автоматизирует создание отчетов.

Особенности и преимущества FastScript .NET

Встраиваемость в проекты
Установите необходимый пакет из NuGet репозитория, либо загрузите пакет с нашего сайта и добавьте в проект необходимые библиотеки. Никаких дополнительных модулей и специальных расширений не требуется.
Уникальная разработка
Интерпретатор FastScript .NET не использует платформы CodeDOM и Roslyn. Это позволяет библиотеке скриптов без проблем работать в средах без генерации кода Native AOT, WASM, iOS.
Широкие возможности
Поддерживает скрипты, соответствующие спецификации C# 1.0 (с некоторыми ограничениями и дополнениями), такие как: создание классов, структур, событий, делегатов и т.д.
Экономия памяти
При каждой компиляции скрипта FastScript .NET не создает отдельные dll сборки, а сохраняет информацию в кэше. Это сэкономит память вашего устройства.
Безопасность
FastScript .NET позволяет ограничить использование небезопасного API: операции с файловой системой или сетью. Вы можете ограничить использование целых сборок, пространств имен или отдельных типов.
Компактность
Небольшой размер библиотеки (всего 300 КБ) делает её удобной для использования даже в проектах с ограниченными ресурсами, не перегружая систему.
Работа в ограниченных средах

Работа в ограниченных средах

FastScript .NET построен по классической схеме «лексер-парсер-интерпретатор». Он не использует компиляцию в машинный код и поэтому может работать в средах, где кодогенерация запрещена (Native AOT, iOS, WASM). Скорость работы сопоставима с другими решениями, использующими интерпретацию (lua, js), но она ниже, чем у скомпилированного C# кода.

FastScript .NET поддерживает выполнение скриптов на различных платформах, включая iOS. Это обеспечивает гибкость и возможность использования библиотеки в разнообразных проектах, не ограничиваясь одной платформой.

C# в качестве скриптового языка

C# в качестве скриптового языка

FastScript .NET имеет полную интеграцию с платформой .NET и позволяет использовать все библиотеки, фреймворки и API. Единая кодовая база на C# для скриптов позволяет избежать необходимости поддерживать код на нескольких языках.

Наша библиотека позволяет оптимизировать использование ресурсов, таких как память и процессорное время. Это особенно важно для мобильных приложений и других проектов, работающих в условиях ограниченных ресурсов.

Замена популярных решений

Замена популярных решений

Основными инструментами для скриптинга на C# являются CodeDOM (.NET Framework) и Roslyn (.NET). Данные решения имеют высокую скорость работы и поддерживают все возможности C#, однако имеют некоторые ограничения: не работают в средах с запрещённой кодогенерацией, а также не ограничивают небезопасное API.

FastScript .NET разработан именно для тех, кто хочет обойти эти ограничения. Наша библиотека не создает сборки, которые остаются в памяти до конца работы приложения. Вместо этого в памяти выделяются структуры, которые удаляются сборщиком мусора (GC) после окончания работы с экземпляром скрипта.

Как купить FastScript .NET?

Эта библиотека не продаётся отдельно, но входит в состав любой версии генераторов отчетов на .NET. Дополните ей кросс-платформенный инструмент для отчетов на Avalonia, веб-репортинг, FastReport .NET WinForms, WPF, Mono или самый полный из наборов продуктов - FastReport .NET Ultimate.

Помимо этого, в Ultimate .NET входят компоненты для визуализации данных, а именно бизнес-графика с набором диаграмм, и OLAP продукты для быстрой обработки больших массивов данных.

Связанные статьи

8 апреля 2025

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx)

Современные технологии обработки данных и автоматизации документооборота требуют интеграции различных форматов файлов, обеспечивающих взаимодействие программных продуктов. Благодаря широкому спектру возможностей текстовый редактор Microsoft Word стал одним из популярнейших редакторов разной сложности.  В некоторых ситуациях возникает потребность конвертирования таких документов в форматы, свойственные иным приложениям. Существует случаи необходимости конвертации файлов Microsoft Word в формат FastReport .NET, используемый для создания шаблонов отчетов при работе с FastReport.     Как скомпилировать проект Первым делом откройте .sln-файл под названием FastReport.OOXMLImportPlugin.sln. Обратите внимание, что существует 2 таких файла для VisualStudio 2017 и версии выше. Затем удалите ссылки на проекты FastReport и FastReport.Bars как на скриншоте ниже.   После этого нужно добавить ссылку на FastReport.dll. Эта DLL находится в одной папке с Designer.   Нажмите ПКМ в рабочем пространстве и кнопку «Собрать». После чего перейдите по пути FastReport.OOXMLImportPlugin\bin\Debug\net472 и в папке найдете собранный файл «OOXMLImportPlugin.dll».     Как зарегистрировать dll в FastReport Вы можете сделать это несколькими способами.  Способ 1. Зарегистрировать с помощью среды разработки FastReport Откройте дизайнер отчетов, затем перейдите в меню «Файл|Настройки...» в Ribbon интерфейсе (меню «Вид|Настройки...» в стандартном интерфейсе).   Далее на вкладке «Плагины» добавьте FastReport.OOXMLImportPlugin.dll.   После этого перезапустите дизайнер FastReport .NET. Если вы работаете в среде Visual Studio IDE, то перезапустите ее тоже. Как только дизайнер будет вновь запущен, то нажмите «Файл|Открыть» и выберите пункт «Документ Microsoft Word (*.docx)» в списке доступных файлов как на скриншоте ниже.   Выберите нужный вам файл *.docx для импорта в FastReport .NET. В результате вы увидите импортированный файл в дизайнере.      Способ 2. Отредактировать вручную файл FastReport.config По умолчанию этот файл находится в папке C:\DocumentsandSettings\user_name\Local Settings\Application Data\FastReport. Обязательно закройте все запущенные экземпляры FastReport .NET. И только после этого откройте файл конфигурации в любом текстовом редакторе, а затем измените его следующим образом: <?xml version=«1.0» encoding=«utf-8»?> <Config> ... <Plugins <Plugin Name=«c:\.....\ OOXMLImportPlugin.dll»/> </Plugins> </Config     Способ 3. Зарегистрировать dll программно Для этого вам понадобится добавить ссылку «OOXMLImportPlugin.dll» в ваш проект как показано ниже.    Далее выполните следующий код один раз при запуске приложения: FastReport.Design.DesignerPlugins.Add(typeof(FastReport.Design.ImportPlugins.OOXML.DocxImportPlugin));     Как зарегистрировать nuget пакет FastReport.Plugins.OOXMLImport в FastReport В первую очередь установите nuget пакеты FastReport.Net и FastReport.Plugins.OOXMLImport с нашего приватного nuget сервера. Инструкция по установке доступна по этой ссылке.   Далее нужно зарегистрировать плагин через следующий код: FastReport.Design.DesignerPlugins.Add(typeof(FastReport.Design.ImportPlugins.OOXML.DocxImportPlugin));   Запустите приложение, затем нажмите «Файл|Открыть» и выберите пункт «Документ Microsoft Word (.docx)».   Выберите нужный вам файл *.docx для импорта в FastReport .NET. В результате вы увидите импортированный файл в дизайнере.      Известные ограничения на момент выхода версии 2025.2.0 На данный момент наш плагин не поддерживает: подсветку фона части строки, шейпы (Shapes), а также вложенную векторную графику Vector Markup Language (VML) и OLE объекты. Иногда добавляются пустые страницы в получившийся отчет. Если вы столкнётесь с описанной проблемой, то напишите нам в техническую поддержку support@fastreport.ru.     Заключение Таким образом, разработанный конвертер из .docx в .frx является важным шагом в области упрощения автоматизации процессов работы с документами и генерации отчетов. Он позволяет существенно сократить время на создание шаблонов отчетов, используя готовые файлы Word.  Важно учесть, что структуры обоих файлов форматов различны и их нельзя просто вставить один в другой. Необходимо учитывать структуры файлов и привести всё к требуемому виду, чтобы данные содержались правильно и форматирование сохранилось. Как подготовить документ так, чтобы он сохранил свою правильную структуру, читайте в этом материале. 
Читать
8 апреля 2025

Как настроить подключение к Apache Ignite в FastReport .NET

  Apache Ignite — это распределённая платформа in-memory computing, которая позволяет обрабатывать и хранить большие объёмы данных в оперативной памяти для достижения высокой производительности и масштабируемости. В этой статье мы рассмотрим, как настроить подключение к Apache Ignite в FastReport .NET. Вы узнаете, какие шаги необходимо выполнить для подключения плагина через код и дизайнер отчетов. Следуя нашим рекомендациям, вы сможете эффективно использовать Apache Ignite в качестве источника данных для ваших отчетов в FastReport .NET. Реализованный плагин для подключения к Apache Ignite представляет собой легковесное решение на базе Ignite.NET Thin Client.     Возможности плагина Apache Ignite Подключение к кластерам Apache Ignite: плагин позволяет подключаться к одному или нескольким узлам кластера. Адреса узлов указываются в формате хост:порт, разделённые запятыми; Работа с кэшами: поддерживается взаимодействие с кэшами как в режиме ключ-значение, так и в виде SQL-таблиц;  Аутентификация: плагин поддерживает аутентификацию, если в конфигурации кластера включена опция authenticationEnabled; Обработка различных типов данных: плагин обеспечивает корректную обработку различных типов данных, включая пользовательские объекты.     Особенности реализации Apache Ignite Ignite предлагает два способа логического представления данных: кэш ключ-значение и SQL-таблицы (схемы). Несмотря на различия, эти представления равнозначны и могут отображать одни и те же данные. В Ignite SQL-таблица и кэш ключ-значение — это два равнозначных способа представления одной внутренней структуры данных. Доступ к данным можно получить с помощью API ключ-значение, SQL-операторов или обоих методов. Кэш — это набор пар ключ-значение, доступ к которым осуществляется через API ключ-значение. SQL-таблица в Ignite похожа на таблицы в традиционных системах управления базами данных, но с некоторыми дополнительными ограничениями. Например, у каждой SQL-таблицы должен быть первичный ключ. Таблицу с первичным ключом можно представить как кэш ключ-значение, где столбец первичного ключа выступает в роли ключа, а остальные столбцы таблицы — это поля объекта (значение).   Основное отличие между этими двумя представлениями данных заключается в методе доступа к ним. С помощью кэша ключ-значение можно работать с объектами, используя поддерживаемые языки программирования. SQL-таблицы, в свою очередь, поддерживают стандартный синтаксис SQL, что может быть полезно, например, при переносе данных из существующей базы данных.     Как подключить плагин в проект Для использования плагина необходимо предварительно собрать проект, находящийся по пути: ..\Extras\Core\FastReport.Data\FastReport.Data.Ignite. Далее плагин требуется зарегистрировать. Это можно сделать двумя способами.  Способ 1. С помощью кода. Скопируйте следующий код и вставьте в свой проект. Это необходимо сделать всего один раз при запуске приложения. FastReport.Utils.RegisteredObjects.AddConnection(typeof(IgniteDataConnection)); Способ 2. С помощью дизайнера отчетов. Для подключения коннектора в дизайнере необходимо перейти в меню «Файл|Настройки...» в Ribbon интерфейсе (меню «Вид|Настройки...» в стандартном интерфейсе). В открывшемся окне выбрать вкладку «Плагины» и добавить собранную .dll плагина как показано ниже.     После добавления плагина необходимо выполнить перезапуск дизайнера FastReport .NET.     Как подключить источник данных в дизайнере Для создания подключения к Apache Ignite необходимо перейти в меню «Данные» и выбрать пункт «Новый источник данных».    В появившемся окне нажмите на кнопку «Новое подключение» затем в выпадающем списке типов подключения кликните на вариант «Подключение к Apache Ignite». В появившемся окне укажите адрес(а) узлов, имя пользователя и пароль (при наличии).   Если соединение выполнено успешно, то на следующем шаге появится список таблиц (кэшей), содержащихся в указанных на предыдущем шаге узлах:     Различия при работе с кэшами в плагине Плагин поддерживает работу с кэшами, созданными как ключ-значение, так и как SQL-таблицы.  Способ создания и конфигурации кэша в Apache Ignite напрямую влияет на состав полей и отображение типов данных. В зависимости от выбранного метода (например, использование классов с атрибутами [QuerySqlField], программное определение через QueryEntity или работа с динамическими данными), результат может отличаться. Это касается как списка доступных полей, так и их типов данных. В следующих примерах кода будут использоваться фрагменты из официальных примеров функционала Apache Ignite. Эти примеры можно скачать по этой ссылке в разделе BINARY RELEASES: https://ignite.apache.org/download.cgi.  Откроем полученный архив и переместимся в следующую папку: ..\apache-ignite-2.17.0-bin\platforms\dotnet\examples\Thin Из этих примеров используем пользовательский класс Organization, который представляет модель данных организации. Этот класс содержит следующие свойства: Name: Название организации. Помечено атрибутом [QuerySqlField(IsIndexed = true)], что позволяет использовать его в SQL-запросах и создает индекс для ускорения поиска. Address: Адрес организации, представленный вложенным объектом типа Address. Также доступен для SQL-запросов благодаря атрибуту [QuerySqlField]. Type: Тип организации (например, коммерческая или некоммерческая), представленный перечислением OrganizationType. LastUpdated: Временная метка, указывающая, когда данные об организации были обновлены последний раз. Полный код класса можно найти в папке:  ..\apache-ignite-2.17.0-bin\platforms\dotnet\examples\Shared\Models     Создание кэша с использованием QueryEntity QueryEntity — это компонент Apache Ignite, который позволяет программно описать структуру данных (схему) для кэша и задать поля с их типами вручную.  Для кэшей с метаданными (QueryEntity) поддерживаются операции получения списка полей и их типов данных. Пользовательские типы данных обрабатываются следующим образом: В списке полей отображаются только поля, помеченные атрибутом [QuerySqlField]. Поля представлены в формате тип_данных.имя_поля. Например, если на стадии настройки кэш создан следующим образом: var organizationCache = ignite.GetOrCreateCache<int, Organization>(new CacheClientConfiguration("dotnet_cache_query_organization", new QueryEntity(typeof(int), typeof(Organization)))); То при подключении в FastReport к уже готовому экземпляру Apache Ignite, список полей будет включать только те поля из класса Organization, которые помечены атрибутом [QuerySqlField].   Однако, при просмотре данных будут отображаться все поля из кэша:     Создание кэша без QueryEntity Если кэш на стадии настройки создан без использования QueryEntity, то типы данных всех полей будут определены как string. Пример кода: ICacheClient<int, Organization> cache = ignite.GetCache<int, Organization>("dotnet_cache_put_get"); В списке полей будут отображаться все доступные поля, независимо от наличия атрибута [QuerySqlField]. Это второй способ создания кэша.     Работа с кэшами, созданными как SQL-таблицы Рассмотрим наконец и третий способ работы с кэшами. Перед вами пример создания и заполнения кэша как SQL-таблицы: cache.Query(new SqlFieldsQuery( "CREATE TABLE IF NOT EXISTS city (id LONG PRIMARY KEY, name VARCHAR) WITH \"template=replicated\"")).GetAll();   const string addCity = "INSERT INTO city (id, name) VALUES (?, ?)"; cache.Query(new SqlFieldsQuery(addCity, 1L, "Forest Hill")); cache.Query(new SqlFieldsQuery(addCity, 2L, "Denver")); cache.Query(new SqlFieldsQuery(addCity, 3L, "St. Petersburg")); Для таких кэшей метаданные (QueryEntity) содержат информацию о типах данных для каждого поля.    В кэше Apache Ignite могут храниться данные, у которых отсутствуют явно заданные имена полей. Например:  var cache = ignite.GetOrCreateCache<int, object>("put-get-example");   int key = 1; var val = new Address("1545 Jackson Street", 94612); cache.Put(key, val);   int key1 = 2; var val1 = 942.28956; cache.Put(key1, val1);   int key2 = 3; var val2 = "test String"; cache.Put(key2, val2); При подключении в FastReport к экземпляру Apache Ignite (с кодом из примера выше) вы увидите следующий результат.   В этом примере: Поля Street и Zip из пользовательского класса Address имеют имена, так как они определены в структуре класса. Значения, такие как число 942.28956 или строка "test String", не имеют имен, поскольку они добавлены в кэш как простые объекты типа "ключ-значение". Для полей, у которых отсутствует имя, генерируются уникальные идентификаторы.     Заключение Мы рассмотрели, как настроить подключение к Apache Ignite в FastReport .NET. Следуя представленным шагам, вы сможете интегрировать эти системы и использовать все возможности Apache Ignite в качестве источника данных для отчетов. Apache Ignite обеспечивает быстрый доступ к данным и их обработку, а FastReport .NET позволяет создавать мощные отчеты. Их интеграция открывает новые горизонты для анализа и визуализации данных. Надеемся, что эта статья была полезной и поможет вам эффективно использовать Apache Ignite в ваших проектах с FastReport .NET.
Читать
25 марта 2025

Как объединить несколько отчетов в один из FastReport .NET

FastReport .NET — это мощный инструмент для создания и управления отчётами, который широко используется в различных областях. Он предоставляет разработчикам возможность создавать сложные и профессиональные отчёты с использованием множества функций и возможностей. Одной из ключевых функций FastReport .NET является возможность объединения нескольких отчётов в один. Это может быть полезно в ситуациях, когда необходимо объединить данные из разных источников или представить информацию в более удобном формате. В данной статье мы рассмотрим, как объединить несколько отчётов в один в FastReport .NET. Откройте дизайнер отчётов FastReport .NET и загрузите ваш отчет.   После того как дизайнер открыт, выберите пункт меню "Файл" и далее "Открыть страницу".   В файловой системе выберите отчет, который хотите объединить с первым, и загрузите его.   Теперь выберете нужную страницу и нажмите ОК.  Начиная с версии FastReport .NET 2025.1 можно включить опцию "Добавить как ссылку", при этом в отчет будет добавлена не копия страницы, а ссылка на нее. Это значит, что при изменении страницы в оригинальном отчете, изменения будут отражены во всех отчетах, в которые страница добавлена ссылкой. И наоборот, при изменении страницы в одном из отчетов, в котором есть ссылка на нее, она будет изменена и в оригинальном отчете.   Если все прошло успешно вам будут доступны добавленные страницы из выбранного шаблона, внизу дизайнера.   Для объединения их в один отчет вы можете сохранить текущий измененный шаблон, или сохраните в новый шаблон, для этого выберите пункт меню "Файл" и далее "Сохранить как...". Сохраните новый отчет под новым именем.   В этой статье мы подробно рассмотрели, как объединить несколько отчётов в один. Изучили основные инструменты и методы, которые предоставляет FastReport .NET для объединения отчётов, а также разобрались, как эффективно их использовать.
Читать