Создание бизнес-модели предприятия, согласно инструментарию планирования бизнес-процессов

Оглавление

Введение

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

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

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

В современных условиях многие компании повышают свою

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

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

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

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

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

  1. Понятие бизнес-процессов и их роль в современном управлении

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

1.1 Структура и классификация бизнес-процессов

Типовая структура бизнес-процессов (Рис.1. Структура бизнес-процессов) управления представляется стандартной цепочкой управленческого цикла, который состоит из следующих этапов:

  • Этап 1. "Планирование". На данной этапе собирается информация, проводится ее анализ и разрабатывается план действий.
  • Этап 2. "Организация". После разработки плана нужно обеспечить его реализацию - довести мероприятия до сотрудников, замотивировать и обеспечить сотрудников необходимыми для реализации плана ресурсами.
  • Этап 3. "Учет". По истечении установленного периода нужно собрать фактическую информацию о выполнении запланированных работ и достигнутых результатов.
  • Этап 4. "Контроль". После проведения учета план сопоставляется с фактической информацией и проводится анализ фактических отклонений.
  • Этап 5. "Регулирование". На последнем пятом этапе принимается решение о последующих действиях - корректировки плана, поощрении или наказании сотрудников, которые эти планы реализовывали.

Рис.1. Структура бизнес-процессов

В зависимости от места бизнес-процессов в организационной структуре компании выделяют следующие бизнес-процессы: (Рис.2. Классификация бизнес-процессов)

Первая группа бизнес-процессов - это основные процессы:

  • Розничная торговля аудио–видео продукции,
  • Производство и продажа аудио–видео продукции,
  • Производство и продажа торгового оборудования

Вторая группа бизнес-процессов - это обеспечивающие процессы:

  • Обеспечение безопасности,
  • Административно-хозяйственное обеспечение – АХО,
  • Юридическое обеспечение.

Третья группа процессов - это процессы управления.

  • Стратегическое управление,
  • Управление персоналом,
  • Управление финансами,
  • Управление маркетингом,
  • Управление товарным запасом.

Рис.2. Классификация бизнес-процессов.

  1. Инструменты бизнес-моделирования и особенности его применения

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

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

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

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

Рис. 3. Иерархический список бизнес-процессов предприятия

Основные виды бизнес-моделей, которые разрабатываются в организациях:

  • дерево (иерархический список) бизнес-процессов – см. Рис.1;
  • графические модели бизнес-процессов;
  • модель организационной структуры;
  • модели целей и показателей;
  • модели библиотеки документов (дерево документов), модели информационных систем;
  • модели продуктов и услуг;
  • модели по менеджменту качества и многое другое.

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

Некоторые известных на рынке решений программные продукты: Business Studio, ARIS, All Fusion Process Modeler (BPWIN), Бизнес-инженер, Microsoft Visio. У каждого из них есть свои функциональные особенности, ограничения и преимущества.

  1. Модель бизнес-процессов

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

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

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

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

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

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

  1. Проектирования бизнес-процесса

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

Порождающей грамматикой для бизнес-процесса называется упорядоченная восьмерка объектов G = (Mt, Mn, Mo, P, Es, Ms, En, Mn). где

Mt – множество терминальных символов;

Mn – множество нетерминальных символов;

Mo Mn – множество начальных символов;

P – множество порождающих правил;

Es – конечное множество синтезируемых атрибутов;

Ms – множество методов синтеза атрибутов;

En – конечное множество наследуемых атрибутов;

Mn – множество методов наследования атрибутов.

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

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

Укрупненный алгоритм работы метода включает следующие 5 шагов:

  • Трансляция моделей, формализующих результаты обследования на традиционных языках моделирования в граф бизнес-процесса.
  • Уточнение графа бизнес-процесса на предмет возможности последовательности и параллельности выполнения бизнес-функций, а также введение значений синтезируемых атрибутов, ограничений на них и методов их синтеза.
  • Построение грамматики бизнес-процесса на основании его графа.
  • Генерация (на основании порождающей грамматики) ограниченного множества вариантов выполнения бизнес-процесса на основании набора его бизнес-функций с учетом ограничений.
  • Принятие решения по проектируемому бизнес-процессу.
  1. Разработка инструментария планирования бизнес-процесса и его применение деятельности предприятия “Холдинг Афанасий”
    1. Среда разработки

Miсrоsоft Visuаl Studiо 2010 — средство для разработчиков ПО, которое позволяет решать основные задачи разработки: система упрощает создание, отладку и развёртывание приложений на различных платформах, включая ShаrеРоint и облачную среду.

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

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

Visuаl Studiо включает функцию поддержки нескольких мониторов, которая позволяет наиболее удобно организовать работу. Независимо от сложности проекта Visuаl Studiо можно использовать для реализации идей и решений для широкого спектра платформ, включая Windоws, Windоws Sеrvеr, веб-среду, облачную среду, Оffiсе и ShаrеРоint и многое другое.

  1. R3 как инструментария для планирования бизнес-процессов в “Холдинг Афанасий”

Рис. 4. О предприятии

Пиво "Афанасий" стабильно входит в рейтинг 200 крупнейших предприятий, который проводит журнал "Эксперт". А бренд "Афанасий" (один из первых пивных брендов России) существует на рынке более 10 лет.

История тверского пивоварения началась в 1887 году, когда австрийский подданный Эмиль Слатинский основал на берегу Твери (в советское время — Калинина) первую парную пивоварню, получившую название "Тверская Бавария". Производимое в этих местах пиво высоко ценилось знатоками.

На данном предприятии работает ERP-система SAP R/3. (Рис 6-9)

Благодаря открытому стандартному пользовательскому интерфейсу партнеры SAP и консультанты могут создавать предварительно сконфигурированные отраслевые решения на базе хозяйственных сценариев SAP R/3. Кроме того, открытые интерфейсы дают клиентам SAP возможность разрабатывать собственные шаблоны для внедрения системы SAP R/3 (Рис1.). Бизнес-конфигуратор SAP R/3, поддерживающий процедуры создания и ведения моделей предприятия с автоматической генерацией соответствующих задач и профилей настройки; Ссылочная модель SAP R/3 - обширная метамодель внедрения SAP R/3, включающая организационную модель, модель процессов, модель данных, модель распределения функций и модель бизнес-объектов; Репозиторий SAP R/3 - основной банк данных для Ссылочной модели, отраслевых моделей и созданных моделей предприятия.

Система обеспечивает динамическое графическое моделирование бизнес-процессов и может работать в диалоговом режиме. При создании модели предприятия могут использоваться типовые сценарии бизнес-процессов, поставляемые SAP и ее партнерами. Инструментарий бизнес-инжиниринга может применяться и для реализации собственных методов внедрения SAP R/3, в том числе с использованием привычных инструментов динамического моделирования бизнес-процессов от других производителей.

\

Рис. 5. SAP R3

Рис. 6. Окно ООД “Список транспорта и его маршрут”

Рис. 7. Окно ООД “Процесс оформления документов”

Рис. 8. Окно логистики

