Опубликован: 14.07.2011 | Доступ: свободный | Студентов: 2617 / 458 | Оценка: 4.58 / 4.41 | Длительность: 03:18:00
Лекция 5:

Бизнес-процессы

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >

5.3. Реализация бизнес-процесса "Отчет"

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

Создадим новый бизнес-процесс, назовем его ОтчетОРаботе, на вкладке Основные выберем задачу УниверсальнаяЗадача.

Создадим один реквизит бизнес-процесса - Задание, тип - Строка, длина - 100.

Создадим карту бизнес-процесса. Первую точку действия назовем ЗаданияДляМастеров. Установим ее свойства:

Групповая: включено
Подразделение: Парикмахерская
Должность: Мастер

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

Точка маршрута бизнес-процесса, создающая несколько задач

Рис. 5.25. Точка маршрута бизнес-процесса, создающая несколько задач

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

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

Процедура ЗаданияДляМастеровПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
	Для каждого Задача из ФормируемыеЗадачи Цикл
		Задача.Задание=Задание;
		Задача.Наименование="БП2 - мастеру";
	КонецЦикла;
КонецПроцедуры

Здесь мы перебираем массив созданных задач и записываем в них задание, указанное директором при старте бизнес-процесса, а так же - указываем наименование задачи.

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

Должность: Бухгалтер.
Подразделение: Бухгалтерия.

Откроем обработчик ПриСозданииЗадач, введем в него такой код:

Процедура ЗаданиеБухгалтеруПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
	Для каждого Задача из ФормируемыеЗадачи Цикл
		Задача.Задание="Подготовить сводный отчет";
		Задача.Наименование="БП2 - бухгалтеру";
	КонецЦикла
КонецПроцедуры

Теперь создадим третью точку бизнес-процесса, ЗадачаДиректору. Она будет адресована директору - реквизит Должность установим в значение Директор. В коде ПриСозданииЗадач запишем следующее:

Процедура ЗадачаДиректоруПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
	Для каждого Задача из ФормируемыеЗадачи Цикл
		Задача.Задание="Сводный отчет по заданию "+Задание+" готов";
		Задача.Наименование="БП2 - директору";
	КонецЦикла
КонецПроцедуры

Добавим точку завершения бизнес-процесса.

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

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

Старт бизнес-процесса и две созданные им задачи

увеличить изображение
Рис. 5.26. Старт бизнес-процесса и две созданные им задачи

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

После того, как мастера подготовят отчеты, задание поступит бухгалтеру. И, наконец, когда бухгалтер справится со своей частью работы, директор получит сообщение о том, что сводный отчет по выданному им заданию готов. Однако если протестировать эту схему, окажется, что мастера и бухгалтер видят свои задачи при включенном отборе по исполнителю, а директор - нет. Напомним, при настройке параметров адресации мы указали лишь должность директора, без указания подразделения. А регистр адресации содержит лишь полные записи о сотруднике, подразделении и должности. Дополним регистр сведений записью с указанием сотрудника и должности - без указания подразделения ( рис. 5.27), в итоге, задачи для директора по данному бизнес-процессу отображаются, когда он входит в систему.

Дополненный регистр сведений

увеличить изображение
Рис. 5.27. Дополненный регистр сведений

5.4. Реализация бизнес-процесса "Закупка материалов"

Для решения этой задачи дополним нашу конфигурацию новым документом. Назовем его СметаЗакупкиМатериалов. Документ будет иметь три реквизита:

СоставСметы: Строка, Длина 100.
ОбщаяСтоимость: Число, длина 10, точность 2.
СогласованоПриПревышении: Булево

Ограничимся этими настройками, рис. 5.28.

Документ Смета закупки материалов

Рис. 5.28. Документ Смета закупки материалов

Создадим новый бизнес-процесс ЗакупкаМатериалов. В качестве задачи укажем объект УниверсальнаяЗадача.

Создадим реквизит Смета, тип - ДокументСсылка.СметаЗакупкиМатериалов ( рис. 5.29).

Бизнес-процесс ЗакупкаМатериалов

увеличить изображение
Рис. 5.29. Бизнес-процесс ЗакупкаМатериалов

Создадим форму бизнес-процесса по уже известной вам технологии, рис. 5.30.

Форма бизнес-процесса ЗакупкаМатериалов

увеличить изображение
Рис. 5.30. Форма бизнес-процесса ЗакупкаМатериалов

Приступим к созданию карты маршрута бизнес-процесса. Для удобства на рис. 5.31 приведена готовая карта маршрута.

Карта маршрута бизнес-процесса ЗакупкаМатериалов

Рис. 5.31. Карта маршрута бизнес-процесса ЗакупкаМатериалов

Начнем с точки Старт. Добавим соответствующий элемент схемы, но для этого бизнес-процесса подвергнем точку старта дополнительной настройке. В частности, наш бизнес-процесс будет основан на работе с документом СметаЗакупкиМатериалов, ссылка на один из таких документов должна храниться в реквизите Смета бизнес-процесса. Если директор, создавая бизнес-процесс, не укажет смету, это приведет к невозможности работы. Так как смета создается изначально пустой, содержащей лишь номер документа и дату, мы можем, в том случае, если документ сметы не указан, создать ее автоматически. Для этого мы воспользуемся обработчиком события Перед стартом точки старта:

