Научная статья на тему 'СПРАВОЧНО-АНАЛИТИЧЕСКАЯ ИНФОРМАЦИОННАЯ СИСТЕМА ДЛЯ ОПТОВОЙ БАЗЫ'

СПРАВОЧНО-АНАЛИТИЧЕСКАЯ ИНФОРМАЦИОННАЯ СИСТЕМА ДЛЯ ОПТОВОЙ БАЗЫ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
90
7
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ИНФОРМАЦИОННАЯ СИСТЕМА / АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ / ФУНКЦИИ ИНФОРМАЦИОННОЙ СИСТЕМЫ / СОЗДАНИЕ ИНФОРМАЦИОННОЙ СИСТЕМЫ / INFORMATION SYSTEM / DOMAIN ANALYSIS / INFORMATION SYSTEM FUNCTIONS / CREATION OF AN INFORMATION SYSTEM

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Федотов В.А.

Статья посвящена разработке справочно-аналитической информационной системы для оптовой базы.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

REFERENCE ANALYTICAL INFORMATION SYSTEM FOR WHOLESALE BASE

The article is devoted to the development of a reference and analytical information system for the wholesale base.

Текст научной работы на тему «СПРАВОЧНО-АНАЛИТИЧЕСКАЯ ИНФОРМАЦИОННАЯ СИСТЕМА ДЛЯ ОПТОВОЙ БАЗЫ»

УДК 004

Федотов В.А. студент 2 курса

факультет «Информационные системы и технологии» Северный Арктический Федеральный Университет Высшая школа информационных технологий и

автоматизированных систем Россия, г. Архангельск СПРАВОЧНО-АНАЛИТИЧЕСКАЯ ИНФОРМАЦИОННАЯ СИСТЕМА ДЛЯ ОПТОВОЙ БАЗЫ

Аннотация: Статья посвящена разработке справочно-аналитической информационной системы для оптовой базы.

Ключевые слова: Информационная система, анализ предметной области, функции информационной системы, создание информационной системы.

Fedotov V.A.

student, 2 year, faculty "Information Systems and Technology" Northern Arctic Federal University, Graduate School of Information

Technology and Automated Systems Russia, Arkhangelsk REFERENCE ANALYTICAL INFORMATION SYSTEM FOR

WHOLESALE BASE

Annotation: The article is devoted to the development of a reference and analytical information system for the wholesale base.

Keywords: Information system, domain analysis, information system functions, creation of an information system.

1 анализ предметной области

1.1 анализ деятельности оптовой базы

Склад предприятия «Оптовая база» занимается хранением, заказом и реализацией различных товаров. На склад привозят товар, который заказывают работники данного склада. Поступивший товар вносится в базу. После этого товар доступен для заказа со склада заказчикам.

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

- идентификатор;

- название;

- категория;

- количество;

- единицы измерения;

- стоимость;

- валюта;

- поставщик;

- описание.

Товары на склад доставляют поставщики. Они могут доставлять одинаковые товары с различными характеристиками и стоимостью. Поставщики характеризуются следующими параметрами:

- идентификатор;

- имя;

- фамилия;

- email;

- телефон;

- адрес.

Для работника склада необходимо реализовать возможность создания накладных на поставку. Накладная должна содержать следующие параметры:

- название товара;

- количество;

- цену;

- общую стоимость;

- название накладной;

- поставщик.

После создания накладной работнику склада необходимо просматривать все созданные накладные, в том числе и заказчиком.

С данной информационной системой должны работать следующие группы пользователей:

- администратор склада;

- работник склада;

- заказчик.

Администратор склада должен иметь возможность управления аккаунтами других пользователей.

Работник склада должен иметь возможность решать следующие задачи:

- принимать новый товар и вводить его в информационную систему;

- относить товар к конкретной категории;

- создавать и редактировать данные о заказчиках и поставщиках;

- создавать накладную на поставку товара;

- просмотр созданных накладных и их содержание;

- создавать и редактировать категории товаров. 1.2 Определение связей (отношений)

Следующим этапом анализа предметной области является определение связей (отношений), в которых находятся составляющие предметную область объекты. Для более подробного описания взаимоотношений внутри системы рассмотрим связи между сущностями:

- поставщик и заказчик создают накладные (1 - М);

- накладная содержит детали накладной (1 - М);

- детали накладной содержат товары (М - М);

- поставщик поставляет товары (1 - М);

- товары содержат категорию (1 - М).

2 проектирование приложения

2.1 описание функций информационной системы

Необходимо реализовать следующий функционал для данной информационной систем. При работе с товаром работник должен иметь возможность добавления, изменения, удаления и просмотра. А также нужно реализовать фильтры для выбора товаров по следующим параметрам:

- выбор товара по самой низкой цене;

- вывод товара по выбранному поставщику и/или категории.

Для дополнительной информации о имеющемся товаре нужно подсчитывать количество позиций товаров в базе данных. После выполнения всех необходимых действий следует очистить все поля для возможности начала новой деятельности.

При работе с поставщиками и заказчиками необходима возможность добавления, изменения, удаления и просмотра информации о них.

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

- промежуточный итог;

- скидка;

- НДС;

- сумма.

После окончания формирования накладной работник должен сохранить накладную для ее просмотра в дальнейшем. А также реализовать возможность вывода на печать и сохранения в отдельный документ только что созданной накладной на поставку. После окончания деятельности необходимо очищать все поля для возможности создания новой накладной.

Необходима возможность просмотра накладных, а также их отображение по типу накладной.

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

2.2 Описание ЦМЪ диаграммы оптовой базы

Для более наглядного представления функционирования изобразим ЦМЪ диаграмму, представленную на рисунке 1. ЦМЪ диаграмма имеет уникальную и прямую нотацию, которая дает визуальное представление

наиболее важных аспектов информационной системы.

РИСУНОК 1 - UML- ДИАГРАММА ОПТОВОЙ БАЗЫ

На рисунке 1 изображены 3 вида пользователя. Каждый пользователь имеет ряд определенных функций. Например, пользователь «Worker» имеет возможность добавления, изменения, удаления и просмотра товаров, категорий, поставок и накладных.

2.3 проектирование базы данных

