Файл: Разработка регламента выполнения процесса «Управление документооборотом» (1 Построение бизнес-процессов «как есть»).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.06.2023

Просмотров: 356

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь

Попытка

Если Источник.ДополнительныеСвойства.Свойство("СтарыйРодитель") Тогда

ОбновитьПраваОбъектовЗависящихОтГруппыПользователей(Источник.ДополнительныеСвойства.СтарыйРодитель);

КонецЕсли;

ОбновитьПраваОбъектовЗависящихОтГруппыПользователей(Источник.Ссылка);

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

Исключение

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

ВызватьИсключение;

КонецПопытки;

ИначеЕсли ТипИсточника = Тип("СправочникОбъект.Пользователи") Тогда

Если Источник.ДополнительныеСвойства.ЭтоНовый Тогда

ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь

Попытка

// При добавлении нового пользователя неявно меняется состав

// предопределенной виртуальной группы "Все пользователи"

ОбновитьПраваОбъектовЗависящихОтГруппыПользователей(

Справочники.ГруппыПользователей.ВсеПользователи);

// Обновление пустых дескрипторов, которые дают разрешения всем пользователям

ОбновитьПраваПустыхДескрипторов();

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

Исключение

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

ВызватьИсключение;

КонецПопытки;

// Изменена пометка на удаление или признак "Недействителен"

ИначеЕсли Источник.ДополнительныеСвойства.ИзмененаПометкаУдаления

Или Источник.ДополнительныеСвойства.ИзмененПризнакДействительности Тогда

Немедленно = Не ДокументооборотПраваДоступаПовтИсп.ОтложенноеОбновлениеПравДоступа();

Если Источник.ПометкаУдаления Или Источник.Недействителен Тогда

ОбновитьПраваПоПользователю(Источник.Ссылка, Немедленно);

Иначе

ВосстановитьПраваПользователя(Источник.Ссылка, Немедленно);

КонецЕсли;

КонецЕсли;

ИначеЕсли ТипИсточника = Тип("СправочникОбъект.ГруппыДоступа") Тогда

Если Источник.ЭтоГруппа Тогда

Возврат;

КонецЕсли;

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

ОтключитьОбработкуОперативнойОчереди(Истина);

ОтключитьОбработкуДолгойОчереди(Истина);

// Обновление сведений о составе групп доступа


РегистрыСведений.ДокументооборотПользователиГруппДоступа.ОбновитьПоГруппеДоступа(Источник.Ссылка);

Если Источник.ЭтоНовый() Тогда

Источник.ДополнительныеСвойства.Вставить("ЗначениеИзменено", Истина);

Иначе

СтарыеЗначенияДоступа = Новый Массив;

Если Источник.ДополнительныеСвойства.Свойство("СтарыеЗначенияДоступа") Тогда

СтарыеЗначенияДоступа = Источник.ДополнительныеСвойства.СтарыеЗначенияДоступа;

КонецЕсли;

СтарыйПрофиль = Неопределено;

Если Источник.ДополнительныеСвойства.Свойство("СтарыйПрофиль") Тогда

СтарыйПрофиль = Источник.ДополнительныеСвойства.СтарыйПрофиль;

КонецЕсли;

СтарыйСостав = Неопределено;

Если Источник.ДополнительныеСвойства.Свойство("СтарыйСостав") Тогда

СтарыйСостав = Источник.ДополнительныеСвойства.СтарыйСостав;

КонецЕсли;

ЗначенияДоступаДляОбработки = Новый Массив;

ПолныйПересчет = Ложь;

// Проверка изменения профиля группы доступа

Если СтарыйПрофиль <> Источник.Профиль Тогда

ПолныйПересчет = Истина;

КонецЕсли;

// Проверка изменения состава участников

Если СтарыйСостав = Неопределено

Или СтарыйСостав.Количество() <> Источник.Пользователи.Количество() Тогда

ПолныйПересчет = Истина;