Процедура СтартПередСтартом(ТочкаМаршрутаБизнесПроцесса, Отказ)
	 Если Смета.Пустая() Тогда
		СметаОбъект = Документы.СметаЗакупкиМатериалов.СоздатьДокумент();
		СметаОбъект.Дата = ТекущаяДата();
		СметаОбъект.Записать();
		Смета = СметаОбъект.Ссылка;
	КонецЕсли;	
	Записать();
КонецПроцедуры

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

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

Дополненный регистр Адресация

увеличить изображение
Рис. 5.32. Дополненный регистр Адресация

Для этой точки действия (и для последующих - тоже) настроим обработчик события Обработка интерактивной активации. А именно, добавим в него такой код:

Процедура СоставлениеСметыОбработкаИнтерактивнойАктивации(ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
	Смета.ПолучитьФорму().Открыть();
	Сообщить("Составьте, пожалуйста, смету");
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

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

Когда один из сотрудников подразделения Парикмахерская сделает двойной щелчок по задаче - откроется форма документа, поля которого сотрудник должен заполнить. Однако, запись или проведение документа не возымеют действия на задачу. Ее нужно отметить как выполненную вручную, нажав соответствующую кнопку в форме списка задач, рис. 5.33.

Результат двойного щелчка по задаче в списке

увеличить изображение
Рис. 5.33. Результат двойного щелчка по задаче в списке

Внесение изменений в документ не влияет на выполнение задачи сотрудника парикмахерской. Но содержимое документа повлияет на дальнейший ход бизнес-процесса. В частности, по условию было сказано, что при превышении общей стоимости материалов по смете 10000 рублей смета должна попасть на согласование к директору. Если стоимость меньше этой суммы - она направляется напрямую к бухгалтеру, который должен выдать деньги. Для решения подобных задач в карте маршрута бизнес-процесса используют элемент Точка условия. Из точки условия продолжение возможно по одной из двух ветвей - либо Да, либо Нет. Выбор выполняется программно, в обработчике события Проверка условия. Для того, чтобы направить бизнес-процесс по ветви Да, параметру Результат следует присвоить значение Истина, для продвижения по ветви Нет - Ложь.

Добавим на карту точку условия, назовем ее ПроверкаСуммыСметы и зададим такой код вышеуказанному обработчику:

Процедура ПроверкаСуммыСметыПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат)
	ОбщаяСтоимостьБольшеЗаданной = Ложь;
	Если Смета.ОбщаяСтоимость>10000 Тогда
		ОбщаяСтоимостьБольшеЗаданной=Истина;
	КонецЕсли;
	Результат=ОбщаяСтоимостьБольшеЗаданной;
КонецПроцедуры

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

Если процесс пошел по ветви Нет, то есть, дополнительных согласований не требуется, создается задача для бухгалтера. Добавим точку действия ЗаданиеБухгалтеру, в реквизитах адресации укажем Подразделение: Бухгалтерия, Должность: Бухгалтер. Зададим обработчик события Обработка интерактивной активации:

Процедура ЗаданиеБухгалтеруОбработкаИнтерактивнойАктивации(ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
	Смета.ПолучитьФорму().Открыть();
	Сообщить("Выдайте, пожалуйста, денежные средства по смете");
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

Подобный обработчик мы уже писали для точки СоставлениеСметы.

Добавим на карту точку завершения бизнес-процесса, назовем ее УспешноеЗавершение. В ее обработчике При завершении создадим такой код:

Процедура УспешноеЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)
	Сообщить("Бизнес-процесс успешно завершен, по смете выдано "+Смета.ОбщаяСтоимость+" рублей");
КонецПроцедуры

Вернемся к проверке условия на предельную сумму сметы, проходящую в бухгалтерию без согласования. Если сумма больше 10000, документ отправляется на согласование к директору после перехода по ветви Нет точки условия ПроверкаСуммыСметы. Здесь находится точка действия ЗаданиеДиректору, в параметрах адресации которой указано Должность: Директор, обработчик события Обработка интерактивной активации содержит уже знакомый вам код:

Процедура ЗаданиеДиректоруОбработкаИнтерактивнойАктивации(ТочкаМаршрутаБизнесПроцесса, Задача, СтандартнаяОбработка)
	Смета.ПолучитьФорму().Открыть();
	Сообщить("Общая стоимость материалов по смете превышает 10000. Пожалуйста, утвердите или отклоните смету");
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

После того, как директор поработает с документом и зафиксирует факт выполнения задачи, проверяется еще одно условие (точка условия УтвержденаЛиСмета ). Здесь используется реквизит документа СогласованоПриПревышении:

Процедура УтвержденаЛиСметаПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат)
	 Результат=Смета.СогласованоПриПревышении;
КонецПроцедуры

Если документ согласован, мы проходим по ветви Да и создаем уже обсужденное задание для бухгалтера. Если документ не согласован, мы приходим к точке окончания, названной ЗавершениеБезУтвержденияСметы, со следующим обработчиком При завершении:

Процедура ЗавершениеБезУтвержденияСметыПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ)
	Сообщить("Бизнес-процесс  завершен, смета не прошла согласование");
КонецПроцедуры

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

5.5. Выводы

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

< Лекция 4 || Лекция 5: 1234 || Лекция 6 >
Евгений Орлов
Евгений Орлов
Кундуз Сабаева
Кундуз Сабаева

Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.НачислениеЗарплаты.МодульОбъекта(45)}: Деление на 0
        Движение.Результат= Движение.ИсходныеДанные*Факт[0].РабочийДень/План[0].РабочийДень;