Рис. 9. Процесс создания Счет-фактуры

  1. Разработка программного продукта

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

Моделью предприятия послужил “Холдинг Афанасий” (Тверской Пивоваренный завод). Так как предприятие крупное, следует рассмотреть и описать конкретный бизнес-процесс. А именно процесс сбыта приготавливаемой продукции.

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

1 - Принятие заявок

2 - Формирование задания для отгрузки

3 - Распределение транспортных средств

4 - Отгрузка

5 - Подготовка документов

6 - Экспедирование

7 - Контроль и анализ договоров

Рис. 10. Бизнес-процесс сбыта “Холдинг Афанасий”

Перечисленные бизнес-функции выполняются в следующих подразделениях предприятия:

  • Отдел логистики (Рис. 6. Структура отдела логистики)

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

  • Транспортная компания

Транспортно-экспедиционная компания (ТЭК) — компания, занимающаяся организацией перевозок грузов от грузоотправителя (клиента) к грузополучателю. В большинстве случаев ТЭК является компанией посредником между клиентом и перевозчиком, предоставляя услуги по поиску исполнителя и транспорта удовлетворяющим критерием перевозки груза. От компетентности и профессионализма данной компании зависит качество и своевременность перевозки грузов.

  • Отдел обработки документов

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

  • Склад готовой продукции

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

Рис.11. Структура отдела логистики

При выполнении бизнес-процесса учитываются следующие ресурсы:

  • Временные затраты
  • Требуемое число исполнителей
  • Заработная плата

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

G = (Mt, Mn, Mo, P, Es, Ms, En, Mn)

Mt = {Nф}– множество терминальных символов;

Mn –{No,1,2,3,4,5,6,7} множество нетерминальных символов;

Mo = {No} Mn – множество начальных символов;

P – множество порождающих правил;

Es = {r}–множество кортежей ресурсных характеристик грамматики, при этом каждый компонент {r} определяет соответствующие ресурсы;

Ms – множество методов синтеза атрибутов;

En = {Л, О, Т, С}– множество возможных мест выполнения бизнес-функции (Отдел Логистики, Транспортная компания, ООД, Склад);

Mn – множество методов наследования атрибутов.

Перечислим множество порождающих правил (без включения ресурсных характеристик)

No 1{Л} | 1{О}

1{Л} 2{Л}

1{О} 2{Л}

2{Л} 3{Т} | 7{О}

3{Т} 2{Л} | 4{Т} | 4{С}

4{Т} 3{Т} | 5{О}

4{С} 3{Т} | 5{О}

5{О} 6{Т} | 6{Л}

6{Т} 7{О}

6{Л} 7{О}

7{О} Nф

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

Рис. 12. Приведенная грамматика

Из множества построенных вариантов выделим приемлемые с позиции лица, принимающего решение (ЛПР). Такое выделение будет осуществляться в два этапа

  • Автоматическое отбрасывание неприемлемых вариантов на основе ряда объективных критериев;
  • Субъективная оценка ситуации.

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

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

Для наглядности, воспользуемся случайно возможными входными данными.

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

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

Каждый из вариантов-бизнес процесса характеризуется такими показателями как:

  • Время исполнения
  • Количество исполнителей
  • Стоимость исполнения

Для нахождения оптимального бизнес-процесса мы вводим значения данных показателей. В итоге получаем. (Рис. 13. Нахождение оптимального бизнес-процесса).

Рис. 13. Нахождение оптимального бизнес-процесса

Далее выбираем оптимальный вариант, исходя из показателей которыми мы пользуемся. (Рис.14. Оптимальный бизнес-процесс)

Рис.14. Оптимальный бизнес-процесс

Заключение

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

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

Реализован бизнес-процесс на примере конкретного предприятия.

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

Создана бизнес-модель предприятия, отображаемая инструментарии планирования бизнес-процессов.

В процессе создания инструментария решены следующие задачи:

  • ознакомление с основными понятиями и классификацией бизнес-процессов;
  • изучение структуры бизнес-процессов;
  • моделирование бизнес-процессов
  • изучение грамматики бизнес-процессов и её порождение;
  • реализован бизнес-процесс на примере “Холдинга Афанасий”;
  • тестирование реализованного бизнес-процесса;
  • анализ результатов.

Рис. 15.1. Программный продукт

Рис. 15.2. Программный продукт

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

1. Калянов Г.Н. Моделирование, анализ, реорганизация и автоматизация бизнеспроцессов. М.: Финансы и статистика, 2006. 240 с.

2. Калянов Г.Н. Использование формальных грамматик в задачах реинжиниринга бизнес-процессов // Труды 12-й Национальной конференции по искусственному интеллекту КИИ-2010. М., 2010. Т. 4. С. 172-179.

3. Калянов Г.Н. Теоретические основы реорганизации бизнес-процессов // LAP LAMBERT Academic Publishing, 2012. 184 c.

4. Калянов Г.Н. Тестирование информационных потоков // Труды 13-й Российской научно-практической конференции «Реинжиниринг бизнес-процессов на основе современных информационных технологий. Системы управления процессами и знаниями». М., 2010. С. 146-151.

5. Калянов Г.Н. Системный анализ требований к КИС // Труды 15-й Российской научно-практической конференции «Реинжиниринг бизнес-процессов на основе современных информационных технологий. Системы управления знаниями». М., 2012. С. 96-98.

6. Басовский Л. Е., Протасьев В. Б. Управление качеством: // Учебник. - М.: ИНФРА - М, 2006. - 212 с.

7.Бизнес-реинжиниринг: Учебное пособие / Под ред. Н. В. Васильева - М.: Экмос, 2005. - 224 с.

8. Бусленко Н. П. Моделирование сложных систем. // М.: Юрайт, 2006. - 311 с.

9. Глудкин О. П., Горбунов Н. М. Всеобщее управление качеством:// Учебное пособие.- М.: Лаборатория Базовых знаний, 2005.- 490 с.

10. Ершов. А. К. Управление качеством. // – М.: Логос, 2008. – 288 с.

11. Михеева Е. Н., Сероштан М. В. Управление качеством. – М.: Дашков и Ко, 2009. – 708 с.

12. Миронов М. Г. Управление качеством. – М.: Проспект, 2006. – 288с.

13. Репин В.В., Елиферов В.Г. Процессный подход к управлению: Моделирование бизнес-процессов. - М.: РИА Стандарты и качество, 2004. - 408 c.

14.  Ротер М., Шук Д. Учитесь видеть бизнес-процессы. Практика построения карт потоков создания ценности. - М.: Альпина Бизнес Букс, 2008. - 144 c.

15. Кизиков И.В., Савченко Я.В. " Методика выбора бизнес-процессов для оптимизации в интегрированных холдинговых структурах" [Электонный ресурс]/И.В. Кизиков, Я.В. Савченко – Электрон. текстовые дан. - Екатеринбург: ФГБОУ ВПО "УГЭУ", 2011.

16. Исаев Р.А. Инструменты бизнес-моделирования и особенности его применения/Р.А. Исаев – М.: ИНФРА-М, 2011. – 400 с. Ил.

