Файл: Автоматизация разграничений прав доступа к ресурсам информационной системы в ООО "Монарх" (Технико-экономическая характеристика предметной области и предприятия. Анализ деятельности).pdf

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

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

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

Добавлен: 31.03.2023

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

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

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

ПРИЛОЖЕНИЯ

Программный код

Форма документа «Задача»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// ЗАКЛАДКА ПОДЗАДАЧИ

Если Параметры.Свойство("ЭтоНовый") Тогда // если из вызывающей формы был пердан признак что это новый документ

Если Параметры.ЭтоНовый Тогда // значит нажали кнопку Новая подзадача в тч Подзадачи родителя

Основание = Параметры.Родитель;

Если Не Основание.Пустая() Тогда

ОбщийСрв.ПриВводеНовойЗадачи(Объект, Основание, Ложь); // перезаполнить реквизиты и тч новой на основании родителя

// но не добавлять в тч Подзадачи

// далее см. в ПослеЗаписи этой задачи - добавить эту новую в тч Подзадачи родителя

// далее см. в ОбработкаОповещения родителя - спозиционироваться на вновь добавленной задче в дереве

КонецЕсли;

КонецЕсли;

КонецЕсли;

ФильтрПроведенные = 2; // первоначальное значение фильтра "Все"

ЗаполнитьДеревоПодзадач(); // первоначально создать дерево подзадач

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)

// если нет прав - то форма только просмотр

Если Не ОбщийСрв.ПроверкаПрав(Объект.Автор, ОбщийСрв.ПолучитьГлПользователь()) Тогда

ЭтаФорма.ТолькоПросмотр = Истина;

КонецЕсли;

// если проведена и запрет проведенных

Если Объект.Проведен И ОбщийСрв.обПолучитьКонстанту("ЗапретПроведенных") Тогда

ЭтаФорма.ТолькоПросмотр = Истина;

КонецЕсли;

// ЗАКЛАДКА ИСПОЛНИТЕЛИ

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

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

ИсполнительОзнакомлен = Ложь;

Для Каждого СтрокаИсполнитель Из Объект.Исполнители Цикл

Если (СтрокаИсполнитель.Исполнитель = ОбщийСрв.ПолучитьГлПользователь()) И (СтрокаИсполнитель.Ознакомлен = глПустаяДата) Тогда

СтрокаИсполнитель.Ознакомлен = ТекущаяДата(); // простановка даты ознакомления - и есть признак ознакомления

ИсполнительОзнакомлен = Истина;

ОбщийСрв.ЗаписьВедетИсполнитель(Истина); // признак того что дальнейшая запись будет вестись исполнителем

Прервать;

КонецЕсли;

КонецЦикла;

Если ИсполнительОзнакомлен = Истина Тогда // если была простановка даты ознакомления

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

П.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);

Записать(П);

КонецЕсли;

// ЗАКЛАДКА ПОДЗАДАЧИ

ВывестиПанельПодзадач(); // первоначальное заполнение дерева подзадач


// РодительскаяЗадача = ОбщийСрв.НайтиРодительскуюЗадачу(Объект.Ссылка);

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

// реакция на команду формы Записать и закрыть

&НаКлиенте

Процедура ФормаЗаписатьИЗакрыть(Команда)

Записать();

Закрыть();

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

// реакция на команду формы Распровести

&НаКлиенте

Процедура ФормаРаспровести(Команда)

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

П.Вставить("РежимЗаписи", РежимЗаписиДокумента.ОтменаПроведения);

Записать(П);

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

// реакция на окончание выбора в других формах

&НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

// результат пришел из формы Исполнение исполнителем

Если ИсточникВыбора.ИмяФормы = "Документ.Задача.Форма.ФормаИсполнения" Тогда

ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.РезультатИсполнения = ВыбранноеЗначение.Получить(0).Значение;

ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.ДатаИсполнения = ВыбранноеЗначение.Получить(1).Значение;

ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.Комментарий = ВыбранноеЗначение.Получить(2).Значение;

ОбщийСрв.ЗаписьВедетИсполнитель(Истина); // флаг того, что записывать можно, даже если нет прав

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

П.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);

ЭтотОбъект.Записать(П);

КонецЕсли;

// результат пришел из формы выбора справочника Этапы

Если ИсточникВыбора.ИмяФормы = "Справочник.Этапы.ФормаВыбора" Тогда

ЗаполнитьДеревоПоШаблону(ВыбранноеЗначение);

КонецЕсли;

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

