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

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

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

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

Добавлен: 28.06.2023

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

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

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

ДвоичныеДанные.Записать(ПолноеИмяФайла);

Файл = РаботаСФайламиКлиент.СоздатьДокументНаОсновеФайла(

ПолноеИмяФайла,

Папка,

Форма,

Ложь, //НеОткрыватьКарточкуПослеСозданияИзФайла

ИмяФайла);

Исключение

Текст = НСтр("ru = 'Не удалось сохранить файл.'") + Символы.ПС + ОписаниеОшибки();

Предупреждение(Текст);

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

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

Возврат Файл;

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

// Открывает меню выбора папки и сохраняет файл из временного храналища в указанную папку

// Возвращает ссылку на файл или Неопределено в случае неуспеха

//

Функция СоздатьФайлИзВременногоФайлаНаДиске(Форма, ПолноеИмяФайла, ИмяФайла) Экспорт

Папка = Неопределено;

Если Не ВыбратьПапку(Папка) Тогда

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

КонецЕсли;

Попытка

Файл = РаботаСФайламиКлиент.СоздатьДокументНаОсновеФайла(

ПолноеИмяФайла,

Папка,

Форма,

Ложь, //НеОткрыватьКарточкуПослеСозданияИзФайла

ИмяФайла);

Исключение

Текст = НСтр("ru = 'Не удалось сохранить файл.'") + Символы.ПС + ОписаниеОшибки();

Предупреждение(Текст);

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

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

Возврат Файл;

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

Функция ВыбратьПапку(Папка)

Результат = ОткрытьФормуМодально("Справочник.ПапкиФайлов.ФормаВыбора");

Если Результат = Неопределено Или Результат.Пустая() Тогда

Возврат Ложь;

КонецЕсли;

Папка = Результат;

Возврат Истина;

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

Процедура НайтиСтрокуДереваПоСсылке(Ссылка, Дерево, Идентификатор) Экспорт

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

Возврат;

КонецЕсли;

Для Каждого Строка Из Дерево.ПолучитьЭлементы() Цикл

Если Строка.Ссылка = Ссылка Тогда

Идентификатор = Строка.ПолучитьИдентификатор();

Прервать;

КонецЕсли;

НайтиСтрокуДереваПоСсылке(Ссылка, Строка, Идентификатор);

КонецЦикла;

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

Функция ВвестиСтрокуСЗаголовоком(Значение, Заголовок = "", Надпись = "", Длина = 0) Экспорт

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("Значение", Значение);

ПараметрыФормы.Вставить("Заголовок", Заголовок);

ПараметрыФормы.Вставить("Надпись", Надпись);

ПараметрыФормы.Вставить("Длина", Длина);

Результат = ОткрытьФормуМодально("ОбщаяФорма.ВводСтрокиСЗаголовком", ПараметрыФормы);

Если ТипЗнч(Результат) = Тип("Строка") И ЗначениеЗаполнено(Результат) Тогда

Значение = СокрЛП(Результат);

Возврат Истина;

КонецЕсли;

Возврат Ложь;

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

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


//

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

Если Источник.ОбменДанными.Загрузка Тогда

Возврат;

КонецЕсли;

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

МенеджерЗаписи = РегистрыСведений.ОбщиеРеквизитыДокументов.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Документ = Источник.Ссылка;

МенеджерЗаписи.Прочитать();

МенеджерЗаписи.Документ = Источник.Ссылка;

МенеджерЗаписи.РегистрационныйНомер = Источник.РегистрационныйНомер;

МенеджерЗаписи.ДатаРегистрации = Источник.ДатаРегистрации;

МенеджерЗаписи.Сумма = Источник.Сумма;

МенеджерЗаписи.Валюта = Источник.Валюта;

МенеджерЗаписи.СрокИсполнения = Источник.СрокИсполнения;

МенеджерЗаписи.Заголовок = Источник.Заголовок;

