Звіти для NORD POS
Беремо дані, JasperReports та заповнюємо шаблон в iReport

Завантажуємо основу
Перше, що потрібно зробити після встановлення та запуску iReport, це створити чистий аркуш шаблону для подальшого заповнення елементами звіту (командаFile -> New.). Я вибрав шаблон формату A4, розташований портретно.

Надалі ви можете змінити, як формат аркуша, так і поля відступів на ньому (командаFormat - Page format.). І тут ви зустрінетеся з першою проблемою, яку доведеться враховувати по ходу всієї роботи з JasperReports, неможливістю точно виставити значення у звичних нам міліметрах. Точно можна виставити тільки значення в пікселях, при цьому на один дюйм припадає 72 пікселі, а ось у міліметрах завжди буде дробове значення 25,4 мм. У звичайному звіті зі стовпців це не дуже суттєво, але якщо робити шаблон етикетки, то такий підхід до розрахунків вам зіпсує значно нерви, тому що під рукою тільки міліметрова лінійка і необхідно буде експериментально підібрати, кількість пікселів яка буде вміщуватися при друку на заготівлю етикет стрічки. Ось як у мене вийшло:

І ці розміри приблизно відповідатимуть відступам зверху та знизу по 11 мм, ліворуч 15 мм, а праворуч 10 мм.
Підключаємо джерело
Якщо шаблон форми звіту, це основна візуальна складова JasperReports, то джерела даних це внутрішня основа механізму обробки та побудови звіту. Як джерело даних, можуть служити як бази або сховища даних, так і просто табличні або текстові файли. Але в моєму випадку з NORD POS як джерело даних виступить база даних Apache Derby, що підключається через JDBC-драйвер. Оскільки бібліотекадрайвера клієнта Apache Derby за умовчанням не додана в оточення iReport, попередньо потрібно вказати до неї шлях у параметрах (командаTools -> Options) і перезавантажити iReport.

Спочатку джерело обране за замовчуванням порожнє.
Але увійшовши до параметрів, можна буде його додати, зробивши джерелом інформації для заповнення полів звіту.

Вказавши параметри JDBC-драйвера та запустивши попередньо NORD POS, можна перевірити з'єднання. А щоб переконатися, що поля бази даних доступні JasperReports, зробимо простий запит.

Наше джерело готове до використання.
Пишемо запит
При цьому відразу хочу попередити, при побудові SQL-запитів постарайтеся уникати в них конструкцій для групування даних безпосередньо на рівні джерела, але не забувайте відсортувати дані. Краще довірити всі операції пов'язані з консолідацією інформації безпосередньо JasperReports, так ваш звіт буде більш універсальним для різних СУБД, а ви надалі гнучкіше зможете змінювати послідовність алгоритмів обробки за поданням даних у різній формі.
У результаті панелі структури звіту стануть доступні поля з джерела даних.

Розміщуємо дані
Коли дані доступні, саме час розповісти про те, як їх розмістити у звіті. Для початку просто розмістимо отримані поля в секціїDetail, автоматично підписи до полів будуть винесені до секції заголовкаColumn Header.

Дані отримані та звіт сформований, тепер можна розпочати їх обробку та оформлення звіту для більш наочного подання інформації.
Оформлюємо шаблон
Почнемо з найпростішого, зробимо заголовок і нижнійколонтитул нашого звіту. Для цього в секціюTitleдодамо підпис і синій банер для фону, аPage Footerполе з підстановкою змінних для кількості сторінок.
Для того, щоб надати одноманітність звітам, рекомендую використовувати набір стилів, зробивши один з них основним за замовчуванням. Стилі – це група полів на початку нашого шаблону, вони встановлюють загальні параметри для оформлення елементів звіту, і можуть бути задані не тільки для текстових елементів, але й для фігур і ліній, включених до шаблону.
Робимо розрахунки
При створенні шаблонів у розділі змінних автоматично генерується кілька лічильників, їх значення змінюється залежно від положення шаблону. Наприклад, ми вже використовувалиPAGE_NUMBERдля підрахунку сторінок, при цьому використовуючи одну і ту ж змінну, але задавши параметрevaluationTime=«Report»для другого поля, ми отримали загальну кількість сторінок у звіті.

Для вказівки порядкового номера номенклатурної позиції у звіті використовуємо зміннуCOLUMN_COUNT, вибравши її зі списку та вставивши у вираз для розрахунку значення поля.
Значення артикулаPRODUCT_REFERENCE, так як воно містить лише цифри і знак мінус як роздільник між кодом групи і кодом товару, помістимо в окремий об'єкт генеруючий штрих-код.

ПолеPRODUCT_NAME,PRODUCT_PRICESELLтаTAX_RATEзалишимо такими, якими вони були отримані з бази даних, лише вказавши патерни дляPRODUCT_PRICESELLвалюти, а дляTAX_RATEвідсотка.


Останнім ми йдемо поле розрахунку для отримання суми ціни з податком.

Групуємо поля
Друга, це фінальна секція звітуSummary, у нійREPORT_COUNTпідрахує скільки всього номенклатурних позицій увійшло до нашого звіту.
Шаблон готовий

Тепер можна приступати до його інтеграції в NORD POS, але цьому буде присвячено другу частину статті. А в цій частині я постарався максимально узагальнено і просто розповісти про основні дії для створення шаблонів в iReport, так що описане тут стане у нагоді не тільки користувачам NORD POS, а всім у кого з'явилася необхідність уперше створити власний звіт для бібліотеки JasperReports.