Иначе

// Поэлементное сравнение старых и новых пользователей группы

Для Сч = 0 По СтарыйСостав.Количество() - 1 Цикл

Если СтарыйСостав[Сч].Пользователь <> Источник.Пользователи[Сч].Пользователь Тогда

ПолныйПересчет = Истина;

Прервать;

КонецЕсли;

КонецЦикла;

КонецЕсли;

НовыеЗначенияДоступа = ПолучитьЗначенияДоступаГруппыДоступа(Источник.Ссылка);

// Добавление новых значений доступа

Для каждого Эл Из НовыеЗначенияДоступа Цикл

ЗначенияДоступаДляОбработки.Добавить(Эл);

КонецЦикла;

Если ПолныйПересчет Тогда

// Добавление старых значений доступа

Для каждого Эл Из СтарыеЗначенияДоступа Цикл

ЗначенияДоступаДляОбработки.Добавить(Эл);

КонецЦикла;

КонецЕсли;

// Обновление отобранных значений доступа

ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь

Попытка

ОбновитьПраваПоЗначениямВидовДоступа(ЗначенияДоступаДляОбработки);

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

Исключение

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;


ВызватьИсключение;

КонецПопытки;

КонецЕсли;

ИначеЕсли ТипИсточника = Тип("СправочникОбъект.ПапкиФайлов")

ИЛИ ТипИсточника = Тип("СправочникОбъект.ПапкиВнутреннихДокументов") Тогда

ОбновитьПраваДескрипторовЗависящихОтПапки(Источник.Ссылка);

ИначеЕсли ТипИсточника = Тип("СправочникОбъект.СтруктураАдминистрации") Тогда

ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь

Попытка

ОбновитьПраваПоПодразделению(Источник.Ссылка);

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

Исключение

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

ВызватьИсключение;

КонецПопытки;

ИначеЕсли ТипИсточника = Тип("СправочникОбъект.ПрофилиГруппДоступа") Тогда

Если Не Источник.ЭтоНовый() Тогда

ОбновитьПраваДескрипторовЗависящихОтПрофиля(Источник.Ссылка);

КонецЕсли;

КонецЕсли;

КонецПроцедуры

// Обработчик подписки ДокументооборотПередЗаписьюПравообразующихРегистров

Процедура ДокументооборотПередЗаписьюПравообразующихРегистров(Источник, Отказ, Замещение) Экспорт

УстановитьПривилегированныйРежим(Истина);

Если Не ДокументооборотПраваДоступаПовтИсп.ВключеноИспользованиеПравДоступа() Тогда

Возврат;

КонецЕсли;

Если ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.СведенияОПользователях") Тогда

// Проверка изменения подразделения пользователя

Пользователь = Источник.Отбор.Пользователь.Значение;

СведенияОПользователе =

РегистрыСведений.СведенияОПользователях.ПолучитьСведенияОПользователе(Пользователь);

Если Источник.Количество() <> 0 Тогда

Для каждого Эл Из Источник Цикл

Если Не СведенияОПользователе.Свойство("Подразделение") Тогда

Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", Неопределено);

Иначе

Если Эл.Подразделение <> СведенияОПользователе.Подразделение Тогда

Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", СведенияОПользователе.Подразделение);

Прервать;

КонецЕсли;

КонецЕсли;

КонецЦикла;

Иначе

Если Не СведенияОПользователе.Свойство("Подразделение") Тогда

Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", Неопределено);

Иначе

Источник.ДополнительныеСвойства.Вставить("СтароеПодразделение", СведенияОПользователе.Подразделение);


КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецПроцедуры

// Обработчик подписки ДокументооборотПриЗаписиПравообразующихРегистров

Процедура ДокументооборотПриЗаписиПравообразующихРегистров(Источник, Отказ, Замещение) Экспорт

УстановитьПривилегированныйРежим(Истина);