МенеджерЗаписи.Записать();

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

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

// Программный интерфейс

// Возвращает структуру прав доступа к указанному объекту для указанного

// пользователя. Если пользователь не указан, то используется текуший

// пользователь.

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

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

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

// Если права доступа не включены, то все разрешено

Права = Новый Структура(

"Добавление, Изменение, Удаление, УправлениеПравами, Чтение",

Истина, Истина, Истина, Истина, Истина);

Возврат Права;

КонецЕсли;

// Если использование прав доступа включено, то выполняется получение прав доступа

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

Если Не ЗначениеЗаполнено(Пользователь) Тогда

Пользователь = ОбщегоНазначения.ТекущийПользователь();

КонецЕсли;

Права = Новый Структура(

"Добавление, Изменение, Удаление, УправлениеПравами, Чтение",

Ложь, Ложь, Ложь, Ложь, Ложь);

// Роли Полные права все разрешено

Если ПользователиСерверПовтИсп.ЭтоПолноправныйПользовательИБ(Пользователь) Тогда

Права.Чтение = Истина;

Права.Добавление = Истина;

Права.Изменение = Истина;

Права.Удаление = Истина;

Права.УправлениеПравами = Истина;

Возврат Права;

КонецЕсли;

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

Если ТипЗнч(ОбъектДоступа) = Тип("СправочникСсылка.ВерсииФайлов")

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

ВладелецФайла = Неопределено;

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


ВладелецФайла = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ОбъектДоступа, "ВладелецФайла");

КонецЕсли;

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

Файл = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ОбъектДоступа, "Владелец");

ВладелецФайла = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Файл, "ВладелецФайла");

КонецЕсли;

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

"ВЫБРАТЬ

| ПраваПоДескрипторамДоступа.Добавление,

| ПраваПоДескрипторамДоступа.Изменение,

| ПраваПоДескрипторамДоступа.Удаление,

| ПраваПоДескрипторамДоступа.УправлениеПравами,

| ПраваПоДескрипторамДоступа.Чтение

|ИЗ

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

| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДескрипторыДоступаДляФайлов КАК ДескрипторыДоступаДляФайлов

| ПО ПраваПоДескрипторамДоступа.Дескриптор = ДескрипторыДоступаДляФайлов.Дескриптор

|ГДЕ

| ПраваПоДескрипторамДоступа.Пользователь = &Пользователь

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

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

Иначе

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

"ВЫБРАТЬ

| ПраваПоДескрипторамДоступа.Добавление,

| ПраваПоДескрипторамДоступа.Изменение,

| ПраваПоДескрипторамДоступа.Удаление,

| ПраваПоДескрипторамДоступа.УправлениеПравами,

| ПраваПоДескрипторамДоступа.Чтение

|ИЗ

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

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

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

|ГДЕ

| ПраваПоДескрипторамДоступа.Пользователь = &Пользователь

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

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

КонецЕсли;

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

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

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

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

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

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

Права.Удаление = ВыборкаДетальныеЗаписи.Удаление;

Права.УправлениеПравами = ВыборкаДетальныеЗаписи.УправлениеПравами;

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

КонецЕсли;

РасширитьДоступПравамиБезОграничения(Права, ОбъектДоступа, Пользователь);


Возврат Права;

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

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

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

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

Менеджер = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Дескриптор);

Менеджер.ОбновитьПрава(

Дескриптор,

Неопределено, // Протокол

Немедленно);

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

// Расширяет переданное соответствие с правами доступа, добавляя к нему

// руководителей тех пользователей, которые уже перечислены в этом соответствии

//

// Если руководители были добавлены, то возвращает Истина

Функция РасширитьПраваПоРуководителям(ПраваДоступа) Экспорт

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

РуководителиДобавлены = Ложь;

// Расширяем с учетом передачи прав руководителям

Если Константы.ДобавлятьРуководителямДоступПодчиненных.Получить() Тогда