Далее перейдем к проектированию базы данных. Данный этап создания информационной системы разрабатывался в рамках дисциплины «Базы данных».

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

Сущности, входящие в модель, и их первичные ключи:

- категории (id_category);

- детали накладной (id_invoice_detail);

- заказчик (id_customer);

- товары (id_product);

- товары - детали накладной (id_product и id_invoice_detail);

- накладные (id_invoice);

- поставщик (id_provider);

- пользователь (id_user).

Вторичные ключи сущностей:

- детали накладной (id_product(FK1), cust_prov_id(FK2), id_invoice(FK3));

- товары (id_category(FK1), id_provider(FK2));

- товары - детали накладной (id_product(FK 1) и id_invoice_detail(FK2));

- накладные (шз^гоу^СРЮ)); Наименование и виды связей между сущностями:

- поставщик и заказчик создают накладные (1 - М);

- накладная содержит детали накладной (1 - М);

- детали накладной содержат товары (М - М);

- поставщик поставляет товары (1 - М);

- товары содержат категорию (1 - М).

ER - диаграмма для разрабатываемой информационной системы представлена на рисунке 2.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

РИСУНОК 2 - ЕЯ - ДИАГРАММА

Далее необходимо расписать таблицы, создаваемые в базе данных (Таблица 2.3.1).

Таблица 2.3.1 - Атрибуты сущностей и их тип данных

Название атрибута Тип данных

Сущность «Товары»

id_product int

name varchar(255)

category Int

Название атрибута Тип данных

Quantity int

Unit varchar(10)

Cost decimal(18,2)

Сущность «Товары»

Value varchar(15)

Provider int

Description text

added_date datetime

added_by int

change_date datetime

Сущность «Категории»

id_category int

Title varchar(255)

Description text

added_date datetime

added_by int

Сущность «Заказчик»

id_customer int

first_name varchar(255)

full name varchar(255)

Type varchar(255)

Email varchar(120)

Contact varchar(16)

Address text

added_date datetime

added_by int

Сущность « Поставщик»

id_provider int

first_name varchar(255)

Название атрибута Тип данных

full name varchar(255)

Type varchar(255)

Email varchar(120)

Сущность « Поставщик»

Contact varchar(16)

Address text

added_date datetime

added_by int

Сущность «Накладная»

id_invoice int

Type varchar(50)

cust_prov_id int

grandTotal decimal(18,2)

invoice_date datetime

Tax decimal(18,2)

Discount decimal(18,2)

added_date datetime

added_by int

nameInvoice varchar(120)

Сущность «Детали накладной»

id_invoice_detail int

product_id int

Cost decimal(18,2)

Quantity int

Total decimal(18,2)

cust_prov_id int

added_date datetime

added_by int

id_invoice int

Название атрибута Тип данных

Сущность «П ользователь»

id_user int

first_name varchar(255)

Сущность «П ользователь»

full name varchar(255)

Email varchar(120)

Username varchar(120)

Password varchar(120)

Contact varchar(16)

Address text

Gender varchar(10)

user_type varchar(30)

added_date datetime

added_by int

Описание логики работы приложения:

- проект содержит клиентскую и серверную части;

- при запуске ИС пользователю открывается авторизация (система имеет 3-х основных пользователей - администратор, работник и заказчик), где пользователь вводит необходимые данные для входа;

- после правильно введенных данных при авторизации система направит пользователя в рабочее пространство, в котором будет осуществляться деятельность работника;

- работник может переключаться между UserControl с помощью верхнего меню;

- после переключения содержимое UserControl остается неизменным, что позволяет работать во всех окнах сразу;

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

3 реализация информационной системы для оптовой базы

3.1 Выбор программного обеспечения

Для создания информационной системы будем использовать интегрированную среду разработки Microsoft Visual Studio, потому что это оригинальная среда, которая позволяет редактировать, отлаживать и создавать код, а затем публиковать приложения. Интегрированная среда разработки (IDE) - это многофункциональная программа, которую можно использовать для различных аспектов разработки программного обеспечения. Помимо стандартного редактора и отладчика, которые существуют в большинстве сред IDE, Visual Studio включает в себя компиляторы, средства выполнения кода, графические конструкторы и многие другие функции для упрощения процесса разработки программного обеспечения[1].

Для создания базы данных для информационной системы будем использовать Microsoft SQL Server Management Express, потому что она больше подходит для разработчиков, использующих .NET в качестве языка разработки, в отличии от MySQL. Также данные СУБД имеют ощутимые отличия в синтаксисе, где выбор остается за разработчиком. И та и другая версия имеет бесплатные версии, где MS SQL Server Express - версия, которая, в отличии от MySQL, может быть использована в коммерческих разработках без лицензионных ограничений. Необходимо отметить, что MS SQL Server имеет собственную, ультрасовременную систему безопасности[2].

3.2 описание структурной схемы

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

Рисунок 3 - Структурная схема базы данных 3.3 создание информационной системы 3.3.1 описание метода авторизации

Создание информационной системы начнем с выполнения авторизации в приложении для обеспечения неких ограничений, так как им будут пользоваться различные типы пользователей. При запуске приложения пользователю откроется окно авторизации, в котором он вводит свои данные, такие как логин и пароль, а также выбирает тип пользователя из уже имеющихся (администратор, работник, заказчик). Введенные данные сравниваются с данными, уже содержащимися в базе данных. Метод проверки введенных пользователем данных содержится в приложении А. Методы обработки нажатия на кнопку закрытия окна и на кнопку авторизации содержатся в приложении Б.

После успешной авторизации, например для работника, система перенаправляет пользователя в форму, где выполняется вся необходимая деятельность в информационной системе. Вверху формы расположено меню, с помощью которого пользователь выбирает нужные ивегСоп1го1 для его работы. Методы обработки нажатия по меню находятся в приложении В.

Меню имеет следующие пункты: товары, заказчик, поставщик, поставка, накладные и категории. Данные пункты открываются в ивегСоп1хо1, а так как ивегСоп1го1 открывается внутри формы, это гораздо удобнее при использовании, в связи с отсутствием большого количества окон.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

3.3.2 Описание методов в UserControl «Товары»

