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