17. Исаев Р.А. Банковский менеджмент и бизнес-инжиниринг/ Р.А. Исаев – М.: ИНФРА-М, 2011. – 400 с. Ил.

18. Ковалев С.М., Ковалев В.М. Технология структуризации и описания организации – шаг за шагом/ С.М. Ковалев, В.М. Ковалев// Консультант директора. - 2008. - №8.

19. Электронный ресурс удаленного доступа (Internet). Режим доступа: http://www.bibliofond.ru/view.aspx?id=650564, свободный

20.  Робсон М., Уллах Ф. Реинжиниринг бизнес-процессов: Практическое руководство / Пер. с англ.; Под ред. Н.Д. Эриашвили. - М.: ЮНИТИ-ДАНА, 2003. - 222 с.

21.  Ткаченко И.Н., Кизиков И.В. Оптимизация бизнес-процессов интегрированных холдинговых структур // Управленец. - 2011. - № 3-4. - С. 40-45.

Приложение

BussinesProcess.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing.Drawing2D;

using System.Drawing;

namespace Диплом

{

public struct Job

{

public String namePeople;

public String nameOffice;

public IList<String> funktion;

}

public class BussinesProcess

{

public String nameProcess;

public bool PrOrJob;

public Job funk;

public IList<BussinesProcess> neiboor;

public bool fun;

public BussinesProcess funktion;

public Point m;

}

}

Form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing.Drawing2D;

namespace Диплом

{

public partial class Form1 : Form

{

bool fl;/////////////////выбор диаграмм

Graphics graphics;

Bitmap B_map;

IList<String> именаБлоковБизнесФункций = new List<String>();

IList<String> именаОтделов = new List<String>();

Rectangle[] Отделы = new Rectangle[4];

public int kef = 10;

Rectangle[] бизнесФункции = new Rectangle[7];

Rectangle[] началоКонец = new Rectangle[2];

Rectangle[] бизнесФункции1 = new Rectangle[7];

public Form1()

{

InitializeComponent();

B_map = new Bitmap(900, 700);

graphics = Graphics.FromImage(B_map);

graphics.Clear(Color.White);

pictureBox1.Image = B_map;

именаБлоковБизнесФункций.Add("Принятие заявок");

именаБлоковБизнесФункций.Add("Формирование задания для отгрузки");

именаБлоковБизнесФункций.Add("Распределение транспортных средств");

именаБлоковБизнесФункций.Add("Отгрузка");

именаБлоковБизнесФункций.Add("Подготовка документов");

именаБлоковБизнесФункций.Add("Экспедирование");

именаБлоковБизнесФункций.Add("Контроль и анализ договоров");

именаОтделов.Add("Логистика");

именаОтделов.Add("Транспортная\nкомпания");

именаОтделов.Add("Отдел обра-\nботки доку-\nментов");

именаОтделов.Add("Склад");

richTextBox1.ReadOnly = true;

button2.Enabled = false;

for (int i = 0; i < 2; i++)

{

Point P1;

if (i < 1)

{

P1 = new Point((900 / 2) + 30, 5);

началоКонец[i].Location = P1;

началоКонец[i].Width = 30;

началоКонец[i].Height = 30;

}

else

{

P1 = new Point((900 / 2) + (900 / 3) + 30, 640);

началоКонец[i].Location = P1;

началоКонец[i].Width = 30;

началоКонец[i].Height = 30;

}

}

for (int i = 0; i < 7; i++)

{

Point P1 = new Point((900 / 2) + (900 / 4) - 30, i * 100 + 5);

бизнесФункции1[i].Location = P1;

бизнесФункции1[i].Width = 30;

бизнесФункции1[i].Height = 30;

}

for (int i = 0; i < 7; i++)

{

Point P1 = new Point(900 / 4 - 30, i * 100 + 5);

бизнесФункции[i].Location = P1;

бизнесФункции[i].Width = 30;

бизнесФункции[i].Height = 30;

}

for (int i = 0; i < 4; i++)

{

Point P1;

if (i < 2)

{

P1 = new Point(20, 250 + i * 250);

}

else

{

P1 = new Point((900 / 3) + 30, 250 + (i - 2) * 250);

}

Отделы[i].Location = P1;

Отделы[i].Width = 100;

Отделы[i].Height = 50;

}

}

public void RisArrow(Point X, Point Y)

{

Pen penLINE = new Pen(Color.Black, 2);

graphics.DrawLine(penLINE, X, Y);

double ugol = Math.Atan2(X.X - Y.X, X.Y - Y.Y);

graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(0.3 + ugol)), Convert.ToInt32(Y.Y + 15 * Math.Cos(0.3 + ugol)));

graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(ugol - 0.3)), Convert.ToInt32(Y.Y + 15 * Math.Cos(ugol - 0.3)));

pictureBox1.Image = B_map;

}

private void button1_Click(object sender, EventArgs e)

{

richTextBox1.Text = "";

for (int i = 0; i < именаБлоковБизнесФункций.Count; i++)

{

richTextBox1.Text += Convert.ToString(i + 1) + " - " + именаБлоковБизнесФункций[i] + "\n";

}

Pen pen = new Pen(Color.Black,2);

Point p1 = new Point(900/2,0);

Point p2 = new Point(900/2,700);

graphics.DrawLine(pen,p1,p2);

pen.Color = Color.Red;

pen.Width = 3;

graphics.DrawRectangles(pen, бизнесФункции);

graphics.DrawRectangles(pen, бизнесФункции1);

pen.Color = Color.Green;

pen.Width = 3;

graphics.DrawRectangles(pen, Отделы);

graphics.DrawRectangles(pen, началоКонец);

for (int i = 0; i < 7; i++)

{

String Text = String.Format("{0}", Convert.ToString(i+1));

Brush Кисть = new SolidBrush(Color.Black);

graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, бизнесФункции[i].Location.X + kef, бизнесФункции[i].Location.Y + kef);

}

for (int i = 0; i < 2; i++)

{

if (i < 1)

{

String Text = String.Format("{0}", "Nо");

Brush Кисть = new SolidBrush(Color.Black);

graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, началоКонец[i].Location.X + kef, началоКонец[i].Location.Y + kef);

}

else

{

String Text = String.Format("{0}", "Nф");

Brush Кисть = new SolidBrush(Color.Black);

graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, началоКонец[i].Location.X + kef, началоКонец[i].Location.Y + kef);

}

}

for (int i = 0; i < 7; i++)

{

String Text = String.Format("{0}", Convert.ToString(i + 1));

Brush Кисть = new SolidBrush(Color.Black);

graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, бизнесФункции1[i].Location.X + kef, бизнесФункции1[i].Location.Y + kef);

}

for (int i = 0; i < 4; i++)

{

String Text = String.Format("{0}", именаОтделов[i]);

Brush Кисть = new SolidBrush(Color.Black);

graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, Отделы[i].Location.X + kef, Отделы[i].Location.Y + kef);

}

