88
каз, Копирование, Родитель, Группа,
Параметр)
Отказ = Истина;
Если Не Копирование
Тогда // копирование невозможно
ДобавитьСуще-
ствующуюПодзадачу();
КонецЕсли;
КонецПроцедуры
// перехват стандартной команды
Изменить - открыть подзадачу
&НаКлиенте
Процедура ДеревоПодзадачПеред-
НачаломИзменения(Элемент, Отказ)
Если Не ((Эле-
мент.ТекущийЭлемент.Имя = "Дере-
воПодзадачКомментарий") Или
(Элемент.ТекущийЭлемент.Имя =
"ДеревоПодзадачПодзадача")) Тогда
// эти поля - для собственного редак-
тирования
Отказ = Истина;
ОткрытьПодза-
дачу();
КонецЕсли;
КонецПроцедуры
// перехват стандартной команды
Удалить
&НаКлиенте
Процедура ДеревоПодзадачПеред-
Удалением(Элемент, Отказ)
УзелРодитель = Элемен-
ты.ДеревоПодзадач.ТекущиеДанные
.ПолучитьРодителя(); // получить
узел-родитель
Если УзелРодитель =
Неопределено Тогда // если нет ро-
дителя - то значит пытаются удалить
корень
Отказ = Истина;
Возврат;
КонецЕсли;
ПутьВДереве = Полу-
читьПутьВДереве(УзелРодитель);
//запомнить путь до текущего узла
УдалитьПодзадачуНаСер-
вере(УзелРодитель.Подзадача, Эле-
мен-
ты.ДеревоПодзадач.ТекущиеДанные
.ПодЗадача); // удалить из таб части
ЗаполнитьДеревоПодза-
дач(); // перестроить дерево
подзадач
Элемен-
ты.ДеревоПодзадач.ТекущаяСтрока
= СпозиционироватьсяВДеревеПод-
задач(ДеревоПодзадач, ПутьВДере-
ве, ПутьВДереве.Количество()-1); //
спозиционироваться на добавленной
задаче
Оповестить("Дерево",
Новый Структура,ЭтотОбъект); //
всем формам послать оповещение о
проведенном изменениии - пусть
они перстаивают свое дерево
Отказ = Истина; // уже все
сделано
КонецПроцедуры
// перехват стандартного Изменения
(изменение последовательность
строк или комментарий)
&НаКлиенте
Процедура ДеревоПодзадачПриИз-
менении(Элемент)
СохранитьДеревоНаСер-
вере();
П = Новый Структура;
Оповестить("Дерево",П,
ЭтотОбъект); // оповестить об изме-
нении, сделанном в этом форме, все
остальные формы - пусть они пер-
старивают свое дерево
КонецПроцедуры
// по команде НоваяПодзадача
&НаКлиенте
Процедура ДеревоНоваяПодзада-
ча(Команда)
ЭтаЗадача = Элемен-
ты.ДеревоПодзадач.ТекущиеДанные
.ПодЗадача;
//// вариант программного
создания и записи нового документа
//НоваяПодЗадача = Со-
здатьПодзадачуНаСервере(); // со-
здать новый документ и записать его
//ПутьВДереве = Полу-
читьПутьВДере-
ве(Элементы.ДеревоПодзадач.Теку
щиеДанные, НоваяПодЗадача);
//сформировать массив подзадач от
текущего узла до корня
//ДобавитьСуществующу
юПодзадачуНаСервере(ЭтаЗадача,
НоваяПодЗадача); // добавить новую
задачу в объект (в таб. часть)
//ЭтаФорма.Прочитать();
// перечитать данные фор-
мы
//ЗаполнитьДеревоПодзад
ач(); // перстроить дерево под-
задач
//СпозиционироватьсяВДе
ревеПодзадач(ДеревоПодзадач,
ПутьВДереве, ПутьВДере-
ве.Количество()-1); // спозициониро-
ваться на добавленной задаче
//П = Новый Структура;
//П.Вставить("Ключ",
НоваяПодЗадача);
//ОткрытьФорму("Докуме
нт.Задача.ФормаОбъекта", П); //
открыть отдельную форму редакти-
рования новой задачи
Если Об-
щийСрв.ВЗакрытомПериоде(ЭтаЗад
ача) Тогда
Сооб-
щить(ОбщийСрв.ПредставлениеЗада
чи(ЭтаЗадача) + "Находится в за-
крытом периоде. Редактирование
невозможно");
Возврат;
КонецЕсли;
Если Не Об-
щийСрв.ПроверкаПрав(ОбщийСрв.
ПолучитьРеквизитЗадачи(ЭтаЗадача,
"Автор"), Об-
щийСрв.ПолучитьГлПользователь())
Тогда
Сооб-
щить(ОбщийСрв.ПредставлениеЗада
чи(ЭтаЗадача) + "Нет прав редакти-
ровать чужой документ");
Возврат;
КонецЕсли;
Если (Об-
щийСрв.ПолучитьРеквизитЗадачи(Э
таЗадача, "Проведен")) И
(Об-
щийСрв.обПолучитьКонстанту("Зап
ретПроведенных")) Тогда
Сооб-
щить(ОбщийСрв.ПредставлениеЗада
чи(ЭтаЗадача) + "Уже выполнена.
Редактирование невозможно");
Возврат;
КонецЕсли;
// вариант открытия фор-
мы нового пустого документа
П = Новый Структура;
П.Вставить("ЭтоНовый",
Истина);// признак того что форма
открывается для нового документа
П.Вставить("Родитель",
ЭтаЗадача);
ОткрытьФор-
му("Документ.Задача.ФормаОбъекта
", П, ЭтотОбъект); // открыть от-
дельную форму редактирования
новой задачи
// далее см. в ПриСозда-
нииНаСервере - заполнение рекви-
зитов и таб. частей нового докумен-
та на основании этого
// далее см. в ПослеЗаписи
- запись новой задачи в тч Подзада-
чи родительской задачи
// далее см. в ОбработкаО-
повещения - в родительской задаче в
дереве спозиционироваться на новой
задаче
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДеревоПоШ-
аблону(Шаблон)
ЭтаЗадача = Элемен-
ты.ДеревоПодзадач.ТекущиеДанные
.ПодЗадача;
Если Об-
щийСрв.ВЗакрытомПериоде(ЭтаЗад
ача) Тогда
Сооб-
щить(ОбщийСрв.ПредставлениеЗада
чи(ЭтаЗадача) + "Находится в за-
крытом периоде. Редактирование
невозможно");
Возврат;
КонецЕсли;
Если Не Об-
щийСрв.ПроверкаПрав(ОбщийСрв.