// проверить возможность записи документа из формы

&НаКлиенте

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

Отказ = Не ПроверкаВозможностиПроведения();

КонецЕсли;

Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда

Отказ = Не ПроверкаВозможностиРасПроведения();

КонецЕсли

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

&НаКлиенте

Функция ПроверкаВозможностиРасПроведения(ЭтаЗадача = Неопределено)

Если ЭтаЗадача = Неопределено Тогда

ЭтаЗадача = Объект.Ссылка;

КонецЕсли;

// задать пользователю вопрос

//МассивОтменяемых = ОбщийСрв.СформироватьСписокОтменяемых(ЭтаЗадача);

//Если МассивОтменяемых.Количество() Тогда

// Если Вопрос("Отмена выполнения задачи " + ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача)

// + " приведет к отмене выполнения задач-родителей. Все равно отменить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда


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

// КонецЕсли;

//КонецЕсли;

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

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

Функция ПроверкаВозможностиПроведения(ЭтаЗадача = Неопределено)

Если ЭтаЗадача = Неопределено Тогда

ЭтаЗадача = Объект.Ссылка;

КонецЕсли;

// задать пользователю вопрос

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

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

// ЗАКЛАДКА СВОЙСТВА

&НаКлиенте

Процедура СвойстваВидСвойстваОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

// проверка соответсвия типа выбранного свойства

Если Не СвойстваВидСвойстваОбработкаВыбораНаСервере(ВыбранноеЗначение) Тогда

Сообщить("Тип свойства выбранного вида свойств не относится к задачам");

СтандартнаяОбработка = Ложь;

Возврат;

КонецЕсли;

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

&НаСервереБезКонтекста

Функция СвойстваВидСвойстваОбработкаВыбораНаСервере(ВыбВидСвойства)

Если ВыбВидСвойства.ПолучитьОбъект().ТипСвойства.ТипОбъекта <> Перечисления.ТипыОбъектов.Задача Тогда

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

КонецЕсли;

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

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

//---------------------------------------------------------------------------

// ЗАКЛАДКА ПЕРЕПИСКА

// выход из поля ввода текста сообщения - это команда на добавление сообщения

&НаКлиенте

Процедура НовоеСообщениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)

Если ПустаяСтрока(Текст) Тогда

Возврат;

КонецЕсли;

ДобавитьНовоеСообщение(Текст);

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

// программное добавление сообщения

&НаКлиенте

Процедура ДобавитьНовоеСообщение(ТекстСообщения)

Если Объект.Ссылка.Пустая() Тогда

Сообщить("Нужно сначала записать новую задачу");

Возврат;

КонецЕсли;

НоваяСтрока = Объект.Переписка.Добавить();

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

НоваяСтрока.ДатаСообщения = ТекущаяДата();

НоваяСтрока.Сообщение = ТекстСообщения;

ОбщийСрв.ЗаписьВедетИсполнитель(Истина); // флаг того, что записывать можно, даже если нет прав

Записать();

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

//---------------------------------------------------------------------------

// ЗАКЛАДКА ИСПОЛНИТЕЛИ

// по команде Исполнить

&НаКлиенте

Процедура ИсполнителиИсполнить(Команда)

Если ОбщийСрв.ПроверкаПрав(ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.Исполнитель, ОбщийСрв.ПолучитьГлПользователь()) Тогда

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

П.Вставить("Исполнитель", ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.Исполнитель);


П.Вставить("РезультатИсполнения", ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.РезультатИсполнения);

П.Вставить("ДатаИсполнения", ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.ДатаИсполнения);

П.Вставить("Комментарий", ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.Комментарий);

ФормаИсполнение = ПолучитьФорму("Документ.Задача.Форма.ФормаИсполнения", П, ЭтотОбъект);

ФормаИсполнение.ОткрытьМодально();

// дальше см. в ОбработкаВыбора формы

Иначе

Сообщить("У вас нет прав для проставления отметки об исполнении");

КонецЕсли;

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

// перед записью в ТЧ Исполнители - не должно быть пустых и проверка процентов

&НаКлиенте

Процедура ИсполнителиПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)

Если Элемент.ТекущиеДанные.Исполнитель.Пустая() И Не (НоваяСтрока и ОтменаРедактирования) Тогда

Сообщить("Исполнитель должен быть обязательно выбран");

Отказ = Истина;

КонецЕсли;

Процентов = 0;

Для Каждого СтрокаИсполнитель Из Объект.Исполнители Цикл