///////////////////////////////////////////Стрелки для 2 диаграммы

for (int i = 0; i < 6; i++)

{

Point X = new Point(бизнесФункции1[i].Location.X + 30 / 2, бизнесФункции1[i].Location.Y + 30);

Point Y = new Point(бизнесФункции1[i + 1].Location.X + 30 / 2, бизнесФункции1[i + 1].Location.Y);

RisArrow(X, Y);

}

for (int i = 0; i < 2; i++)

{

Point X;

Point Y;

if (i < 1)

{

X = new Point(началоКонец[i].Location.X + 30, началоКонец[i].Location.Y + 30 / 2);

Y = new Point(бизнесФункции1[i].Location.X, бизнесФункции1[i].Location.Y + 30 / 2);

RisArrow(X, Y);

}

else

{

X = new Point(бизнесФункции1[бизнесФункции1.Length - 1].Location.X + 30, бизнесФункции1[бизнесФункции1.Length - 1].Location.Y + 30 / 2);

Y = new Point(началоКонец[i].Location.X, началоКонец[i].Location.Y + 30 / 2);

RisArrow(X, Y);

}

}

for (int i = 0; i < 3; i++)

{

pen.Width = 2;

pen.Color = Color.Black;

Point X;

Point Y;

switch (i)

{

case 0: {

X = new Point(бизнесФункции1[1].Location.X, бизнесФункции1[1].Location.Y + 30 / 2);

Y = new Point(бизнесФункции1[1].Location.X - 60, бизнесФункции1[1].Location.Y + 30 / 2);

graphics.DrawLine(pen, X, Y);

X = Y;

Y.X = бизнесФункции1[бизнесФункции1.Length - 1].Location.X - 60;

Y.Y = бизнесФункции1[бизнесФункции1.Length - 1].Location.Y + 30 / 2;

graphics.DrawLine(pen, X, Y);

X = Y;

Y.X = бизнесФункции1[бизнесФункции1.Length - 1].Location.X;

RisArrow(X, Y);

break; }

case 1:

{

X = new Point(бизнесФункции1[2].Location.X + 30, бизнесФункции1[2].Location.Y + 30 / 2);

Y = new Point(бизнесФункции1[2].Location.X + 60, бизнесФункции1[2].Location.Y + 30 / 2);

graphics.DrawLine(pen, X, Y);

X = Y;

Y.X = бизнесФункции1[1].Location.X + 60;

Y.Y = бизнесФункции1[1].Location.Y + 30 / 2;

graphics.DrawLine(pen, X, Y);

X = Y;

Y.X = бизнесФункции1[1].Location.X + 30;

RisArrow(X, Y);

break;

}

case 2: {

X = new Point(бизнесФункции1[3].Location.X, бизнесФункции1[3].Location.Y + 30 / 2);

Y = new Point(бизнесФункции1[3].Location.X - 30, бизнесФункции1[3].Location.Y + 30 / 2);

graphics.DrawLine(pen, X, Y);

X = Y;

Y.X = бизнесФункции1[2].Location.X - 30;

Y.Y = бизнесФункции1[2].Location.Y + 30 / 2;

graphics.DrawLine(pen, X, Y);

X = Y;

Y.X = бизнесФункции1[1].Location.X;

RisArrow(X, Y);

break;

}

}

}

///////////////////////////////////////////Стрелки для 1 диаграммы

Point X1 = new Point(бизнесФункции[0].Location.X,бизнесФункции[0].Location.Y + 30/2);

Point Y1 = new Point(Отделы[0].Location.X + 100 / 4, Отделы[0].Location.Y);

RisArrow(X1, Y1);

X1.X += 30;

Y1.X = Отделы[2].Location.X + 100 / 4;

Y1.Y = Отделы[2].Location.Y;

RisArrow(X1, Y1);

X1.X -= 30;

X1.Y = бизнесФункции[1].Location.Y + 30 / 2;

Y1.X = Отделы[0].Location.X + (100/4) * 3;

Y1.Y = Отделы[0].Location.Y;

RisArrow(X1, Y1);

X1.Y = бизнесФункции[2].Location.Y + 30 / 2;

Y1.X = Отделы[1].Location.X + 100 / 4;

Y1.Y = Отделы[1].Location.Y;

RisArrow(X1, Y1);

X1.Y = бизнесФункции[3].Location.Y + 30 / 2;

Y1.X = Отделы[1].Location.X + (100 / 4) * 3;

Y1.Y = Отделы[1].Location.Y;

RisArrow(X1, Y1);

X1.X += 30;

Y1.X = Отделы[3].Location.X + 100 / 4;

Y1.Y = Отделы[3].Location.Y;

RisArrow(X1, Y1);

X1.Y = бизнесФункции[4].Location.Y + 30 / 2;

Y1.X = Отделы[2].Location.X + (100 / 4) * 3;

Y1.Y = Отделы[2].Location.Y + 50;

RisArrow(X1, Y1);

X1.X -= 30;

X1.Y = бизнесФункции[5].Location.Y + 30 / 2;

Y1.X = Отделы[0].Location.X + (100 / 4) * 3;

Y1.Y = Отделы[0].Location.Y + 50;

RisArrow(X1, Y1);

Y1.X = Отделы[1].Location.X + 100;

Y1.Y = Отделы[1].Location.Y + 50 / 2;

RisArrow(X1, Y1);

X1.X += 30;

X1.Y = бизнесФункции[6].Location.Y + 30 / 2;

Y1.X = Отделы[2].Location.X + 100 / 4;

Y1.Y = Отделы[2].Location.Y + 50;

RisArrow(X1, Y1);

pictureBox1.Image = B_map;

fl = true;

button2.Enabled = true;

}

private void pictureBox1_Click(object sender, EventArgs e)

{

}

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)

{

if (fl == true)

{

int k = -1;

for (int i = 0; i < Отделы.Length; i++)

{

if (e.Location.X >= Отделы[i].Location.X && e.Location.X <= Отделы[i].Location.X + 100 && e.Location.Y >= Отделы[i].Location.Y && e.Location.Y <= Отделы[i].Location.Y + 50)

k = i;

}

switch (k)

{

case 0:

{

Form2 f2 = new Form2();

f2.ShowDialog();

break;

}

case 1:

{

MessageBox.Show("Форма ТК");

break;

}

case 2:

{

MessageBox.Show("Форма ООД");

break;

}

case 3:

{

MessageBox.Show("Форма Склад");

break;

}

default: break;

}

}

}

private void button2_Click(object sender, EventArgs e)

{

Form3 f = new Form3();

f.ShowDialog();

}

}

}

Form1.Designer.cs

namespace Диплом