Если Не ДокументооборотПраваДоступаПовтИсп.ВключеноИспользованиеПравДоступа() Тогда

Возврат;

КонецЕсли;

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

Возврат;

КонецЕсли;

Если ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.ДескрипторыДоступаДляОбъектов") Тогда

// Обработка изменения владельца файла

Для каждого Эл Из Источник Цикл

ОбновитьПраваСвязанныхДескрипторовПоОбъекту(Эл.Объект);

КонецЦикла;

ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.ИсполнителиЗадач") Тогда

ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь

Попытка

ПриЗаписиИсполнителейЗадач(Источник);

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

Исключение

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

ВызватьИсключение;

КонецПопытки;

ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.НастройкиПравОбъектов") Тогда

Папка = Источник.Отбор.Объект.Значение;

ОбновитьПраваПапки(Папка);

ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.НаследованиеНастроекПравОбъектов") Тогда

Папка = Источник.Отбор.Объект.Значение;

ОбновитьПраваПапки(Папка);

ИначеЕсли ТипЗнч(Источник) = Тип("РегистрСведенийНаборЗаписей.СведенияОПользователях") Тогда

ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь

Попытка

ПриЗаписиСведенийОПользователях(Источник);

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

Исключение

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

ВызватьИсключение;

КонецПопытки;

КонецЕсли;

КонецПроцедуры

// Обработчик подписки ДокументооборотПраваДоступаПередЗаписьюПравообразующихКонстант


Процедура ДокументооборотПраваДоступаПередЗаписьюПравообразующихКонстант(Источник, Отказ) Экспорт

Если Константы[Источник.Метаданные().Имя].Получить() <> Источник.Значение Тогда

Источник.ДополнительныеСвойства.Вставить("ЗначениеИзменено", Истина);

КонецЕсли;

КонецПроцедуры

// Обработчик подписки ДокументооборотПраваДоступаПриЗаписиПравообразующихКонстант

Процедура ДокументооборотПраваДоступаПриЗаписиПравообразующихКонстант(Источник, Отказ) Экспорт

УстановитьПривилегированныйРежим(Истина);

Если НЕ Источник.ДополнительныеСвойства.Свойство("ЗначениеИзменено")

Или НЕ Источник.ДополнительныеСвойства.ЗначениеИзменено Тогда

Возврат;

КонецЕсли;

// Вызов переопределяемого метода

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

Возврат;

КонецЕсли;

ТекущийПриоритетОчередиОбновленияПрав = ПараметрыСеанса.ПриоритетОчередиОбновленияПрав;

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2; // Долгая очередь

Попытка

ПриЗаписиКонстанты(Источник);

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

Исключение

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = ТекущийПриоритетОчередиОбновленияПрав;

ВызватьИсключение;

КонецПопытки;

КонецПроцедуры

// Обработчик подписки ДокументооборотПраваДоступаПередЗаписьюПапок

Процедура ДокументооборотПраваДоступаПередЗаписьюПапок(Источник, Отказ) Экспорт

УстановитьПривилегированныйРежим(Истина);

РегистрыСведений.НаследованиеНастроекПравОбъектов.Обновить(Источник);

УстановитьПривилегированныйРежим(Ложь);

КонецПроцедуры

// Обработчик регламентного задания ДокументооборотОбновлениеПравДоступаОперативное

Процедура ДокументооборотОбновлениеПравДоступаОперативное() Экспорт

ОбновитьПовторноИспользуемыеЗначения();

ОбработатьОчередьОбновленияПравДоступа(1);

КонецПроцедуры

// Обработчик регламентного задания ДокументооборотОбновлениеПравДоступаДолгое

Процедура ДокументооборотОбновлениеПравДоступаДолгое() Экспорт

УстановитьПривилегированныйРежим(Истина);

ОбновитьПовторноИспользуемыеЗначения();

ПараметрыСеанса.ПриоритетОчередиОбновленияПрав = 2;

// Проверка на необходимость полного обновления прав доступа

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1