Файл: Разработка регламента выполнения процесса «Управление документооборотом» (1 Построение бизнес-процессов «как есть»).pdf
Добавлен: 28.06.2023
Просмотров: 356
Скачиваний: 2
СОДЕРЖАНИЕ
1 Построение бизнес-процессов «как есть»
1.1 Описание предметной области. Постановка задачи
1.2 Выбор средства для моделирования бизнес-процессов
1.3 Моделирование бизнес-процессов «как есть»
2 Построение бизнес-процессов «как должно быть»
2.1 Предлагаемые мероприятия по улучшению бизнес-процессов
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь
Попытка
Если Источник.ДополнительныеСвойства.Свойство("СтарыйРодитель") Тогда
ОбновитьПраваОбъектовЗависящихОтГруппыПользователей(Источник.ДополнительныеСвойства.СтарыйРодитель);
КонецЕсли;
ОбновитьПраваОбъектовЗависящихОтГруппыПользователей(Источник.Ссылка);
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
Исключение
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
ВызватьИсключение;
КонецПопытки;
ИначеЕсли ТипИсточника = Тип("СправочникОбъект.Пользователи") Тогда
Если Источник.ДополнительныеСвойства.ЭтоНовый Тогда
ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь
Попытка
// При добавлении нового пользователя неявно меняется состав
// предопределенной виртуальной группы "Все пользователи"
ОбновитьПраваОбъектовЗависящихОтГруппыПользователей(
Справочники.ГруппыПользователей.ВсеПользователи);
// Обновление пустых дескрипторов, которые дают разрешения всем пользователям
ОбновитьПраваПустыхДескрипторов();
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
Исключение
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
ВызватьИсключение;
КонецПопытки;
// Изменена пометка на удаление или признак "Недействителен"
ИначеЕсли Источник.ДополнительныеСвойства.ИзмененаПометкаУдаления
Или Источник.ДополнительныеСвойства.ИзмененПризнакДействительности Тогда
Немедленно = Не ДокументооборотПраваДоступаПовтИсп.ОтложенноеОбновлениеПравДоступа();
Если Источник.ПометкаУдаления Или Источник.Недействителен Тогда
ОбновитьПраваПоПользователю(Источник.Ссылка, Немедленно);
Иначе
ВосстановитьПраваПользователя(Источник.Ссылка, Немедленно);
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипИсточника = Тип("СправочникОбъект.ГруппыДоступа") Тогда
Если Источник.ЭтоГруппа Тогда
Возврат;
КонецЕсли;
// Отключение регл. заданий для корректной работы функций повторного использования
ОтключитьОбработкуОперативнойОчереди(Истина);
ОтключитьОбработкуДолгойОчереди(Истина);
// Обновление сведений о составе групп доступа
РегистрыСведений.ДокументооборотПользователиГруппДоступа.ОбновитьПоГруппеДоступа(Источник.Ссылка);
Если Источник.ЭтоНовый() Тогда
Источник.ДополнительныеСвойства.Вставить("ЗначениеИзменено", Истина);
Иначе
СтарыеЗначенияДоступа = Новый Массив;
Если Источник.ДополнительныеСвойства.Свойство("СтарыеЗначенияДоступа") Тогда
СтарыеЗначенияДоступа = Источник.ДополнительныеСвойства.СтарыеЗначенияДоступа;
КонецЕсли;
СтарыйПрофиль = Неопределено;
Если Источник.ДополнительныеСвойства.Свойство("СтарыйПрофиль") Тогда
СтарыйПрофиль = Источник.ДополнительныеСвойства.СтарыйПрофиль;
КонецЕсли;
СтарыйСостав = Неопределено;
Если Источник.ДополнительныеСвойства.Свойство("СтарыйСостав") Тогда
СтарыйСостав = Источник.ДополнительныеСвойства.СтарыйСостав;
КонецЕсли;
ЗначенияДоступаДляОбработки = Новый Массив;
ПолныйПересчет = Ложь;
// Проверка изменения профиля группы доступа
Если СтарыйПрофиль <> Источник.Профиль Тогда
ПолныйПересчет = Истина;
КонецЕсли;
// Проверка изменения состава участников
Если СтарыйСостав = Неопределено
Или СтарыйСостав.Количество() <> Источник.Пользователи.Количество() Тогда
ПолныйПересчет = Истина;
Иначе
// Поэлементное сравнение старых и новых пользователей группы
Для Сч = 0 По СтарыйСостав.Количество() - 1 Цикл
Если СтарыйСостав[Сч].Пользователь <> Источник.Пользователи[Сч].Пользователь Тогда
ПолныйПересчет = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
НовыеЗначенияДоступа = ПолучитьЗначенияДоступаГруппыДоступа(Источник.Ссылка);
// Добавление новых значений доступа
Для каждого Эл Из НовыеЗначенияДоступа Цикл
ЗначенияДоступаДляОбработки.Добавить(Эл);
КонецЦикла;
Если ПолныйПересчет Тогда
// Добавление старых значений доступа
Для каждого Эл Из СтарыеЗначенияДоступа Цикл
ЗначенияДоступаДляОбработки.Добавить(Эл);
КонецЦикла;
КонецЕсли;
// Обновление отобранных значений доступа
ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь
Попытка
ОбновитьПраваПоЗначениямВидовДоступа(ЗначенияДоступаДляОбработки);
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
Исключение
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
ИначеЕсли ТипИсточника = Тип("СправочникОбъект.ПапкиФайлов")
ИЛИ ТипИсточника = Тип("СправочникОбъект.ПапкиВнутреннихДокументов") Тогда
ОбновитьПраваДескрипторовЗависящихОтПапки(Источник.Ссылка);
ИначеЕсли ТипИсточника = Тип("СправочникОбъект.СтруктураАдминистрации") Тогда
ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь
Попытка
ОбновитьПраваПоПодразделению(Источник.Ссылка);
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
Исключение
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
ВызватьИсключение;
КонецПопытки;
ИначеЕсли ТипИсточника = Тип("СправочникОбъект.ПрофилиГруппДоступа") Тогда
Если Не Источник.ЭтоНовый() Тогда
ОбновитьПраваДескрипторовЗависящихОтПрофиля(Источник.Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Обработчик подписки ДокументооборотПередЗаписьюПравообразующихРегистров
Процедура ДокументооборотПередЗаписьюПравообразующихРегистров(Источник, Отказ, Замещение) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если Не ДокументооборотПраваДоступаПовтИсп.ВключеноИспользованиеПравДоступа() Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.СведенияОПользователях") Тогда
// Проверка изменения подразделения пользователя
Пользователь = Источник.Отбор.Пользователь.Значение;
СведенияОПользователе =
РегистрыСведений.СведенияОПользователях.ПолучитьСведенияОПользователе(Пользователь);
Если Источник.Количество() <> 0 Тогда
Для каждого Эл Из Источник Цикл
Если Не СведенияОПользователе.Свойство("Подразделение") Тогда
Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", Неопределено);
Иначе
Если Эл.Подразделение <> СведенияОПользователе.Подразделение Тогда
Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", СведенияОПользователе.Подразделение);
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Иначе
Если Не СведенияОПользователе.Свойство("Подразделение") Тогда
Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", Неопределено);
Иначе
Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", СведенияОПользователе.Подразделение);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Обработчик подписки ДокументооборотПриЗаписиПравообразующихРегистров
Процедура ДокументооборотПриЗаписиПравообразующихРегистров(Источник, Отказ, Замещение) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если Не ДокументооборотПраваДоступаПовтИсп.ВключеноИспользованиеПравДоступа() Тогда
Возврат;
КонецЕсли;
Если ДокументооборотПраваДоступаПереопределяемый.ДокументооборотПриЗаписиПравообразующихРегистров(Источник, Отказ) Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.ДескрипторыДоступаДляОбъектов") Тогда
// Обработка изменения владельца файла
Для каждого Эл Из Источник Цикл
ОбновитьПраваСвязанныхДескрипторовПоОбъекту(Эл.Объект);
КонецЦикла;
ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.ИсполнителиЗадач") Тогда
ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь
Попытка
ПриЗаписиИсполнителейЗадач(Источник);
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
Исключение
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
ВызватьИсключение;
КонецПопытки;
ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.НастройкиПравОбъектов") Тогда
Папка = Источник.Отбор.Объект.Значение;
ОбновитьПраваПапки(Папка);
ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.НаследованиеНастроекПравОбъектов") Тогда
Папка = Источник.Отбор.Объект.Значение;
ОбновитьПраваПапки(Папка);
ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.СведенияОПользователях") Тогда
ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь
Попытка
ПриЗаписиСведенийОПользователях(Источник);
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
Исключение
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
ВызватьИсключение;
КонецПопытки;
КонецЕсли;
КонецПроцедуры
// Обработчик подписки ДокументооборотПраваДоступаПередЗаписьюПравообразующихКонстант
Процедура ДокументооборотПраваДоступаПередЗаписьюПравообразующихКонстант(Источник, Отказ) Экспорт
Если Константы[Источник.Метаданные().Имя].Получить() <> Источник.Значение Тогда
Источник.ДополнительныеСвойства.Вставить("ЗначениеИзменено", Истина);
КонецЕсли;
КонецПроцедуры
// Обработчик подписки ДокументооборотПраваДоступаПриЗаписиПравообразующихКонстант
Процедура ДокументооборотПраваДоступаПриЗаписиПравообразующихКонстант(Источник, Отказ) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если НЕ Источник.ДополнительныеСвойства.Свойство("ЗначениеИзменено")
Или НЕ Источник.ДополнительныеСвойства.ЗначениеИзменено Тогда
Возврат;
КонецЕсли;
// Вызов переопределяемого метода
Если ДокументооборотПраваДоступаПереопределяемый.ДокументооборотПраваДоступаПриЗаписиПравообразующихКонстант(Источник, Отказ) Тогда
Возврат;
КонецЕсли;
ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь
Попытка
ПриЗаписиКонстанты(Источник);
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
Исключение
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
// Обработчик подписки ДокументооборотПраваДоступаПередЗаписьюПапок
Процедура ДокументооборотПраваДоступаПередЗаписьюПапок(Источник, Отказ) Экспорт
УстановитьПривилегированныйРежим(Истина);
РегистрыСведений.НаследованиеНастроекПравОбъектов.Обновить(Источник);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
// Обработчик регламентного задания ДокументооборотОбновлениеПравДоступаОперативное
Процедура ДокументооборотОбновлениеПравДоступаОперативное() Экспорт
ОбновитьПовторноИспользуемыеЗначения();
ОбработатьОчередьОбновленияПравДоступа(1);
КонецПроцедуры
// Обработчик регламентного задания ДокументооборотОбновлениеПравДоступаДолгое
Процедура ДокументооборотОбновлениеПравДоступаДолгое() Экспорт
УстановитьПривилегированныйРежим(Истина);
ОбновитьПовторноИспользуемыеЗначения();
ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2;
// Проверка на необходимость полного обновления прав доступа
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1