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

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

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

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

Добавлен: 28.06.2023

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

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

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

| ИСТИНА КАК ЕстьЗаписи

|ИЗ

| РегистрСведений.ПраваПоДескрипторамДоступа КАК ПраваПоДескрипторамДоступа";

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

// Полное обновление всех прав

ДокументооборотПраваДоступа.УдалитьВсеДанныеОПравахДоступа(Истина);

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

КонецЕсли;

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

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

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

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

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

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

ЗаписьЖурналаРегистрации(

НСтр("ru = 'Права доступа'"),

УровеньЖурналаРегистрации.Информация,,

,

НСтр("ru = 'Начато обновление прав доступа'"));

Количество = РегистрыСведений.ОчередьОбновленияПравДоступа.ОбработатьПорцию();

Пока Количество <> 0 Цикл

Количество = РегистрыСведений.ОчередьОбновленияПравДоступа.ОбработатьПорцию();

КонецЦикла;

ЗаписьЖурналаРегистрации(

НСтр("ru = 'Права доступа'"),

УровеньЖурналаРегистрации.Информация,,

,

НСтр("ru = 'Закончено обновление прав доступа'"));

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

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

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

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

ЗаписьЖурналаРегистрации(

НСтр("ru = 'Права доступа'"),

УровеньЖурналаРегистрации.Информация,,

,

НСтр("ru = 'Начато удаление устаревших прав доступа'"));

Справочники.ДескрипторыДоступаОбъектов.УдалитьНеиспользуемые();

Справочники.ДескрипторыДоступаФайлов.УдалитьНеиспользуемые();

Справочники.ДескрипторыДоступаРегистров.УдалитьНеиспользуемые();

ЗаписьЖурналаРегистрации(

НСтр("ru = 'Права доступа'"),

УровеньЖурналаРегистрации.Информация,,

,

НСтр("ru = 'Закончено удаление устаревших прав доступа'"));

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

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

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

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

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

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

"ВЫБРАТЬ

| ДескрипторыДоступаДляОбъектов.Объект

|ИЗ

| РегистрСведений.ДескрипторыДоступаДляОбъектов КАК ДескрипторыДоступаДляОбъектов

|ГДЕ

| ДескрипторыДоступаДляОбъектов.Дескриптор = &Дескриптор";


Запрос.УстановитьПараметр("Дескриптор", Дескриптор);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

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

КонецЦикла;

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

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

// групп доступа корреспондентов

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

Если ГруппыДоступа.Количество() = 0 Тогда

Возврат;

КонецЕсли;

// ДескрипторыДоступаОбъектов

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

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

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| ДескрипторыДоступаОбъектовКорреспонденты.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаОбъектов.Корреспонденты КАК ДескрипторыДоступаОбъектовКорреспонденты

|ГДЕ

| ДескрипторыДоступаОбъектовКорреспонденты.ГруппаДоступа В(&ГруппыДоступа)";

Запрос.УстановитьПараметр("ГруппыДоступа", ГруппыДоступа);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Справочники.ДескрипторыДоступаОбъектов.ОбновитьПрава(ВыборкаДетальныеЗаписи.Ссылка);

КонецЦикла;

// ДескрипторыДоступаРегистров

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

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

"ВЫБРАТЬ

| ДескрипторыДоступаРегистров.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаРегистров КАК ДескрипторыДоступаРегистров

|ГДЕ

| ДескрипторыДоступаРегистров.ОбъектДоступа1 В(&ГруппыДоступа)

|

|ОБЪЕДИНИТЬ ВСЕ

|

|ВЫБРАТЬ

| ДескрипторыДоступаРегистров.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаРегистров КАК ДескрипторыДоступаРегистров

|ГДЕ

| ДескрипторыДоступаРегистров.ОбъектДоступа2 В(&ГруппыДоступа)

|

|ОБЪЕДИНИТЬ ВСЕ

|

|ВЫБРАТЬ

| ДескрипторыДоступаРегистров.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаРегистров КАК ДескрипторыДоступаРегистров

|ГДЕ