{

partial class Form1

{

/// <summary>

/// Требуется переменная конструктора.

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// Освободить все используемые ресурсы.

/// </summary>

/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#region Код, автоматически созданный конструктором форм Windows

/// <summary>

/// Обязательный метод для поддержки конструктора - не изменяйте

/// содержимое данного метода при помощи редактора кода.

/// </summary>

private void InitializeComponent()

{

this.pictureBox1 = new System.Windows.Forms.PictureBox();

this.richTextBox1 = new System.Windows.Forms.RichTextBox();

this.button1 = new System.Windows.Forms.Button();

this.button2 = new System.Windows.Forms.Button();

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();

this.SuspendLayout();

//

// pictureBox1

//

this.pictureBox1.Location = new System.Drawing.Point(13, 13);

this.pictureBox1.Name = "pictureBox1";

this.pictureBox1.Size = new System.Drawing.Size(900, 700);

this.pictureBox1.TabIndex = 0;

this.pictureBox1.TabStop = false;

this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);

this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);

//

// richTextBox1

//

this.richTextBox1.Location = new System.Drawing.Point(919, 224);

this.richTextBox1.Name = "richTextBox1";

this.richTextBox1.Size = new System.Drawing.Size(419, 494);

this.richTextBox1.TabIndex = 1;

this.richTextBox1.Text = "";

//

// button1

//

this.button1.Location = new System.Drawing.Point(919, 179);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(116, 39);

this.button1.TabIndex = 2;

this.button1.Text = "Нарисовать диаграммы";

this.button1.UseVisualStyleBackColor = true;

this.button1.Click += new System.EventHandler(this.button1_Click);

//

// button2

//

this.button2.Location = new System.Drawing.Point(919, 12);

this.button2.Name = "button2";

this.button2.Size = new System.Drawing.Size(116, 39);

this.button2.TabIndex = 3;

this.button2.Text = "Построить бизнес-процесс";

this.button2.UseVisualStyleBackColor = true;

this.button2.Click += new System.EventHandler(this.button2_Click);

//

// Form1

//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(1350, 730);

this.Controls.Add(this.button2);

this.Controls.Add(this.button1);

this.Controls.Add(this.richTextBox1);

this.Controls.Add(this.pictureBox1);

this.Name = "Form1";

this.Text = "Диплом";

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();

this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.PictureBox pictureBox1;

private System.Windows.Forms.RichTextBox richTextBox1;

private System.Windows.Forms.Button button1;

private System.Windows.Forms.Button button2;

}

}

Form2.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Диплом

{

public partial class Form2 : Form

{

BussinesProcess BP;

Graphics graphics;

Bitmap B_map;

public int kef = 10;

public int kefX = 50 + 90;

public int kefY = 50 + 40;

public int W = 90;

public int H = 40;

public Form2()

{

int K = 10;

BP = new BussinesProcess();

String NM;

InitializeComponent();

B_map = new Bitmap(900, 700);

graphics = Graphics.FromImage(B_map);

graphics.Clear(Color.White);

pictureBox1.Image = B_map;

BP.funk = new Job();

BP.neiboor = new List<BussinesProcess>();

BP.nameProcess = "Логистика";

BP.PrOrJob = false;

BP.fun = false;

/////////////////////////////////////////////////////////////////////

BussinesProcess b = new BussinesProcess();

b.PrOrJob = true;

b.fun = false;

b.funk = new Job();

b.funk.funktion = new List<String>();

b.neiboor = new List<BussinesProcess>();

b.nameProcess = "Начальник от-\nдела логистики";

//////////////////////////////////////////////////////////////////////

b.funk.namePeople = "Марья Ивановна";

b.funk.nameOffice = "Начальник отдела логистики";

NM = "Найм новых сотрудников";

b.funk.funktion.Add(NM);

NM = "Распределение ресурсов";

b.funk.funktion.Add(NM);

NM = "Контроль качества";

b.funk.funktion.Add(NM);

/////////////////////////////////////////////////////////////////////

BussinesProcess b1 = new BussinesProcess();

b1.PrOrJob = true;

b1.fun = false;

b1.funk = new Job();

b1.funk.funktion = new List<String>();

b1.nameProcess = "Логист";

/////////////////////////////////////////////////////////////////////

b1.funk.nameOffice = "Логист";

b1.funk.namePeople = "Сидоров Петя";

NM = "Выбор типа транспортного средства.";

b1.funk.funktion.Add(NM);

NM = "Выбор вида транспортного средства.";

b1.funk.funktion.Add(NM);

NM = "Совместное планирование транспортных процессов со складскими и производственными операциями.";

b1.funk.funktion.Add(NM);

NM = "Совместное планирование транспортных процессов на различных видах транспорта.";

b1.funk.funktion.Add(NM);

NM = "Обеспечение технологического единства транспортно-складского процесса.";

b1.funk.funktion.Add(NM);

NM = "Определение рациональных маршрутов поставки.";

b1.funk.funktion.Add(NM);

/////////////////////////////////////////////////////////////////////

b.neiboor.Add(b1);

/////////////////////////////////////////////////////////////////////

b1 = new BussinesProcess();

b1.PrOrJob = true;

b1.fun = false;

b1.funk = new Job();

b1.funk.funktion = new List<String>();

b1.nameProcess = "Отдел экспе-\nдирования";

/////////////////////////////////////////////////////////////////////

b1.funk.nameOffice = "Экспедитор";

b1.funk.namePeople = "Иванов Федька";

NM = "Доставка товара.";

b1.funk.funktion.Add(NM);

NM = "Получение денежных средств.";

b1.funk.funktion.Add(NM);

NM = "Доставка денежных средств на базу.";

b1.funk.funktion.Add(NM);

/////////////////////////////////////////////////////////////////////

b.neiboor.Add(b1);

BP.neiboor.Add(b);

}

public IList<Point> raspredY(int size, int Y)

{

IList<Point> arr = new List<Point>(size);

for (int i = 0; i < size; i++)

{

Point xy = new Point();

xy.Y = Y;

xy.X = kefX + (i+1) * 500 / (size + 1);

arr.Add(xy);

}

return arr;

}

public void RisArrow(Point X, Point Y)

{

Pen penLINE = new Pen(Color.Black, 2);

graphics.DrawLine(penLINE, X, Y);

double ugol = Math.Atan2(X.X - Y.X, X.Y - Y.Y);

graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(0.3 + ugol)), Convert.ToInt32(Y.Y + 15 * Math.Cos(0.3 + ugol)));

graphics.DrawLine(penLINE, Y.X, Y.Y, Convert.ToInt32(Y.X + 15 * Math.Sin(ugol - 0.3)), Convert.ToInt32(Y.Y + 15 * Math.Cos(ugol - 0.3)));

pictureBox1.Image = B_map;

}

public void RisBlock(BussinesProcess a)

{

Pen pen = new Pen(Color.Red, 3);

graphics.DrawRectangle(pen, a.m.X, a.m.Y, W, H);

String Text = String.Format("{0}", a.nameProcess);

Brush Кисть = new SolidBrush(Color.Black);

graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

graphics.DrawString(Text, new System.Drawing.Font("Times New Roman", 9, FontStyle.Bold), Кисть, a.m.X + kef, a.m.Y + kef);

pictureBox1.Image = B_map;

}

private void Form2_Load(object sender, EventArgs e)

