Разработка прикладных решений для платформы 1С:Предприятие 8.1

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

Разбить на страницы
Показывать лекцию целиком

Цель лекции: научиться автоматизировать бизнес-процессы с использованием средств 1С:Предприятие 8

5.1. Постановка задачи

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

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

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

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

Наша условная организация, в частности, нуждается в автоматизации следующих бизнес-процессов:

  • Первый бизнес-процесс, который будет называться "Клиент", заключается в распределении клиентов по сотрудникам и в контроле за исполнением заказов и "прохождения" клиента по инстанциям организации. В нашем случае он выглядит следующим образом. Администратор салона красоты принимает заказ от клиента, пришедшего в салон или позвонившего по телефону. Клиент называет время, когда он хотел бы быть обслужен и мастера. Администратор передает информацию о клиенте определенному сотруднику - мастеру. Когда мастер выполнит заказанные клиентом работы, он передает сведения о результатах бухгалтеру, после чего бухгалтер получает от клиента оплату и на этом бизнес-процесс завершается.
  • Второй бизнес-процесс ("Отчет") заключается в подготовке всеми мастерами отчетов о проделанной работе. Мастерам, от директора организации, поступает задание на подготовку отчетов на текущий момент. После того, как мастера подготовят отчеты, эти отчеты передаются бухгалтеру, который готовит сводный отчет, и, после подготовки этого отчета, директор собирает весь коллектив для обсуждения результатов работы.
  • Третий бизнес-процесс "Закупка товаров". От директора поступает задание на закупку товаров. Задание может выполнить любой сотрудник отдела Парикмахерская. Сотрудник готовит смету, и, если стоимость приобретаемых товаров не превышает 10000 рублей, смета сразу же попадает на подпись к директору. Если же превышает - то перед тем, как попасть к директору, ее должен утвердить бухгалтер.
  • 5.2. Реализация бизнес-процесса "Клиент" и создание дополнительных объектов

    В 1С:Предприятие существуют два ключевых, для решения задач автоматизации бизнес-процессов, объекта. Первый из них так и называется - Бизнес-процесс. Второй объект - это Задача. Бизнес-процессы и задачи тесно взаимосвязаны.

    Объект Бизнес-процесс содержит в себе карту маршрута бизнес-процесса, при прохождении по карте создаются задачи, адресуемые тем или иным исполнителям. Создаваемые задачи - это объекты Задача.

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

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

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

  • Параметр сеанса
  • Регистр сведений
  • Задача
  • Бизнес-процесс
  • Начнем решение первой задачи по автоматизации бизнес-процесса "Клиент" с создания параметра сеанса и настройки механизма определения сотрудника, вошедшего в систему.

    Параметр сеанса

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

    Создадим новый параметр сеанса, назовем его .

    (рис 5.1) Параметр сеанса ТекущийПользоваетль

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

    Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    	Сотрудник = Справочники.Сотрудники.НайтиПоРеквизиту("Пользователь", ИмяПользователя());
    	Если не Сотрудник.Пустая() тогда
    		ПараметрыСеанса.ПользовательРасчетчик = Сотрудник.Расчетчик;
    	КонецЕсли;
    КонецПроцедуры

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

    Добавим в блок Если - КонецЕсли такую строку:

    ПараметрыСеанса.ТекущийПользователь=Сотрудник;

    Таким образом, мы инициализировали параметр сеанса (на рис 5.2 приведено окно с обновленным кодом процедуры) и он теперь сможет выполнять свои функции при реализации механизма бизнес-процесса.

    (рис 5.2) Обновленный код процедуры УстановкаПараметровСеанса

    Регистр адресации

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

    Сотрудник Подразделение Должность
    Васильев П.П. Администрация Директор
    Александров А.А. Администрация Администратор
    Иванов И.И. Парикмахерская Мастер
    Петров П.П. Парикмахерская Мастер
    Расчетчиков А.И. Бухгалтерия Расчетчик
    Бухгалтеров Б.Б. Бухгалтерия Бухгалтер

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

    (рис 5.3) Справочник Должности

    Внесем в справочник Подразделения следующие предопределенные подразделения:

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

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

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

    (рис 5.4) Список пользователей

    Назначим новым пользователям роль .

    (рис 5.5) Список пользователей, дополненный в соответствии со штатным расписанием

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

    Создадим непериодический независимый регистр сведений, рис 5.6. Назовем его Адресация.

    (рис 5.6) Регистр сведений Адресация

    Этот регистр должен содержать измерения, по которым планируется адресовать задачи. В нашем случае это - три измерения, рис 5.7):

    Сотрудник: Тип - СправочникСсылка.Сотрудники, Ведущее
    Подразделение: Тип - СправочникСсылка.Подразделения, Ведущее
    Должность: Тип - СправочникСсылка.Должности, Ведущее
    (рис 5.7) Настройка состава измерений регистра сведений

    Теперь нам нужно запустить систему в пользовательском режиме и заполнить регистр адресации.

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

    (рис 5.8) Внесение изменений в справочник Сотрудники

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

    Внесем в справочник следующие данные:

  • Администратор
  • Бухгалтер
  • Директор
  • Мастер
  • Расчетчик
  • (рис 5.9) Заполнение справочника Должности

    Заполнение регистра сведений ведется на основе штатного расписания. В заполненном виде он будет выглядеть следующим образом, рис 5.10:

    (рис 5.10) Заполнение регистра сведений Адресация

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

    Задача

    Создадим новый объект Задача, назовем его УниверсальнаяЗадача.

    Перейдем на вкладку ). Настроим свойства этой вкладки следующим образом:

    Адресация: выберем регистр сведений Адресация.
    Текущий исполнитель: параметр сеанса ТекущийПользователь

    В поле Реквизиты адресации добавим следующие реквизиты:

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

    Основной реквизит адресации: Сотрудник. Этот реквизит мы можем выбрать после ввода состава реквизитов адресации задачи.

    (рис 5.11) Заполнение параметров адресации задачи ОбслуживаниеКлиента

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

    (рис 5.12) Создание реквизита задачи

    Перейдем на вкладку .

    (рис 5.13) Настройка состава реквизитов формы списка задачи

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

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

    Процедура ДействияФормыОтобразитьВсеЗадачи(Кнопка)
    ЭлементыФормы.ЗадачаСписок.ОтображениеЗадач=РежимСпискаЗадач.ВсеЗадачи;
    КонецПроцедуры

    Добавим еще одну кнопку ОтобразитьЗадачиПоИсполнителю, с таким кодом:

    Процедура ДействияФормыОтобразитьЗадачиПоИсполнителю(Кнопка)
    	ЭлементыФормы.ЗадачаСписок.ОтображениеЗадач=РежимСпискаЗадач.ПоИсполнителю;
    КонецПроцедуры

    На рис 5.14 вы можете видеть итоговую форму списка задач.

    (рис 5.14) Настроенная форма списка задач

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

    Создадим новый объект бизнес-процесс, назовем его .

    (рис 5.15) Начало создания бизнес-процесса

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

    Мастер: Тип: СправочникСсылка.Сотрудники
    КлиентИПереченьУслуг: Тип: Строка, Длина: 50
    ДатаИВремяЗаказа: Тип: Дата, Состав даты: Дата и время
    Бухгалтер: Тип: СправочникСсылка.Сотрудники
    СтоимостьУслуг: Тип: Число, Длина: 10, Точность: 2.
    (рис 5.16) Настройка реквизитов бизнес-процесса

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

    (рис 5.17) Начало создания карты маршрута бизнес-процесса

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

    Следующий элемент схемы - это .

    (рис 5.18) Работа над картой маршрута бизнес-процесса

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

    Для того, чтобы отменить автоматическое создание задачи и создать задачу самостоятельно, мы можем воспользоваться обработчиком события точки маршрута ПередСозданиемЗадач(). Этот обработчик, кроме прочих, принимает на входе параметр СтандартнаяОбработка. Для того чтобы создать задачи программно, нам нужно установить этот параметр в значение Ложь, после чего создать необходимые задачи (в нашем случае - это одна задача, адресованная конкретному мастеру) и добавить созданные задачи (объекты типа ЗадачаОбъект ) в массив ФормируемыеЗадачи. Вот как выглядит код этой процедуры, который располагается в модуле бизнес-процесса:

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

    Выражение вида НоваяЗадача.Сотрудник=Мастер присваивает реквизиту задачи значение реквизита бизнес-процесса. Мастер - это реквизит бизнес-процесса. Аналогично в данном коде выглядят остальные реквизиты бизнес-процеса.

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

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

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

    После завершения работы с точкой .

    (рис 5.19) Карта маршрута бизнес-процесса

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

    (рис 5.20) Карта маршрута бизнес-процесса

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

    Процедура ПриОткрытии()
    	ЭлементыФормы.КартаМаршрута.УстановитьСхему(ПолучитьКартуМаршрута());
    КонецПроцедуры

    Теперь настало время проверить наш бизнес-процесс на практике.

    Войдем в систему под учетной записью .

    (рис 5.21) Заполнение параметров нового бизнес-процесса

    После нажатия на кнопку .

    (рис 5.22) Старт бизнес-процесса и индикация невыполненной задачи

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

    (рис 5.23) Выполненная задача мастера и продвижение бизнес-процесса по маршруту

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

    (рис 5.24) Завершенный бизнес-процесс в списке

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

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

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

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

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

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

    Благодаря включению признака .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Создадим реквизит ).

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

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

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

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

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

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

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

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

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

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

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

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

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

    Когда один из сотрудников подразделения .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    5.5. Выводы

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

    5.6. Видеоурок

    Для данной лекции подготовлен видеоурок.

    Страницы:

    Цель лекции: научиться автоматизировать бизнес-процессы с использованием средств 1С:Предприятие 8

    5.1. Постановка задачи

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

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

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

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

    Наша условная организация, в частности, нуждается в автоматизации следующих бизнес-процессов:

  • Первый бизнес-процесс, который будет называться "Клиент", заключается в распределении клиентов по сотрудникам и в контроле за исполнением заказов и "прохождения" клиента по инстанциям организации. В нашем случае он выглядит следующим образом. Администратор салона красоты принимает заказ от клиента, пришедшего в салон или позвонившего по телефону. Клиент называет время, когда он хотел бы быть обслужен и мастера. Администратор передает информацию о клиенте определенному сотруднику - мастеру. Когда мастер выполнит заказанные клиентом работы, он передает сведения о результатах бухгалтеру, после чего бухгалтер получает от клиента оплату и на этом бизнес-процесс завершается.
  • Второй бизнес-процесс ("Отчет") заключается в подготовке всеми мастерами отчетов о проделанной работе. Мастерам, от директора организации, поступает задание на подготовку отчетов на текущий момент. После того, как мастера подготовят отчеты, эти отчеты передаются бухгалтеру, который готовит сводный отчет, и, после подготовки этого отчета, директор собирает весь коллектив для обсуждения результатов работы.
  • Третий бизнес-процесс "Закупка товаров". От директора поступает задание на закупку товаров. Задание может выполнить любой сотрудник отдела Парикмахерская. Сотрудник готовит смету, и, если стоимость приобретаемых товаров не превышает 10000 рублей, смета сразу же попадает на подпись к директору. Если же превышает - то перед тем, как попасть к директору, ее должен утвердить бухгалтер.
  • 5.2. Реализация бизнес-процесса "Клиент" и создание дополнительных объектов

    В 1С:Предприятие существуют два ключевых, для решения задач автоматизации бизнес-процессов, объекта. Первый из них так и называется - Бизнес-процесс. Второй объект - это Задача. Бизнес-процессы и задачи тесно взаимосвязаны.

    Объект Бизнес-процесс содержит в себе карту маршрута бизнес-процесса, при прохождении по карте создаются задачи, адресуемые тем или иным исполнителям. Создаваемые задачи - это объекты Задача.

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

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

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

  • Параметр сеанса
  • Регистр сведений
  • Задача
  • Бизнес-процесс
  • Начнем решение первой задачи по автоматизации бизнес-процесса "Клиент" с создания параметра сеанса и настройки механизма определения сотрудника, вошедшего в систему.

    Параметр сеанса

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

    Создадим новый параметр сеанса, назовем его .

    (рис 5.1) Параметр сеанса ТекущийПользоваетль

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

    Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    	Сотрудник = Справочники.Сотрудники.НайтиПоРеквизиту("Пользователь", ИмяПользователя());
    	Если не Сотрудник.Пустая() тогда
    		ПараметрыСеанса.ПользовательРасчетчик = Сотрудник.Расчетчик;
    	КонецЕсли;
    КонецПроцедуры

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

    Добавим в блок Если - КонецЕсли такую строку:

    ПараметрыСеанса.ТекущийПользователь=Сотрудник;

    Таким образом, мы инициализировали параметр сеанса (на рис 5.2 приведено окно с обновленным кодом процедуры) и он теперь сможет выполнять свои функции при реализации механизма бизнес-процесса.

    (рис 5.2) Обновленный код процедуры УстановкаПараметровСеанса

    Регистр адресации

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

    Сотрудник Подразделение Должность
    Васильев П.П. Администрация Директор
    Александров А.А. Администрация Администратор
    Иванов И.И. Парикмахерская Мастер
    Петров П.П. Парикмахерская Мастер
    Расчетчиков А.И. Бухгалтерия Расчетчик
    Бухгалтеров Б.Б. Бухгалтерия Бухгалтер

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

    (рис 5.3) Справочник Должности

    Внесем в справочник Подразделения следующие предопределенные подразделения:

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

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

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

    (рис 5.4) Список пользователей

    Назначим новым пользователям роль .

    (рис 5.5) Список пользователей, дополненный в соответствии со штатным расписанием

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

    Создадим непериодический независимый регистр сведений, рис 5.6. Назовем его Адресация.

    (рис 5.6) Регистр сведений Адресация

    Этот регистр должен содержать измерения, по которым планируется адресовать задачи. В нашем случае это - три измерения, рис 5.7):

    Сотрудник: Тип - СправочникСсылка.Сотрудники, Ведущее
    Подразделение: Тип - СправочникСсылка.Подразделения, Ведущее
    Должность: Тип - СправочникСсылка.Должности, Ведущее
    (рис 5.7) Настройка состава измерений регистра сведений

    Теперь нам нужно запустить систему в пользовательском режиме и заполнить регистр адресации.

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

    (рис 5.8) Внесение изменений в справочник Сотрудники

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

    Внесем в справочник следующие данные:

  • Администратор
  • Бухгалтер
  • Директор
  • Мастер
  • Расчетчик
  • (рис 5.9) Заполнение справочника Должности

    Заполнение регистра сведений ведется на основе штатного расписания. В заполненном виде он будет выглядеть следующим образом, рис 5.10:

    (рис 5.10) Заполнение регистра сведений Адресация

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

    Задача

    Создадим новый объект Задача, назовем его УниверсальнаяЗадача.

    Перейдем на вкладку ). Настроим свойства этой вкладки следующим образом:

    Адресация: выберем регистр сведений Адресация.
    Текущий исполнитель: параметр сеанса ТекущийПользователь

    В поле Реквизиты адресации добавим следующие реквизиты:

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

    Основной реквизит адресации: Сотрудник. Этот реквизит мы можем выбрать после ввода состава реквизитов адресации задачи.

    (рис 5.11) Заполнение параметров адресации задачи ОбслуживаниеКлиента

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

    (рис 5.12) Создание реквизита задачи

    Перейдем на вкладку .

    (рис 5.13) Настройка состава реквизитов формы списка задачи

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

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

    Процедура ДействияФормыОтобразитьВсеЗадачи(Кнопка)
    ЭлементыФормы.ЗадачаСписок.ОтображениеЗадач=РежимСпискаЗадач.ВсеЗадачи;
    КонецПроцедуры

    Добавим еще одну кнопку ОтобразитьЗадачиПоИсполнителю, с таким кодом:

    Процедура ДействияФормыОтобразитьЗадачиПоИсполнителю(Кнопка)
    	ЭлементыФормы.ЗадачаСписок.ОтображениеЗадач=РежимСпискаЗадач.ПоИсполнителю;
    КонецПроцедуры

    На рис 5.14 вы можете видеть итоговую форму списка задач.

    (рис 5.14) Настроенная форма списка задач

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

    Создадим новый объект бизнес-процесс, назовем его .

    (рис 5.15) Начало создания бизнес-процесса

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

    Мастер: Тип: СправочникСсылка.Сотрудники
    КлиентИПереченьУслуг: Тип: Строка, Длина: 50
    ДатаИВремяЗаказа: Тип: Дата, Состав даты: Дата и время
    Бухгалтер: Тип: СправочникСсылка.Сотрудники
    СтоимостьУслуг: Тип: Число, Длина: 10, Точность: 2.
    (рис 5.16) Настройка реквизитов бизнес-процесса

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

    (рис 5.17) Начало создания карты маршрута бизнес-процесса

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

    Следующий элемент схемы - это .

    (рис 5.18) Работа над картой маршрута бизнес-процесса

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

    Для того, чтобы отменить автоматическое создание задачи и создать задачу самостоятельно, мы можем воспользоваться обработчиком события точки маршрута ПередСозданиемЗадач(). Этот обработчик, кроме прочих, принимает на входе параметр СтандартнаяОбработка. Для того чтобы создать задачи программно, нам нужно установить этот параметр в значение Ложь, после чего создать необходимые задачи (в нашем случае - это одна задача, адресованная конкретному мастеру) и добавить созданные задачи (объекты типа ЗадачаОбъект ) в массив ФормируемыеЗадачи. Вот как выглядит код этой процедуры, который располагается в модуле бизнес-процесса:

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

    Выражение вида НоваяЗадача.Сотрудник=Мастер присваивает реквизиту задачи значение реквизита бизнес-процесса. Мастер - это реквизит бизнес-процесса. Аналогично в данном коде выглядят остальные реквизиты бизнес-процеса.

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

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

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

    После завершения работы с точкой .

    (рис 5.19) Карта маршрута бизнес-процесса

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

    (рис 5.20) Карта маршрута бизнес-процесса

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

    Процедура ПриОткрытии()
    	ЭлементыФормы.КартаМаршрута.УстановитьСхему(ПолучитьКартуМаршрута());
    КонецПроцедуры

    Теперь настало время проверить наш бизнес-процесс на практике.

    Войдем в систему под учетной записью .

    (рис 5.21) Заполнение параметров нового бизнес-процесса

    После нажатия на кнопку .

    (рис 5.22) Старт бизнес-процесса и индикация невыполненной задачи

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

    (рис 5.23) Выполненная задача мастера и продвижение бизнес-процесса по маршруту

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

    (рис 5.24) Завершенный бизнес-процесс в списке

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

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

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

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

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

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

    Благодаря включению признака .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Создадим реквизит ).

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

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

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

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

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

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

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

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

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

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

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

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

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

    Когда один из сотрудников подразделения .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    5.5. Выводы

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

    5.6. Видеоурок

    Для данной лекции подготовлен видеоурок.

    Вернуться к учебному плану