Документооборот КОРП
Документооборот государственного учреждения
30.08.2017
Для создания уведомления всех сотрудников подразделения о задачи в разделе Настройка и администрирование – Дополнительные обработчики нужно создать дополнительный обработчик «Уведомление всех сотрудников подразделения о задаче». В карточке обработчика в поле Код обработки события добавьте следующий код:
Копировать в буфер обменаЗадача = Событие.Источник; Если ЗначениеЗаполнено(Задача) И Не ЗначениеЗаполнено(Задача.РольИсполнителя) И ЗначениеЗаполнено(Задача.Исполнитель) Тогда Подразделение = РаботаСПользователями.ПолучитьПодразделение( Задача.Исполнитель); Если ЗначениеЗаполнено(Подразделение) Тогда ПользователиПодразделения = РаботаСПользователями.ПолучитьПользователейПодразделения( Подразделение); ОбщегоНазначенияКлиентСервер.УдалитьВсеВхожденияЗначенияИзМассива( ПользователиПодразделения, Задача.Исполнитель); Для Каждого ПользовательПодразделения Из ПользователиПодразделения Цикл РегистрыСведений.ОчередьУведомлений.ДобавитьУведомлениеПоСобытию( ПользовательПодразделения, Событие.ВидСобытия, Задача, Задача); КонецЦикла; КонецЕсли; КонецЕсли;
В результате будет настроен следующий обработчик события:
Далее выполните команду Подписки и создайте подписку "Создание задачи" и "Перенаправление задачи":
После этого в разделе Настройка и администрирование - Персональные настройки – Уведомления для пользователей проверьте настройку Поступление новой задачи. Настройка определяет, каким образом пользователь будет получать уведомление.
Обратите внимание: для рассылки уведомлений должны выполняться регламентные задания Обработка произошедших бизнес-событий и Уведомление пользователей о произошедших событиях.
После выполнения описанных настроек сотрудники подразделения, у которых есть права на задачу, будут получать вот такие уведомления:
Для создания уведомления Администратору обо всех отсутствиях в разделе Настройка и администрирование – Дополнительные обработчики создайте дополнительный обработчик «Уведомление Администратора об отсутствиях». В карточке обработчика в поле Код обработки события добавьте следующий код:
Копировать в буфер обменаОтсутствие = Событие.Источник; Если ЗначениеЗаполнено(Отсутствие) Тогда КогоУведомить = Справочники.Пользователи.НайтиПоНаименованию("Администратор", Истина); КтоОтсутствует = Отсутствие.Сотрудник; РегистрыСведений.ОчередьУведомлений.ДобавитьУведомлениеПоСобытию( КогоУведомить, Событие.ВидСобытия, Отсутствие, КтоОтсутствует); КонецЕсли;
В результате будет настроен следующий обработчик события:
Далее выполните команду Подписки и создайте подписку "Создание отсутствия" и "Изменение отсутствия":
После этого в разделе Настройка и администрирование - Персональные настройки – Уведомления для Администратора проверьте настройки Создание отсутствия и Изменение отсутствия. Настройка определяет, каким образом Администратор будет получать уведомления.
Обратите внимание: для рассылки уведомлений должны выполняться регламентные задания Обработка произошедших бизнес-событий и Уведомление пользователей о произошедших событиях.
После выполнения описанных настроек Администратор будет получать вот такие уведомления:
Для создания уведомления о выполнении задачи, назначенной одной роли, в разделе Настройка и администрирование – Дополнительные обработчики необходимо создать дополнительный обработчик «Уведомления о выполнении задачи, назначенной одной роли». В карточке обработчика в поле Код обработки события добавьте следующий код:
Копировать в буфер обменаЗадача = Событие.Источник; Если ЗначениеЗаполнено(Задача) И ЗначениеЗаполнено(Задача.РольИсполнителя) Тогда ИсполнителиРоли = РегистрыСведений.ИсполнителиЗадач.ИсполнителиРоли( Задача.РольИсполнителя); ОбщегоНазначенияКлиентСервер.УдалитьВсеВхожденияЗначенияИзМассива( ИсполнителиРоли, Задача.Исполнитель); Для Каждого ИсполнительРоли Из ИсполнителиРоли Цикл РегистрыСведений.ОчередьУведомлений.ДобавитьУведомлениеПоСобытию( ИсполнительРоли, Событие.ВидСобытия, Задача, Задача); КонецЦикла; КонецЕсли;
В результате будет настроен следующий обработчик события:
Далее выполните команду Подписки и создайте подписку "Выполнение задачи":
После этого в разделе Настройка и администрирование - Персональные настройки – Уведомления для пользователей проверьте настройку Ход выполнения процесса. Настройка определяет, каким образом пользователь будет получать уведомление.
Обратите внимание: для рассылки уведомлений должны выполняться регламентные задания Обработка произошедших бизнес-событий и Уведомление пользователей о произошедших событиях.
После выполнения описанных настроек все исполнители роли, которой была назначена задача, будут получать уведомление, если кто-либо выполнит задачу.
Например:
Чтобы создать уведомления для контроля за действиями нового сотрудника (рассмотрим на примере секретаря), в разделе Настройка и администрирование – Дополнительные обработчики создайте дополнительный обработчик «Уведомление секретаря о действиях нового секретаря». В карточке обработчика в поле Код обработки события добавьте следующий код:
Копировать в буфер обменаИмяСтаршегоСекретаря = "Светлакова М.И."; ИмяНовогоСекретаря = "Фролова Е.М."; НовыйСекретарь = Справочники.Пользователи.НайтиПоНаименованию(ИмяНовогоСекретаря); Если НовыйСекретарь = Неопределено Тогда ВызватьИсключение "Новый секретарь не найден!"; КонецЕсли; Если Событие.Автор = НовыйСекретарь Тогда СтаршийСекретарь = Справочники.Пользователи.НайтиПоНаименованию(ИмяСтаршегоСекретаря); Если СтаршийСекретарь = Неопределено Тогда ВызватьИсключение "Старший секретарь не найден!"; КонецЕсли; ТекстУведомления = СтрШаблон("%1 ""%2"" пользователем %3 в %4", Событие.ВидСобытия, Событие.Источник, Событие.Автор, Событие.Дата); СсылкаНаОбъект = "Ссылка: " + РаботаСУведомлениями.ПолучитьНавигационнуюСсылкуУведомления(Событие.Источник); МассивТекстУведомления = Новый Массив; МассивТекстУведомления.Добавить(ТекстУведомления); МассивТекстУведомления.Добавить(СсылкаНаОбъект); ТекстУведомления = СтрСоединить(МассивТекстУведомления, Символы.ПС); ПользователяУведомления = СтаршийСекретарь; ОбъектУведомления = Событие.Источник; РаботаСУведомлениями.ОбработатьУведомлениеПрограммы(ТекстУведомления, ПользователяУведомления, ОбъектУведомления); КонецЕсли;
В коде обработки текст Фролова Е.М. замените на имя нового секретаря (как указано в карточке пользователя):
В коде обработки текст Светлакова М.И. замените на имя старшего секретаря (как указано в карточке пользователя).
В результате будет настроен следующий обработчик события:
Далее выполните команду Подписки и создайте подписки на те действия нового секретаря, о которых нужно уведомлять старшего секретаря. Например, старший секретарь может получать уведомление, если новый секретарь создаст входящий / исходящий / внутренний документ.
После этого в разделе Настройка и администрирование - Персональные настройки – Уведомления выберите старшего секретаря и проверьте его настройку Уведомления программы. Настройка определяет, каким образом пользователь будет получать уведомления.
Обратите внимание: для рассылки уведомлений должны выполняться регламентные задания Обработка произошедших бизнес-событий и Уведомление пользователей о произошедших событиях.
После выполнения описанных настроек старший секретарь будет получать вот такие уведомления:
Для создания уведомлений об обмене мероприятия в разделе Настройка и администрирование – Дополнительные обработчики создайте дополнительный обработчик «Отмена мероприятий». В карточке обработчика в поле Код обработки события добавьте следующий код:
Копировать в буфер обменаМероприятие = Событие.Источник; РеквизитыМероприятия = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Мероприятие, "Наименование, ДатаНачала"); СостояниеМероприятия = УправлениеМероприятиями.ПолучитьСостояниеМероприятия(Мероприятие, "СостояниеМероприятия"); МероприятиеОтменено = СостояниеМероприятия = Перечисления.СостоянияМероприятий.МероприятиеОтменено; Если МероприятиеОтменено Тогда ПредставлениеДата = Формат(РеквизитыМероприятия.ДатаНачала, "ДФ='dd.MM.yyyy HH:mm'"); ТекстУведомления = СтрШаблон("Отменено мероприятие ""%1 (%2)""", РеквизитыМероприятия.Наименование, ПредставлениеДата); УчастникиМероприятия = УправлениеМероприятиями.ПолучитьУчастниковМероприятия(Мероприятие); Для Каждого СтрокаУчастник Из УчастникиМероприятия Цикл Если ТипЗнч(СтрокаУчастник.Исполнитель) <> Тип("СправочникСсылка.Пользователи") Тогда Продолжить; КонецЕсли; ПользователяУведомления = СтрокаУчастник.Исполнитель; ОбъектУведомления = Мероприятие; Запись = РегистрыСведений.ОбработанныеУведомления.СоздатьМенеджерЗаписи(); Запись.ВидСобытия = Справочники.ВидыБизнесСобытий.ИзменениеМероприятия; Запись.ОбъектУведомления = Мероприятие; Запись.Пользователь = ПользователяУведомления; Запись.Прочитать(); УведомлениеУжеРазослано = Запись.Выбран(); Если УведомлениеУжеРазослано Тогда Продолжить; КонецЕсли; РаботаСУведомлениями.ОбработатьУведомлениеПрограммы(ТекстУведомления, ПользователяУведомления, ОбъектУведомления); РегистрыСведений.ОбработанныеУведомления.ДобавитьОбработанноеУведомление( Справочники.ВидыБизнесСобытий.ИзменениеМероприятия, ОбъектУведомления, ПользователяУведомления); КонецЦикла; КонецЕсли;
В результате будет настроен следующий обработчик события:
Далее выполните команду Подписки и создайте подписку "Изменение мероприятия".
После этого в разделе Настройка и администрирование - Персональные настройки – Уведомления для пользователя проверьте настройку Уведомления программы. Настройка определяет, каким образом пользователь будет получать уведомление.
Обратите внимание: для рассылки уведомлений должны выполняться регламентные задания Обработка произошедших бизнес-событий и Уведомление пользователей о произошедших событиях.
После выполнения описанных настроек пользователь будет получать вот такие уведомления:
В разделе Настройка и администрирование – Дополнительные обработчики необходимо создать дополнительный обработчик «Заполнение календаря по проектной задаче». В карточке обработчика в поле Код обработки события добавьте следующий код:
Копировать в буфер обменаПроектнаяЗадача = Событие.Источник; РеквизитыПроектнойЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПроектнаяЗадача, "ПометкаУдаления, Исполнители"); СрокиПроектнойЗадачи = РаботаСПроектами.ПолучитьСрокиПроектнойЗадачи(ПроектнаяЗадача); ДатаНачала = СрокиПроектнойЗадачи.ТекущийПланНачало; ДатаОкончания = СрокиПроектнойЗадачи.ТекущийПланОкончание; Если ДатаНачала = ДатаОкончания Или (ЗначениеЗаполнено(ДатаНачала) И Не ЗначениеЗаполнено(ДатаОкончания)) Тогда ДатаОкончания = ДатаНачала + 3600; КонецЕсли; // Определяем пользователей проектной задачи. ИсполнителиПроектнойЗадачи = РеквизитыПроектнойЗадачи.Исполнители.Выгрузить().ВыгрузитьКолонку("Исполнитель"); ПользователиПроектнойЗадачи = Новый Массив; Для Каждого ИсполнительПроектнойЗадачи Из ИсполнителиПроектнойЗадачи Цикл Если ТипЗнч(ИсполнительПроектнойЗадачи) <> Тип("СправочникСсылка.Пользователи") Тогда Продолжить; КонецЕсли; ПользователиПроектнойЗадачи.Добавить(ИсполнительПроектнойЗадачи); КонецЦикла; // Определяем необходимость отображать проектную задачу в календаря. ОтображатьПроектнуюЗадачуВКалендаре = (РеквизитыПроектнойЗадачи.ПометкаУдаления = Ложь) И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания) И (ДатаОкончания > ДатаНачала); // Определяем уже отображаемые проектные задачи в календаре. Запрос = Новый Запрос( "ВЫБРАТЬ | ЗаписиРабочегоКалендаря.Ссылка КАК Ссылка, | ЗаписиРабочегоКалендаря.Пользователь КАК Пользователь, | ЗаписиРабочегоКалендаря.ДатаНачала КАК ДатаНачала, | ЗаписиРабочегоКалендаря.ДатаОкончания КАК ДатаОкончания |ИЗ | Справочник.ЗаписиРабочегоКалендаря КАК ЗаписиРабочегоКалендаря |ГДЕ | ЗаписиРабочегоКалендаря.Предмет = &Предмет | И ЗаписиРабочегоКалендаря.Связанная = ИСТИНА | И ЗаписиРабочегоКалендаря.ПометкаУдаления = ЛОЖЬ"); Запрос.УстановитьПараметр("Предмет", ПроектнаяЗадача); СуществующиеЗаписиКалендаря = Запрос.Выполнить().Выгрузить(); // Определяем необходимые изменения в записи календаря. ПользователиКСозданиюЗаписейКалендаря = Новый Массив; ЗаписиКалендаряКИзменению = Новый Массив; ЗаписиКалендаряКУдалению = Новый Массив; Если ОтображатьПроектнуюЗадачуВКалендаре Тогда ПользователиКСозданиюЗаписейКалендаря = ОбщегоНазначенияКлиентСервер.СократитьМассив( ПользователиПроектнойЗадачи, СуществующиеЗаписиКалендаря.ВыгрузитьКолонку("Пользователь")); Для Каждого СуществующаяЗаписьКалендаря Из СуществующиеЗаписиКалендаря Цикл Если ПользователиПроектнойЗадачи.Найти(СуществующаяЗаписьКалендаря.Пользователь) <> Неопределено Тогда ЗаписиКалендаряКИзменению.Добавить(СуществующаяЗаписьКалендаря.Ссылка); Иначе ЗаписиКалендаряКУдалению.Добавить(СуществующаяЗаписьКалендаря.Ссылка); КонецЕсли; КонецЦикла; Иначе ЗаписиКалендаряКУдалению = СуществующиеЗаписиКалендаря.ВыгрузитьКолонку("Ссылка"); КонецЕсли; // Создание записей календаря. Для Каждого ПользовательКСозданиюЗаписиКалендаря Из ПользователиКСозданиюЗаписейКалендаря Цикл НоваяЗаписьКалендаряОбъект = Справочники.ЗаписиРабочегоКалендаря.СоздатьЭлемент(); НоваяЗаписьКалендаряОбъект.Заполнить(Новый Структура("Предмет", ПроектнаяЗадача)); НоваяЗаписьКалендаряОбъект.ДатаНачала = ДатаНачала; НоваяЗаписьКалендаряОбъект.ДатаОкончания = ДатаОкончания; НоваяЗаписьКалендаряОбъект.Автор = Событие.Автор; НоваяЗаписьКалендаряОбъект.Пользователь = ПользовательКСозданиюЗаписиКалендаря; НоваяЗаписьКалендаряОбъект.Связанная = Истина; НоваяЗаписьКалендаряОбъект.ДополнительныеСвойства.Вставить("ИзменениеСвязаннойЗаписи", Истина); НоваяЗаписьКалендаряОбъект.Записать(); КонецЦикла; // Изменение записей календаря. Для Каждого ЗаписьКалендаряКИзменению Из ЗаписиКалендаряКИзменению Цикл ЗаписьКалендаряКИзменениюОбъект = ЗаписьКалендаряКИзменению.ПолучитьОбъект(); ЗаписьКалендаряКИзменениюОбъект.ДатаНачала = ДатаНачала; ЗаписьКалендаряКИзменениюОбъект.ДатаОкончания = ДатаОкончания; ЗаписьКалендаряКИзменениюОбъект.ДополнительныеСвойства.Вставить("ИзменениеСвязаннойЗаписи", Истина); ЗаписьКалендаряКИзменениюОбъект.Записать(); КонецЦикла; // Удаление записей календаря. Для Каждого ЗаписьКалендаряКУдалению Из ЗаписиКалендаряКУдалению Цикл ЗаписьКалендаряКУдалениюОбъект = ЗаписьКалендаряКУдалению.ПолучитьОбъект(); ЗаписьКалендаряКУдалениюОбъект.ДополнительныеСвойства.Вставить("ИзменениеСвязаннойЗаписи", Истина); ЗаписьКалендаряКУдалениюОбъект.УстановитьПометкуУдаления(Истина, Ложь); КонецЦикла;
В результате будет настроен следующий обработчик события:
Далее выполните команду Подписки и создайте подписку "Изменение проектной задачи", "Создание проектной задачи".
Далее в разделе Настройка и администрирование - Дополнительные обработчики создайте дополнительный обработчик «Заполнение календаря по проекту». В карточке обработчика в поле Код обработки события добавьте следующий код:
Копировать в буфер обменаПроект = Событие.Источник; ВыборкаПроектныеЗадачи = Справочники.ПроектныеЗадачи.Выбрать(, Проект); Пока ВыборкаПроектныеЗадачи.Следующий() Цикл ПроектнаяЗадача = ВыборкаПроектныеЗадачи.Ссылка; РеквизитыПроектнойЗадачи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ПроектнаяЗадача, "ПометкаУдаления, Исполнители"); СрокиПроектнойЗадачи = РаботаСПроектами.ПолучитьСрокиПроектнойЗадачи(ПроектнаяЗадача); ДатаНачала = СрокиПроектнойЗадачи.ТекущийПланНачало; ДатаОкончания = СрокиПроектнойЗадачи.ТекущийПланОкончание; Если ДатаНачала = ДатаОкончания Или (ЗначениеЗаполнено(ДатаНачала) И Не ЗначениеЗаполнено(ДатаОкончания)) Тогда ДатаОкончания = ДатаНачала + 3600; КонецЕсли; // Определяем пользователей проектной задачи. ИсполнителиПроектнойЗадачи = РеквизитыПроектнойЗадачи.Исполнители.Выгрузить().ВыгрузитьКолонку("Исполнитель"); ПользователиПроектнойЗадачи = Новый Массив; Для Каждого ИсполнительПроектнойЗадачи Из ИсполнителиПроектнойЗадачи Цикл Если ТипЗнч(ИсполнительПроектнойЗадачи) <> Тип("СправочникСсылка.Пользователи") Тогда Продолжить; КонецЕсли; ПользователиПроектнойЗадачи.Добавить(ИсполнительПроектнойЗадачи); КонецЦикла; // Определяем необходимость отображать проектную задачу в календаря. ОтображатьПроектнуюЗадачуВКалендаре = (РеквизитыПроектнойЗадачи.ПометкаУдаления = Ложь) И ЗначениеЗаполнено(ДатаНачала) И ЗначениеЗаполнено(ДатаОкончания) И (ДатаОкончания > ДатаНачала); // Определяем уже отображаемые проектные задачи в календаре. Запрос = Новый Запрос( "ВЫБРАТЬ | ЗаписиРабочегоКалендаря.Ссылка КАК Ссылка, | ЗаписиРабочегоКалендаря.Пользователь КАК Пользователь, | ЗаписиРабочегоКалендаря.ДатаНачала КАК ДатаНачала, | ЗаписиРабочегоКалендаря.ДатаОкончания КАК ДатаОкончания |ИЗ | Справочник.ЗаписиРабочегоКалендаря КАК ЗаписиРабочегоКалендаря |ГДЕ | ЗаписиРабочегоКалендаря.Предмет = &Предмет | И ЗаписиРабочегоКалендаря.Связанная = ИСТИНА | И ЗаписиРабочегоКалендаря.ПометкаУдаления = ЛОЖЬ"); Запрос.УстановитьПараметр("Предмет", ПроектнаяЗадача); СуществующиеЗаписиКалендаря = Запрос.Выполнить().Выгрузить(); // Определяем необходимые изменения в записи календаря. ПользователиКСозданиюЗаписейКалендаря = Новый Массив; ЗаписиКалендаряКИзменению = Новый Массив; ЗаписиКалендаряКУдалению = Новый Массив; Если ОтображатьПроектнуюЗадачуВКалендаре Тогда ПользователиКСозданиюЗаписейКалендаря = ОбщегоНазначенияКлиентСервер.СократитьМассив( ПользователиПроектнойЗадачи, СуществующиеЗаписиКалендаря.ВыгрузитьКолонку("Пользователь")); Для Каждого СуществующаяЗаписьКалендаря Из СуществующиеЗаписиКалендаря Цикл Если ПользователиПроектнойЗадачи.Найти(СуществующаяЗаписьКалендаря.Пользователь) <> Неопределено Тогда ЗаписиКалендаряКИзменению.Добавить(СуществующаяЗаписьКалендаря.Ссылка); Иначе ЗаписиКалендаряКУдалению.Добавить(СуществующаяЗаписьКалендаря.Ссылка); КонецЕсли; КонецЦикла; Иначе ЗаписиКалендаряКУдалению = СуществующиеЗаписиКалендаря.ВыгрузитьКолонку("Ссылка"); КонецЕсли; // Создание записей календаря. Для Каждого ПользовательКСозданиюЗаписиКалендаря Из ПользователиКСозданиюЗаписейКалендаря Цикл НоваяЗаписьКалендаряОбъект = Справочники.ЗаписиРабочегоКалендаря.СоздатьЭлемент(); НоваяЗаписьКалендаряОбъект.Заполнить(Новый Структура("Предмет", ПроектнаяЗадача)); НоваяЗаписьКалендаряОбъект.ДатаНачала = ДатаНачала; НоваяЗаписьКалендаряОбъект.ДатаОкончания = ДатаОкончания; НоваяЗаписьКалендаряОбъект.Автор = Событие.Автор; НоваяЗаписьКалендаряОбъект.Пользователь = ПользовательКСозданиюЗаписиКалендаря; НоваяЗаписьКалендаряОбъект.Связанная = Истина; НоваяЗаписьКалендаряОбъект.ДополнительныеСвойства.Вставить("ИзменениеСвязаннойЗаписи", Истина); НоваяЗаписьКалендаряОбъект.Записать(); КонецЦикла; // Изменение записей календаря. Для Каждого ЗаписьКалендаряКИзменению Из ЗаписиКалендаряКИзменению Цикл ЗаписьКалендаряКИзменениюОбъект = ЗаписьКалендаряКИзменению.ПолучитьОбъект(); ЗаписьКалендаряКИзменениюОбъект.ДатаНачала = ДатаНачала; ЗаписьКалендаряКИзменениюОбъект.ДатаОкончания = ДатаОкончания; ЗаписьКалендаряКИзменениюОбъект.ДополнительныеСвойства.Вставить("ИзменениеСвязаннойЗаписи", Истина); ЗаписьКалендаряКИзменениюОбъект.Записать(); КонецЦикла; // Удаление записей календаря. Для Каждого ЗаписьКалендаряКУдалению Из ЗаписиКалендаряКУдалению Цикл ЗаписьКалендаряКУдалениюОбъект = ЗаписьКалендаряКУдалению.ПолучитьОбъект(); ЗаписьКалендаряКУдалениюОбъект.ДополнительныеСвойства.Вставить("ИзменениеСвязаннойЗаписи", Истина); ЗаписьКалендаряКУдалениюОбъект.УстановитьПометкуУдаления(Истина, Ложь); КонецЦикла; КонецЦикла;
В результате будет настроен следующий обработчик события:
Далее выполните команду Подписки и создайте подписку "Изменение проекта".