Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:

Введение

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

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

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

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

Предметом исследования являются информационные технологии и системы в управлении торговой организацией. Объектом исследования является информационная система ИП Лядухин С.Ю.

Целью работы является разработка информационной системы управления ценами, поставками и оборудованием ИП Лядухин С.Ю.

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

- раскрыть сущность информационных технологий и создания информационных систем;

- определить структуру информационной системы управления торговых организаций;

- провести анализ современного рынка IT-технологий;

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

- выполнить анализ IT-инфраструктуры предприятия;

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

- выполнить анализ системы автоматизации торговой организации;

- сформировать предложения по совершенствованию информационной системы управления торговой организацией.

Практической значимостью работы является то, что разработанная информационная система управления ценами, поставками и оборудованием позволит повысить качество принимаемых управленческих решений в ИП Лядухин С.Ю..

Методология исследования основана на методах логического наблюдения и сбора фактов, анализа и сравнения, обобщения, аналогии, постановки, методы решения проблем, систематизации и классификации.

Вопросы внедрения в деятельность предприятий современных информационных технологий и информационных систем постоянно обсуждаются многими отечественными и зарубежными специалистами, среди которых следует отметить работы Волковой В. Н., Гаврилова М. В., Головицыной М.В., Горева А. Э., Граничина О.Н. и других.

Глава 1. Теоретические аспекты информационной системы управления торговых ОРГАНИЗАЦИЙ

1.1. Сущность информационных технологий и создание информационных систем

Информационная технология является составляющей информационной системы и ее можно представить в виде процесса, включающего регламентированные правила выполнения действий, операций, процедур обработки данных. Основной функций информационной технологии является целенаправленная переработка информации с последующим ее предоставлением пользователю [9, c.120].

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

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

Рисунок 1 – Виды информационных технологий обработки и преобразования информации

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

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

На уровне операционной деятельности с помощью информационных технологий обработки данных решаются следующие задачи [12, c.60]:

- формируются контрольные отчеты для принятия управленческих решений;

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

К основным составляющим информационной технологии обработки данных относятся системы сбора, обработки, хранения данных и формирования отчетов.

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

- производится планирование деятельности предприятия;

- анализируются текущие показатели и их отклонения от плана;

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

Информационные технологии управления позволяют сформировать следующие виды отчетов:

- регулярные отчеты на основании установленного графика;

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

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

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

К основным компонентам информационных технологий для автоматизации офиса относятся [3, c.108]:

- база данных для накопления информации;

- текстовый редактор для обработки шаблонов документов;

- электронная почта для организации переписки с партнёрами;

- аудиопочта для передачи деловых сообщений голосом;

- табличный процессор, выполняющий функции электронного калькулятора;

- календарь для планирования деятельности;

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

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

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

К основным этапам создания информационной системы относятся:

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

- подготовка рабочего и технического проекта;

- тестирование, отладка программного кода и сдача в опытную эксплуатацию информационной системы;

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

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

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

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

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

Этапы разработки, тестирования, ввода в эксплуатацию объединяют одним понятием реализация информационной системы.

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

- разрабатывается пошаговые процедуры перепроектирования бизнес-процессов;

- создаются модели бизнес-процессов «AS-IS» и «TO-BE» в определенной нотации или методологии;

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

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

1.2. Структура информационной системы управления торговых организаций

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

Структура информационной системы управления торговых организаций зависит от реализуемых бизнес-процессов, выбранного типа торговли (розничная, оптовая, электронная), масштабов деятельности [11, c.50].

К типовым бизнес-процессам торговой организации относятся:

- управление обеспечением потребителей товаром;

- отгрузка товара перевозчику;

- доставка товара потребителю;

- приемка товаров;

- осуществление оплаты перевозчику и поставщику.

Диаграмма декомпозиции перечисленных типовых процессов приведена на рисунке 2.

Рисунок 2 – Диаграмма декомпозиции перечисленных типовых процессов

На основании выделенных типовых бизнес-процессов можно сделать выводы, что информационная система торговой организации включает базу данных для хранения информации по [7, c.96]:

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

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

- сотрудникам торговой организации с отражением отдела, занимаемой должности, персональных данных;

- складам торговой организации с отражением их наименования, назначения;

- торговым операциям с отражением их наименования, даты совершения и ответственного лица;

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

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

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

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

- каждый товар должен иметь несколько единиц измерения (кг, г, т, ящики);

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

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

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

В работе торговых отделов информационная система позволяет ускорить процесс обслуживания покупателей в торговом зале [1, c.40].

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

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

Характеристика типовых модулей информационной системы торговой организации приведена в таблице 1.

Таблица 1

Характеристика типовых компонентов информационной системы торговой организации

Название компонента

Описание

Пользователи

База данных

Хранение данных по товарам, операциям, контрагентам, документам, отчетам, сотрудникам

Администратор базы данных

Авторизация доступа

Хранение логинов и паролей пользователей, ролей, привилегий

Администратор базы данных

Учет информации

Регистры совершаемых торговых и складских операций

Формирование документов

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

Менеджеры торговой организации, складские и торговые работники

Архив

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

Секретарь

Многие информационные системы торговых организаций взаимодействуют с интеллектуальным оборудованием, включающим электронный кассовый аппарат, систему штрихкодирования, средства организации обмена с бухгалтерией. В данном случае автоматизируются процессы получения товарных и складских отчетов, производится групповая обработка операций на складе, торговом зале и бухгалтерии [4, c.122].

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

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

1.3. Современный рынок IT-технологий

На рынке IT-технологий наиболее востребованными информационными системами являются 1С: Управление торговлей 8 [13], Парус: Предприятие 7 [14] и ИС Custis [15].

Информационная система (ИС) 1С: Управление торговлей 8 является ERP-системой и позволяет автоматизировать деятельность розничной или оптовой торговой организации.

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

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

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

В 1С: Управление торговлей 8 предусмотрено автоматическое формирование прайс-листа с отражением цены, наценки и других видов цен. Факты продажи могут быть регистрированы ручным или автоматическим способом.

В состав 1С: Управление торговлей 8 входит модуль для автоматизации складского учета. В данном модуле можно вести детализированный учет товара в разрезе нескольких складов. Входящие в состав модуля инструменты позволяют оформлять внутрискладские операции, связанные с перемещением товаров между складами, списанием товаров, их комплектации [10, c.40].

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

Рисунок 3 – Форма для автоматического пересчета товаров

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

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

Для автоматизации закупки товаров состав 1С: Управление торговлей 8 входит модуль для хранения цен или прайс-листов поставщиков, загрузка которых производится из внешнего файла. При взаимодействии с поставщиками в ИС автоматизированы процессы покупки товаров за наличный расчёт, в кредит и по предварительно оформленным заказам.

Для анализа торговой деятельности в состав 1С: Управление торговлей 8 входит модуль, позволяющий формировать отчеты для оценки [8, c.79]:

- объемов продаж, расчета валовой прибыли с учетом себестоимости товаров;

- динамики изменения доходов и расходов торговой организации для оценки финансового состояния;

- продаж в разрезе номенклатуры товаров.

Пример построения отчета для анализа продаж по номенклатуре в 1С: Управление торговлей 8 приведен на рисунке 4.

Рисунок 4 - Пример построения отчета для анализа продаж по номенклатуре в 1С: Управление торговлей 8

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

Совершаемые платежи отражаются в журнале платежей, вид которого приведен на рисунке 5.

Рисунок 5 – Журнал платежей в 1С: Управление торговлей 8

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

Дополнительные возможности в 1С: Управление торговлей 8 создает модуль учета прочих расходов в разрезе объектов дополнительной аналитики. В состав дополнительных расходов могут включаться расходы на обеспечение хранения товаров на складах, доставки товаров покупателям, а также транспортные расходы на доставку товаров от поставщиков.

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

Система Парус: Предприятие 7 основана на модульном принципе и выключает в состав такие основные модули как «Бухгалтерия», «Реализация», «Склад», «Комплекс», «Учет договоров», «Комплектование», «Заработная плата» и «Кадры».

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

Торговая часть ИС Парус: Предприятие 7 представлена в виде самостоятельного комплекса, который ориентирован на автоматизацию повседневных задач выполняемых работниками торговли [2, c.110]

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

Модуль «Зарплата» используется для начисления и выплат заработной платы с формированием отчетов соответствующих требованиям действующего законодательства РФ. Для подготовки штатного расписания, приказов по приему, кадровому перемещению и увольнению персонала в состав ИС Парус: Предприятие 7 входит модуль «Кадры».

Для ведения договорной базы с покупателями, поставщиками, подрядчиками в ИС предусмотрен модуль «Учет договоров». Модуль «Комплектование» является дополнением модуля ведения складского учета и позволяет производить нормативный учет затрат по картам складского учёта.