{

BP.m.Y = 10;

int Y = kefY + BP.m.Y;

BP.m.X = kefX + 500 / (1 + 1);

IList<Point> arr = new List<Point>();

arr = raspredY(BP.neiboor.Count, Y);

for (int i = 0; i < BP.neiboor.Count; i++)

{

BP.neiboor[i].m = arr[i];

}

Y = Y + kefY;

RisBlock(BP);

for (int i = 0; i < BP.neiboor.Count; i++)

{

RisBlock(BP.neiboor[i]);

}

for (int i = 0; i < BP.neiboor.Count; i++)

{

arr = raspredY(BP.neiboor[i].neiboor.Count, Y);

for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)

{

BP.neiboor[i].neiboor[j].m = arr[j];

RisBlock(BP.neiboor[i].neiboor[j]);

}

}

Point XX = new Point();

XX.X = BP.m.X + W / 2;

XX.Y = BP.m.Y + H;

for (int i = 0; i < BP.neiboor.Count; i++)

{

Point YY = new Point();

YY.Y = BP.neiboor[i].m.Y;

YY.X = BP.neiboor[i].m.X + W / 2;

RisArrow(XX, YY);

Point XYY = new Point();

XYY.X = YY.X;

XYY.Y = YY.Y + H;

for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)

{

Point YYY = new Point();

YYY.Y = BP.neiboor[i].neiboor[j].m.Y;

YYY.X = BP.neiboor[i].neiboor[j].m.X + W / 2;

RisArrow(XYY, YYY);

}

}

}

private void pictureBox1_MouseClick(object sender, EventArgs e)

{

}

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)

{

for (int i = 0; i < BP.neiboor.Count; i++)

{

if (BP.neiboor[i].PrOrJob == true && BP.neiboor[i].m.X <= e.Location.X

&& BP.neiboor[i].m.X + W >= e.Location.X

&& BP.neiboor[i].m.Y <= e.Location.Y

&& BP.neiboor[i].m.Y + H >= e.Location.Y)

{

String Str = "";

Str = BP.neiboor[i].funk.nameOffice + "\n";

for (int j = 0; j < BP.neiboor[i].funk.funktion.Count; j++)

{

Str += Convert.ToString(j + 1) + " - " + BP.neiboor[i].funk.funktion[j] + "\n";

}

MessageBox.Show(Str);

}

else

{

for (int j = 0; j < BP.neiboor[i].neiboor.Count; j++)

{

if (BP.neiboor[i].neiboor[j].PrOrJob == true && BP.neiboor[i].neiboor[j].m.X <= e.Location.X

&& BP.neiboor[i].neiboor[j].m.X + W >= e.Location.X

&& BP.neiboor[i].neiboor[j].m.Y <= e.Location.Y

&& BP.neiboor[i].neiboor[j].m.Y + H >= e.Location.Y)

{

String Str = "";

Str = BP.neiboor[i].neiboor[j].funk.nameOffice + "\n";

for (int j1 = 0; j1 < BP.neiboor[i].neiboor[j].funk.funktion.Count; j1++)

{

Str += Convert.ToString(j1 + 1) + " - " + BP.neiboor[i].neiboor[j].funk.funktion[j1] + "\n";

}

MessageBox.Show(Str);

}

}

}

}

}

}

}

Form2.Designer.cs

namespace Диплом