| ДескрипторыДоступаРегистров.ОбъектДоступа3 В(&ГруппыДоступа)";

Запрос.УстановитьПараметр("ГруппыДоступа", ГруппыДоступа);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Справочники.ДескрипторыДоступаРегистров.ОбновитьПрава(ВыборкаДетальныеЗаписи.Ссылка);

КонецЦикла;

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

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

// групп доступа физлиц


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

Если ГруппыДоступа.Количество() = 0 Тогда

Возврат;

КонецЕсли;

// ДескрипторыДоступаОбъектов

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

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

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| ДескрипторыДоступаОбъектовФизическиеЛица.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаОбъектов.ФизическиеЛица КАК ДескрипторыДоступаОбъектовФизическиеЛица

|ГДЕ

| ДескрипторыДоступаОбъектовФизическиеЛица.ГруппаДоступа В(&ГруппыДоступа)";

Запрос.УстановитьПараметр("ГруппыДоступа", ГруппыДоступа);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Справочники.ДескрипторыДоступаОбъектов.ОбновитьПрава(ВыборкаДетальныеЗаписи.Ссылка);

КонецЦикла;

// ДескрипторыДоступаРегистров

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

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

"ВЫБРАТЬ

| ДескрипторыДоступаРегистров.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаРегистров КАК ДескрипторыДоступаРегистров

|ГДЕ

| ДескрипторыДоступаРегистров.ОбъектДоступа1 В(&ГруппыДоступа)

|

|ОБЪЕДИНИТЬ ВСЕ

|

|ВЫБРАТЬ

| ДескрипторыДоступаРегистров.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаРегистров КАК ДескрипторыДоступаРегистров

|ГДЕ

| ДескрипторыДоступаРегистров.ОбъектДоступа2 В(&ГруппыДоступа)

|

|ОБЪЕДИНИТЬ ВСЕ

|

|ВЫБРАТЬ

| ДескрипторыДоступаРегистров.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаРегистров КАК ДескрипторыДоступаРегистров

|ГДЕ

| ДескрипторыДоступаРегистров.ОбъектДоступа3 В(&ГруппыДоступа)";

Запрос.УстановитьПараметр("ГруппыДоступа", ГруппыДоступа);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Справочники.ДескрипторыДоступаРегистров.ОбновитьПрава(ВыборкаДетальныеЗаписи.Ссылка);

КонецЦикла;

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

// Обновляет права файлов, владельцем которых является указанный объект

Процедура ОбновитьПраваФайловОбъекта(Объект) Экспорт

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

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

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

| Файлы.Ссылка

|ИЗ

| Справочник.Файлы КАК Файлы

|ГДЕ

| Файлы.ВладелецФайла = &ВладелецФайла";

Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда

// Определение дескриптора


Дескриптор = ОпределитьДескрипторДоступаФайлаПоВладельцу(Объект.Ссылка);

// Вычисление права

Если Дескриптор <> Неопределено Тогда

Справочники.ДескрипторыДоступаФайлов.ОбновитьПрава(Дескриптор);

КонецЕсли;

КонецЕсли;

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

////////////////////////////////////////////////////////////////////////////////

// Служебные методы

Функция ВсеРуководителиПользователя(Пользователь)

МассивРуководителей = Новый Массив;

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

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

"ВЫБРАТЬ

| СведенияОПользователях.Подразделение КАК Подразделение

|ИЗ

| РегистрСведений.СведенияОПользователях КАК СведенияОПользователях

|ГДЕ

| СведенияОПользователях.Пользователь = &Пользователь";

Запрос.УстановитьПараметр("Пользователь", Пользователь);

Результат = Запрос.Выполнить();

Если Результат.Пустой() Тогда

Возврат МассивРуководителей;

КонецЕсли;

Выборка = Результат.Выбрать();

Выборка.Следующий();

Подразделение = Выборка.Подразделение;

Пока ЗначениеЗаполнено(Подразделение) Цикл

Руководитель = Подразделение.Руководитель;

Если ЗначениеЗаполнено(Руководитель) И Руководитель <> Пользователь Тогда

МассивРуководителей.Добавить(Руководитель);