Процентов = Процентов + СтрокаИсполнитель.Процент;

КонецЦикла;

Если Процентов > 100 Тогда

Сообщить("Суммарный процент исполнения не может превышать 100%");

Отказ = Истина;

КонецЕсли;

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

// выбор нового исполнителя - проверка что такого еще не было

&НаКлиенте

Процедура ИсполнителиИсполнительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Если УжеЕстьВТаблице(ВыбранноеЗначение) Тогда

СтандартнаяОбработка = Ложь;

Сообщить("Этот исполнитель уже выбран");

КонецЕсли;

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

&НаСервере

Функция УжеЕстьВТаблице(Выбор)

МассивНайденныхСтрок = Объект.Исполнители.НайтиСтроки(Новый Структура("Исполнитель",Выбор));

Возврат МассивНайденныхСтрок.Количество();

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

//ввод новой строки в ТЧ Исполнители - запрет копирования (не может быть двух одинаковых строк)

&НаКлиенте

Процедура ИсполнителиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)

Если Копирование = Истина Тогда // запрет копирования

Отказ = Истина;

КонецЕсли;

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

//ввод новой строки в ТЧ Исполнители - автоматически рассчитать процент

&НаКлиенте

Процедура ИсполнителиПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

Если НоваяСтрока = Истина Тогда

Процентов = 0;

Для Каждого СтрокаИсполнитель Из Объект.Исполнители Цикл


Процентов = Процентов + СтрокаИсполнитель.Процент;

КонецЦикла;

Если Процентов > 100 Тогда

Процентов = 100;

КонецЕсли;

СтрокаИсполнитель = Элемент.ТекущиеДанные;

СтрокаИсполнитель.Процент = 100-Процентов;

СтрокаИсполнитель.Задание = Объект.Наименование;

КонецЕсли;

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

//-------------------------------------------------------------------------------

// ЗАКЛАДКА ПОДЗАДАЧИ

&НаКлиенте

Процедура ВывестиПанельПодзадач() // первоначальное заполнение дерева подзадач

ЭтотОбъект.Элементы.ДеревоПодзадач.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВерхнийУровень;

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

// заполнить дерево подзадач

&НаСервере

Процедура ЗаполнитьДеревоПодзадач()

ЭтаФорма.Прочитать(); // перечитать данные формы

ДеревоОбъект = РеквизитФормыВЗначение("ДеревоПодзадач");

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

// сформировать корень - текущая задача

Голова = ДеревоОбъект.Строки.Добавить();

Голова.ПодЗадача = Объект.Ссылка;

Голова.Выполнена = Объект.Проведен;

Голова.Наименование = "ЭТА ЗАДАЧА";

Голова.Пометка = УстановитьПометку(Объект); // отметка исполнения

// по всем подзадачам табличной части

Для Каждого СтрокаПодЗадача Из Объект.Подзадачи Цикл

ЗаполнитьПодЗадачу(СтрокаПодЗадача, Голова); // вызвать для корня и далее для каждой строки дерева

КонецЦикла;

ЗначениеВРеквизитФормы(ДеревоОбъект, "ДеревоПодзадач");

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

// рекурсивное заполнение одной подзадачи

&НаСервере

Процедура ЗаполнитьПодЗадачу(СтрокаПодЗадача, Узел)

// фильтр по проведенным и не проведенным

Если (ФильтрПроведенные = 0) Или (ФильтрПроведенные = 1) Тогда

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

Возврат;

КонецЕсли;

КонецЕсли;

// // фильтр по теущему значению

//Если ФильтрЗначение <> Неопределено Тогда

// Если ФильтрКолонка = "Наименование" Тогда

// Если Найти(СтрокаПодЗадача.ПодЗадача.Наименование, ФильтрЗначение) = 0 Тогда

// Возврат;

// КонецЕсли;

// ИначеЕсли ФильтрКолонка = "Комментарий" Тогда

// Если Найти(СтрокаПодЗадача.Комментарий, ФильтрЗначение) = 0 Тогда

// Возврат;

// КонецЕсли;

// ИначеЕсли ФильтрКолонка = "Описание" Тогда

// Если Найти(СтрокаПодЗадача.ПодЗадача.КраткоеОписание, ФильтрЗначение) = 0 Тогда

// Возврат;

// КонецЕсли;

// ИначеЕсли ФильтрКолонка = "Статус" Тогда

// Если СтрокаПодЗадача.ПодЗадача.Статус <> ФильтрЗначение Тогда