Достоинства ИС Парус: Предприятие 7 приведены на рисунке 6.

Рисунок 6 – Достоинства ИС Парус: Предприятие 7

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

Информационная система Custis является новым программным продуктом на рынке IT-технологий. Её внедряют оптовые и розничные торговые организации для масштабирования бизнеса и организации взаимодействия внутри предприятия.

В состав ИС Custis входят модули для ведения учета товаров, управления запасами товаров на складах, формирования различных аналитических отчетов для принятия управленческих решений [5, c.172].

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

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

В случае необходимости модуль «Управление товарным запасом» можно интегрировать с WMS-системой управления складом тем самым ускорить процесс создания складских реестров.

Модуль «Снабжение пунктов розничной торговли» применяется для поддержки оптимального уровня запасов товаров в магазине. В нём автоматизированы процессы распределения товаров между разными точками сбыта с контролем равномерности отгрузки и товародвижения.

Возможности модуля «Снабжение пунктов розничной торговли» ИС Custis приведены на рисунке 7.

Рисунок 7 – Возможности модуля «Снабжение пунктов розничной торговли» ИС Custis

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

Глава 2. Анализ информационной системы управления ИП Лядухин С. Ю.

2.1. Общая характеристика малого предприятия

Малое предприятие ИП Лядухин С. Ю. осуществляет торговую деятельность в Московской области (ИНН: 503198884317, ОГРНИП: 312503123300063) [16].

Организационно-правовая форма малого предприятия: индивидуальный предприниматель, которая была зарегистрирован в Едином реестре Федеральной налоговой службой № 23 по Московской области.

Основным видом деятельности ИП Лядухин С. Ю. является осуществление розничной торговли мясом и мясными продуктами в специализированных магазинах (ОКВЭД 47.22).

Среди дополнительных видов деятельности ИП Лядухин С. Ю. следует выделить:

- розничную торговлю консервированными фруктами, овощами, орехами (ОКВЭД 47.21.2);

- розничную торговлю мясом, мясом птицы, включая субпродукты (ОКВЭД 47.22.1);

- розничную торговлю рыбой, ракообразными и моллюсками (ОКВЭД 47.23).

Малое предприятие ведет постоянную работу по расширению ассортимента продуктов питания и в настоящее время в его состав входят:

- соки, чаи, безалкогольные напитки;

- молочная и кисломолочная продукция;

- хлебобулочные изделия.

Организационная структура управления ИП Лядухин С. Ю. приведена на рисунке 8.

Рисунок 8 – Организационная структура управления ИП Лядухин С. Ю.

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

Общая численность персонала составляет 10 чел., из которых 3 чел. выполняют управленческие функции.

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

К основным задачам бухгалтера ИП Лядухин С. Ю. относятся контроль и планирование экономической деятельности микропредприятия, подготовка бухгалтерской отчетности с помощью программы 1С: Управление малым предприятием 8.3 для органов государственного контроля. Бухгалтер находится в постоянном взаимодействии с директором вопросах распределения доходов и расходов.

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

К основным функциональным обязанностям продавцов-консультантов ИП Лядухин С. Ю. относятся:

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

- приемка товаров по накладным в соответствии с указанным качеством и количеством на склад;

- предпродажная подготовка товаров;

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

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

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

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

В торговом зале применяется метод открытой выкладки продуктов питания. Товары размещены в стеклянных стеллажах и находится под строгим контролем продавцов-консультантов.

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

- карты постоянного покупателя, которые позволяют получить скидку 5% при повторной покупке;

- подарочные и социальные карты.

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

Социальные карты предлагаются покупателям, нуждающимся в материальной поддержке и выступающие участниками социальной программы ПАО «Сбербанк». Собственники социальных карт имеют скидки на все товары от 3 до 8% вне зависимости от выбранного вида товара.

2.2. Анализ системы автоматизации торговой организации

В ИП Лядухин С. Ю. информационная система включает программную и техническую части. Структура программной части информационной системы ИП Лядухин С. Ю. приведена на рисунке 9.

Рисунок 9 – Структура программной части информационной системы ИП Лядухин С. Ю.

Серверная операционная система Microsoft Windows Server 2019 позволяет усилить защиту информационной системы ИП Лядухин С. Ю. Среди возможностей серверной операционной системы Windows Server 2019 в деятельности ИП Лядухин С. Ю. следует отметить [17]:

- поддержка гибридных облачных сценариев и интеграция с Azure сервисами Azure Backup и Azure File Sync, а также сервисами аварийного восстановления данных в любой момент времени;

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

- организация работы кластерных серверных элементов Kubernetes и использование улучшенного VSL для реализации собственности сценариев обмена данными;

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

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

Для автоматизации деятельности ИП Лядухин С. Ю. используется CRM-система «Адванта», которая включает в состав инструменты планирования и бюджетирования деятельности.

Для обеспечения защиты данных от несанкционированного доступа в системе в программной части информационной системы ИП Лядухин С. Ю. применяется система защиты данных «Страж NT». Система защиты данных «Страж NT» установлена на сервере и рабочих станций и применяется для разграничения доступа к информационным ресурсам.

Для обеспечения защиты от вирусов в ИП Лядухин С. Ю. используется антивирусная программа Антивирус Nano Pro. Он позволяет обеспечивать защиту операционной системы, производить полную проверку рабочих станций на содержание вирусов и вредоносного программного обеспечения. Антивирусной программой поддерживается технология глубокой эмуляции, что создает возможность применения различных алгоритмов для защиты от сложных шифрованных и полиморфных вирусов.

Структура технической части информационной системы ИП Лядухин С. Ю. приведена на рисунке 10.

Рисунок 10 – Структура технической части информационной системы ИП Лядухин С. Ю.

В качестве сервера баз данных в ИП Лядухин С. Ю. применяется сервер Dell PowerEdge T340, который отличается высокой надежностью и возможностью масштабирования ресурсов. К техническим характеристикам сервера Dell PowerEdge T340 относятся [18]:

- процессор Intel Core i3;

- оперативная память DDR4 DIMM с поддержкой технологии UDIMM и обеспечением быстродействия до 2666 МТ/с;

- наличие внутреннего контроллера PERC H730P и внешнего адаптера главной шины SAS HBA со скоростью передачи данных 12 Гбит/с;

- сетевой контроллер: 2 адаптера LOM со скоростью передачи данных 1Гбит/с.

Для обеспечения защиты сервера в техническую инфраструктуру информационной системы входит шлюз безопасности Traffic Inspector Next Generation, который включает в состав межсетевой экран, сканер безопасности, шлюзовый Антивирус, средства для шейпирования трафика и балансировки канала.

Для фильтрации трафика в состав шлюза безопасности Traffic Inspector Next Generation входят модули для блокировки вредоносных сайтов, проведения глубокой 7 Layer фильтрации [19].

Для создания сегмента сети применяется сетевой коммутатор Cisco Catalyst Switch WS-C2960-24TC-S, который имеет 2 встроенных порта Gigabit Ethernet, встроенные порты GBIC SFP. Коммутатором поддерживаются технологии качества обслуживания QoS, выстраивания очередей на основе меток CoS и организации высокоскоростных соединений Ether Channel 802.3ad. Для защиты сегментов сети коммутатором применяются протоколы виртуализации ISL/802.1Q [20].

Для организации доступа в сеть Интернет в состав технического обеспечения входит беспроводный маршрутизатор NETIS N4, обеспечивающий скорость передачи данных по проводной сети 1000 Мбит/с и по беспроводной сети 300 Мбит/с.

Маршрутизатором NETIS N4 поддерживается стандарт IEEE 802.11ac, протоколы безопасности WEP, WPA, WPA2, WPS [21].

Для создания беспроводного сегмента применяются точки доступа NWA1123-AC HD, включающая два радиомодуля и PoE. Точка доступа позволяет управлять пространственными потоками SU-MIMO, агрегировать пакеты A-MPDU и ее суммарная скорость передачи данных составляет 1300 Мбит/с [22].

На рабочих местах сотрудников установлены персональные компьютеры IRU Office 315 с процессором Intel Core i5 и оперативной памятью DDR4.

2.3. Предложения по совершенствованию информационной системы управления торговой организацией

Для совершенствования информационной системы управления торговой организацией предлагаем разработать АИС «Магазин продуктов». Схема базы данных АИС «Магазин продуктов» приведена в приложении 1. Для получения доступа в АИС «Магазин продуктов» необходимо заполнить логин и пароль в форме авторизации приведенной на рисунке 11.

Рисунок 11 – Форма авторизации в АИС «Магазин продуктов»

Если введенный логин и пароль – верны, то пользователь получит доступ к главному интерфейсу программы, вид которого приведен на рисунке 12.

Рисунок 12 – Вид главного интерфейса АИС «Магазин продуктов»