КонецЕсли;

Подразделение = Подразделение.Родитель;

КонецЦикла;

Возврат МассивРуководителей;

КонецФункции

Функция ПолучитьДескрипторДоступа(ОбъектДоступа, Немедленно = Ложь)

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

НовыйДескриптор = Справочники.ДескрипторыДоступаОбъектов.СоздатьНовыйДескриптор(ОбъектДоступа);

ГотовыйДескриптор = Справочники.ДескрипторыДоступаОбъектов.НайтиДескрипторПоОбразцу(НовыйДескриптор);

Если ЗначениеЗаполнено(ГотовыйДескриптор) Тогда

Возврат ГотовыйДескриптор;

КонецЕсли;

// Запись нового дескриптора

Если Немедленно Тогда

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

КонецЕсли;

НовыйДескриптор.Записать();

Возврат НовыйДескриптор.Ссылка;

КонецФункции

Функция ПолучитьДескрипторДоступаФайла(ВладелецФайла, Немедленно = Ложь)

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

// Поиск существующего дескриптора

ДескрипторВладельца = РегистрыСведений.ДескрипторыДоступаДляОбъектов.НайтиДескрипторДляОбъекта(ВладелецФайла);

// Владелец файла может не участвовать в механизме прав доступа

Если ДескрипторВладельца = Неопределено Тогда

Возврат Неопределено;

КонецЕсли;


ГотовыйДескриптор = НайтиДескрипторФайла(ДескрипторВладельца);

Если ЗначениеЗаполнено(ГотовыйДескриптор) Тогда

// Запись соответствия владельца файла и дескриптора доступа файла

РегистрыСведений.ДескрипторыДоступаДляФайлов.Сохранить(ГотовыйДескриптор.Ссылка, ВладелецФайла.Ссылка);

Возврат ГотовыйДескриптор;

КонецЕсли;

// Формирование нового дескриптора

НовыйДескриптор = Справочники.ДескрипторыДоступаФайлов.СоздатьЭлемент();

НовыйДескриптор.ДескрипторВладельца = ДескрипторВладельца;

// Проверяем, что тип владельца файла указан в допустимах типах

// реквизита ВладелецФайла

Если Не ЗначениеЗаполнено(НовыйДескриптор.ДескрипторВладельца) Тогда

ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(

НСтр("ru = 'Не указан тип владельца файла (%1).'"),

ВладелецФайла.Метаданные().ПолноеИмя());

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

КонецЕсли;

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

// записываться строго вместе

ВнешняяТранзакция = ТранзакцияАктивна();

Если Не ВнешняяТранзакция Тогда

НачатьТранзакцию();

КонецЕсли;

// Запись дескриптора

Если Немедленно Тогда

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

КонецЕсли;

НовыйДескриптор.Записать();

// Запись соответствия владельца файла и дескриптора доступа файла

РегистрыСведений.ДескрипторыДоступаДляФайлов.Сохранить(НовыйДескриптор.Ссылка, ВладелецФайла.Ссылка);

// Завершение транзакции

Если Не ВнешняяТранзакция Тогда

ЗафиксироватьТранзакцию();

КонецЕсли;

Возврат НовыйДескриптор.Ссылка;

КонецФункции

Функция НайтиДескрипторФайла(ДескрипторВладельца)

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

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

"ВЫБРАТЬ

| ДескрипторыДоступаФайлов.Ссылка

|ИЗ

| Справочник.ДескрипторыДоступаФайлов КАК ДескрипторыДоступаФайлов

|ГДЕ

| ДескрипторыДоступаФайлов.ДескрипторВладельца = &ДескрипторВладельца";

Запрос.УстановитьПараметр("ДескрипторВладельца", ДескрипторВладельца);

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Если ВыборкаДетальныеЗаписи.Следующий() Тогда

Возврат ВыборкаДетальныеЗаписи.Ссылка;

КонецЕсли;

Возврат Неопределено;

КонецФункции

Функция ПолучитьДескрипторДоступаЗаписиНабораЗаписей(ИдентификаторОбъектаМетаданных, Запись, Немедленно = Ложь)

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