Дипломная работа: Автоматизация обработки заявок в ООО «АйТи-Студио»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
133
Если Не ((Элемент.ТекущийЭлемент.Имя =
"ДеревоПодзадачКомментарий") Или (Элемент.ТекущийЭлемент.Имя =
"ДеревоПодзадачПодзадача")) Тогда // эти поля - для собственного
редактирования
Отказ = Истина;
ОткрытьПодзадачу();
КонецЕсли;
КонецПроцедуры
// перехват стандартной команды Удалить
&НаКлиенте
Процедура ДеревоПодзадачПередУдалением(Элемент, Отказ)
УзелРодитель =
Элементы.ДеревоПодзадач.ТекущиеДанные.ПолучитьРодителя(); // получить
узел-родитель
Если УзелРодитель = Неопределено Тогда // если нет родителя - то значит
пытаются удалить корень
Отказ = Истина;
Возврат;
КонецЕсли;
ПутьВДереве = ПолучитьПутьВДереве(УзелРодитель); //запомнить путь
до текущего узла
УдалитьПодзадачуНаСервере(УзелРодитель.Подзадача,
Элементы.ДеревоПодзадач.ТекущиеДанные.ПодЗадача); // удалить из таб части
ЗаполнитьДеревоПодзадач(); // перестроить дерево подзадач
Элементы.ДеревоПодзадач.ТекущаяСтрока =
СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться на добавленной задаче
Оповестить("Дерево", Новый Структура,ЭтотОбъект); // всем формам
послать оповещение о проведенном изменениии - пусть они перстаивают свое
дерево
Отказ = Истина; // уже все сделано
КонецПроцедуры
// перехват стандартного Изменения (изменение последовательность строк или
комментарий)
&НаКлиенте
Процедура ДеревоПодзадачПриИзменении(Элемент)
134
СохранитьДеревоНаСервере();
П = Новый Структура;
Оповестить("Дерево",П, ЭтотОбъект); // оповестить об изменении,
сделанном в этом форме, все остальные формы - пусть они перстаривают свое
дерево
КонецПроцедуры
// по команде НоваяПодзадача
&НаКлиенте
Процедура ДеревоНоваяПодзадача(Команда)
ЭтаЗадача = Элементы.ДеревоПодзадач.ТекущиеДанные.ПодЗадача;
//// вариант программного создания и записи нового документа
//НоваяПодЗадача = СоздатьПодзадачуНаСервере(); // создать новый
документ и записать его
//ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные,
НоваяПодЗадача); //сформировать массив подзадач от текущего узла до корня
//ДобавитьСуществующуюПодзадачуНаСервере(ЭтаЗадача,
НоваяПодЗадача); // добавить новую задачу в объект (в таб. часть)
//ЭтаФорма.Прочитать(); // перечитать данные формы
//ЗаполнитьДеревоПодзадач(); // перстроить дерево подзадач
//СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться на добавленной задаче
//П = Новый Структура;
//П.Вставить("Ключ", НоваяПодЗадача);
//ОткрытьФорму("Документ.Задача.ФормаОбъекта", П); // открыть
отдельную форму редактирования новой задачи
Если ОбщийСрв.ВЗакрытомПериоде(ЭтаЗадача) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) +
"Находится в закрытом периоде. Редактирование невозможно");
Возврат;
КонецЕсли;
Если Не
ОбщийСрв.ПроверкаПрав(ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача,
"Автор"), ОбщийСрв.ПолучитьГлПользователь()) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Нет прав
редактировать чужой документ");
Возврат;
КонецЕсли;
135
Если (ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача, "Проведен")) И
(ОбщийСрв.обПолучитьКонстанту("ЗапретПроведенных")) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Уже
выполнена. Редактирование невозможно");
Возврат;
КонецЕсли;
// вариант открытия формы нового пустого документа
П = Новый Структура;
П.Вставить("ЭтоНовый", Истина);// признак того что форма открывается
для нового документа
П.Вставить("Родитель", ЭтаЗадача);
ОткрытьФорму("Документ.Задача.ФормаОбъекта", П, ЭтотОбъект); //
открыть отдельную форму редактирования новой задачи
// далее см. в ПриСозданииНаСервере - заполнение реквизитов и таб.
частей нового документа на основании этого
// далее см. в ПослеЗаписи - запись новой задачи в тч Подзадачи
родительской задачи
// далее см. в ОбработкаОповещения - в родительской задаче в дереве
спозиционироваться на новой задаче
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДеревоПоШаблону(Шаблон)
ЭтаЗадача = Элементы.ДеревоПодзадач.ТекущиеДанные.ПодЗадача;
Если ОбщийСрв.ВЗакрытомПериоде(ЭтаЗадача) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) +
"Находится в закрытом периоде. Редактирование невозможно");
Возврат;
КонецЕсли;
Если Не
ОбщийСрв.ПроверкаПрав(ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача,
"Автор"), ОбщийСрв.ПолучитьГлПользователь()) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Нет прав
редактировать чужой документ");
Возврат;
КонецЕсли;
Если (ОбщийСрв.ПолучитьРеквизитЗадачи(ЭтаЗадача, "Проведен")) И
(ОбщийСрв.обПолучитьКонстанту("ЗапретПроведенных")) Тогда
136
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача) + "Уже
выполнена. Редактирование невозможно");
Возврат;
КонецЕсли;
НоваяПодЗадача = СоздатьПодзадачуНаСервере(Шаблон, ЭтаЗадача); //
создать новый документ и записать его
ДобавитьСуществующуюПодзадачуНаСервере(ЭтаЗадача,
НоваяПодЗадача); // добавить новую задачу в объект (в таб. часть)
ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные,
НоваяПодЗадача); //сформировать массив подзадач от текущего узла до корня
ЗаполнитьПоШаблонуРекурсивно(Шаблон, НоваяПодЗадача);
ЭтаФорма.Прочитать(); // перечитать данные формы
ЗаполнитьДеревоПодзадач(); // перстроить дерево подзадач
Элементы.ДеревоПодзадач.ТекущаяСтрока =
СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться на добавленной задаче
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоШаблонуРекурсивно(Шаблон, Основание)
ВыборкаСправочника = Справочники.Этапы.Выбрать(Шаблон);
Пока ВыборкаСправочника.Следующий() Цикл
НоваяПодЗадача =
СоздатьПодзадачуНаСервере(ВыборкаСправочника, Основание); // создать
новый документ и записать его
ДобавитьСуществующуюПодзадачуНаСервере(Основание,
НоваяПодЗадача); // добавить новую задачу в объект (в таб. часть)
ЗаполнитьПоШаблонуРекурсивно(ВыборкаСправочника.Ссылка,
НоваяПодЗадача);
КонецЦикла;
КонецПроцедуры
// открыть текущую подзадачу в дереве в отдельной форме. Вызываеися из
Выбор и по команде Открыть
&НаКлиенте
Процедура ОткрытьПодзадачу()
137
ПодЗадача =
ЭтотОбъект.Элементы.ДеревоПодзадач.ТекущиеДанные.Подзадача;
Если ПодЗадача = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПодЗадача.Пустая() = Истина Тогда
Возврат;
КонецЕсли;
//ОткрытьЗначение(ПодЗадача);
П = Новый Структура;
П.Вставить("Ключ", ПодЗадача);
ОткрытьФорму("Документ.Задача.ФормаОбъекта", П); // открыть отдельную
форму редактирования
КонецПроцедуры
// открыть форму выбора списка задач
&НаКлиенте
Процедура ДобавитьСуществующуюПодзадачу()
ПодЗадача =
ЭтотОбъект.Элементы.ДеревоПодзадач.ТекущиеДанные.Подзадача;
П = Новый Структура;
П.Вставить("ПараметрТекущаяСтрока", ПодЗадача);
ОткрытьФорму("Документ.Задача.ФормаВыбора", П,
ЭтотОбъект.Элементы.ДеревоПодзадач);
// результат выбора см. в ОбработкаВыбора элемента формы
ДеревоПодзадач
КонецПроцедуры
// во внешней форме выбора завершили выбор существующей задачи - добавить
ее в дерево подзадач
&НаКлиенте
Процедура ДеревоПодзадачОбработкаВыбора(Элемент, ВыбранноеЗначение,
СтандартнаяОбработка)
Если Не Элемент.Имя = "ДеревоПодзадач" Тогда // если выбор был не из
дерева
Возврат;
Источник: https://baza.diplomsite.ru/previewfile/1865