Как видно из рисунка 12, в главном окне интерфейса АИС «Магазин продуктов» предусмотрено меню для получения быстрого доступа к справочникам, формам для совершения операций и формирования отчетов.

Для регистрации нового поставщика продавцу продуктов питания необходимо открыть справочник «Поставщики», вид которого приведен на рисунке 13.

Рисунок 13 – Внешний вид справочника «Поставщики»

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

Рисунок 14 – Форма для оприходования товаров от поставщика

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

Рисунок 15 – Печать приходного документа

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

Рисунок 16 – Форма «Возврат поставщику»

После ввода товара, который подлежит возврату поставщику, пользователь выполнить печать документа, вид которого приведен на рисунке 17.

Рисунок 17 – Внешний вид возвратной накладной

Для добавления нового товара в АИС «Магазин продуктов» продавцу продуктов питания необходимо открыть справочник «Продукты», вид которого приведен на рисунке 18.

Рисунок 18 – Внешний вид справочника «Продукты»

Для добавления нового товара в верхней части справочника «Продукты» предусмотрена кнопка «Добавить». Когда продавцом продуктов питания будут заполнены поля «ИД», «Наименование», «Группа товара», «Единицы измерения» и «Описание» новый товар будет отображен в справочнике.

Для отражения факта продажи товара продавец продуктов питания может выполнить печать чека, вид которого приведен на рисунке 19.

Рисунок 19 – Чек продажи товара

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

Рисунок 20 – Внешний вид отчета «Движение товара»

Листинг программного кода АИС «Магазин продуктов» приведен в приложении 2.

Заключение

В процессе выполнения курсовой работы была выполнена разработка информационной системы управления ценами, поставками и оборудованием ИП Лядухин С.Ю.

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

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

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

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

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

Анализ показал, что на рынке IT-технологий наиболее востребованными информационными системами являются 1С: Управление торговлей 8, Парус: Предприятие 7 и ИС Custis.

Во второй главе работы был выполнен анализ информационной системы управления ИП Лядухин С. Ю., который осуществляет розничную торговлю продуктами питания. В ИП Лядухин С. Ю. информационная система включает программную и техническую части.

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

Для автоматизации деятельности ИП Лядухин С. Ю. используется CRM-система «Адванта», которая включает в состав инструменты планирования и бюджетирования деятельности.

Для обеспечения защиты данных от несанкционированного доступа в системе в программной части информационной системы ИП Лядухин С. Ю. применяется система защиты данных «Страж NT». Система защиты данных «Страж NT» установлена на сервере и рабочих станций и применяется для разграничения доступа к информационным ресурсам.

Для обеспечения защиты от вирусов в ИП Лядухин С. Ю. используется антивирусная программа Антивирус Nano Pro. Он позволяет обеспечивать защиту операционной системы, производить полную проверку рабочих станций на содержание вирусов и вредоносного программного обеспечения. Антивирусной программой поддерживается технология глубокой эмуляции, что создает возможность применения различных алгоритмов для защиты от сложных шифрованных и полиморфных вирусов.

Для совершенствования информационной системы управления торговой организацией было предложено разработать АИС «Магазин продуктов».

В главном окне интерфейса АИС «Магазин продуктов» предусмотрено меню для получения быстрого доступа к справочникам, формам для совершения операций и формирования отчетов.

Список использованной литературы

Волкова В. Н. Информационные системы в экономике: учебник для академического бакалавриата/ В. Н. Волкова, В. Н. Юрьев, С. В. Широкова, А. В. Логинова. – Москва: Издательство Юрайт, 2019. – 402 с.

Гаврилов М. В. Информатика и информационные технологии: учебник / М. В. Гаврилов, В. А. Климов. – Москва: Издательство Юрайт, 2019. – 383 с.

Головицына М.В. Информационные технологии в экономике: учеб. пособие/ М.В. Головицына. – Москва, Саратов: Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2020. – 589 c.

Горев А. Э. Информационные технологии в профессиональной деятельности: учебник / А. Э. Горев. – Москва: Издательство Юрайт, 2020. – 289 с.

Граничин О.Н. Информационные технологии в управлении: учеб. пособие/ О.Н. Граничин, В.И. Кияев. – Москва, Саратов: Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2020. – 400 c.

Григорьев М. В. Проектирование информационных систем: учебное пособие / М. В. Григорьев, И. И. Григорьева. – Москва: Издательство Юрайт, 2020. – 318 с.

Одинцов Б. Е. Информационные системы управления эффективностью бизнеса: учебник и практикум / Б. Е. Одинцов. – Москва: Издательство Юрайт, 2019. – 206 с.

Нетёсова О. Ю. Информационные системы и технологии в экономике: учебное пособие / О. Ю. Нетёсова. – Москва: Издательство Юрайт, 2019. – 178 с.

Плахотникова М. А. Информационные технологии в менеджменте: учебник и практикум / М. А. Плахотникова, Ю. В. Вертакова. – Москва: Издательство Юрайт, 2020. – 326 с.

Романова Ю. Д. Информационные технологии в менеджменте (управлении): учебник и практикум / Ю. Д. Романова. – Москва: Издательство Юрайт, 2019. – 411 с.

Рыбальченко М. В. Архитектура информационных систем: учеб. пособие / М. В. Рыбальченко. – Москва: Издательство Юрайт, 2019. – 91 с.

Спицина И.А. Разработка информационных систем. Пользовательский интерфейс: учеб. пособие / И.А. Спицина, К.А. Аксёнов. – Саратов, Екатеринбург: Профобразование, Уральский федеральный университет, 2020. – 98 c.

1С: Управление торговлей 8. [Электронный ресурс]. URL: https://v8.1c.ru/trade/analiz-deyatelnosti/ (дата обращения: 12.08.2020 г.).

Парус: Торговля. [Электронный ресурс]. URL: http://cpparus.ru/programs/enterprise/parus-7.html (дата обращения: 12.08.2020 г.).

ИС Cistis. [Электронный ресурс]. URL: https://www.tadviser.ru/index.php (дата обращения: 12.08.2020 г.).

Справка ИП Лядухин С. Ю. [Электронный ресурс]. URL: https://www.rusprofile.ru/ip/312503123300063 (дата обращения: 12.08.2020 г.).

Серверная операционная система Microsoft Windows Server 2019. [Электронный ресурс]. URL: https://mssoft.ru/ (дата обращения: 12.08.2020 г.).

Сервер Dell PowerEdge T340. [Электронный ресурс]. URL: https://itelon.ru/product/dell_poweredge_t340/ (дата обращения: 12.08.2020 г.).

Шлюз безопасности Traffic Inspector Next Generation. [Электронный ресурс]. URL: https://www.smart-soft.ru/business-solutions/ (дата обращения: 12.08.2020 г.).

Коммутатор Cisco Catalyst Switch WS-C2960-24TC-S. [Электронный ресурс]. URL: https://www.vtkt.ru/catalog/ (дата обращения: 12.08.2020 г.).

Маршрутизатор NETIS N4. [Электронный ресурс]. URL: https://www.citilink.ru/ (дата обращения: 12.08.2020 г.).

Точка доступа NWA1123-AC HD. [Электронный ресурс]. URL: https://www.zyxel.com/ru (дата обращения: 12.08.2020 г.).

Приложения

Приложение 1

Схема базы данных АИС «Магазин продуктов»

Приложение 2

Листинг программного кода АИС «Магазин продуктов»

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using InFocus.DbStore;

using System.Windows.Forms;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Data.Entity;

namespace InFocus.Views

