Диплом: Автоматизация и обеспечение информационной безопасности процесса внутрикорпоративного взаимодействия сотрудников компании ООО \"Теком\"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
93
Процедура ИсполнителиПриНачалеРедактирования(Элемент, НоваяСтрока,
Копирование)
Если НоваяСтрока = Истина Тогда
Процентов = 0;
Для Каждого СтрокаИсполнитель Из Объект.Исполнители Цикл
Процентов = Процентов + СтрокаИсполнитель.Процент;
КонецЦикла;
Если Процентов > 100 Тогда
Процентов = 100;
КонецЕсли;
СтрокаИсполнитель = Элемент.ТекущиеДанные;
СтрокаИсполнитель.Процент = 100-Процентов;
СтрокаИсполнитель.Задание = Объект.Наименование;
КонецЕсли;
КонецПроцедуры
//-------------------------------------------------------------------------------
// ЗАКЛАДКА ПОДЗАДАЧИ
&НаКлиенте
Процедура ВывестиПанельПодзадач() // первоначальное заполнение дерева
подзадач
ЭтотОбъект.Элементы.ДеревоПодзадач.НачальноеОтображениеДерева
= НачальноеОтображениеДерева.РаскрыватьВерхнийУровень;
КонецПроцедуры
// заполнить дерево подзадач
&НаСервере
Процедура ЗаполнитьДеревоПодзадач()
ЭтаФорма.Прочитать(); // перечитать данные формы
ДеревоОбъект = РеквизитФормыВЗначение("ДеревоПодзадач");
ДеревоОбъект.Строки.Очистить(); // удалить все подзадачи
// сформировать корень - текущая задача
Голова = ДеревоОбъект.Строки.Добавить();
Голова.ПодЗадача = Объект.Ссылка;
Голова.Выполнена = Объект.Проведен;
Голова.Наименование = "ЭТА ЗАДАЧА";
Голова.Пометка = УстановитьПометку(Объект); //
отметка исполнения
94
// по всем подзадачам табличной части
Для Каждого СтрокаПодЗадача Из Объект.Подзадачи Цикл
ЗаполнитьПодЗадачу(СтрокаПодЗадача, Голова); // вызвать для
корня и далее для каждой строки дерева
КонецЦикла;
ЗначениеВРеквизитФормы(ДеревоОбъект, "ДеревоПодзадач");
КонецПроцедуры
// рекурсивное заполнение одной подзадачи
&НаСервере
Процедура ЗаполнитьПодЗадачу(СтрокаПодЗадача, Узел)
// фильтр по проведенным и не проведенным
Если (ФильтрПроведенные = 0) Или (ФильтрПроведенные = 1) Тогда
Если Не Число(СтрокаПодЗадача.ПодЗадача.Проведен) =
ФильтрПроведенные Тогда
Возврат;
КонецЕсли;
КонецЕсли;
// // фильтр по теущему значению
//Если ФильтрЗначение <> Неопределено Тогда
// Если ФильтрКолонка = "Наименование" Тогда
// Если Найти(СтрокаПодЗадача.ПодЗадача.Наименование,
ФильтрЗначение) = 0 Тогда
// Возврат;
// КонецЕсли;
// ИначеЕсли ФильтрКолонка = "Комментарий" Тогда
// Если Найти(СтрокаПодЗадача.Комментарий,
ФильтрЗначение) = 0 Тогда
// Возврат;
// КонецЕсли;
// ИначеЕсли ФильтрКолонка = "Описание" Тогда
// Если
Найти(СтрокаПодЗадача.ПодЗадача.КраткоеОписание, ФильтрЗначение) = 0
Тогда
// Возврат;
// КонецЕсли;
// ИначеЕсли ФильтрКолонка = "Статус" Тогда
// Если СтрокаПодЗадача.ПодЗадача.Статус <>
ФильтрЗначение Тогда
// Возврат;
95
// КонецЕсли;
// ИначеЕсли ФильтрКолонка = "ДатаПостановки" Тогда
// Если НачалоДня(СтрокаПодЗадача.ПодЗадача.Дата) <>
НачалоДня(ФильтрЗначение) Тогда
// Возврат;
// КонецЕсли;
// ИначеЕсли ФильтрКолонка = "ДатаОжидаемая" Тогда
// Если
НачалоДня(СтрокаПодЗадача.ПодЗадача.ДатаОкончания) <>
НачалоДня(ФильтрЗначение) Тогда
// Возврат;
// КонецЕсли;
// КонецЕсли;
//КонецЕсли;
// создать новый узел дерева
НовыйУзел = Узел.Строки.Добавить();
НовыйУзел.ПодЗадача =
СтрокаПодЗадача.ПодЗадача;
НовыйУзел.Выполнена =
СтрокаПодЗадача.ПодЗадача.Проведен;
НовыйУзел.НомерВТабЧасти =
СтрокаПодЗадача.НомерСтроки;
НовыйУзел.Наименование =
Строка(СтрокаПодЗадача.ПодЗадача.Номер) + " " +
СтрокаПодЗадача.ПодЗадача.Наименование;
НовыйУзел.Статус =
СтрокаПодЗадача.ПодЗадача.Статус;
НовыйУзел.Дата =
СтрокаПодЗадача.ПодЗадача.Дата;
НовыйУзел.ДатаОжидаемая =
СтрокаПодЗадача.ПодЗадача.ОжидаемаяДатаВыполнения;
НовыйУзел.Комментарий =
СтрокаПодЗадача.Комментарий;
НовыйУзел.Пометка =
УстановитьПометку(СтрокаПодЗадача.ПодЗадача);
//НовыйУзел.Картинка = БиблиотекаКартинок.ДебетКредит;
// теперь рекурсивно для каждого поддрева
Для Каждого СтрокаПодЗадача Из
СтрокаПодЗадача.ПодЗадача.Подзадачи Цикл
ЗаполнитьПодЗадачу(СтрокаПодЗадача, НовыйУзел);
КонецЦикла;
96
КонецПроцедуры // ЗаполнитьПодЗадачу
// признак выполнения задачи
Функция УстановитьПометку(Задача)
Возврат Число(Задача.Проведен);
//Если Задача.Проведен Тогда
// Возврат 1;
//КонецЕсли;
//
//Для Каждого СтрокаПодЗадача Из Задача.Подзадачи Цикл
// Если НЕ Задача.Проведен Тогда
// Возврат 2;
// КонецЕсли;
//КонецЦикла;
//
//Возврат 0;
КонецФункции
//пройти по массиву Путь (хранит ссылки на подзадачи) начиная с головы и
вернуть ИД последнего узла
&НаКлиенте
Функция СпозиционироватьсяВДеревеПодзадач(Вдереве, Путь, Й)
Если Путь.Количество() = 0 Тогда
Возврат 0;
КонецЕсли;
Ключ = Путь[Й];
Для Каждого ТекущаяСтрока Из Вдереве.ПолучитьЭлементы() Цикл
Если ТекущаяСтрока.Подзадача = Ключ Тогда
Если Й = 0 Тогда
Возврат ТекущаяСтрока.ПолучитьИдентификатор();
Иначе
Возврат СпозиционироватьсяВДеревеПодзадач(ТекущаяСтрока,
Путь, Й-1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецФункции
// перехват выбора (двойной щелчок) - открыть текущую подзадачу
&НаКлиенте
97
Процедура ДеревоПодзадачВыбор(Элемент, ВыбраннаяСтрока, Поле,
СтандартнаяОбработка)
Если Не ((Поле.Имя = "ДеревоПодзадачКомментарий") Или (Поле.Имя
= "ДеревоПодзадачПодзадача")) Тогда // эти поля - для собственного
редактирования
ОткрытьПодзадачу();
КонецЕсли;
КонецПроцедуры
// перехват стандартной команды Добавить - добавить в дерево
существующую задачу
// открыть форму выбора и после выбора добавить выбранную задачу в дерево
&НаКлиенте
Процедура ДеревоПодзадачПередНачаломДобавления(Элемент, Отказ,
Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
Если Не Копирование Тогда // копирование невозможно
ДобавитьСуществующуюПодзадачу();
КонецЕсли;
КонецПроцедуры
// перехват стандартной команды Изменить - открыть подзадачу
&НаКлиенте
Процедура ДеревоПодзадачПередНачаломИзменения(Элемент, Отказ)
Если Не ((Элемент.ТекущийЭлемент.Имя =
"ДеревоПодзадачКомментарий") Или (Элемент.ТекущийЭлемент.Имя =
"ДеревоПодзадачПодзадача")) Тогда // эти поля - для собственного
редактирования
Отказ = Истина;
ОткрытьПодзадачу();
КонецЕсли;
КонецПроцедуры
// перехват стандартной команды Удалить
&НаКлиенте
Процедура ДеревоПодзадачПередУдалением(Элемент, Отказ)
98
УзелРодитель =
Элементы.ДеревоПодзадач.ТекущиеДанные.ПолучитьРодителя(); // получить
узел-родитель
Если УзелРодитель = Неопределено Тогда // если нет родителя - то
значит пытаются удалить корень
Отказ = Истина;
Возврат;
КонецЕсли;
ПутьВДереве = ПолучитьПутьВДереве(УзелРодитель); //запомнить
путь до текущего узла
УдалитьПодзадачуНаСервере(УзелРодитель.Подзадача,
Элементы.ДеревоПодзадач.ТекущиеДанные.ПодЗадача); // удалить из таб
части
ЗаполнитьДеревоПодзадач(); // перестроить дерево подзадач
Элементы.ДеревоПодзадач.ТекущаяСтрока =
СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться на добавленной задаче
Оповестить("Дерево", Новый Структура,ЭтотОбъект); // всем формам
послать оповещение о проведенном изменениии - пусть они перстаивают свое
дерево
Отказ = Истина; // уже все сделано
КонецПроцедуры
// перехват стандартного Изменения (изменение последовательность строк или
комментарий)
&НаКлиенте
Процедура ДеревоПодзадачПриИзменении(Элемент)
СохранитьДеревоНаСервере();
П = Новый Структура;
Оповестить("Дерево",П, ЭтотОбъект); // оповестить об изменении,
сделанном в этом форме, все остальные формы - пусть они перстаривают свое
дерево
КонецПроцедуры
// по команде НоваяПодзадача
&НаКлиенте
Процедура ДеревоНоваяПодзадача(Команда)
99
ЭтаЗадача = Элементы.ДеревоПодзадач.ТекущиеДанные.ПодЗадача;
//// вариант программного создания и записи нового документа
//НоваяПодЗадача = СоздатьПодзадачуНаСервере(); // создать новый
документ и записать его
//ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные,
НоваяПодЗадача); //сформировать массив подзадач от текущего узла до корня
//ДобавитьСуществующуюПодзадачуНаСервере(ЭтаЗадача,
НоваяПодЗадача); // добавить новую задачу в объект (в таб. часть)
//ЭтаФорма.Прочитать(); // перечитать данные формы
//ЗаполнитьДеревоПодзадач(); // перстроить дерево подзадач
//СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач,
ПутьВДереве, ПутьВДереве.Количество()-1); // спозиционироваться на
добавленной задаче
//П = Новый Структура;
//П.Вставить("Ключ", НоваяПодЗадача);
//ОткрытьФорму("Документ.Задача.ФормаОбъекта", П); // открыть
отдельную форму редактирования новой задачи
Если ОбщийСрв.ВЗакрытомПериоде(ЭтаЗадача) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) +
"Находится в закрытом периоде. Редактирование невозможно");
Возврат;
КонецЕсли;
Если Не
ОбщийСрв.ПроверкаПрав(ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача,
"Автор"), ОбщийСрв.ПолучитьГлПользователь()) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Нет
прав редактировать чужой документ");
Возврат;
КонецЕсли;
Если (ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача, "Проведен")) И
(ОбщийСрв.обПолучитьКонстанту("ЗапретПроведенных"))
Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Уже
выполнена. Редактирование невозможно");
Возврат;
КонецЕсли;
// вариант открытия формы нового пустого документа
100
П = Новый Структура;
П.Вставить("ЭтоНовый", Истина);// признак того что форма
открывается для нового документа
П.Вставить("Родитель", ЭтаЗадача);
ОткрытьФорму("Документ.Задача.ФормаОбъекта", П, ЭтотОбъект); //
открыть отдельную форму редактирования новой задачи
// далее см. в ПриСозданииНаСервере - заполнение реквизитов и таб.
частей нового документа на основании этого
// далее см. в ПослеЗаписи - запись новой задачи в тч Подзадачи
родительской задачи
// далее см. в ОбработкаОповещения - в родительской задаче в дереве
спозиционироваться на новой задаче
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДеревоПоШаблону(Шаблон)
ЭтаЗадача = Элементы.ДеревоПодзадач.ТекущиеДанные.ПодЗадача;
Если ОбщийСрв.ВЗакрытомПериоде(ЭтаЗадача) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) +
"Находится в закрытом периоде. Редактирование невозможно");
Возврат;
КонецЕсли;
Если Не
ОбщийСрв.ПроверкаПрав(ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача,
"Автор"), ОбщийСрв.ПолучитьГлПользователь()) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Нет
прав редактировать чужой документ");
Возврат;
КонецЕсли;
Если (ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача, "Проведен")) И
(ОбщийСрв.обПолучитьКонстанту("ЗапретПроведенных"))
Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Уже
выполнена. Редактирование невозможно");
Возврат;
КонецЕсли;
НоваяПодЗадача = СоздатьПодзадачуНаСервере(Шаблон, ЭтаЗадача); //
создать новый документ и записать его
101
ДобавитьСуществующуюПодзадачуНаСервере(ЭтаЗадача,
НоваяПодЗадача); // добавить новую задачу в объект (в таб. часть)
ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные,
НоваяПодЗадача); //сформировать массив подзадач от текущего узла до корня
ЗаполнитьПоШаблонуРекурсивно(Шаблон, НоваяПодЗадача);
ЭтаФорма.Прочитать(); // перечитать данные формы
ЗаполнитьДеревоПодзадач(); // перстроить дерево подзадач
Элементы.ДеревоПодзадач.ТекущаяСтрока =
СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться на добавленной задаче
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоШаблонуРекурсивно(Шаблон, Основание)
ВыборкаСправочника = Справочники.Этапы.Выбрать(Шаблон);
Пока ВыборкаСправочника.Следующий() Цикл
НоваяПодЗадача =
СоздатьПодзадачуНаСервере(ВыборкаСправочника, Основание); // создать
новый документ и записать его
ДобавитьСуществующуюПодзадачуНаСервере(Основание,
НоваяПодЗадача); // добавить новую задачу в объект (в таб. часть)
ЗаполнитьПоШаблонуРекурсивно(ВыборкаСправочника.Ссылка,
НоваяПодЗадача);
КонецЦикла;
КонецПроцедуры
// открыть текущую подзадачу в дереве в отдельной форме. Вызываеися из
Выбор и по команде Открыть
&НаКлиенте
Процедура ОткрытьПодзадачу()
ПодЗадача =
ЭтотОбъект.Элементы.ДеревоПодзадач.ТекущиеДанные.Подзадача;
Если ПодЗадача = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПодЗадача.Пустая() = Истина Тогда
102
Возврат;
КонецЕсли;
//ОткрытьЗначение(ПодЗадача);
П = Новый Структура;
П.Вставить("Ключ", ПодЗадача);
ОткрытьФорму("Документ.Задача.ФормаОбъекта", П); // открыть
отдельную форму редактирования
КонецПроцедуры
// открыть форму выбора списка задач
&НаКлиенте
Процедура ДобавитьСуществующуюПодзадачу()
ПодЗадача =
ЭтотОбъект.Элементы.ДеревоПодзадач.ТекущиеДанные.Подзадача;
П = Новый Структура;
П.Вставить("ПараметрТекущаяСтрока", ПодЗадача);
ОткрытьФорму("Документ.Задача.ФормаВыбора", П,
ЭтотОбъект.Элементы.ДеревоПодзадач);
// результат выбора см. в ОбработкаВыбора элемента формы
ДеревоПодзадач
КонецПроцедуры
// во внешней форме выбора завершили выбор существующей задачи -
добавить ее в дерево подзадач
&НаКлиенте
Процедура ДеревоПодзадачОбработкаВыбора(Элемент, ВыбранноеЗначение,
СтандартнаяОбработка)
Если Не Элемент.Имя = "ДеревоПодзадач" Тогда // если выбор был не
из дерева
Возврат;
КонецЕсли;
Если ВыбранноеЗначение = Неопределено Тогда // если ничего не
было выбрано
Возврат;

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)