Измерение
|
Тип измерения
|
Задача
|
ЗадачаСсылка.Продажатовара
|
Сотрудник
|
СправочникСсылка.Сотрудники
|
Ресурсов и реквизитов у данного регистра сведений нет.
Сама идея механизма довольно проста: при выполнении интерактивной активации в регистр сведений будут записываться данные о задаче и пользователе, ее выполнившем. При выполнении задачи данные о ней будут из регистра сведений удаляться. Это можно реализовать с помощью обработчиков событий «ОбработкаИнтерактивнойАктивации()» и «ПриВыполнении()» модуля объекта «Задача.Задача».
Рис. 2.185 Процедура «ОбработкаИнтерактивнойАктивации()» модуля задачи
Рис. 2.186 Процедура обработки события «ПриВыполнении()»
В данных обработчиках событий есть нерассмотренный момент: вызов процедуры «СброситьСведенияОЗадаче()». Назначение и код этой процедуры рассмотрим позже.
Для удобства отслеживания за происходящим, добавим обработчик событий «ПередЗаписью»
Рис. 2.187 Процедура обработки события «ПередЗаписью ()»
Одно дело записать и вовремя удалить данные в регистр сведений, а другое дело – это организовать для пользователя удобный механизм просмотра этих данных. Для решения этих задач вернемся к форме списка. Для отображения «дополнительных статусов задачи» воспользуемся событием «ПриВыводеСтроки()» табличного поля, связанного со списком задач. Определим обработчик события.
Рис. 2.188 Обработчик события «ПриВыводеСтроки()»
В разделе описания переменных модуля формы списка размещается определение двух переменных. В основном разделе модуля формы списка эти переменные инициализируются.
Смысл работы обработчика события «ПриВыводеСтроки()» заключается в том, что первоначально вызывается функция «ПолучитьСведенияОЗадаче()», которая возвращает структуру, содержащую значение с ключом «Просмотрена». Далее, исходя из полученного значения и из значения реквизита задачи «Приоритет», определяются элементы оформления выводимой строки. В функции «ПолучитьСведенияОЗадаче()» производится обращение к регистру сведений и проверяется, есть ли в нем запись по этой задаче. Если есть, то задача была «прочитана», т.е. была произведена ее интерактивная активация. Но если вспомнить текст обработчика события «ПриОткрытии()» формы списка, там событие «ПриВыводеСтроки()» будет вызываться каждые 5 секунд для каждой строки списка, поэтому попытка «лобового» решения этой задачи может привести к плачевному результату, т.к. система будет «тормозить».
Одним из вариантов решения может быть следующий механизм. В модуле приложения определяется переменная «мСведенияОЗадачах» (локальная для модуля приложения) (модуль приложения открывается через контекстное меню корня дерева конфигурации). В основном разделе модуля она инициализируется. Далее определяются функция «ПолучитьСведенияОЗадаче()» и процедуры «СброситьСведенияОЗадаче()» и «СброситьСведенияОВсехЗадачах()».
Рис. 2.189 Инициализация переменной
На рис. 2.189 строка мСведенияОЗадачах = Новый Соответствие; должна располагаться в конце модуля приложения.
Рис. 2.190 Функция «ПолучитьСведенияОЗадаче()»
Рис. 2.191 Процедуры «СброситьСведенияОВсехЗадачах()» и «СброситьСведенияОЗадаче()»
Вернемся к обработчикам событий «ОбработкаИнтерактивнойАктивации()» и «ПриВыполнении()» модуля объекта «Задача». В них имеются следующие строки:
#Если ВнешнееСоединение Тогда
#Иначе
СброситьСведенияОЗадаче(Ссылка);
#КонецЕсли
Если модуль используется при внешнем соединении (через СОМ - коннектор), то модуль приложения не компилируется, и поэтому обращение к процедуре «СброситьСведенияОЗадаче()» приведет к ошибке. Определять данную процедуру в общем модуле с видимостью ее во внешнем соединении смысла не имеет, т.к. она участвует в реализации интерфейсного механизма работы пользователя. Сам вызов этой процедуры в этих обработчиках событий обусловлен тем, что как при выполнении, так и при интерактивной активации, статус задачи меняется.
Создадим новый бизнес – процесс «ПродажаТовара». Он позволит отследить процесс, начинающийся с выписки счета менеджером, получение оплаты бухгалтером, и отгрузкой товара кладовщиком. При выполнении процесса производится проверка на размер установленной менеджером скидки. Если она превышает некоторый предел, установленный для фирмы, то такой счет предварительно идет на утверждение к руководителю отдела. У этого бизнес - процесса определим два реквизита:
Счет (ссылка на документ);
РасходнаяНакладная (ссылка на документ).
При создании установим у него ссылку на ранее созданную задачу (свойство «Задача»).
Рис. 2.192 Создание бизнес – процесса «ПродажаТовара»
Рис. 2.193 Реквизиты бизнес - процесса «ПродажаТовара»
Перед тем, как перейти к рассмотрению внутренних механизмов данного бизнес – процесса, следует обратить внимание на тот факт, что для более удобной работы пользователя с его задачами, необходимо организовать т.н. механизм обратной связи. При интерактивной активации задач будут открываться формы других объектов (документов «Счет», «РасходнаяНакладная»). Для этого необходимо внести изменения в сами документы. К примеру, в обработчик события «ПриЗаписи()» основной формы документа «Счет» можно поместить следующую строчку кода:
Оповестить («ЗаписьСчета», ,ЭтотОбъект);
В аналогичный обработчик документа «РасходнаяНакладная» добавляется схожая строка кода:
Оповестить («ЗаписьРасходнойНакладной», ,ЭтотОбъект);
В модуле приложения следует определить процедуру, которая будет являться обработчиком при оповещении.
Процедура ОбработчикОповещения(ИмяСобытия, Параметр, Источник) Экспорт
Если ИмяСобытия="ЗаписьРасходнойНакладной" Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Парам", Источник.Ссылка);
Запрос.Текст="ВЫБРАТЬ Задача.Ссылка
| ИЗ БизнесПроцесс.ПродажаТовара КАК ПродажаТовара
| ЛЕВОЕ СОЕДИНЕНИЕ Задача.Задача.ЗадачиПоИсполнителю КАК Задача
| ПО ПродажаТовара.Ссылка=Задача.БизнесПроцесс
| ГДЕ (Задача.Выполнена=Ложь) И ПродажаТовара.РасходнаяНакладная=&Парам";
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекущаяЗадача=Выборка.Ссылка.ПолучитьОбъект();
Если ТекущаяЗадача.ТочкаМаршрута=
БизнесПроцессы.ПродажаТовара.ТочкиМаршрута.ВыпискаСчета
ИЛИ ТекущаяЗадача.ТочкаМаршрута=
БизнесПроцессы.ПродажаТовара.ТочкиМаршрута.ОтгрузкаТовараСоСклада
Тогда
ФормаСчета=ТекущаяЗадача.БизнесПроцесс.Счет.ПолучитьФорму();
Если (ФормаСчета.Открыта()<> Истина) ИЛИ
(ТекущаяЗадача.ТочкаМарщрута<>
БизнесПроцессы.ПродажаТовара.ТочкиМаршрута.ВыпискаСчета)
Тогда
Если Вопрос("Пометить задачу """+ТекущаяЗадача.Наименование+
""" как выполненную ?",РежимДиалогаВопрос.ДаНет)=
КодВозвратаДиалога.Да
Тогда
ТекущаяЗадача.ВыполнитьЗадачу();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ИмяСобытия="ЗаписьСчета" Тогда
Запрос= Новый Запрос;
Запрос.УстановитьПараметр("Парам", Источник.Ссылка);
Запрос.Текст="ВЫБРАТЬ Задача.Ссылка
| ИЗ БизнесПроцесс.ПродажаТовара КАК ПродажаТовара
| ЛЕВОЕ СОЕДИНЕНИЕ Задача.Задача.ЗадачиПоИсполнителю КАК Задача
| ПО ПродажаТовара.Ссылка=Задача.БизнесПроцесс
| ГДЕ (Задача.Выполнена=Ложь) И (ПродажаТовара.Счет=&Парам)";
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекущаяЗадача=Выборка.Ссылка.ПолучитьОбъект();
Если ТекущаяЗадача.ТочкаМаршрута=
БизнесПроцессы.ПродажаТовара.ТочкиМаршрута.ВыпискаСчета
ИЛИ ТекущаяЗадача.ТочкаМаршрута=
БизнесПроцессы.ПродажаТовара.ТочкиМаршрута.ПолучениеНаличнойОплаты
ИЛИ ТекущаяЗадача.ТочкаМаршрута=
БизнесПроцессы.ПродажаТовара.ТочкиМаршрута.УтверждениеСчета
Тогда
ФормаНакладной=
ТекущаяЗадача.БизнесПроцесс.РасходнаяНакладная.ПолучитьФорму();
Если (ФормаНакладной.Открыта()<> Истина) ИЛИ
(ТекущаяЗадача.ТочкаМарщрута<>
БизнесПроцессы.ПродажаТовара.ТочкиМаршрута.ВыпискаСчета)
Тогда
Если Вопрос("Пометить задачу """+ТекущаяЗадача.Наименование+
""" как выполненную ?",РежимДиалогаВопрос.ДаНет)=
КодВозвратаДиалога.Да
Тогда
ТекущаяЗадача.ВыполнитьЗадачу();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Остается в обработчике события «ПриНачалеРаботыСистемы()» назначить эту процедуру обработчиком оповещения. Сделать это можно следующим образом, разместив эту процедуру в модуле приложения:
Рис. 2.194 Подключение обработчика оповещения
В итоге получается, что при записи некоторого документа он оповещает об этом систему. В обработчике оповещения производится поиск соответствующей задачи, и она выполняется. В дальнейшем, когда будем говорить о выполнении задачи, при интерактивной активации которой открывались формы документов, а форма самой задачи – нет, будет подразумеваться вышеописанный механизм.
Спроектируем маршрутную карту бизнес – процесса (закладка «Прочее» конструктора бизнес – процесса, кнопка «Карта маршрута»), устанавливая нужные реквизиты адресации для точек маршрута, выбирая их из предопределенных данных соответствующих справочников. Для вставки элементов карты можно воспользоваться основным меню («Карта маршрута | Вставка элементов схемы»), либо соответствующей панелью инструментов. Для уточнения параметров добавленного элемента надо воспользоваться его контекстным меню и выбрать там пункт «Свойства».
Рис. 2.195 Карта маршрута бизнес – процесса «ПродажаТовара»
При запуске (старте) бизнес - процесса необходимо выполнить процедуру, в которой производится проверка на заполнение реквизитов «Счет» и «РасходнаяНакладная». Если реквизиты содержат пустые ссылки (это возможно, если бизнес – процесс вводится на основании, либо пользователь перед стартом в форме бизнес – процесса мог выбрать нужные документы), то тогда создаются документы соответствующих видов, и ссылки на них записываются в бизнес – процесс. Для ввода текста процедуры надо выбрать пункт «Свойства» из контекстного меню блока старта бизнес – процесса, а в палитре свойств найти соответствующее событие.
Рис. 2.196 Обработчик события «ПередСтартом()» бизнес – процесса «ПродажаТовара»
После старта бизнес – процесс переходит к точке действия «ВыпискаСчета». В этой точке установлено значение реквизита адресации «Подразделение» в значение «ОтделПродаж». В результате при переходе к этой точке маршрута создается задача с установленным реквизитом адресации «Подразделение». В случае, если бизнес – процесс активирован интерактивно, или соответствующая задача активирована интерактивно, тогда выполняется следующий обработчик события «ОбработкаИнтерактивнойАктивации».
Рис. 2.197 Обработчик события «ОбработкаИнтерактивнойАктивации» точки «ВыпискаСчета»
Результатом будет открытие формы расходной накладной и счета, а форма счета при этом открыта не будет, т.к. отключен флаг «СтандартнаяОбработка». При попытке выполнения задачи точки маршрута «ВыпискаСчета» сработает следующий обработчик события «ПередИнтерактивнымВыполнением».
Рис. 2.198 Обработчик события «ПередИнтерактивнымВыполнением()» точки «ВыпискаСчета»
Рис. 2.199 Обработчик события «ОбработкаПроверкиВыполнения()» точки «ВыпискаСчета»
В процедуре проверяется число строк табличной части документа «Счет». Если оно равно нулю, то задача не будет выполнена и бизнес – процесс не пойдет дальше по карте маршрута. При выполнении задачи точки маршрута «ВыпискаСчета» бизнес – процесс переходит к точке условия «Скидка по счету выше стандартной?».
В точке условия «Скидка по счету выше стандартной?» проверяется тот факт, чтобы в табличной части документа «Счет» (ссылка на него определена в реквизите «Счет» бизнес - процесса) не было скидки, превышающей значение, хранимое в константе «СтандартнаяСкидка». При рассмотрении обработчика событий не надо путать значение по умолчанию, устанавливаемое обработчиком события и функциональность переменной «СкилкаБольшеОбычной». С помощью указанной переменной реализуется следующий алгоритм: «Если найдено превышение, то оставшиеся строки табличной части не перебираются».
Теперь создадим константу ОбычнаяСкидка.
Рис. 2.200 Обработчик события «ПроверкаУсловия()» точки «Скидка по счету…»
Если скидка хотя бы в одной строке табличной части документа больше величины, определенной в константе, то в параметр процедуры «Результат» записывается значение «Истина», и бизнес – процесс идет по ветке «Да» на утверждение скидки. В этом случае бизнес – продвигается до точки «УтверждениеСчета», в которой происходит создание задачи с установленными реквизитами адресации «РольИсполнителя» в значение «Руководитель отдела», «Подразделение» в «ОтделПродаж», а соответствующие значения определены в свойствах группы «Адресация» точки действия. В соответствии с такими значениями реквизитов адресации данная задача в форме списка «ФормаСпискаПоИсполнителю» будет отображаться только для пользователя «Федоров». При интерактивной активации созданной задачи выполняется следующий обработчик события.
Рис. 2.201 Обработчик события «ОбработкаИнтерактивнойактивации» точки «УтверждениеСчета»
После его выполнения открывается форма счета, а форма задачи не открывается. После выполнения текущей задачи бизнес – процесс переходит к точке условия «Счет утвержден?». Ее обработчик проверки условия имеет следующий вид:
Рис. 2.202 Обработчик события «проверкаУсловия()» точки «Счет утвержден?»
Если в параметр «Результат» записано значение «Ложь» бизнес – процесс переходит к точке завершения «Отмена» и бизнес – процесс завершается. В другом случае бизнес – процесс переходит к точке карты маршрута «ПолучениеОплаты», и к этой же точке бизнес – процесс перейдет в случае, если скидка в счете не превышает порогового значения. Эта точка является точкой действия, поэтому при переходе к ней создается задача с установленным реквизитом адресации «РольИсполнителя» в значение «Кассир», и в соответствии с наполнением регистра, ответственным за адресацию, данная задача будет присутствовать для пользователя «Андреева». При интерактивной активации задачи выполняется следующий обработчик события, в котором открывается форма документа «Счет», ссылка на который хранится в бизнес – процессе, а форма задачи открыта не будет.
Рис. 2.203 Обработчик события «ОбработкаИнтерактивнойактивации» точки «ПолучениеНаличнойОплаты»
После выполнения данной задачи (приема оплаты), бизнес – процесс перейдет к следующей точке карты маршрута «ОтгрузкаТовараСоСклада». В данной точке свойство «РольИсполнителя» группы свойств «Адресация» установлено в значение «Кладовщик». В данной точке определено два обработчика событий «ПриСозданииЗадач» и «ОбработкаИнтерактивнойАктивации». Один из них срабатывает при создании задачи.
Рис. 2.204 Обработчик события «ПриСозданииЗадач» точки «ОтгрузкаТовараСоСклада»
В справочнике «Подразделения» ищется значение, совпадающее по наименованию складу из документа «РасходнаяНакладная». В случае успеха, если найденная ссылка не пустая, полученное значение записывается в реквизит «Подразделение» адресации задачи. При интерактивной активации задачи открывается форма расходной накладной.
Рис. 2.205 Обработчик события «ОбработкаИнтерактивнойАктивации» точки «Отгрузка товара со склада»
Кладовщик уточняет перечень отгружаемых товарных позиций и выполняет задачу. После выполнения текущей задачи бизнес - процесс переходит к точке «НормальноеЗавершение». Для этого события определим обработчик:
Рис. 2.206 Процедура «НормальноеЗавершение»
Для точки маршрута «Отмена» определим процедуру:
Рис. 2.207 Процедура «ЗавершениеОтменой»
15. Осталось немного подкорректировать МодульПриложения для правильного отображения выполнения задач. Для этого допишем в него:
Рис. 2.208 Процедура адресации
Достарыңызбен бөлісу: |