121
// проверка прав
Если Не
ОбщийСрв.ПроверкаПрав(Ав
тор,
ПараметрыСеанса.глПользов
атель) Тогда
Сообщить(ОбщийСр
в.ПредставлениеЗадачи(Этот
Объект) + "Нет прав удалять
чужой документ");
Отказ =
Истина;
Возврат;
КонецЕсли;
// удалить вхождение
этого документа в табличную
часть Подзадачи любых
остальных документов
ТЗРодителей =
СформироватьСписокРодите
лей(ЭтотОбъект.Ссылка); //
сформировать ТЗ всех
документов, в которые
входит удаляемая
Для Каждого
СтрокаРодитель Из
ТЗРодителей Цикл // для
каждого родителя
УдалитьПодзадачу(С
трокаРодитель.Ссылка,
ЭтотОбъект.Ссылка); //
удалить
текущую(удяляемую) задачу
из родителя
КонецЦикла
КонецПроцедуры
// удалить ЗадачаРебенок из
табличной части Подзадачи у
ЗадачаРодитель
Процедура
УдалитьПодзадачу(ЗадачаРо
дитель, ЗадачаРебенок)
Если
ЗадачаРодитель.Пустая()
Тогда
Возврат;
КонецЕсли;
ЗадачаРодительОбъе
кт =
ЗадачаРодитель.ПолучитьОб
ъект();
СтруктураОтбора =
Новый
Структура("Подзадача",
ЗадачаРебенок);
МассивУдаляемыхСт
рок =
ЗадачаРодительОбъект.Подза
дачи.НайтиСтроки(Структур
аОтбора);
Для Каждого
ЭлементМассива Из
МассивУдаляемыхСтрок
Цикл
ЗадачаРодительОбъе
кт.Подзадачи.Удалить(Элеме
нтМассива);
КонецЦикла;
ЗадачаРодительОбъе
кт.Записать();
КонецПроцедуры
// сформироват ТЗ
документов, в которые
ПодЗадачаРебенок входит в
таб часть Подзадачи ( вявном
виде, не через рекурсию)
Функция
СформироватьСписокРодите
лей(ПодЗадачаРебенок)
Запрос = Новый
Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|
Задачи.Ссылка
|ИЗ
|
Документ.Задача.По
дзадачи КАК
ЗадачаПодзадачи
|
ЛЕВОЕ
СОЕДИНЕНИЕ
Документ.Задача КАК Задачи
| ПО
ЗадачаПодзадачи.Ссылка =
Задачи.Ссылка
|ГДЕ
|
ЗадачаПодзадачи.По
дзадача =
&ПодзадачаРебенок
|";
Запрос.УстановитьП
араметр("ПодзадачаРебенок",
ПодзадачаРебенок);
РезультатЗапроса =
Запрос.Выполнить();
ТЗ =
РезультатЗапроса.Выгрузить(
);
Возврат ТЗ;
КонецФункции
// провести все
непроведенные подзадачи из
ЗадачаОбъект и провести ее
саму
Процедура
ВыполнитьВсеПодзадачиПри
нудительно(ЗадачаОбъект)
Для Каждого
ТекСтрокаПодзадача Из
ЗадачаОбъект.Подзадачи
Цикл // по всем строкам таб.
части Подзадачи
Если
ТекСтрокаПодзадача.Подзад
ача.Проведен <> Истина
Тогда // если не была
проведена
ВыполнитьВсеПодза
дачиПринудительно(ТекСтро
каПодзадача.Подзадача.Полу
читьОбъект()); // провести все
ее подзадачи
ТекСтрокаПодзадача
.Подзадача.ПолучитьОбъект(
).Записать(РежимЗаписиДоку
мента.Проведение,
РежимПроведенияДокумента
.Неоперативный); // провести
ее саму
Сообщить("Выполне
на подзадача " +
ОбщийСрв.ПредставлениеЗа
дачи(ТекСтрокаПодзадача.П
одзадача));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// проверить, есть ли среди ТЧ
Исполнители записи без
отметки исполнения
Функция
ПроверитьИсполнение()
Исполненно =
Истина;