Snap — новая платформа для создания отчетов. Часть 1
Классно, когда отчеты делают не программисты, а сами пользователи. Но большиство существующих дизайнеров отчетов безумно сложны. Представьте, как было бы здорово, если бы ваш главный бухгалтер мог конструировать свои отчёты прямо в Ворде! Фантастика? Вовсе нет. Это Snap от DevExpress.Посмотрите своими глазами, как прост в использовании этот контрол для программистов и конечных пользователей:
[embedded content]
Под катом вы найдете подробное описание всего, что умеет делать Snap на текущий момент.Мы не стали писать новый продукт с нуля. За основу был взят наш Rich Text Editor, который реализует всю инфраструктуру для создания сложных документов — как из пользовательского интерфейса, так и полностью из кода. Использование Rich Text Editor позволяет удобно и быстро создавать шаблоны для простых и master-detail отчетов, не требуя дополнительного программного обеспечения, и затем менять их, не привязываясь к внутреннему устройству конкретного формата. Серьезным плюсом к этому является возможность использования конечным пользователем навыков работы с Microsoft Word.
Затем мы добавили использующийся в наших компонентах мастер подготовки источников данных, позволяющий пользователям добавлять нужные для работы данные практически без вмешательства разработчиков.
Задавать источники данных можно не только через пользовательский интерфейс. Предусмотрены возможности выбора — в режиме конструктора или динамически из кода, на этапе выполнения программы. После того, как источник данных был выбран и соответствующим образом настроен, можно приступать к созданию полноценных отчетов.
Структура данных будет визуально представлена на панели обозревателя. Для того, чтобы получить готовый документ, достаточно просто выбрать необходимые поля и перетащить их в нужное место, или же просто дважды щелкнуть по ним — в этом случае они добавятся в соответствии с текущим положением каретки. Если нужно добавить данные в уже созданную таблицу, то это можно легко сделать при помощи хот-зон.
При этом сразу будут использованы реальные данные — фактически, дизайнер не просто создает заполнители для динамического содержимого, а показывает итоговый вид отчета. Единственное отличие от конечного результата заключается в том, что в режиме разработки используется ограниченное число записей. Выбранные данные автоматически будут сгруппированы в таблицу, но при желании их легко сконвертировать в обычный текст.
Также процесс вставки данных можно более тонко настроить, используя продуманный набор событий, уведомляющих о каждом шаге подготовки документа.
При этом для одного отчета можно использовать сколько угодно независимых источников данных, а используя таблицы или многоколоночную разметку документа, их можно легко сравнивать.
Немаловажно, что Snap является WYSIWYG редактором в полном смысле этого слова. Независимо от того, создаете ли вы новый отчет, модифицируете имеющийся или используете функцию предварительного просмотра перед печатью, документ выглядит в точности так, как он будет выглядеть на бумаге.
Помимо простой вставки данных в документ, Snap предоставляет внушительный набор функций для их обработки и представления в нужном виде, в который входят возможности группировки, сортировки, фильтрации, анализа и расчетов, использование параметров и вычисляемых полей, форматирование результатов.
Не все данные удобно представлять в виде простого текста. Snap имеет целый арсенал средств визуализации данных, среди которых чекбоксы, изображения, штрихкоды, графики и спарклайны.
Ни один инструмент создания отчетов нельзя назвать полноценным, если он не предоставляет простого и удобного способа создавать иерархические отчеты.
Широко распространенным сценарием, на котором я хотел бы остановиться подробнее, является mail merge — создание большого числа однотипных документов на основе общего шаблона, в частности, подготовка почтовой рассылки с извлечением имен и адресов из базы данных. Для того, чтобы переключить документ в режим подготовки такого шаблона, достаточно просто выбрать соответствующий пункт контекстного меню для одного из добавленных источников данных.
Разумеется, выбрать подобным образом источник данных можно и из кода. После этого Snap будет рассматривать весь документ как шаблон, который должен быть повторен для каждой записи в источнике. При этом режим mail merge также поддерживает иерархические данные для создания отчетов.
После того, как в шаблон добавлены нужные данные, их можно обрабатывать, как и в случае обычного отчета. Можно выполнить сортировку, чтобы упорядочить записи в зависимости от значения одного или нескольких полей.
А можно отфильтровать данные, чтобы показать только необходимую информацию. При этом Snap предоставляет два возможных сценария фильтрации данных. Можно просто явно выбрать те записи, которые должны быть показаны:
Если же простого выбора недостаточно, можно создать сложное условие выборки, используя соответствующий диалог:
Теперь, когда все готово, можно посмотреть результат для конкретной записи:
Или получить окончательный результат, послав отчет на печать, сэкспортировать его в любой поддерживаемый формат (например, doc, docx, rtf, odt, html, mht, pdf) или вывести в отдельное окно в режиме предварительного просмотра. Также можно выбрать, какие записи должны войти в итоговый документ и как отделить каждую из записей.
Поскольку операция создания результирующего отчета может занимать значительное время, мы позаботились о том, чтобы она выполнялась в отдельном потоке, позволяя взаимодействовать с основным приложением, наблюдать за ходом выполнения генерации и при необходимости, прерывать создание отчета.
Скучная стандартная форма может быть с легкостью заменена на что-то более симпатичное:
А теперь, ложка дегтя — в настоящее время Snap представлен только на платформе WinForms.
Тем не менее, очень надеюсь, что продукт вас заинтересовал. Познакомиться с ним поближе можно, скачав триальную версию.
Во второй части статьи мы заглянем под капот и поближе познакомимся с техническими деталями. Я продемонстрирую работу с API на примере популярных задач, возникающих при подготовке отчета и постараюсь доказать, что простота использования конечным пользователем была достигнута не в ущерб функциональности. Если у вас возникли какие-то вопросы — задавайте их в комментариях, буду рад ответить всем.