Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной. |
Бизнес-процессы
Начнем с точки Старт. Добавим соответствующий элемент схемы, но для этого бизнес-процесса подвергнем точку старта дополнительной настройке. В частности, наш бизнес-процесс будет основан на работе с документом СметаЗакупкиМатериалов, ссылка на один из таких документов должна храниться в реквизите Смета бизнес-процесса. Если директор, создавая бизнес-процесс, не укажет смету, это приведет к невозможности работы. Так как смета создается изначально пустой, содержащей лишь номер документа и дату, мы можем, в том случае, если документ сметы не указан, создать ее автоматически. Для этого мы воспользуемся обработчиком события Перед стартом точки старта:
Процедура СтартПередСтартом(ТочкаМаршрутаБизнесПроцесса, Отказ) Если Смета.Пустая() Тогда СметаОбъект = Документы.СметаЗакупкиМатериалов.СоздатьДокумент(); СметаОбъект.Дата = ТекущаяДата(); СметаОбъект.Записать(); Смета = СметаОбъект.Ссылка; КонецЕсли; Записать(); КонецПроцедуры
Если документ сметы не задан – создаем его программно перед стартом бизнес-процесса и записываем ссылку на него в реквизит Смета.
Нашей первой точкой действия будет точка с именем СоставлениеСметы. В ее параметрах адресации укажем Подразделение: Парикмахерская. Других параметров указывать не будем. При правильно настроенном регистре адресации (а именно, нужно указать сотрудников подразделения Парикмахерская без должностей, рис. 6.31) подобная задача видна всем сотрудникам Парикмахерской. Но это – одна задача, а не несколько, как в предыдущем примере. И ее может выполнить любой сотрудник – после этого она будет помечена как выполненная в его списке и в списке сотрудников, которым она видна.
Доработаем объект УниверсальнаяЗадача специально для использования универсальной задачи с бизнес-процессом ЗакупкаМатериалов. Нам нужно, чтобы пользователь мог из формы задачи, в том случае, если задача создана бизнес-процессом ЗакупкаМатериалов, открывать документ СметаЗакупкиМатериалов, связанный с бизнес-процессом. Добавим в состав команд формы задачи новую команду, назовем ее ОткрытьСмету. Создадим обработчик для этой команды, перетащим задачу на форму и отключим ее свойство Видимость.
В модуле формы создадим обработчик ПриОткрытии, приведем его к следующему виду:
&НаКлиенте Процедура ПриОткрытии(Отказ) Если ПроверкаБизнесПроцесса() Тогда Элементы.ОткрытьСмету.Видимость=Истина; Предупреждение("Требуется работа с документом Смета закупки материалов, воспользуйтесь кнопкой Открыть смету"); КонецЕсли; КонецПроцедуры &НаСервере Функция ПроверкаБизнесПроцесса() Если ТипЗнч(Объект.БизнесПроцесс) =ТипЗнч(БизнесПроцессы.ЗакупкаМатериалов.ПустаяСсылка()) Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; КонецФункции
Здесь мы делаем видимой кнопку ОткрытьСмету в том случае, если задача имеет отношение к бизнес-процессу ЗакупкаМатериалов, сообщаем пользователю о том, что от него потребуется работа с документом, который можно увидеть, нажав на кнопку Открыть смету.
В обработчик ОткрытьСмету добавим следующий код, создадим некоторые вспомогательные функции:
&НаКлиенте Процедура ОткрытьСмету(Команда) ОткрытьЗначение(ПолучитьСсылкуНаСмету()); Предупреждение(СообщениеДляПользователя()); КонецПроцедуры &НаСервере Функция ПолучитьСсылкуНаСмету() Возврат Объект.БизнесПроцесс.Смета; КонецФункции &НаСервере Функция СообщениеДляПользователя() Если Объект.ТочкаМаршрута.Имя="СоставлениеСметы" Тогда Возврат "Составьте, пожалуйста, смету и отметьте задачу как выполненную после составления."; ИначеЕсли Объект.ТочкаМаршрута.Имя="ЗаданиеБухгалтеру" Тогда Возврат "Выдайте, пожалуйста, денежные средства и отметьте задачу как выполненную."; ИначеЕсли Объект.ТочкаМаршрута.Имя="ЗаданиеДиректору" Тогда Возврат "Общая стоимость материалов по смете превышает 10000. Пожалуйста, утвердите или отклоните смету."; КонецЕсли; КонецФункции
Мы, с помощью серверной функции ПолучитьСсылкуНаСмету(), получаем ссылку на документ СметаЗакупкиМатериалов, указанный при создании бизнес-процесса.
Кроме того, мы определяем имя точки бизнес-процесса и в соответствии с именем точки (функция СообщениеДляПользователя) формируем текст сообщения для пользователя.
Пользователь должен, при выполнении задачи, произвести некоторые действия с документом, после чего отметить задачу как выполненную.
Внесение изменений в документ не влияет на выполнение задачи сотрудника парикмахерской. Но содержимое документа повлияет на дальнейший ход бизнес-процесса. В частности, по условию было сказано, что при превышении общей стоимости материалов по смете 10000 рублей смета должна попасть на согласование к директору. Если стоимость меньше этой суммы – она направляется напрямую к бухгалтеру, который должен выдать деньги.
Для решения подобных задач в карте маршрута бизнес-процесса используют элемент Точка условия. Из точки условия продолжение возможно по одной из двух ветвей – либо Да, либо Нет. Выбор выполняется программно, в обработчике события Проверка условия. Для того, чтобы направить бизнес-процесс по ветви Да, параметру Результат следует присвоить значение Истина, для продвижения по ветви Нет – Ложь.
Добавим на карту точку условия, назовем ее ПроверкаСуммыСметы и зададим такой код вышеуказанному обработчику:
Процедура ПроверкаСуммыСметыПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат) ОбщаяСтоимостьБольшеЗаданной = Ложь; Если Смета.ОбщаяСтоимость>10000 Тогда ОбщаяСтоимостьБольшеЗаданной=Истина; КонецЕсли; Результат=ОбщаяСтоимостьБольшеЗаданной КонецПроцедуры
Здесь мы инициализировали переменную ОбщаяСтоимостьБольшеЗаданной значением Ложь, проверили условие, и при выполнении условия присваиваем ей значение Истина. После чего записываем значение переменной в Результат.
Если процесс пошел по ветви Нет, то есть, дополнительных согласований не требуется, создается задача для бухгалтера. Добавим точку действия ЗаданиеБухгалтеру, в реквизитах адресации укажем Подразделение: Бухгалтерия, Должность: Бухгалтер.
Добавим на карту точку завершения бизнес-процесса, назовем ее УспешноеЗавершение. В ее обработчике При завершении создадим такой код:
Процедура УспешноеЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ) Сообщить("Бизнес-процесс успешно завершен, по смете выдано "+Смета.ОбщаяСтоимость+" рублей"); КонецПроцедуры
Вернемся к проверке условия на предельную сумму сметы, проходящую в бухгалтерию без согласования. Если сумма больше 10000, документ отправляется на согласование к директору после перехода по ветви Нет точки условия ПроверкаСуммыСметы. Здесь находится точка действия ЗаданиеДиректору, в параметрах адресации которой указано Должность: Директор,
После того, как директор поработает с документом и зафиксирует факт выполнения задачи, проверяется еще одно условие (точка условия УтвержденаЛиСмета). Здесь используется реквизит документа СогласованоПриПревышении:
Процедура УтвержденаЛиСметаПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат) Результат=Смета.СогласованоПриПревышении; КонецПроцедуры
Если документ согласован, мы проходим по ветви Да и создаем уже обсужденное задание для бухгалтера. Если документ не согласован, мы приходим к точке окончания, названной ЗавершениеБезУтвержденияСметы, со следующим обработчиком При завершении:
Процедура ЗавершениеБезУтвержденияСметыПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ) Сообщить("Бизнес-процесс завершен, смета не прошла согласование"); КонецПроцедуры