При открытии UserControl «Товары» пользователю открывается новое окно, которое имеет следующий ряд возможностей:

- добавление, изменение, удаление и просмотр товаров, имеющихся на складе (при добавлении;

- выводить количество позиций товаров, имеющихся в базе данных;

- выводить товары по минимальной стоимости;

- выводить товары по определенному поставщику и/или категории;

- поиск товаров из общего списка, по ключевым словам, таким как идентификатор, название товара, стоимость и количество;

- после окончания каких - либо работ есть возможность очистить все

поля.

При добавлении товара некоторые параметры необходимо выбирать из уже имеющихся, например, категорию и поставщика. Данные параметры берутся из базы данных.

Метод просмотра товаров работает следующим образом: в запросе прописывается отображение всех товаров, данный метод вызывается при загрузке UserControl.

Метод добавления товаров работает следующим образом: значения из textbox, которые вводит пользователь присваиваются соответствующим ячейкам в таблице, данный метод вызывается при нажатии на кнопку «Добавить».

Метод изменения товаров работает аналогичным образом с добавлением товаров, только для изменения необходимо выбрать товар для того, чтобы соответствующие значения появились в textbox, в textbox вносятся необходимые изменения, данный метод вызывается при нажатии на кнопку «Изменить».

Метод удаления товаров работает следующим образом: выбирается товар, как в методе по изменению, затем выбранный товар удаляется по идентификатору, данный метод вызывается при нажатии на кнопку «Удалить».

Метод поиска товаров работает следующим образом: пользователь вводит какое - либо значение в textbox, оно проверяется на совпадение с базой данных. Далее выводятся все строки, которые имеют совпадение по какому -либо параметру.

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

Методы по просмотру, добавлению, изменению, удалению, поиску и выборкам товаров по определенным параметрам находятся в приложении Г. Методы обработки нажатия на кнопки находятся в приложении Д.

3.3.3 описание методов в UserControl «Заказчик», UserControl «Поставщик» и UserControl «Категории»

Такие ивегСоп1го1, как заказчик, поставщик и категории имеют аналогичные возможности:

- добавление заказчика, поставщика или категории;

- изменение заказчика, поставщика или категории;

- удаление заказчика, поставщика или категории;

- просмотр заказчика, поставщика или категории;

- поиск заказчика, поставщика или категории.

Вышеуказанные методы работают аналогично с методами в ивегСоп1го1 товары.

3.3.4 описание методов в ивегСоп1хо1 «Поставка»

При открытии ивегСоп1го1 «Поставка» пользователю открывается новое окно, в котором формируется накладная на поставку. Создание накладной происходит следующим образом:

- пользователь выбирает поставщика, выбор осуществляется через поиск (поиск работает аналогично с поиском в ивегСоп1го1 «Товары») и слева выводится список товаров, которые доступны у данного поставщика;

- затем в строке ниже пользователь ищет необходимый товар с помощью поиска (поиск работает аналогично с поиском в ивегСоп1го1 «Товары»), вводит название накладной, указывает необходимое количество товара и нажимает кнопку «Добавить», далее цикл повторяется пользователем до тех пор, пока пользователь не закончит формирование накладной;

- после формирования накладной пользователь нажимает кнопку «Сохранить», а также он может распечатать накладную.

При нажатии кнопки «Добавить» блокируется строка поиска по поставщикам и строка с названием накладной, чтобы пользователь не смог добавлять товары от разных поставщиков в одну накладную, а также если пользователь оставил пустые 1ех1:Ьох вылезет предупреждение. Методы обработки нажатия на кнопки находятся в приложении Е.

3.3.5 описание методов в ивегСоп1хо1 «Накладная»

При открытии №егСоПхо1 «Накладная» пользователю открывается новое окно, в котором отображается содержание накладной. Пользователь может вывести накладные по типу (накладная на заказ или на поставку) или вывести все накладные.

Метод отображения содержимого накладной работает следующим способом: пользователь выбирает накладную (строку), берется идентификатор накладной и выводятся все товары, которые содержат данный идентификатор.

Метод отображения накладных по типу работает следующим образом: пользователь выбирает тип накладной в СошЬоБох, запрос берет значение из СошЬоБох и выводит необходимые накладные.

3.3.6 Описание методов в ивегСоп1хо1 «Пользователи»

При авторизации как администратор пользователь имеет возможность создания новых учетных записей для других пользователей. ивегСоп1хо1

пользователи имеет аналогичные возможности, например, с ивегСоп1хо1 товары:

- добавление пользователей;

- изменение пользователей; удаление пользователей; просмотр пользователей; поиск пользователей.

Вышеуказанные методы работают аналогично с методами в UserControl товары.

3.3.7 визуальное представление интерфейса

При запуске приложения пользователю откроется окно авторизации, представленное на рисунке 4. При создании данной формы использовались следующие элементы:

- panel;

- label;

- picturebox;

textbox; - button.

ОПТОВАЯ БАЗА

Вход в систему

Тип ПОЛИОЮТЙЛА

ЙХОД

РИСУНОК 4 - ОКНО АВТОРИЗАЦИИ

После успешной авторизации, например для работника, система перенаправляет пользователя в форму, изображенную на рисунке 5, где выполняется вся необходимая деятельность в информационной системе. Форма состоит из следующих элементов:

- menuStrip;

- label;

- picturebox;

- panel.

РИСУНОК 5 - ОКНО РАБОТНИКА

UserControl «Товары» представлен на рисунке 6. При создании данного UserControl использовались следующие элементы:

- panel;

- picturebox;

- label;

- textbox;

- button;

- combobox;

- dataGridView.

РИСУНОК 6 - USERCONTROL «ТОВАРЫ»

UserControl «Заказчик», UserControl «Поставщик» и UserControl «Категории» представлены на рисунке 7, рисунке 8 и рисунке 9 соответственно. Так как данные UserControl схожи в интерфейсе, то опишем их вместе. При создании данных UserControl использовались следующие элементы:

- panel;

- label;

- picturebox;

- textbox;

- button;

- dataGridView;

- combobox.

РИСУНОК 7 - USERCONTROL «ЗАКАЗЧИК»

РИСУНОК 8 - USERCONTROL «ПОСТАВЩИК»

РИСУНОК 9 - USERCONTROL «КАТЕГОРИИ»

UserControl «Поставка» представлен на рисунке 10. При создании данного UserControl использовались следующие элементы:

- panel;

- label;

- picturebox;

- textbox;

- button;

- dataGridView;

- dateTimePicker.

РИСУНОК 10 - USERCONTROL «ПОСТАВКА»

UserControl «Накладные» представлен на рисунке 11. При создании данного UserControl использовались следующие элементы:

- panel;

- label;

- combobox;

- button;

- textbox;

- dataGridView.

РИСУНОК 11 - USERCONTROL «НАКЛАДНЫЕ»

UserControl «Пользователи» представлен на рисунке 12. При создании данного UserControl использовались следующие элементы:

- panel;

- label;

- picturebox;

- textbox;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

- button;

- dataGridView;

- combobox.

РИСУНОК 12 - USERCONTROL «ПОЛЬЗОВАТЕЛИ»

4 тестирование системы

Для данной системы был выполнен тест подсчета итоговой суммы товаров при формировании накладной. Для выполнения данного теста необходимо создать файл UnitTest.cs в котором нужно прописать данные для тестирования в соответствии с рисунком 12.

1 Easing System}