{

partial class Form2

{

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.IContainer components = null;

/// <summary>

/// Clean up any resources being used.

/// </summary>

/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.pictureBox1 = new System.Windows.Forms.PictureBox();

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();

this.SuspendLayout();

//

// pictureBox1

//

this.pictureBox1.Location = new System.Drawing.Point(12, 12);

this.pictureBox1.Name = "pictureBox1";

this.pictureBox1.Size = new System.Drawing.Size(900, 700);

this.pictureBox1.TabIndex = 0;

this.pictureBox1.TabStop = false;

this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);

//

// Form2

//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(924, 725);

this.Controls.Add(this.pictureBox1);

this.Name = "Form2";

this.Text = "Логистика";

this.Load += new System.EventHandler(this.Form2_Load);

((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();

this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.PictureBox pictureBox1;

}

}

Form3.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Диплом

{

public partial class Form3 : Form

{

public struct El

{

public int numBP;

public String nameBL;

public bool fl;

public bool Start;

public int t;

public int n;

public int s;

}

public struct StrGr

{

public El A;

public IList<El> B;

}

public struct Variant

{

public IList<El> var;

}

public struct Znach

{

public int t;

public int n;

public int s;

}

IList<Znach> znach = new List<Znach>();

IList<Variant> varianty = new List<Variant>();

IList<StrGr> grammatik= new List<StrGr>();

public Form3()

{

InitializeComponent();

richTextBox2.ReadOnly = true;

richTextBox1.ReadOnly = true;

El Start = new El();

Start.fl = false;

Start.Start = true;

Start.nameBL = "";

Start.numBP = -1;

Start.n = 0;

Start.s = Start.t = -1;

El Finish = new El();

Finish.fl = false;

Finish.Start = false;

Finish.nameBL = "";

Finish.numBP = -1;

Finish.n = 0;

Finish.s = Finish.t = -1;

El l1 = new El();

l1.fl = true;

l1.Start = true;

l1.numBP = 1;

l1.nameBL = "Логистика";

l1.n = 0;

l1.s = l1.t = -1;

El o1 = new El();

o1.fl = true;

o1.Start = true;

o1.numBP = 1;

o1.nameBL = "Отдел обработки документов";

o1.n = 0;

o1.s = o1.t = -1;

El l2 = new El();

l2.fl = true;

l2.Start = true;

l2.numBP = 2;

l2.nameBL = "Логистика";

l2.n = 0;

l2.s = l2.t = -1;

El t3 = new El();

t3.fl = true;

t3.Start = true;

t3.numBP = 3;

t3.nameBL = "Транспортная компания";

t3.n = 0;

t3.s = t3.t = -1;

El t4 = new El();

t4.fl = true;

t4.Start = true;

t4.numBP = 4;

t4.nameBL = "Транспортная компания";

t4.n = 0;

t4.s = t4.t = -1;

El s4 = new El();

s4.fl = true;

s4.Start = true;

s4.numBP = 4;

s4.nameBL = "Склад";

s4.n = 0;

s4.s = s4.t = -1;

El o5 = new El();

o5.fl = true;

o5.Start = true;

o5.numBP = 5;

o5.nameBL = "Отдел обработки документов";

o5.n = 0;

o5.s = o5.t = -1;

El t6 = new El();

t6.fl = true;

t6.Start = true;

t6.numBP = 6;

t6.nameBL = "Транспортная компания";

t6.n = 0;

t6.s = t6.t = -1;

El l6 = new El();

l6.fl = true;

l6.Start = true;

l6.numBP = 6;

l6.nameBL = "Логистика";

l6.n = 0;

l6.s = l6.t = -1;

El o7 = new El();

o7.fl = true;

o7.Start = true;

o7.numBP = 7;

o7.nameBL = "Отдел обработки документов";

o7.n = 0;

o7.s = o7.t = -1;

StrGr g1 = new StrGr();

g1.A = Start;

g1.B = new List<El>();

g1.B.Add(l1);

g1.B.Add(o1);

StrGr g2 = new StrGr();

g2.A = l1;

g2.B = new List<El>();

g2.B.Add(l2);

StrGr g3 = new StrGr();

g3.A = o1;

g3.B = new List<El>();

g3.B.Add(l2);

StrGr g4 = new StrGr();

g4.A = l2;

g4.B = new List<El>();

g4.B.Add(t3);

g4.B.Add(o7);

StrGr g5 = new StrGr();

g5.A = t3;

g5.B = new List<El>();

g5.B.Add(l2);

g5.B.Add(t4);

g5.B.Add(s4);

StrGr g6 = new StrGr();

g6.A = t4;

g6.B = new List<El>();

g6.B.Add(t3);

g6.B.Add(o5);

StrGr g7 = new StrGr();

g7.A = s4;

g7.B = new List<El>();

g7.B.Add(t3);

g7.B.Add(o5);

StrGr g8 = new StrGr();

g8.A = o5;

g8.B = new List<El>();

g8.B.Add(t6);

g8.B.Add(l6);

StrGr g9 = new StrGr();

g9.A = t6;

g9.B = new List<El>();

g9.B.Add(o7);

StrGr g10 = new StrGr();

g10.A = l6;

g10.B = new List<El>();

g10.B.Add(o7);

StrGr g11 = new StrGr();

g11.A = o7;

g11.B = new List<El>();

g11.B.Add(Finish);

grammatik.Add(g1);

grammatik.Add(g2);

grammatik.Add(g3);

grammatik.Add(g4);

grammatik.Add(g5);

grammatik.Add(g6);

grammatik.Add(g7);

grammatik.Add(g8);

grammatik.Add(g9);

grammatik.Add(g10);

grammatik.Add(g11);

}

private void Form3_Load(object sender, EventArgs e)

{

PrintGrammatik();

}

void PrintGrammatikResurs()

{

richTextBox1.Text = "";

for (int i = 0; i < grammatik.Count; i++)

{

if (!grammatik[i].A.fl)

{

if (grammatik[i].A.Start)

richTextBox1.Text += "No -> ";

else

richTextBox1.Text += "Nф -> ";

}

else

{

richTextBox1.Text += Convert.ToString(grammatik[i].A.numBP) + "{" + grammatik[i].A.nameBL[0] + "} -> ";

}

for (int j = 0; j < grammatik[i].B.Count - 1; j++)

{

if (!grammatik[i].B[j].fl)

{

if (grammatik[i].B[j].Start)

richTextBox1.Text += "No | ";

else

richTextBox1.Text += "Nф | ";

}

else

{

richTextBox1.Text += Convert.ToString(grammatik[i].B[j].numBP) + "{" + grammatik[i].B[j].nameBL[0] + "} t = " + grammatik[i].B[j].t + " n = " + grammatik[i].B[j].n + " s = " + grammatik[i].B[j].s + " | ";

}

}

if (!grammatik[i].B[grammatik[i].B.Count - 1].fl)

{

if (grammatik[i].B[grammatik[i].B.Count - 1].Start)

richTextBox1.Text += "No \n";

else

richTextBox1.Text += "Nф \n";

}

else

{

richTextBox1.Text += Convert.ToString(grammatik[i].B[grammatik[i].B.Count - 1].numBP) + "{" + grammatik[i].B[grammatik[i].B.Count - 1].nameBL[0] + "} t = " + grammatik[i].B[grammatik[i].B.Count - 1].t + " n = " + grammatik[i].B[grammatik[i].B.Count - 1].n + " s = " + grammatik[i].B[grammatik[i].B.Count - 1].s + "\n";

}

}

}

void PrintGrammatik()

{

richTextBox1.Text = "";

for (int i = 0; i < grammatik.Count; i++)

{

if (!grammatik[i].A.fl)

{

if (grammatik[i].A.Start)

richTextBox1.Text += "No -> ";

else

richTextBox1.Text += "Nф -> ";

}

else

{

richTextBox1.Text += Convert.ToString(grammatik[i].A.numBP) + "{" + grammatik[i].A.nameBL[0] + "} -> ";

}

for (int j = 0; j < grammatik[i].B.Count - 1; j++)

{

if (!grammatik[i].B[j].fl)

{

if (grammatik[i].B[j].Start)

richTextBox1.Text += "No | ";

else

richTextBox1.Text += "Nф | ";

}

else

{

richTextBox1.Text += Convert.ToString(grammatik[i].B[j].numBP) + "{" + grammatik[i].B[j].nameBL[0] + "} | ";

}

}

if (!grammatik[i].B[grammatik[i].B.Count - 1].fl)

{

if (grammatik[i].B[grammatik[i].B.Count - 1].Start)

richTextBox1.Text += "No \n";

else

richTextBox1.Text += "Nф \n";

}

else

{

richTextBox1.Text += Convert.ToString(grammatik[i].B[grammatik[i].B.Count - 1].numBP) + "{" + grammatik[i].B[grammatik[i].B.Count - 1].nameBL[0] + "} \n";

}

}

}

private void button2_Click(object sender, EventArgs e)

{

Random rnd = new Random();

if (textBox34.Text == "" || textBox34.Text == " " ||

textBox35.Text == "" || textBox35.Text == " " ||

textBox36.Text == "" || textBox36.Text == " ")

{

MessageBox.Show("Незаполнены диапазоны");

return;

}

int t = Convert.ToInt32(textBox34.Text);

int n = Convert.ToInt32(textBox35.Text);

int s = Convert.ToInt32(textBox36.Text);

for (int i = 0; i < grammatik.Count; i++)

{

switch (i)

{

case 0:

{

textBox1.Text = Convert.ToString(rnd.Next(1,t));

textBox11.Text = Convert.ToString(rnd.Next(1, n));

textBox21.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 1:

{

textBox2.Text = Convert.ToString(rnd.Next(1, t));

textBox12.Text = Convert.ToString(rnd.Next(1, n));

textBox22.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 2:

{

textBox3.Text = Convert.ToString(rnd.Next(1, t));

textBox13.Text = Convert.ToString(rnd.Next(1, n));

textBox23.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 3:

{

textBox4.Text = Convert.ToString(rnd.Next(1, t));

textBox14.Text = Convert.ToString(rnd.Next(1, n));

textBox24.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 4:

{

textBox5.Text = Convert.ToString(rnd.Next(1, t));

textBox15.Text = Convert.ToString(rnd.Next(1, n));

textBox25.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 5:

{

textBox6.Text = Convert.ToString(rnd.Next(1, t));

textBox16.Text = Convert.ToString(rnd.Next(1, n));

textBox26.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 6:

{

textBox7.Text = Convert.ToString(rnd.Next(1, t));

textBox17.Text = Convert.ToString(rnd.Next(1, n));

textBox27.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 7:

{

textBox8.Text = Convert.ToString(rnd.Next(1, t));

textBox18.Text = Convert.ToString(rnd.Next(1, n));

textBox28.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 8:

{

textBox9.Text = Convert.ToString(rnd.Next(1, t));

textBox19.Text = Convert.ToString(rnd.Next(1, n));

textBox29.Text = Convert.ToString(rnd.Next(1, s));

break;

}

case 9:

{

textBox10.Text = Convert.ToString(rnd.Next(1, t));

textBox20.Text = Convert.ToString(rnd.Next(1, n));

textBox30.Text = Convert.ToString(rnd.Next(1, s));

break;

}

}

}

}

private void button1_Click(object sender, EventArgs e)

{

int maxT;

int maxN;

int maxS;

if (textBox31.Text == "" || textBox31.Text == " " ||

textBox32.Text == "" || textBox32.Text == " " ||

textBox33.Text == "" || textBox33.Text == " ")

{

MessageBox.Show("Незаполнены предпочтения по ресурсам");

return;

}

maxT = Convert.ToInt32(textBox31.Text);

maxN = Convert.ToInt32(textBox32.Text);

maxS = Convert.ToInt32(textBox33.Text);

for (int i = 0; i < grammatik.Count; i++)

{

for (int j = 0; j < grammatik[i].B.Count; j++)

{

if(grammatik[i].B[j].fl)

{

switch (grammatik[i].B[j].numBP)

{

case 1:

{

switch(grammatik[i].B[j].nameBL[0])

{

case 'О':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox2.Text);

a.n = Convert.ToInt32(textBox12.Text);

a.s = Convert.ToInt32(textBox22.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

case 'Л':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox1.Text);

a.n = Convert.ToInt32(textBox11.Text);

a.s = Convert.ToInt32(textBox21.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

default:

{

MessageBox.Show("Что то пошло не так в заполнении");

return;

}

}

break;

}

case 2:

{

switch (grammatik[i].B[j].nameBL[0])

{

case 'Л':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox3.Text);

a.n = Convert.ToInt32(textBox13.Text);

a.s = Convert.ToInt32(textBox23.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

default:

{

MessageBox.Show("Что то пошло не так в заполнении");

return;

}

}

break;

}

case 3:

{

switch (grammatik[i].B[j].nameBL[0])

{

case 'Т':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox4.Text);

a.n = Convert.ToInt32(textBox14.Text);

a.s = Convert.ToInt32(textBox24.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

default:

{

MessageBox.Show("Что то пошло не так в заполнении");

return;

}

}

break;

}

case 4:

{

switch (grammatik[i].B[j].nameBL[0])

{

case 'Т':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox5.Text);

a.n = Convert.ToInt32(textBox15.Text);

a.s = Convert.ToInt32(textBox25.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

case 'С':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox6.Text);

a.n = Convert.ToInt32(textBox16.Text);

a.s = Convert.ToInt32(textBox26.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

default:

{

MessageBox.Show("Что то пошло не так в заполнении");

return;

}

}

break;

}

case 5:

{

switch (grammatik[i].B[j].nameBL[0])

{

case 'О':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox7.Text);

a.n = Convert.ToInt32(textBox17.Text);

a.s = Convert.ToInt32(textBox27.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

default:

{

MessageBox.Show("Что то пошло не так в заполнении");

return;

}

}

break;

}

case 6:

{

switch (grammatik[i].B[j].nameBL[0])

{

case 'Т':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox8.Text);

a.n = Convert.ToInt32(textBox18.Text);

a.s = Convert.ToInt32(textBox28.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

case 'Л':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox9.Text);

a.n = Convert.ToInt32(textBox19.Text);

a.s = Convert.ToInt32(textBox29.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

default:

{

MessageBox.Show("Что то пошло не так в заполнении");

return;

}

}

break;

}

case 7:

{

switch (grammatik[i].B[j].nameBL[0])

{

case 'О':

{

El a = new El();

a = grammatik[i].B[j];

a.t = Convert.ToInt32(textBox10.Text);

a.n = Convert.ToInt32(textBox20.Text);

a.s = Convert.ToInt32(textBox30.Text);

grammatik[i].B.RemoveAt(j);

grammatik[i].B.Insert(j, a);

break;

}

default:

{

MessageBox.Show("Что то пошло не так в заполнении");

return;

}

}

break;

}

}

}

}

}

// PrintGrammatikResurs();

Variant X = new Variant();

X.var = new List<El>();

richTextBox2.Text = "";

rekObchod(X);

for (int i = 0; i < varianty.Count; i++)

{

Znach A = new Znach();

A.n = 0;

A.s = 0;

A.t = 0;

for (int j = 0; j < varianty[i].var.Count; j++)

{

A.t += varianty[i].var[j].t;

A.n += varianty[i].var[j].n;

A.s += varianty[i].var[j].s * A.n;

}

znach.Add(A);

}

if (maxN == -1)

maxN = 99999999;

if (maxT == -1)

maxT = 99999999;

if (maxS == -1)

maxS = 99999999;

PrintVar(maxT,maxN,maxS);

}

void PrintVar(int t, int n, int s)

{

richTextBox2.Text = "Варианты которые вам подходят:\n";

for (int i = 0; i < varianty.Count; i++)

{

if (znach[i].t < t && znach[i].n < n && znach[i].s < s)

{

richTextBox2.Text += "No -> ";

for (int j = 0; j < varianty[i].var.Count; j++)

{

richTextBox2.Text += varianty[i].var[j].numBP + "{" + varianty[i].var[j].nameBL[0] + "} -> ";

}

richTextBox2.Text += " Nф: " + "t = " + znach[i].t + "; n = " + znach[i].n + "; s = " + znach[i].s + "\n";

}

}

}

void rekObchod(Variant a)

{

if (a.var.Count <= 0)

{

for (int i = 0; i < grammatik[0].B.Count; i++)

{

a.var.Add(grammatik[0].B[i]);

rekObchod(a);

a.var.RemoveAt(0);

}

}

else

{

for (int i = 0; i < grammatik.Count; i++)

{

if (grammatik[i].A.nameBL == a.var[a.var.Count - 1].nameBL && grammatik[i].A.numBP == a.var[a.var.Count - 1].numBP)

{

for (int j = 0; j < grammatik[i].B.Count; j++)

{

a.var.Add(grammatik[i].B[j]);

if (a.var[a.var.Count - 1].fl == false)

{

a.var.RemoveAt(a.var.Count - 1);

Variant b = new Variant();

b.var = new List<El>();

for (int k = 0; k < a.var.Count; k++)

b.var.Add(a.var[k]);

varianty.Add(b);

return;

}

else

if (a.var[a.var.Count - 1].numBP != grammatik[i].A.numBP + 1)

{

a.var.RemoveAt(a.var.Count - 1);

continue;

}

else

{

rekObchod(a);

a.var.RemoveAt(a.var.Count - 1);

}

}

}

}

}

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace Диплом

{

static class Program

{

/// <summary>

/// Главная точка входа для приложения.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

}

}

PAGE \* MERGEFORMAT 28

Создание бизнес-модели предприятия, согласно инструментарию планирования бизнес-процессов