{

public class CDepartment

{

ModeForm mode;

UnitOfWork unitOfWork;

ObservableCollection<Kontragent> listentity;

string sort;

EntityList flist;

public event EventHandler UpdateAll;

public event EventHandler SelectedKontragent;

public Kontragent Returned;

public DataGridViewColumn[] GetGrid()

{

DataGridViewColumn[] arr = new DataGridViewColumn[4];

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Id";

col.HeaderText = "ИД";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

arr[0] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Caption";

col.HeaderText = "Наименование";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[1] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Phone";

col.HeaderText = "Телефоны";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[2] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "AdressInfo";

col.HeaderText = "Адрес";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[3] = col;

return arr;

}

public void RefreshData(List<Kontragent> lst_)

{

listentity = new ObservableCollection<Kontragent>(lst_);

}

public void Build(UnitOfWork unitOfWork_,

List<Kontragent> lst_,

enumTypeKA typeKA,

ModeForm mode_=ModeForm.mfList,

Kontragent selected =null)

{

unitOfWork = unitOfWork_;

mode = mode_;

listentity = new ObservableCollection<Kontragent>(lst_);

sort = "Caption";

flist = new EntityList();

flist.Text = typeKA.GetDescription();

flist.Icon = App.GetIconForTypeKa((int)typeKA);

flist.Build<Kontragent>(unitOfWork, listentity.ToBindingList(), GetGrid());

flist.UpdateSource<Kontragent>(null, sort);

flist.SetCurrentItem<Kontragent>(selected);

flist.Added += delegate

{

Kontragent item = new Kontragent();

item.TypeKA = (int)typeKA;

FKontragent frm = new FKontragent(item, unitOfWork);

if (frm.ShowDialog()==DialogResult.OK)

{

unitOfWork.KontragentRepository.Insert(item);

unitOfWork.Save();

listentity.Add(item);

flist.UpdateSource<Kontragent>(item, sort);

}

};

flist.Edited += EditItem;

flist.Removed += delegate

{

Kontragent item = flist.GetCurrentItem<Kontragent>();

if (item.Id == App.user.DepartmentFK) return;

if (MessageBox.Show("Удалить текущую запись?","Внимание!!!",MessageBoxButtons.OKCancel)== DialogResult.OK)

{

unitOfWork.KontragentRepository.Delete(item);

var listdeletemove = unitOfWork.MoveProductRepository.Get(filter: a => a.MoveTo == item.Id);

unitOfWork.context.MoveProduct.RemoveRange(listdeletemove);

var listdeletemove2 = unitOfWork.MoveProductRepository.Get(filter: a =>a.MoveFrom == item.Id);

unitOfWork.context.MoveProduct.RemoveRange(listdeletemove2);

unitOfWork.Save();

listentity.Remove(item);

flist.UpdateSource<Kontragent>(item, sort);

}

};

flist.UpdateAll += delegate

{

UpdateAll(this, EventArgs.Empty);

flist.RefreshSource<Kontragent>(listentity.ToBindingList());

};

flist.RemoveFiltered += delegate

{

flist.RefreshSource<Kontragent>(listentity.ToBindingList());

};

flist.Filtered += Set_Filter;

if (mode_==ModeForm.mfList)

{

flist.MdiParent = Application.OpenForms[0];

flist.Selected += EditItem;

flist.Show();

}

else

{

flist.Selected += SelectedItem;

flist.ShowDialog();

}

}

private void SelectedItem(object sender, EventArgs e)

{

Returned = flist.GetCurrentItem<Kontragent>();

SelectedKontragent(this,EventArgs.Empty);

flist.Close();

}

private void EditItem(object sender, EventArgs e)

{

Kontragent item = flist.GetCurrentItem<Kontragent>();

FKontragent frm = new FKontragent(item, unitOfWork);

if (frm.ShowDialog() == DialogResult.OK)

{

unitOfWork.KontragentRepository.Update(item);

unitOfWork.Save();

flist.UpdateSource<Kontragent>(item, sort);

}

}

private void Set_Filter(object sender, FilterEventArgs e)

{

int id;

var predicate = PredicateBuilder.False<Kontragent>();

if (Int32.TryParse(e.Text, out id))

{

predicate = predicate.Or(t => t.Id==id);

}

predicate = predicate.Or(t => t.Caption != null && t.Caption.ToLower().Contains(e.Text));

predicate = predicate.Or(t => t.AdressInfo != null && t.AdressInfo.ToLower().Contains(e.Text));

predicate = predicate.Or(t => t.Phone != null && t.Phone.ToLower().Contains(e.Text));

var query = listentity.AsQueryable().Where(predicate);

flist.RefreshSource<Kontragent>(new ObservableCollection<Kontragent>(query).ToBindingList());

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using InFocus.DbStore;

using System.Windows.Forms;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using System.Drawing;

namespace InFocus.Views

{

public class CEmployee

{

ModeForm mode;

UnitOfWork unitOfWork;

ObservableCollection<EmployeeView> listentity;

string sort;

EntityList flist;

public event EventHandler UpdateAll;

public event EventHandler SelectedEmployee;

public object Returned;

public void AddAnotherControl()

{

ToolStripLabel lbl = new ToolStripLabel("Точка продажи");

ToolStripComboBox cbo = new ToolStripComboBox("cbodepart");

List<Kontragent> l = unitOfWork.KontragentRepository.Get(a=>a.TypeKA==(int)enumTypeKA.tkMagazine).ToList();

foreach (Kontragent item in l)

{

cbo.Items.Add(item);

}

flist.ts.Items.Insert(7, lbl);

flist.ts.Items.Insert(8, cbo);

}

public DataGridViewColumn[] GetGrid()

{

DataGridViewColumn[] arr = new DataGridViewColumn[4];

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Id";

col.HeaderText = "ИД";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

arr[0] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "FullName";

col.HeaderText = "ФИО";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[1] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "DepartmentText";

col.HeaderText = "Точка продажи";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[2] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Description";

col.HeaderText = "Примечание";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[3] = col;

return arr;

}

public void RefreshData(List<EmployeeView> lst_)

{

listentity = new ObservableCollection<EmployeeView>(lst_);

}

public void Build(UnitOfWork unitOfWork_,List<EmployeeView> lst_, ModeForm mode_=ModeForm.mfList)

{

unitOfWork = unitOfWork_;

mode = mode_;

listentity = new ObservableCollection<EmployeeView>(lst_);

sort = "FullName,DepartmentText";

flist = new EntityList();

Bitmap bmp = InFocus.Properties.Resources.Man_icon;

flist.Icon = Icon.FromHandle(bmp.GetHicon());

flist.Text = "Сотрудники";

flist.Build<EmployeeView>(unitOfWork, listentity.ToBindingList(), GetGrid());

AddAnotherControl();

flist.UpdateSource<EmployeeView>(null, sort);

flist.Added += delegate

{

Employee item = new Employee();

FEmployee frm = new FEmployee(item,this.unitOfWork);

if (frm.ShowDialog()==DialogResult.OK)

{

unitOfWork.EmployeeRepository.Insert(item);

unitOfWork.Save();

EmployeeView ev = new EmployeeView();

EmployeeView.Map(item, ev);

listentity.Add(ev);

flist.UpdateSource<EmployeeView>(ev, sort);

}

};

flist.Edited += EditItem;

flist.Removed += delegate

{

EmployeeView item = flist.GetCurrentItem<EmployeeView>();

if (item.Id == App.user.Id) return;

if (MessageBox.Show("Удалить текущую запись?","Внимание!!!",MessageBoxButtons.OKCancel)== DialogResult.OK)

{

unitOfWork.EmployeeRepository.Delete(item.Id);

unitOfWork.Save();

listentity.Remove(item);

flist.UpdateSource<EmployeeView>(null, sort);

}

};

flist.UpdateAll += delegate

{

UpdateAll(this, EventArgs.Empty);

flist.RefreshSource<EmployeeView>(listentity.ToBindingList());

};

flist.RemoveFiltered += delegate

{

flist.RefreshSource<EmployeeView>(listentity.ToBindingList());

ToolStripComboBox cbo = flist.ts.Items.Find("cbodepart", true).OfType<ToolStripComboBox>().Single();

cbo.SelectedIndex = -1;

};

flist.Filtered += Set_Filter;

if (mode_ == ModeForm.mfList)

{

flist.MdiParent = Application.OpenForms[0];

flist.Selected += EditItem;

flist.Show();

}

else

{

flist.Selected += SelectedItem;

flist.ShowDialog();

}

}

private void SelectedItem(object sender, EventArgs e)

{

Returned = flist.GetCurrentItem<EmployeeView>();

SelectedEmployee(this, EventArgs.Empty);

flist.Close();

}

private void EditItem(object sender, EventArgs e)

{

EmployeeView CurrentItem = flist.GetCurrentItem<EmployeeView>();

Employee item = unitOfWork.EmployeeRepository.GetByID(CurrentItem.Id);

FEmployee frm = new FEmployee(item, unitOfWork);

if (frm.ShowDialog() == DialogResult.OK)

{

unitOfWork.EmployeeRepository.Update(item);

unitOfWork.Save();

EmployeeView.Map(item, CurrentItem);

flist.UpdateSource<EmployeeView>(null, sort);

}

else

{

unitOfWork.UndoingChangesObjectContext(((IObjectContextAdapter)unitOfWork.context).ObjectContext);

}

}

private void Set_Filter(object sender, FilterEventArgs e)

{

int id;

var predicate = PredicateBuilder.False<EmployeeView>();

if (e.Text.Trim().Length > 0)

{

if (Int32.TryParse(e.Text, out id))

{

predicate = predicate.Or(t => t.Id == id);

}

predicate = predicate.Or(t => t.FullName != null && t.FullName.ToLower().Contains(e.Text));

predicate = predicate.Or(t => t.Description != null && t.Description.ToLower().Contains(e.Text));

}

ToolStripComboBox cbo = flist.ts.Items.Find("cbodepart", true).OfType<ToolStripComboBox>().Single();

if (cbo.SelectedIndex >= 0)

{

if (e.Text.Trim().Length > 0)

{

predicate = predicate.And(t => t.DepartmentFK == (cbo.SelectedItem as Kontragent).Id);

}

else

{

predicate = predicate.Or(t => t.DepartmentFK == (cbo.SelectedItem as Kontragent).Id);

}

}

var query = listentity.AsQueryable().Where(predicate);

flist.RefreshSource<EmployeeView>(new ObservableCollection<EmployeeView>(query).ToBindingList());

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using InFocus.DbStore;

using System.Windows.Forms;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Data.Entity;

using System.Drawing;

namespace InFocus.Views

{

public class CKontragent

{

ModeForm mode;

UnitOfWork unitOfWork;

ObservableCollection<Kontragent> listentity;

string sort;

EntityList flist;

public event EventHandler UpdateAll;

public event EventHandler SelectedKontragent;

public object Returned;

public DataGridViewColumn[] GetGrid()

{

DataGridViewColumn[] arr = new DataGridViewColumn[3];

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Id";

col.HeaderText = "ИД";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

arr[0] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Caption";

col.HeaderText = "Поставщик";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[1] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Description";

col.HeaderText = "Описание";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[2] = col;

return arr;

}

public void RefreshData(List<Kontragent> lst_)

{

listentity = new ObservableCollection<Kontragent>(lst_);

}

public void Build(UnitOfWork unitOfWork_,List<Kontragent> lst_, ModeForm mode_=ModeForm.mfList, Kontragent selected =null)

{

unitOfWork = unitOfWork_;

mode = mode_;

listentity = new ObservableCollection<Kontragent>(lst_);

sort = "Caption";

flist = new EntityList();

flist.Text = "Поставщики";

Bitmap bmp = InFocus.Properties.Resources.truck2;

flist.Icon = Icon.FromHandle(bmp.GetHicon());

flist.Build<Kontragent>(unitOfWork, listentity.ToBindingList(), GetGrid());

flist.UpdateSource<Kontragent>(null, sort);

flist.SetCurrentItem<Kontragent>(selected);

flist.Added += delegate

{

Kontragent item = new Kontragent();

FKontragent frm = new FKontragent(item, unitOfWork);

if (frm.ShowDialog()==DialogResult.OK)

{

unitOfWork.KontragentRepository.Insert(item);

unitOfWork.Save();

listentity.Add(item);

flist.UpdateSource<Kontragent>(item, sort);

}

};

flist.Edited += EditItem;

flist.Removed += delegate

{

Kontragent item = flist.GetCurrentItem<Kontragent>();

if (MessageBox.Show("Удалить текущую запись?","Внимание!!!",MessageBoxButtons.OKCancel)== DialogResult.OK)

{

unitOfWork.KontragentRepository.Delete(item);

var listdeletemove = unitOfWork.MoveProductRepository.Get(filter: a => a.MoveTypeFK == (int)enumMoveType.mtAdd && a.MoveFrom == item.Id);

unitOfWork.context.MoveProduct.RemoveRange(listdeletemove);

var listdeletemove2 = unitOfWork.MoveProductRepository.Get(filter: a => a.MoveTypeFK == (int)enumMoveType.mtReturn && a.MoveTo == item.Id);

unitOfWork.context.MoveProduct.RemoveRange(listdeletemove2);

unitOfWork.Save();

listentity.Remove(item);

flist.UpdateSource<Kontragent>(item, sort);

}

};

flist.UpdateAll += delegate

{

UpdateAll(this, EventArgs.Empty);

flist.RefreshSource<Kontragent>(listentity.ToBindingList());

};

flist.RemoveFiltered += delegate

{

flist.RefreshSource<Kontragent>(listentity.ToBindingList());

};

flist.Filtered += Set_Filter;

if (mode_==ModeForm.mfList)

{

flist.MdiParent = Application.OpenForms[0];

flist.Selected += EditItem;

flist.Show();

}

else

{

flist.Selected += SelectedItem;

flist.ShowDialog();

}

}

private void SelectedItem(object sender, EventArgs e)

{

Returned = flist.GetCurrentItem<Kontragent>();

SelectedKontragent(this,EventArgs.Empty);

flist.Close();

}

private void EditItem(object sender, EventArgs e)

{

Kontragent item = flist.GetCurrentItem<Kontragent>();

FKontragent frm = new FKontragent(item, unitOfWork);

if (frm.ShowDialog() == DialogResult.OK)

{

unitOfWork.KontragentRepository.Update(item);

unitOfWork.Save();

flist.UpdateSource<Kontragent>(item, sort);

}

}

private void Set_Filter(object sender, FilterEventArgs e)

{

int id;

var predicate = PredicateBuilder.False<Kontragent>();

if (Int32.TryParse(e.Text, out id))

{

predicate = predicate.Or(t => t.Id==id);

}

predicate = predicate.Or(t => t.Caption != null && t.Caption.ToLower().Contains(e.Text));

predicate = predicate.Or(t => t.Comment != null && t.Comment.ToLower().Contains(e.Text));

var query = listentity.AsQueryable().Where(predicate);

flist.RefreshSource<Kontragent>(new ObservableCollection<Kontragent>(query).ToBindingList());

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using InFocus.DbStore;

using System.Windows.Forms;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using System.Drawing;

using Microsoft.Reporting.WinForms;

namespace InFocus.Views

{

public class CMoveProductAdd

{

ModeForm mode;

UnitOfWork unitOfWork;

ObservableCollection<MoveProductView> listentity;

string sort;

EntityList flist;

ReportViewer rpt;

public event EventHandler UpdateAll;

public event EventHandler SelectedMoveProduct;

public object Returned;

public void AddAnotherControl()

{

ToolStripButton btn = new ToolStripButton("btnprint");

btn.Text = "Отчет";

btn.Image = InFocus.Properties.Resources.rpt;

btn.Click += Btn_Click;

btn.Visible = true;

ToolStripButton btn2 = new ToolStripButton("btnprint");

btn2.Text = "Закрыть отчет";

btn2.Image = InFocus.Properties.Resources.close;

btn2.Click += Btn_CloseReport;

btn2.Visible = true;

flist.ts.Items.Insert(7, btn);

flist.ts.Items.Insert(8, btn2);

}

private void Btn_CloseReport(object sender, EventArgs e)

{

if (rpt == null) return;

rpt.SendToBack();

}

private void Btn_Click(object sender, EventArgs e)

{

if (rpt == null)

{

rpt = new ReportViewer();

rpt.LocalReport.ReportPath = "Report/Report4.rdlc";

flist.Controls.Add(rpt);

rpt.Dock = DockStyle.Fill;

rpt.Visible = true;

List<ReportParameter> ps = new List<ReportParameter>();

ReportParameter pTitle = new ReportParameter("pTitle", "Отчет по приходу продуктов на точки");

ReportParameter pFrom = new ReportParameter("pFrom", "Поставщик");

ReportParameter pTo = new ReportParameter("pTo", "Точка продажи");

ps.Add(pTitle); ps.Add(pFrom); ps.Add(pTo);

rpt.LocalReport.SetParameters(ps);

}

rpt.LocalReport.DataSources.Clear();

rpt.LocalReport.DataSources.Add(new ReportDataSource("ds", flist.GetSourses<MoveProductView>()));

rpt.RefreshReport();

rpt.BringToFront();

}

public DataGridViewColumn[] GetGrid()

{

DataGridViewColumn[] arr = new DataGridViewColumn[6];

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Id";

col.HeaderText = "ИД";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

arr[0] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "DateMove";

col.HeaderText = "Дата";

col.DefaultCellStyle.Format = "d";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 150;

arr[1] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "NumberDoc";

col.HeaderText = "№ докум.";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 100;

arr[2] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "MoveFromText";

col.HeaderText = "Поставщик";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[3] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "MoveToText";

col.HeaderText = "Точка продажи";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[4] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Cost";

col.HeaderText = "Сумма, руб";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.DefaultCellStyle.Format = "C2";

col.Width = 100;

arr[5] = col;

return arr;

}

public void RefreshData(List<MoveProductView> lst_)

{

listentity = new ObservableCollection<MoveProductView>(lst_);

}

public void Build(UnitOfWork unitOfWork_,

List<MoveProductView> lst_,

ModeForm mode_=ModeForm.mfList )

{

unitOfWork = unitOfWork_;

mode = mode_;

listentity = new ObservableCollection<MoveProductView>(lst_);

sort = "DateMove,MoveFromText,MoveToText";

flist = new EntityList();

Bitmap bmp = InFocus.Properties.Resources.transfer;

flist.Icon = Icon.FromHandle(bmp.GetHicon());

flist.Text = "Приход";

flist.Build<MoveProductView>(unitOfWork, listentity.ToBindingList(), GetGrid());

AddAnotherControl();

flist.UpdateSource<MoveProductView>(null, sort);

flist.Added += delegate

{

MoveProduct item = new MoveProduct();

item.MoveTypeFK = (int)enumMoveType.mtAdd;

item.MoveType = unitOfWork.MoveTypeRepository.GetByID((int)enumMoveType.mtAdd);

item.NumberDoc = (unitOfWork.MoveProductRepository.GetCount(filter: a => a.MoveTypeFK == (int)enumMoveType.mtAdd)+1).ToString();

item.DateMove = DateTime.Now;

//item.ObTo = App.store;

//item.MoveTo = App.store.Id;

FMoveProduct frm = new FMoveProduct(item, this.unitOfWork);

if (frm.ShowDialog()==DialogResult.OK)

{

unitOfWork.MoveProductRepository.Insert(item);

unitOfWork.Save();

foreach (var mpi in item.MoveProductItems)

{

mpi.NumPartFK = item.Id;

}

unitOfWork.Save();

MoveProductView ev = MoveProductView.Map(item);

listentity.Add(ev);

flist.UpdateSource<MoveProductView>(ev, sort);

}

};

flist.Edited += EditItem;

flist.Removed += delegate

{

MoveProductView item = flist.GetCurrentItem<MoveProductView>();

//if (item.Id == App.user.Id) return;

if (MessageBox.Show("Удалить текущую запись?","Внимание!!!",MessageBoxButtons.OKCancel)== DialogResult.OK)

{

unitOfWork.MoveProductRepository.Delete(item.Id);

unitOfWork.Save();

listentity.Remove(item);

flist.UpdateSource<MoveProductView>(null, sort);

}

};

flist.UpdateAll += delegate

{

UpdateAll(this, EventArgs.Empty);

flist.RefreshSource<MoveProductView>(listentity.ToBindingList());

};

flist.RemoveFiltered += delegate

{

flist.RefreshSource<MoveProductView>(listentity.ToBindingList());

};

flist.Filtered += Set_Filter;

if (mode_ == ModeForm.mfList)

{

flist.MdiParent = Application.OpenForms[0];

flist.Selected += EditItem;

flist.Show();

}

else

{

flist.Selected += SelectedItem;

flist.ShowDialog();

}

}

private void SelectedItem(object sender, EventArgs e)

{

Returned = flist.GetCurrentItem<MoveProductView>();

SelectedMoveProduct(this, EventArgs.Empty);

flist.Close();

}

private void EditItem(object sender, EventArgs e)

{

MoveProductView CurrentItem = flist.GetCurrentItem<MoveProductView>();

MoveProduct item = unitOfWork.MoveProductRepository.GetByID(CurrentItem.Id);

//item.ObTo = App.store;

//item.ObFrom = unitOfWork.KontragentRepository.GetByID(item.MoveFrom);

FMoveProduct frm = new FMoveProduct(item, unitOfWork);

if (frm.ShowDialog() == DialogResult.OK)

{

unitOfWork.MoveProductRepository.Update(item);

unitOfWork.Save();

foreach (var mpi in item.MoveProductItems)

{

mpi.NumPartFK = item.Id;

}

MoveProductView.Map(item, CurrentItem);

flist.UpdateSource<MoveProductView>(null, sort);

}

else

{

unitOfWork.UndoingChangesObjectContext(((IObjectContextAdapter)unitOfWork.context).ObjectContext);

}

}

private void Set_Filter(object sender, FilterEventArgs e)

{

int id;

DateTime ddate;

var predicate = PredicateBuilder.False<MoveProductView>();

if (e.Text.Trim().Length > 0)

{

if (Int32.TryParse(e.Text, out id))

{

predicate = predicate.Or(t => t.Id == id);

}

if (DateTime.TryParse(e.Text, out ddate))

{

predicate = predicate.Or(t => t.DateMove.Date.ToShortDateString() == ddate.Date.ToShortDateString());

}

predicate = predicate.Or(t => t.MoveFromText != null && t.MoveFromText.Contains(e.Text));

predicate = predicate.Or(t => t.MoveToText != null && t.MoveToText.Contains(e.Text));

predicate = predicate.Or(t => t.NumberDoc != null && t.NumberDoc.Contains(e.Text));

}

var query = listentity.AsQueryable().Where(predicate);

flist.RefreshSource<MoveProductView>(new ObservableCollection<MoveProductView>(query).ToBindingList());

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using InFocus.DbStore;

using System.Windows.Forms;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using System.Drawing;

using Microsoft.Reporting.WinForms;

namespace InFocus.Views

{

public class CMoveProductOut

{

ReportViewer rpt;

ModeForm mode;

UnitOfWork unitOfWork;

ObservableCollection<MoveProductView> listentity;

string sort;

EntityList flist;

public event EventHandler UpdateAll;

public event EventHandler SelectedMoveProduct;

public object Returned;

public void AddAnotherControl()

{

ToolStripButton btn = new ToolStripButton("btnprint");

btn.Text = "Отчет";

btn.Image = InFocus.Properties.Resources.rpt;

btn.Click += Btn_Click;

btn.Visible = true;

ToolStripButton btn2 = new ToolStripButton("btnprint2");

btn2.Text = "Закрыть отчет";

btn2.Image = InFocus.Properties.Resources.close;

btn2.Click += Btn_CloseReport;

btn2.Visible = true;

flist.ts.Items.Insert(7, btn);

flist.ts.Items.Insert(8, btn2);

}

private void Btn_CloseReport(object sender, EventArgs e)

{

if (rpt == null) return;

rpt.SendToBack();

}

private void Btn_Click(object sender, EventArgs e)

{

if (rpt == null)

{

rpt = new ReportViewer();

rpt.LocalReport.ReportPath = "Report/Report4.rdlc";

flist.Controls.Add(rpt);

rpt.Dock = DockStyle.Fill;

rpt.Visible = true;

List<ReportParameter> ps = new List<ReportParameter>();

ReportParameter pTitle = new ReportParameter("pTitle", "Отчет по продажам товаров покупателям");

ReportParameter pFrom = new ReportParameter("pFrom", "Точка продажи");

ReportParameter pTo = new ReportParameter("pTo", "Покупатель");

ps.Add(pTitle); ps.Add(pFrom); ps.Add(pTo);

rpt.LocalReport.SetParameters(ps);

}

rpt.LocalReport.DataSources.Clear();

rpt.LocalReport.DataSources.Add(new ReportDataSource("ds", flist.GetSourses<MoveProductView>()));

rpt.RefreshReport();

rpt.BringToFront();

}

public DataGridViewColumn[] GetGrid()

{

DataGridViewColumn[] arr = new DataGridViewColumn[6];

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Id";

col.HeaderText = "ИД";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

arr[0] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "DateMove";

col.HeaderText = "Дата";

col.DefaultCellStyle.Format = "d";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 150;

arr[1] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "NumberDoc";

col.HeaderText = "№ докум.";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 100;

arr[2] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "MoveFromText";

col.HeaderText = "Точка продажи";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[3] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "MoveToText";

col.HeaderText = "Покупатель";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[4] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Cost";

col.HeaderText = "Сумма, руб";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.DefaultCellStyle.Format = "C2";

col.Width = 100;

arr[5] = col;

return arr;

}

public void RefreshData(List<MoveProductView> lst_)

{

listentity = new ObservableCollection<MoveProductView>(lst_);

}

public void Build(UnitOfWork unitOfWork_,

List<MoveProductView> lst_,

ModeForm mode_=ModeForm.mfList )

{

unitOfWork = unitOfWork_;

mode = mode_;

listentity = new ObservableCollection<MoveProductView>(lst_);

sort = "DateMove,MoveFromText,MoveToText";

flist = new EntityList();

Bitmap bmp = Properties.Resources.transfer;

flist.Icon = Icon.FromHandle(bmp.GetHicon());

flist.Text = "Продажи";

flist.Build<MoveProductView>(unitOfWork, listentity.ToBindingList(), GetGrid());

AddAnotherControl();

flist.UpdateSource<MoveProductView>(null, sort);

flist.Added += delegate

{

MoveProduct item = new MoveProduct();

item.MoveTypeFK = (int)enumMoveType.mtOut;

item.MoveType = unitOfWork.MoveTypeRepository.GetByID((int)enumMoveType.mtOut);

item.NumberDoc = (unitOfWork.MoveProductRepository.GetCount(filter: a => a.MoveTypeFK == (int)enumMoveType.mtOut) +1).ToString();

item.DateMove = DateTime.Now;

FMoveProduct frm = new FMoveProduct(item, this.unitOfWork);

if (frm.ShowDialog()==DialogResult.OK)

{

unitOfWork.MoveProductRepository.Insert(item);

unitOfWork.Save();

MoveProductView ev = MoveProductView.Map(item);

listentity.Add(ev);

flist.UpdateSource<MoveProductView>(ev, sort);

}

};

flist.Edited += EditItem;

flist.Removed += delegate

{

MoveProductView item = flist.GetCurrentItem<MoveProductView>();

//if (item.Id == App.user.Id) return;

if (MessageBox.Show("Удалить текущую запись?","Внимание!!!",MessageBoxButtons.OKCancel)== DialogResult.OK)

{

unitOfWork.MoveProductRepository.Delete(item.Id);

unitOfWork.Save();

listentity.Remove(item);

flist.UpdateSource<MoveProductView>(null, sort);

}

};

flist.UpdateAll += delegate

{

UpdateAll(this, EventArgs.Empty);

flist.RefreshSource<MoveProductView>(listentity.ToBindingList());

};

flist.RemoveFiltered += delegate

{

flist.RefreshSource<MoveProductView>(listentity.ToBindingList());

};

flist.Filtered += Set_Filter;

if (mode_ == ModeForm.mfList)

{

flist.MdiParent = Application.OpenForms[0];

flist.Selected += EditItem;

flist.Show();

}

else

{

flist.Selected += SelectedItem;

flist.ShowDialog();

}

}

private void SelectedItem(object sender, EventArgs e)

{

Returned = flist.GetCurrentItem<MoveProductView>();

SelectedMoveProduct(this, EventArgs.Empty);

flist.Close();

}

private void EditItem(object sender, EventArgs e)

{

MoveProductView CurrentItem = flist.GetCurrentItem<MoveProductView>();

MoveProduct item = unitOfWork.MoveProductRepository.GetByID(CurrentItem.Id);

//item.ObFrom = App.store;

//item.ObTo = unitOfWork.KontragentRepository.GetByID(item.MoveTo);

FMoveProduct frm = new FMoveProduct(item, unitOfWork);

if (frm.ShowDialog() == DialogResult.OK)

{

unitOfWork.MoveProductRepository.Update(item);

unitOfWork.Save();

MoveProductView.Map(item, CurrentItem);

flist.UpdateSource<MoveProductView>(null, sort);

}

else

{

unitOfWork.UndoingChangesObjectContext(((IObjectContextAdapter)unitOfWork.context).ObjectContext);

}

}

private void Set_Filter(object sender, FilterEventArgs e)

{

int id;

DateTime ddate;

var predicate = PredicateBuilder.False<MoveProductView>();

if (e.Text.Trim().Length > 0)

{

if (Int32.TryParse(e.Text, out id))

{

predicate = predicate.Or(t => t.Id == id);

}

if (DateTime.TryParse(e.Text, out ddate))

{

predicate = predicate.Or(t => t.DateMove.Date.ToShortDateString() == ddate.Date.ToShortDateString());

}

predicate = predicate.Or(t => t.MoveFromText != null && t.MoveFromText.Contains(e.Text));

predicate = predicate.Or(t => t.MoveToText != null && t.MoveToText.Contains(e.Text));

predicate = predicate.Or(t => t.NumberDoc != null && t.NumberDoc.Contains(e.Text));

}

var query = listentity.AsQueryable().Where(predicate);

flist.RefreshSource<MoveProductView>(new ObservableCollection<MoveProductView>(query).ToBindingList());

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using InFocus.DbStore;

using System.Windows.Forms;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using System.Drawing;

using Microsoft.Reporting.WinForms;

namespace InFocus.Views

{

public class CMoveProductReturn

{

ReportViewer rpt;

ModeForm mode;

UnitOfWork unitOfWork;

ObservableCollection<MoveProductView> listentity;

string sort;

EntityList flist;

public event EventHandler UpdateAll;

public event EventHandler SelectedMoveProduct;

public object Returned;

public void AddAnotherControl()

{

ToolStripButton btn = new ToolStripButton("btnprint");

btn.Text = "Отчет";

btn.Image = InFocus.Properties.Resources.rpt;

btn.Click += Btn_Click;

btn.Visible = true;

ToolStripButton btn2 = new ToolStripButton("btnprint");

btn2.Text = "Закрыть отчет";

btn2.Image = InFocus.Properties.Resources.close;

btn2.Click += Btn_CloseReport;

btn2.Visible = true;

flist.ts.Items.Insert(7, btn);

flist.ts.Items.Insert(8, btn2);

}

private void Btn_CloseReport(object sender, EventArgs e)

{

if (rpt == null) return;

rpt.SendToBack();

}

private void Btn_Click(object sender, EventArgs e)

{

if (rpt == null)

{

rpt = new ReportViewer();

rpt.LocalReport.ReportPath = "Report/Report4.rdlc";

flist.Controls.Add(rpt);

rpt.Dock = DockStyle.Fill;

rpt.Visible = true;

List<ReportParameter> ps = new List<ReportParameter>();

ReportParameter pTitle = new ReportParameter("pTitle", "Отчет по возврату поставщикам");

ReportParameter pFrom = new ReportParameter("pFrom", "Точка продажи");

ReportParameter pTo = new ReportParameter("pTo", "Поставщик");

ps.Add(pTitle); ps.Add(pFrom); ps.Add(pTo);

rpt.LocalReport.SetParameters(ps);

}

rpt.LocalReport.DataSources.Clear();

rpt.LocalReport.DataSources.Add(new ReportDataSource("ds", flist.GetSourses<MoveProductView>()));

rpt.RefreshReport();

rpt.BringToFront();

}

public DataGridViewColumn[] GetGrid()

{

DataGridViewColumn[] arr = new DataGridViewColumn[6];

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Id";

col.HeaderText = "ИД";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

arr[0] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "DateMove";

col.HeaderText = "Дата";

col.DefaultCellStyle.Format = "d";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 150;

arr[1] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "NumberDoc";

col.HeaderText = "№ докум.";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 100;

arr[2] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "MoveFromText";

col.HeaderText = "Точка продажи";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[3] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "MoveToText";

col.HeaderText = "Поставщик";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[4] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Cost";

col.HeaderText = "Сумма, руб";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.DefaultCellStyle.Format = "C2";

col.Width = 100;

arr[5] = col;

return arr;

}

public void RefreshData(List<MoveProductView> lst_)

{

listentity = new ObservableCollection<MoveProductView>(lst_);

}

public void Build(UnitOfWork unitOfWork_,

List<MoveProductView> lst_,

ModeForm mode_=ModeForm.mfList )

{

unitOfWork = unitOfWork_;

mode = mode_;

listentity = new ObservableCollection<MoveProductView>(lst_);

sort = "DateMove,MoveToText,MoveFromText";

flist = new EntityList();

Bitmap bmp = Properties.Resources.transfer;

flist.Icon = Icon.FromHandle(bmp.GetHicon());

flist.Text = "Возврат поставщику";

flist.Build<MoveProductView>(unitOfWork, listentity.ToBindingList(), GetGrid());

AddAnotherControl();

flist.UpdateSource<MoveProductView>(null, sort);

flist.Added += delegate

{

MoveProduct item = new MoveProduct();

item.MoveTypeFK = (int)enumMoveType.mtReturn;

item.MoveType = unitOfWork.MoveTypeRepository.GetByID((int)enumMoveType.mtReturn);

item.NumberDoc = (unitOfWork.MoveProductRepository.GetCount(filter: a => a.MoveTypeFK == (int)enumMoveType.mtReturn) +1).ToString();

item.DateMove = DateTime.Now;

//item.ObFrom = App.store;

//item.MoveFrom = App.store.Id;

FMoveProduct frm = new FMoveProduct(item, this.unitOfWork);

if (frm.ShowDialog()==DialogResult.OK)

{

unitOfWork.MoveProductRepository.Insert(item);

unitOfWork.Save();

MoveProductView ev = MoveProductView.Map(item);

listentity.Add(ev);

flist.UpdateSource<MoveProductView>(ev, sort);

}

};

flist.Edited += EditItem;

flist.Removed += delegate

{

MoveProductView item = flist.GetCurrentItem<MoveProductView>();

//if (item.Id == App.user.Id) return;

if (MessageBox.Show("Удалить текущую запись?","Внимание!!!",MessageBoxButtons.OKCancel)== DialogResult.OK)

{

unitOfWork.MoveProductRepository.Delete(item.Id);

unitOfWork.Save();

listentity.Remove(item);

flist.UpdateSource<MoveProductView>(null, sort);

}

};

flist.UpdateAll += delegate

{

UpdateAll(this, EventArgs.Empty);

flist.RefreshSource<MoveProductView>(listentity.ToBindingList());

};

flist.RemoveFiltered += delegate

{

flist.RefreshSource<MoveProductView>(listentity.ToBindingList());

};

flist.Filtered += Set_Filter;

if (mode_ == ModeForm.mfList)

{

flist.MdiParent = Application.OpenForms[0];

flist.Selected += EditItem;

flist.Show();

}

else

{

flist.Selected += SelectedItem;

flist.ShowDialog();

}

}

private void SelectedItem(object sender, EventArgs e)

{

Returned = flist.GetCurrentItem<MoveProductView>();

SelectedMoveProduct(this, EventArgs.Empty);

flist.Close();

}

private void EditItem(object sender, EventArgs e)

{

MoveProductView CurrentItem = flist.GetCurrentItem<MoveProductView>();

if (CurrentItem == null) return;

MoveProduct item = unitOfWork.MoveProductRepository.GetByID(CurrentItem.Id);

//item.ObFrom = App.store;

//item.ObTo = unitOfWork.KontragentRepository.GetByID(item.MoveTo);

FMoveProduct frm = new FMoveProduct(item, unitOfWork);

if (frm.ShowDialog() == DialogResult.OK)

{

unitOfWork.MoveProductRepository.Update(item);

unitOfWork.Save();

MoveProductView.Map(item, CurrentItem);

flist.UpdateSource<MoveProductView>(null, sort);

}

else

{

unitOfWork.UndoingChangesObjectContext(((IObjectContextAdapter)unitOfWork.context).ObjectContext);

}

}

private void Set_Filter(object sender, FilterEventArgs e)

{

int id;

DateTime ddate;

var predicate = PredicateBuilder.False<MoveProductView>();

if (e.Text.Trim().Length > 0)

{

if (Int32.TryParse(e.Text, out id))

{

predicate = predicate.Or(t => t.Id == id);

}

if (DateTime.TryParse(e.Text, out ddate))

{

predicate = predicate.Or(t => t.DateMove.Date.ToShortDateString() == ddate.Date.ToShortDateString());

}

predicate = predicate.Or(t => t.MoveFromText != null && t.MoveFromText.Trim().Contains(e.Text.Trim()));

predicate = predicate.Or(t => t.MoveToText != null && t.MoveToText.Trim().Contains(e.Text.Trim()));

predicate = predicate.Or(t => t.NumberDoc != null && t.NumberDoc.Trim().Contains(e.Text.Trim()));

}

var query = listentity.AsQueryable().Where(predicate);

flist.RefreshSource<MoveProductView>(new ObservableCollection<MoveProductView>(query).ToBindingList());

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using InFocus.DbStore;

using System.Windows.Forms;

using System.Collections.ObjectModel;

using System.ComponentModel;

using System.Data.Entity;

using System.Data.Entity.Infrastructure;

using System.Drawing;

namespace InFocus.Views

{

public class CProduct

{

ModeForm mode;

UnitOfWork unitOfWork;

ObservableCollection<ProductView> listentity;

string sort;

EntityList flist;

public event EventHandler UpdateAll;

public event EventHandler SelectedProduct;

public object Returned;

internal bool ReadOnly=false;

public void AddAnotherControl()

{

ToolStripLabel lbl = new ToolStripLabel("Группа");

ToolStripComboBox cbo = new ToolStripComboBox("cbogroup");

List<ProductGroup> l = unitOfWork.ProductGroupRepository.Get(orderBy: a => a.OrderBy(aa => aa.Caption)).ToList();

foreach (ProductGroup item in l)

{

cbo.Items.Add(item);

}

flist.ts.Items.Insert(7, lbl);

flist.ts.Items.Insert(8, cbo);

}

public DataGridViewColumn[] GetGrid()

{

DataGridViewColumn[] arr = new DataGridViewColumn[5];

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Id";

col.HeaderText = "ИД";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;

arr[0] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Caption";

col.HeaderText = "Наименование";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[1] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "ProductGroupText";

col.HeaderText = "Группа";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 150;

arr[2] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "UnitText";

col.HeaderText = "Ед.изм.";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

col.Width = 100;

arr[3] = col;

col = new DataGridViewTextBoxColumn();

col.DataPropertyName = "Description";

col.HeaderText = "Описание";

col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

arr[4] = col;

return arr;

}

public void RefreshData(List<ProductView> lst_)

{

listentity = new ObservableCollection<ProductView>(lst_);

}

public void ButtonCrudOff()

{

flist.SetEnabledButton("bnew", false);

flist.SetEnabledButton("bedit", false);

flist.SetEnabledButton("bremove", false);

}

public void Build(UnitOfWork unitOfWork_,

List<ProductView> lst_,

string ka,

ModeForm mode_=ModeForm.mfList,

ProductView selected = null)

{

unitOfWork = unitOfWork_;

mode = mode_;

listentity = new ObservableCollection<ProductView>(lst_);

sort = "Caption,ProductGroupText";

flist = new EntityList();

if (ReadOnly) ButtonCrudOff();

Bitmap bmp = InFocus.Properties.Resources.product;

flist.Icon = Icon.FromHandle(bmp.GetHicon());

flist.Text =string.IsNullOrEmpty(ka)? "Продукты" : "Продукты, поставляемые: " + ka;

flist.Build<ProductView>(unitOfWork, listentity.ToBindingList(), GetGrid());

AddAnotherControl();

flist.UpdateSource<ProductView>(null, sort);

flist.SetCurrentItem<ProductView>(selected);

flist.Added += delegate

{

Product item = new Product();

FProduct frm = new FProduct(item,this.unitOfWork);

if (frm.ShowDialog()==DialogResult.OK)

{

unitOfWork.ProductRepository.Insert(item);

unitOfWork.Save();

ProductView ev = new ProductView();

ProductView.Map(item, ev);

listentity.Add(ev);

flist.UpdateSource<ProductView>(ev, sort);

}

};

flist.Edited += EditItem;

flist.Removed += delegate

{

ProductView item = flist.GetCurrentItem<ProductView>();

//if (item.Id == App.user.Id) return;

if (MessageBox.Show("Удалить текущую запись?","Внимание!!!",MessageBoxButtons.OKCancel)== DialogResult.OK)

{

unitOfWork.ProductRepository.Delete(item.Id);

unitOfWork.Save();

listentity.Remove(item);

flist.UpdateSource<ProductView>(null, sort);

}

};

flist.UpdateAll += delegate

{

UpdateAll(this, EventArgs.Empty);

flist.RefreshSource<ProductView>(listentity.ToBindingList());

};

flist.RemoveFiltered += delegate

{

flist.RefreshSource<ProductView>(listentity.ToBindingList());

ToolStripComboBox cbo = flist.ts.Items.Find("cbogroup", true).OfType<ToolStripComboBox>().Single();

cbo.SelectedIndex = -1;

};

flist.Filtered += Set_Filter;

if (mode_ == ModeForm.mfList)

{

flist.MdiParent = Application.OpenForms[0];

flist.Selected += EditItem;

flist.Show();

}

else

{

flist.Selected += SelectedItem;

flist.ShowDialog();

}

}

private void SelectedItem(object sender, EventArgs e)

{

Returned = flist.GetCurrentItem<ProductView>();

SelectedProduct(this, EventArgs.Empty);

flist.Close();

}

private void EditItem(object sender, EventArgs e)

{

ProductView CurrentItem = flist.GetCurrentItem<ProductView>();

Product item = unitOfWork.ProductRepository.GetByID(CurrentItem.Id);

FProduct frm = new FProduct(item, unitOfWork);

if (frm.ShowDialog() == DialogResult.OK)

{

unitOfWork.ProductRepository.Update(item);

unitOfWork.Save();

ProductView.Map(item, CurrentItem);

flist.UpdateSource<ProductView>(null, sort);

}

else

{

unitOfWork.UndoingChangesObjectContext(((IObjectContextAdapter)unitOfWork.context).ObjectContext);

}

}

private void Set_Filter(object sender, FilterEventArgs e)

{

int id;

var predicate = PredicateBuilder.False<ProductView>();

if (e.Text.Trim().Length > 0)

{

if (Int32.TryParse(e.Text, out id))

{

predicate = predicate.Or(t => t.Id == id);

}

predicate = predicate.Or(t => t.Caption != null && t.Caption.ToLower().Contains(e.Text));

predicate = predicate.Or(t => t.Description != null && t.Description.ToLower().Contains(e.Text));

}

ToolStripComboBox cbo = flist.ts.Items.Find("cbogroup", true).OfType<ToolStripComboBox>().Single();

if (cbo.SelectedIndex >= 0)

{

if (e.Text.Trim().Length > 0)

{

predicate = predicate.And(t => t.GroupFK == (cbo.SelectedItem as ProductGroup).Id);

}

else

{

predicate = predicate.Or(t => t.GroupFK == (cbo.SelectedItem as ProductGroup).Id);

}

}

var query = listentity.AsQueryable().Where(predicate);

flist.RefreshSource<ProductView>(new ObservableCollection<ProductView>(query).ToBindingList());

}

}

}