using Microsoft.VisualStudio.TestTools.UnitTesting• using static StoreBase.UC.ucSupply}

4

Enamespace UnitTestProject2 6 |{

[TestClas s]

public class UnitTestl {

[TestMethod]

' public void TestMethodl() {

decimal productQuantity = 10} ; ! decimal productCost = 150} ; I decimal expected = 1500}

! ; My i = new My()j

decimal actual = i.Itog(productQuantity, productCost)j

; ' Assert.AreEqual(expectedj actual)} }

}

23 |_>

24

РИСУНОК 12 - МЕТОД ДЛЯ ТЕСТИРОВАНИЯ

Метод, который тестируем, находится в файле ucSupply.cs. В данном файле прописываем необходимый код (Листинг 4.1).

_Листинг 4.1 - Код для тестирования_

My i = new My();

decimal Total = i.Itog(productQuantity, productCost); Затем можно запустить тест. На рисунке 13 видно, что тест завершен успешно._

— Cell ntuEiij Pii ГЦмес С&ХхЛ ШЩИ hijfJaH.U cc-t^ilia ТК' MMril Ort) Ell|HV О - t! ■ ¡j й J1 - itytpu - ► Прк- И ; Ь Ш 1 ** 1 0'j^.i.t :-....... tn _ ? Я im-l -il' urtjprv.:- nCSiwV« IKpnnpiflnipt

n ■S ' J IT5 VtmrrliAse mxnw 1 \ f- ®авчвл».г«т(п Z2MC X T 1 " j X LU sr J 1j z [{ i г 1 ■ ■ ItDfVBflM-UC - L 1 ■ ■ , LmitTiitProjrcii j»tti*H 1 ■ iibl L : 1 ! ■ 4№ntl [ lnitHiirhoo ]

i 1 J. : . " ¡т. i pi-od'iit.iQuen-tltT ■ li p ■ jp-mhic-tCaat - IWfj j: BKpcctod ifiifti; i * r.L H ^VOs _i,.i] Bi.tu-j3 i . itDfll. produztO-jarititv, prodjcti-ait J;

41