ВсеРуководители = РегистрыСведений.ПодчиненностьСотрудников.ПолучитьВсехРуководителей();

Для каждого Запись Из ПраваДоступа Цикл

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

Руководители = ВсеРуководители.Получить(Запись.Ключ);

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

Ст = Новый Структура("Чтение, Добавление, Изменение, Удаление, УправлениеПравами");

ЗаполнитьЗначенияСвойств(Ст, Запись.Значение);

// Обход и добавление каждого руководителя

Для каждого Эл Из Руководители Цикл

ДобавитьЗаписьВСоответствиеПрав(ПраваДоступа, Эл, Ст);

РуководителиДобавлены = Истина;

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецЕсли;

Возврат РуководителиДобавлены;

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

// Расширяет переданное соответствие с правами доступа, добавляя к нему

// делегатов тех пользователей, которые уже перечислены в этом соответствии

//

// Если делегаты были добавлены, то возвращает Истина

Функция РасширитьПраваПоДелегатам(ПраваДоступа, ДескрипторДоступа) Экспорт

Возврат ДокументооборотПраваДоступаПереопределяемый.РасширитьПраваПоДелегатам(ПраваДоступа, ДескрипторДоступа);

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

// Добавляет сведения о правах пользователя в соответствие, объединяя их с уже

// существующими сведениями для данного пользователя

Процедура ДобавитьЗаписьВСоответствиеПрав(ПраваДоступа, Пользователь, Знач Права) Экспорт

Эл = ПраваДоступа.Получить(Пользователь);

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

Эл.Чтение = Эл.Чтение ИЛИ Права.Чтение;

Эл.Добавление = Эл.Добавление ИЛИ Права.Добавление;


Эл.Изменение = Эл.Изменение ИЛИ Права.Изменение;

Эл.Удаление = Эл.Удаление ИЛИ Права.Удаление;

Эл.УправлениеПравами = Эл.УправлениеПравами ИЛИ Права.УправлениеПравами;

Иначе

Эл = Новый Структура("Чтение, Добавление, Изменение, Удаление, УправлениеПравами");

ЗаполнитьЗначенияСвойств(Эл, Права);

КонецЕсли;

ПраваДоступа.Вставить(Пользователь, Эл);

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

// Добавляет указанные права указанного пользователя или роли к соответсвию прав,

// производит автоматическое разыменование роли до конкретных пользователей

Процедура ДобавитьПользователяВСоответствиеПрав(

ПраваДоступа,

Пользователь,

ОсновнойОбъектАдресации,

ДополнительныйОбъектАдресации,

Знач Права) Экспорт

// Если пользователь не указан, то запись не добавляется

Если Не ЗначениеЗаполнено(Пользователь) Тогда

Возврат;

КонецЕсли;

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

РеквизитыПользователя = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Пользователь,

"ПометкаУдаления, Недействителен");

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

ДобавитьЗаписьВСоответствиеПрав(ПраваДоступа, Пользователь, Права);

КонецЕсли;

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

ИсполнителиРоли = РегистрыСведений.ИсполнителиЗадач.ПолучитьИсполнителейРоли(

Пользователь,

ОсновнойОбъектАдресации,

ДополнительныйОбъектАдресации);

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

ДобавитьЗаписьВСоответствиеПрав(ПраваДоступа, Эл.Исполнитель, Права);

КонецЦикла;

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

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

Для каждого Эл Из ПользователиГруппы Цикл

ДобавитьЗаписьВСоответствиеПрав(ПраваДоступа, Эл.Пользователь, Права);

КонецЦикла;

Иначе

ВызватьИсключение(НСтр("ru = 'Неизвестный тип пользователя.'"));

КонецЕсли;

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

// Определяет дескриптор доступа для указанного объекта доступа

// Пр необходимости создает новый дескриптор, привязывает его к

// объекту и вычисляет права

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

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

// Получение ссылки на подходящий дескриптор