Как сделать чек из программы Windows Forms

30.05.2020

Приложения Windows Forms - это основа каждого .NET разработчика. Сколько таких приложений создается каждый день по всему миру не счесть. Именно такие приложения несут всю тяжесть ежедневной работы пользователя, будь то текстовый редактор или какая-либо информационная система учета. По сравнению с консольными приложениями Windows Forms рассчитаны на графическую составляющую - формы для вывода информации и взаимодействия с пользователем. Работать с такими программами многократно удобнее и быстрее, чем с консольными. 

Разрабатывая информационные системы, мы обеспечиваем пользователю возможность работать с данными – добавлять, редактировать и удалять, но самое главное – отображать в удобочитаемом виде. И в части отображения информации неотъемлемой частью программы выступает отчетность. Именно отчеты позволяют отображать информацию в нужном виде – счета, чеки, накладные и др. Ведь с переходом к электронному документообороту бюрократия не уменьшилась и нам требуется создавать документы по специальным формам и стандартам.

Одним из таких документов, как уже говорилось выше является товарный чек (sales receipt). Если ваша информационная система или автоматизированная система учета предназначена для учета продаж, то такой документ вам необходимо выдавать покупателю. В этой статье мы рассмотрим, как выводить товарный чек из вашей WinForms программы. Самым простым и логичным способом будет использовать генератор отчетов, для создания нужного шаблона документа, а данные в отчет будут поступать из пользовательской программы.

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

  1. Вы можете создать источник данных в своем пользовательском приложении, затем вызвать во время выполнения программы генератор отчетов и создать шаблон. Однако в этом случае, после создания шаблона отчета, нам придется остановить программу и внести правки в код приложения, для экспорта созданного отчета в нужный формат;

  2. Вы можете запустить программу-дизайнер отчетов, создать в нем подключение к источнику данных, который вы будете использовать в пользовательском приложении для передачи в отчет. Затем, вы создаете шаблон отчета, сохраняете его. После чего, во время программирования своего приложения, вы укажете путь к созданному отчету.

Наша задача создать следующий шаблон:

Sales receipt report template

В товарном чеке будут выводиться данные о продавце, покупателе, проданном товаре. Для некоторых стран принято отдельно указывать процент налогового сбора, рассчитывать сумму налогового сбора и финальную сумму с учетом налогового сбора. 

Прежде всего нужно сказать о структуре данных. От нее зависит и состав бэндов данных.

В нашем случае данные о продажах берутся из таблиц: Orders, Order Details, Products, Employees и Customers. Чтобы отображать данные по конкретному заказу из каждой таблицы, все они должны быть связаны. Для этого, в FastReport.NET предусмотрен механизм связывания таблиц по ключам:

 Data source Orders with relations

Таблица Orders связана с Customers и Employees. Это значит, что для конкретной записи заказа, из этих таблиц по ключам будут выбраны соответствующие данные.

Обратите внимание, на скриншот с шаблоном отчета. Для бэнда Data выбран источник Orders. Это означает, что если нам потребуется выводить информацию из Customers и Employees, то нужно брать ее из связей:

 Data source Customers

Бэнд «Данные» имеет детальный бэнд, со своим заголовочным и подвальным бэндами. Для детального бэнда «Данные» определен источник Order Details. Эта таблица тоже имеет связи:

 Data source Order Details with relations

Как вы, наверное, предполагали, существует связь с таблицей Orders. А также с таблицей товаров Products, из которой можно взять наименования.

Теперь, когда понятно, что основная информация берется из таблицы Orders, а детализирующая информация по товарам из Order Details, мы рассмотрим итоги.

Первый итог Line Total – умножение количества товара на цену рассчитывается простым перемножением полей: [[Order Details.UnitPrice] * [Order Details.Quantity]]. Этот итог рассчитывается для каждого наименования товара. 

Далее необходимо суммировать все итоговые суммы в этом столбце и отображать в поле Sub Total. Для этого нужно создать объект итога в окне Данные:

 Create report Total

Назовем его SubTotal и зададим свойства в появившемся окне:

 Adjust total

Как видите мы использовали функцию сложения для итога. В качестве выражения для данных мы использовали комбинацию из умножения тех же полей, что и в Line Total. Таким образом мы получим сумму всех итогов по всем наименованиям товаров. 

В поле с заголовком Tax Rate указывается процентная ставка налогового сбора. В нашем случае она равна 5 процентам.

Для поля Tax Due необходимо рассчитать сумму налогового сбора. Формула проста – итог * процентная ставка:

[[SubTotal] * 0.05]

И, наконец, финальный итог – Total Due. Он состоит из суммы под итога и суммы налогового сбора:

[[SubTotal] + [SubTotal] * 0.05]

На этом создание чека завершено. Необходимо сохранить шаблон отчета.


В приложении 

После создания шаблона отчета, вы можете загрузить его в свое приложение, передать ему источник данных, построить и экспортировать, например, в формат PDF.

1
2
3
4
5
6
7
8
9
10
DataSet data = new DataSet(); //Создаем источник данных
data.ReadXml($"{Application.StartupPath}/nwind.xml"); //Загружаем в него xml
Report report = new Report();//Создаем объект отчета
report.Load($"{Application.StartupPath}/SalesReceipt.frx"); //Загружаем в объект отчета шаблон
report.RegisterData(data); //Регистрируем данные в отчете
report.Prepare(); //Строим отчет
using (var export = new FastReport.Export.PDF.PDFExport())
{
 export.Export(report, "SalesReceipt.pdf"); //Экспортируем отчет в формат PDF
}

Вот и все, этот код можно добавить к событию обработки нажатия кнопки, и для формирования чека вам потребуется лишь нажать кнопку в своем приложении. Теперь вы убедились, как просто создавать и выводить документы используя генератор отчетов.

28 октября 2024

Как настроить WSL 2 для работы с FastReport и FastCube

В этой статье попробуем вместе разобраться, как настроить WSL 2 для работы с компонентами FastReport и FastCube в Lazarus для Linux.
2 сентября 2024

Обзор облачного решения для создания и управления отчетами

МоиОтчеты Облако — это мощное облачное решение для создания и управления отчетами, обеспечивающее широкий спектр возможностей, от создания документов в различных форматах до интеграции с корпоративными системами.
8 августа 2024

Как установить FastReport .NET и его компоненты в Windows

Пошаговая инструкция по онлайн и ручной установке через регистрационный код FastReport .NET и его компонентов в Windows.