It I J il, ■ sн с. Др*Б(|Ш|1 {■rafwc; i „ *e * ) i

РИСУНОК 13 - УСПЕШНОЕ ВЫПОЛНЕНИЕ ТЕСТА

Так же в информационной системе были выявлены следующие ошибки:

- ввод букв, где необходимы только цифры;

- добавление, изменение товара при не заполненных полях;

- при формировании накладной добавление товара от разных поставщиков.

Все ошибки, перечисленные выше были исправлены.

заключение

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

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

Использованные источники:

1. Современныеметоды и средства проектирования информационных систем [Электронный ресурс] : учебное пособие / сост. М.Е. Деменков, Е.А. Деменкова. — Электрон. дан. — Архангельск : САФУ, 2015. — 90 с. — Режим доступа: https://elanbook.com/book/96547. — Загл. с экрана.

2. Бурков, А.В. Проектирование информационных систем в Microsoft SQL Server 2008 и Visual Studio 2008 [Электронный ресурс] : учебное пособие / А.В. Бурков. — Электрон. дан. — Москва : , 2016. — 310 с. — Режим доступа: https://e.lanbook.com/book/100392. — Загл. с экрана.

3. Александров, Э.Э. Программирование на языке C в Microsoft Visual Studio 2010 [Электронный ресурс] : учебное пособие / Э.Э. Александров, В.В. Афонин. — Электрон. дан. — Москва : , 2016. — 570 с. — Режим доступа: https://e.lanbook.com/book/100410. — Загл. с экрана.

4. Интеллектуальный анализ данных средствами MS SQL Server 2008 [Электронный ресурс] : учебное пособие. — Электрон. дан. — Москва : , 2016.

— 337 с. — Режим доступа: https://elanbook.com/book/100609. — Загл. с экрана.

5. Разработка и защита баз данных в Microsoft SQL Server 2005 [Электронный ресурс] : учебное пособие. — Электрон. дан. — Москва : , 2016.

— 147 с. — Режим доступа: https://elanbook.com/book/100448. — Загл. с экрана.

6. Снетков, В.М. Разработка приложений на C# в среде Visual Studio 2005

[Электронный ресурс] : учебное пособие / В.М. Снетков. — Электрон. дан. — Москва : , 2016. — 956 с. — Режим доступа: https://elanbook.com/book/100467. — Загл. с экрана.

ПРИЛОЖЕНИЕ А (обязательное)

_Исходный код loginDAL_

class loginDAL {

static string myconnstring = ConfigurationManager.ConnectionStrings["connstring"].ConnectionString;

public bool loginCheck(loginBLL l) {

bool isSuccess = false;

SqlConnection conn = new SqlConnection(myconnstring);

try

{

string sql = "SELECT * FROM tbl_users2 WHERE username=@username AND password=@password AND user_type=@user_type";

SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters .AddWithValue("@username", l.username); cmd.Parameters.AddWithValue("@password", l.password); cmd.Parameters .AddWithValue("@user_type", l.user_type); SqlDataAdapter adapter = new SqlDataAdapter(cmd);

DataTable dt = new DataTable(); adapter.Fill(dt);

if (dt.Rows.Count > 0)

{

isSuccess = true;

}

else {

isSuccess = false;

}

}

catch (Exception ex) {

MessageBox.Show(ex.Message);

}

_finally_

{

conn.Close();

}

return isSuccess;

}

}

ПРИЛОЖЕНИЕ Б (обязательное)

_Исходный код frmLogin.cs_

public partial class frmLogin : Form {

public frmLogin() {

InitializeComponent();

}

loginBLL l = new loginBLL(); loginDAL dal = new loginDAL(); public static string loggedIn;

private void pboxClose_Qick(object sender, EventArgs e) {

this.Close();

}

private void btnLogin_Click(object sender, EventArgs e) {

l.username = txtUsername.Text.Trim(); l.password = txtPassword.Text.Trim(); l.user_type = cmbUserType.Text.Trim();

bool success = dal.loginCheck(l);

if(success == true) {

loggedIn = l.username;

switch (l.user_type) {

case "Администратор": {

frmAdmin admin = new frmAdmin();

admin.Show();

this.Hide();

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

}

break;

case "Работник": {

frmWorker worker = new frmWorker();

worker.Show();

this.Hide();

}

_break;_

case "Заказчик": {

frmCustomer customer = new frmCustomer();

customer.Show();

this.Hide();

}

break;

default:

{

MessageBox.Show("Неверный тип пользователя");

}

break;

}

}

else {

MessageBox.Show("Авторизация не выполнена. Попробуйте

снова.");

}

}

ПРИЛОЖЕНИЕ В (обязательное) Исходный код frmWorker.cs

public partial class frmWorker : Form {

public frmWorker() {

InitializeComponent();

}

public static string invoiceType;

productBLL p = new productBLL(); productDAL pdal = new productDAL(); userDAL udal = new userDAL(); categoriesBLL ct = new categoriesBLL(); categoriesDAL ctdal = new categoriesDAL(); providerBLL pr = new providerBLL(); providerDAL prdal = new providerDAL(); customerBLL c = new customerBLL(); customerDAL cdal = new customerDAL(); invoiceDAL tDAL = new invoiceDAL(); invoiceDetailDAL tdDAL = new invoiceDetailDAL();

ucProduct product = new ucProduct(); ucCustProv customer = new ucCustProv(); ucProvider provider = new ucProvider(); ucSupply supply = new ucSupply(); ucOrderAndSupply order = new ucOrderAndSupply();

ucInvoice invoice = new ucInvoice(); ucCategories categories = new ucCategories(); ucInvoiceCustomer uc1 = new ucInvoiceCustomer();

private void frmWorker_Load(object sender,

EventArgs e) {

lblLoggedInUser.Text =

frmLogin.loggedIn; }

private void frmWorker_FormClosed(object

sender, FormClosedEventArgs e) {

frmLogin login = new frmLogin();

login.Show();

this.Hide();

}

private void

товарыТоо1 StripMenuItem_Qick(obj ect sender,

EventArgs e) {

this.Control s. Add(product) ; product.BringToFront();

}

private void

3aKa34mToolStripMenuItem_Qick(object sender,

EventArgs e) {

this.Control s.Add(customer); customer.BringToFront();

}

private void

постaвщикToolStripMenuItem_Qick(object sender,

EventArgs e) {

this.Control s. Add(provider) ; provider.BringToFront();

}

_private void_

nocTaBKaToolStripMenuItem_Click(object sender,

EventArgs e) {

invoiceType = "Поставка";

this.Controls.Add(supply);

supply.BringToFront();

}

private void

3aKa3ToolStripMenuItem_Qick(object sender, EventArgs e)

{

invoiceType = "3aKa3";

this.Controls.Add(order);

order.BringToFront();

}

private void

HaK^HbieToolStripMenuItem_Qick(object sender,

EventArgs e) {

this.Controls.Add(invoice); invoice.BringToFront();

}

_private void_

категорииТоо^прМепиЙет1_СНск(оЬ)еС: sender,

EventArgs e) {

this.Controls.Add^ategories); сategories.BringToFront();

}

}_

ПРИЛОЖЕНИЕ Г (обязaтельное) Исходный код productDAL

class productDAL {

static string myconnstring = ConfigurationManager.ConnectionStrings["connstring"]. ConnectionString;

#region Отображение данных из БД

public DataTable Select() {

SqlConnection conn = new SqlConnection(myconnstring);

//Сохранение данных из БД DataTable dt = new DataTable();

try

{

String sql = "SELECT * FROM

tbl_product3";

SqlCommand cmd = new SqlCommand(sql, conn);

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

_conn.Open();_

adapter.Fill(dt); catch (Exception ex)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

MessageBox.Show(ex.Message); finally

conn.Close(); return dt;

}

#endregion

#region Добaвление дaнных в БД

public bool Insert(productBLL p) {

bool isSucces = false; SqlConnection conn = new SqlConnection(myconnstring);

try

{

String sql = "INSERT INTO tbl_product3 (name, category, quantity, unit, cost, value, provider, description, added_date, added_by) VALUES (@name, @category, @quantity, @unit, @cost, @value,

@provider, @description, @added_date, @added_by)";

SqlCommand cmd = new SqlCommand(sql, conn);

cmd.Parameters.AddWithValue("@name", p.name);

cmd.Parameters.AddWithValue("@category", p.category);

cmd.Parameters.AddWithValue("@quantity", p.quantity);

cmd.Parameters.AddWithValue("@unit",

p.unit);

cmd.Parameters.AddWithValue("@cost",

p.cost);

cmd.Parameters.AddWithValue("@value", p.value);

cmd.Parameters.AddWithValue("@provider", p.provider);

cmd.Parameters.AddWithValue("@description", p.description);

cmd.Parameters.AddWithValue("@added_date", p.added_date);

cmd.Parameters.AddWithValue("@added_by", p.added_by);

conn.Open();

int rows = cmd.ExecuteNonQuery();

if (rows > 0) {

isSucces = true;

}

else {

isSucces = false;

}

catch (Exception ex)

MessageBox.Show(ex.Message); finally

conn.Close(); return isSucces;

}

#endregion

#region Изменение дaнных в БД

public bool Update(productBLL p) {

bool isSuccess = false; SqlConnection conn = new SqlConnection(myconnstring);

try

{

String sql = "UPDATE tbl_product3 SET name=@name, category=@category, quantity=@quantity, unit=@unit, cost=@cost, " +

"value=@value, provider=@provider, description=@description, change_date=@change_date, added_by=@added_by WHERE id=@id";

SqlCommand cmd = new SqlCommand(sql, conn);

cmd.Parameters .AddWithValue("@name", p.name);

cmd.Parameters.AddWithValue("@category", p.category);

cmd.Parameters.AddWithValue("@quantity", p.quantity);

cmd.Parameters.AddWithValue("@unit",

p.unit);

cmd.Parameters.AddWithValue("@cost",

p.cost);

cmd.Parameters.AddWithValue("@value", p.value);

cmd.Parameters.AddWithValue("@provider", p.provider);

cmd.Parameters.AddWithValue("@description", p.description);

cmd.Parameters.AddWithValue("@change_date", p.change_date);

cmd.Parameters.AddWithValue("@added_by", p.added_by);

cmd.Parameters.AddWithValue("@id",

pid);

conn.Open();

int rown = cmd.ExecuteNonQuery();

if (rown > 0) {

isSuccess = true; _}_

else {

isSuccess = false;

}

catch (Exception ex)

MessageBox.Show(ex.Message); finally

conn.Close(); return isSuccess;

}

#endregion

#region Удаление данных из БД

public bool Delete(productBLL p)

{

bool isSuccess = false; SqlConnection conn = new SqlConnection(myconnstring);

try

{

String sql = "DELETE FROM tbl product3 WHERE id=@id";_

SqlCommand cmd = new SqlCommand(sql, conn);

cmd.Parameters.AddWithValue("@id",

pid);

conn.Open();

int rows = cmd.ExecuteNonQuery();

if (rows > 0) {

isSuccess = true;

}

else {

isSuccess = false;

}

catch (Exception ex)

MessageBox.Show(ex.Message); finally

conn.Close();

return isSuccess; _}_

#endregion

#region Поиск данных в БД

public DataTable Search(string keywords) {

SqlConnection conn = new SqlConnection(myconnstring);

DataTable dt = new DataTable();

try

{

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

String sql = "SELECT * FROM tbl_product3 WHERE id LIKE '%" + keywords + "%' OR name LIKE '%" + keywords + "%' OR quantity LIKE '%" + keywords + "%' OR cost LIKE '%" + keywords + "%' OR category LIKE '%" + keywords + "%' OR provider LIKE '%" + keywords + "%'";

SqlCommand cmd = new SqlCommand(sql, conn);

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

conn.Open();

adapter.Fill(dt);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message); _}_

finally {

conn.Close();

}

return dt;

}

#endregion

#region Выборка по товарам с наименьшей

ценой

public DataTable Search3(string keywords) {

SqlConnection conn = new SqlConnection(myconnstring);

DataTable dt = new DataTable();

try

{

String sql = "SELECT * FROM

tbl_product3 WHERE name LIKE '%" + keywords + "%' " +

"AND cost = (SELECT MIN(cost) FROM tbl_product3 WHERE name LIKE '%" + keywords + "%')";

SqlCommand cmd = new SqlCommand(sql, conn);

_SqlDataAdapter adapter = new_

SqlDataAdapter(cmd);

conn.Open(); adapter.Fill(dt);

catch (Exception ex)

MessageBox.Show(ex.Message); finally

conn.Close();

return dt;

}

#endregion

#region Выборка по категориям и поставщикам

public DataTable Search4(string keywords,

string keywordsl) {

SqlConnection conn = new SqlConnection(myconnstring);

DataTable dt = new DataTable();

try

{

_String sql = "SELECT * FROM

tbl_product3 WHERE category LIKE '%" + keywords + "%' AND provider LIKE '%" + keywordsl + "%'";

SqlCommand cmd = new SqlCommand(sql, conn);

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

conn.Open(); adapter.Fill(dt);

catch (Exception ex)

MessageBox.Show(ex.Message);

finally

conn.Close();

return dt;

}

#endregion #region Выборка количества товаров

public DataTable Quantity() {

SqlConnection conn = new SqlConnection(myconnstring);_

DataTable dt = new DataTable();

try

{

String sql = "SELECT COUNT(id) FROM tbl_product3";

SqlCommand cmd = new SqlCommand(sql, conn);

SqlDataAdapter adapter = new SqlDataAdapter(cmd);

conn.Open(); adapter.Fill(dt);

}

catch (Exception ex) {

MessageBox.Show(ex.Message);

}

finally

{

conn.Close();

}

return dt;

}

_#endregion_

ПРИЛОЖЕНИЕ Д (обязательное) Исходный код ucProduct.cs

#region btnAdd_Click ДОБАВИТЬ ТОВАРЫ private void btnAdd_Click(object sender,

EventArgs e) {

if (txtName.Text == "" || cmbCategory.Text == "" || txtQuantity.Text == "" || cmbUnit.Text == "" || txtCost.Text == "" || cmbValue.Text == "" ||

cmbProvider.Text == "" || txtDescription.Text == "")

{

MessageBox.Show(мЗаполните все

поля");

}

else {

//Получение данных из UI p.name = txtName.Text; p.category = cmbCategory.Text; p.quantity = decimal .Parse(txtQuantity.Text);

p.unit = cmbUnit.Text; p.cost = decimal.Parse(txtCost.Text); p.value = cmbValue.Text; _p.provider = cmbProvider.Text;_

p.description = txtDescription.Text; p.added_date = DateTime.Now;

//Получение имени пользователя, вошедшего в систему пользователя

string loggedUsr = frmLogin.loggedIn; userBLL usr = udal.GetlDFromUsername(loggedUsr); p.added_by = usr.id;

//Вставка данных в БД bool success = pdal.Insert(p); //Если данные успешно добавлены, то значение будет true, иначе будет false

if (success == true) {

MessageBox.Show("Новый продукт успешно добавлен");

clear();

//Отображение данных в таблице DataTable dt = pdal.Select(); dgvProduct.DataSource = dt;

}

else {

_MessageBox.ShowC'H удалось

добaвить новый продукт"); }

}

}

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

#endregion

#region btnUpdate_Click ИЗМЕНИТЬ

ТОВАРЫ

private void btnUpdate_Click(object sender,

EventArgs e) {

if (txtName.Text == "" || cmbCategory.Text == "" || txtQuantity.Text == "" || cmbUnit.Text == "" || txtCost.Text == "" || cmbValue.Text == "" ||

cmbProvider.Text == "" || txtDescription.Text == "")

{

MessageBox.Show("Пустое знaчение не

допускaется");

}

else {

//Получить зтачения из User UI p.id = int.Parse(txtID.Text); p.name = txtName.Text; p.category = cmbCategory.Text; p.quantity =

decimal .Parse(txtQuantity.Text);_

p.unit = cmbUnit.Text; p.cost = decimal.Parse(txtCost.Text); p.value = cmbValue.Text; p.provider = cmbProvider.Text; p.description = txtDescription.Text; p.change_date = DateTime.Now; //Получение имени пользователя, вошедшего в систему пользователя

string loggedUsr = frmLogin.loggedIn; userBLL usr = udal.GetIDFromUsername(loggedUsr);

p.added_by = usr.id;

//Изменение данных в БД bool success = pdal.Update(p);

if (success == true) {

MessageBox.Show("Информация о товаре успешно изменена");

clear();

//Отображение данных в таблице DataTable dt = pdal.Select(); dgvProduct.DataSource = dt;

}

else

_{_

MessageBox.Show("He удалось

изменить информацию о товаре"); }

}

}

#endregion

#region btnDelete_Click УДАЛИТЬ

ТОВАРЫ

private void btnDelete_Click(object sender,

EventArgs e) {

if (txtName.Text == "" || cmbCategory.Text == "" || txtQuantity.Text == "" || cmbUnit.Text == "" || txtCost.Text == "" || cmbValue.Text == "" ||

cmbProvider.Text == "" || txtDescription.Text == "")

{

MessageBox.Show("Пустое значение не

допускается");

}

else {

//Получение ID пользователя из

таблицы

p.id = int.Parse(txtlD.Text); _bool success = pdal.Delete(p);_

if (success == true) {

MessageBox.Show("Товар успешно

удален");

clear();

//Обновление данных в таблице DataTable dt = pdal.Select(); dgvProduct.DataSource = dt;

}

else {

MessageBox.ShowC'H удалось

удалить товар");

}

}

}

#endregion

#region txtSearch_TextChanged ПОИСК ТОВАРОВ

private void txtSearch_TextChanged(object

sender, EventArgs e) {

//Gолучить ключевое слово из текстового

поля

_string keywords = txtSearch.Text;_

//Проверка, есть ли ключевое слово в значении или нет

if (keywords != null) {

//Показать пользователя на основе

ключевых слов

DataTable dt = pdal.Search(keywords); dgvProduct.DataSource = dt;

}

else {

// Показать всех пользователей DataTable dt = pdal.Select(); dgvProduct.DataSource = dt;

}

}

#endregion

#region ВЫБОРКА ПО ПОСТАВЩИКАМ private void

cmbSearch_SelectedIndexChanged(object sender,

EventArgs e) {

//Получить ключевое слово из текстового

поля

_string keywordsl = cmbSearch.Text;_

string keywords = cmbSearchl.Text;

//Проверка, есть ли ключевое слово в значении или нет

if (keywords != null && keywordsl != null) {

//Показать пользователя на основе

ключевых слов

DataTable dt = pdal.Search4(keywords,

keywordsl);

dgvProduct.DataSource = dt;

}

else {

// Показать всех пользователей DataTable dt = pdal.Select(); dgvProduct.DataSource = dt;

}

}

#endregion

#region ВЫБОРКА ПО КАТЕГОРИЯМ private void

cmbSearch1_SelectedIndexChanged(object sender,

EventArgs e) {

_//Получить ключевое слово из текстового

поля

string keywordsl = cmbSearch.Text; string keywords = cmbSearchl.Text;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

//Проверка, есть ли ключевое слово в значении или нет

if (keywords != null && keywordsl != null) {

//Показать пользователя на основе

ключевых слов

DataTable dt = pdal.Search4(keywords,

keywordsl);

dgvProduct.DataSource = dt;

}

else {

// Показать всех пользователей DataTable dt = pdal.Select(); dgvProduct.DataSource = dt;

}

}

#endregion

#region ВЫБОРКА ПО ТОВАРАМ С НАИМЕНЬШЕЙ ЦЕНОЙ private void

cmbProduct SelectedIndexChanged(object sender,_

EventArgs e) {

//Получить ключевое слово из текстового

поля

string keywords = cmbProduct.Text;

//Проверка, есть ли ключевое слово в значении или нет

if (keywords != null) {

//Показать пользователя на основе

ключевых слов

DataTable dt = pdal.Search3(keywords); dgvProduct.DataSource = dt;

}

else {

// Показать всех пользователей DataTable dt = pdal.Select(); dgvProduct.DataSource = dt;

}

}

_#endregion_

ПРИЛОЖЕНИЕ Е (обязательное) Исходный код ucSupply.cs

#region ДОБАВЛЕНИЕ ТОВАРОВ

private void btnAdd_Click(object sender, EventArgs e) {

txtSearch.Enabled = false; txtNamelnvoice.Enabled = false;

string namelnvoice = txtNamelnvoice.Text;

string name = txtFirstName.Text;

string productName = txtProductName.Text;

if (productName == "" || namelnvoice == "" || txtProductCost.Text

== "" || txtProductQuantity.Text == "")

{

MessageBox.Showf'H выбран продукт или не введено имя

накладной");

}

else if (this.txtProvider.Text == this.txtFirstName.Text &&

this.txtFirstName.Text == name) {

My i = new My(); decimal productQuantity = decimal .Parse(txtProductQuantity.Text);

decimal productCost = decimal.Parse(txtProductCost.Text); //decimal Total = productQuantity * productCost; decimal Total = i.Itog(productQuantity, productCost); decimal subTotal = decimal.Parse(txtSubtotal.Text); subTotal = subTotal + Total;

invoiceDT.Rows.Add(productName, productQuantity, productCost, Total, nameInvoice, name);

dgvAddProduct.DataSource = invoiceDT; txtSubtotal.Text = subTotal.ToString();

//Скидка и НДС

subTotal = decimal.Parse(txtSubtotal.Text); decimal discount = 7;

decimal grandTotal = ((100 - discount) / 100) * subTotal; txtGrandTotal.Text = grandTotal.ToString();

decimal previousGT = decimal.Parse(txtGrandTotal.Text); decimal vat = 20;

decimal grandTotalWithVAT = ((100 + vat) / 100) *

previousGT;

txtGrandTotal.Text = grandTotalWithVAT.ToString();

txtProductSearch.Text = ""; txtProductName.Text = ""; txtProductQuantity.Text = "0.00"; txtProductCost.Text = "0.00";

}

else MessageBox.Show("Данный товар не доступен у

выбранного поставщика"); }

#endregion

#region СОХРАНЕНИЕ НАКЛАДНОЙ

private void btnSave_Click(object sender, EventArgs e) {

//Получить значения из CustomerProvider списка форм invoiceBLL invoice = new invoiceBLL(); invoice.type = lblTop.Text;

//Получение ID поставщика //Получение имени поставщика string provName = txtFirstName.Text;

providerBLL pr = prDAL.GetProviderlDFromName(provName);

invoice.cust_prov_id = pr.id; invoice.grandTotal = Math.Round(decimal.Parse(txtGrandTotal.Text), 2);

invoice.invoice_date = DateTime.Now; invoice.tax = decimal.Parse(txtVat.Text); invoice.discount = decimal.Parse(txtDiscount.Text); invoice.namelnvoice = txtNamelnvoice.Text;

//Получение имени пользователя, вошедшего в систему

string username = frmLogin.loggedIn;

userBLL u = uDAL.GetlDFromUsername(username);

invoice.added_by = u.id; invoice.invoiceDetail = invoiceDT;

//Создание логической переменной = false bool success = false;

_//Код для вставки транзакции и деталей транзакции_

using (TransactionScope scope = new TransactionScope()) {

int invoicelD = -1;

//Создание логического значения и вставка накладной bool w = iDAL.Insert_Invoice(invoice, out invoicelD); //Цикл для вставки деталей накладной

for (int i = 0; i < invoiceDT.Rows.Count; i++) {

//Получение всех деталей для товаров invoiceDetailBLL invoiceDetail = new invoiceDetailBLL(); //Получение имени товаров и конвертация в ID string ProductName = invoiceDT.Rows[i][0].ToString(); productBLL p = pDAL.GetProductIDFromName(ProductName);

//Получение имени накладной и конвертация в ID string nameInvoice = invoiceDT.Rows[i][4].ToString(); invoiceBLL id = iDAL.GetInvoiceIDFromName(nameInvoice);

invoiceDetail.product_id = p.id; invoiceDetail.quantity = decimal.Parse(invoiceDT.Rows[i][1].ToString());

invoiceDetail.cost = decimal.Parse(invoiceDT.Rows[i][2].ToString());

invoiceDetail.total = Math.Round(decimal.Parse(invoiceDT.Rows[i][3].ToString()), 2); invoiceDetail.cust_prov_id = pr.id; invoiceDetail.added_date = DateTime.Now; invoiceDetail.added_by = u.id; invoiceDetail.id_invoice = id.id;

//Увеличение или уменьшение количества товаров string invoiceType = lblTop.Text;

//Проверка (Заказ или поставка) bool x = false;

if (invoiceType == "Заказ") {

x = pDAL.DecreaseProduct(invoiceDetail.product_id,

invoiceDetail .quantity);

}

else if (invoiceType == "Поставка") {

_x = pDAL.IncreseProduct(invoiceDetail.product id,

invoiceDetail .quantity);

}

//Вставка деталей транзакции в БД

bool y = idDAL.InsertlnvoiceDetail(invoiceDetail);

success = w && x && y;

}

if (success == true) {

//Транзакция завершена scope.Complete();

MessageBox.Show("Накладная успешно сохранена.");

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

}

else {

//Транзакция не завершена MessageBox.Show("Накладная не сохранена.");

}

}

}

#endregion #region ПЕЧАТЬ

private void btnPrinter_Click(object sender, EventArgs e) {

//Код для печати

DGVPrinter printer = new DGVPrinter();

printer.Title = "\r\n Оптовая база \r\n\r\n"; printer.SubTitle = "Россия, Архангельск, 165000 \r\n Телефон: +7-999-275-26-23 \r\n\r\n";

printer.SubTitleFormatFlags = StringFormatFlags.LineLimit | StringFormatFlags.NoClip;

printer.PageNumbers = true; printer.PageNumberlnHeader = false; printer.PorportionalColumns = false; printer.HeaderCellAlignment = StringAlignment.Near; printer.Footer = "Скидка: " + txtDiscount.Text + "%\r\n" + "НДС: " + txtVat.Text + "%\r\n" + "Сумма" + txtGrandTotal.Text + "\r\n"; printer.FooterSpacing = 15; printer.PrintDataGridView(dgvAddProduct);

MessageBox.Show("Печать накладной завершена успешно."); dgvAddProduct.DataSource = null; _dgvAddProduct.Rows.Clear();_

//Очистить сетки данных и очистить все текстовые поля

txtSearch.Text = "";

txtFirstName.Text = "";

txtEmail.Text = "";

txtContact.Text = "";

txtAddress.Text = "";

txtProductSearch.Text = "";

txtProductName.Text = "";

txtProductQuantity.Text = "0";

txtProductCo st.Text = "0";

txtSubtotal.Text = "0";

txtDiscount.Text = "0";

txtVat.Text = "0";

txtGrandTotal.Text = "0";

frmWorker worker = new frmWorker(); worker.Show();

}

#endregion_

i Надоели баннеры? Вы всегда можете отключить рекламу.