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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
113
Отвественный = ПараметрыСеанса.глПользователь; // автор - текущий
пользователь
Статус = Справочники.Статусы.Новая; // новая задача
- статус Новая
ДокОснование = ОбъектКопирования.Ссылка; // Док основание - та
задача из котрой скопировали
Переписка.Очистить();
Исполнители.Очистить();
Подзадачи.Очистить();
Номенклатура.Очистить();
КонецПроцедуры
// перед удалением документа
Процедура ПередУдалением(Отказ)
// проверка на закрытый период
Если ОбщийСрв.ВЗакрытомПериоде(ЭтотОбъект) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) +
"Находится в закрытом периоде. Удаление невозможно");
Отказ = Истина;
Возврат;
КонецЕсли;
// проверка Проведена
Если (ЭтотОбъект.Проведен И
Константы.ЗапретПроведенных.Получить()) И Не
ПараметрыСеанса.глЗаписьВедетИсполнитель Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "Уже
выполнена. Удаление невозможно");
Отказ = Истина;
Возврат;
КонецЕсли;
// проверка прав
Если Не ОбщийСрв.ПроверкаПрав(Автор,
ПараметрыСеанса.глПользователь) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "Нет
прав удалять чужой документ");
Отказ = Истина;
Возврат;
КонецЕсли;
// удалить вхождение этого документа в табличную часть Подзадачи
любых остальных документов
114
ТЗРодителей = СформироватьСписокРодителей(ЭтотОбъект.Ссылка); //
сформировать ТЗ всех документов, в которые входит удаляемая
Для Каждого СтрокаРодитель Из ТЗРодителей Цикл // для каждого
родителя
УдалитьПодзадачу(СтрокаРодитель.Ссылка, ЭтотОбъект.Ссылка);
// удалить текущую(удяляемую) задачу из родителя
КонецЦикла
КонецПроцедуры
// удалить ЗадачаРебенок из табличной части Подзадачи у ЗадачаРодитель
Процедура УдалитьПодзадачу(ЗадачаРодитель, ЗадачаРебенок)
Если ЗадачаРодитель.Пустая() Тогда
Возврат;
КонецЕсли;
ЗадачаРодительОбъект = ЗадачаРодитель.ПолучитьОбъект();
СтруктураОтбора = Новый Структура("Подзадача", ЗадачаРебенок);
МассивУдаляемыхСтрок =
ЗадачаРодительОбъект.Подзадачи.НайтиСтроки(СтруктураОтбора);
Для Каждого ЭлементМассива Из МассивУдаляемыхСтрок Цикл
ЗадачаРодительОбъект.Подзадачи.Удалить(ЭлементМассива);
КонецЦикла;
ЗадачаРодительОбъект.Записать();
КонецПроцедуры
// сформироват ТЗ документов, в которые ПодЗадачаРебенок входит в таб часть
Подзадачи ( вявном виде, не через рекурсию)
Функция СформироватьСписокРодителей(ПодЗадачаРебенок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Задачи.Ссылка
|ИЗ
| Документ.Задача.Подзадачи КАК ЗадачаПодзадачи
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Задача КАК Задачи
| ПО ЗадачаПодзадачи.Ссылка = Задачи.Ссылка
|ГДЕ
| ЗадачаПодзадачи.Подзадача = &ПодзадачаРебенок
|";
Запрос.УстановитьПараметр("ПодзадачаРебенок", ПодзадачаРебенок);
115
РезультатЗапроса = Запрос.Выполнить();
ТЗ = РезультатЗапроса.Выгрузить();
Возврат ТЗ;
КонецФункции
// провести все непроведенные подзадачи из ЗадачаОбъект и провести ее саму
Процедура ВыполнитьВсеПодзадачиПринудительно(ЗадачаОбъект)
Для Каждого ТекСтрокаПодзадача Из ЗадачаОбъект.Подзадачи Цикл // по
всем строкам таб. части Подзадачи
Если ТекСтрокаПодзадача.Подзадача.Проведен <> Истина Тогда
// если не была проведена
ВыполнитьВсеПодзадачиПринудительно(ТекСтрокаПодзадача.Подзадача
.ПолучитьОбъект()); // провести все ее подзадачи
ТекСтрокаПодзадача.Подзадача.ПолучитьОбъект().Записать(РежимЗапис
иДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); //
провести ее саму
Сообщить("Выполнена подзадача " +
ОбщийСрв.ПредставлениеЗадачи(ТекСтрокаПодзадача.Подзадача));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// проверить, есть ли среди ТЧ Исполнители записи без отметки исполнения
Функция ПроверитьИсполнение()
Исполненно = Истина;
Для Каждого ТекСтрокаИсполнитель Из Исполнители Цикл
Если ТекСтрокаИсполнитель.ДатаИсполнения =
Дата(01,01,0001,00,00,00) Тогда
Сообщить("Задача не может быть выполнена, так как
исполнитель \" + ТекСтрокаИсполнитель.Исполнитель +
"\ не проставил отметку исполнения");
Исполненно = Ложь;
КонецЕсли;
Если Не ТекСтрокаИсполнитель.РезультатИсполнения.Пустая()
Тогда
Если Не ТекСтрокаИсполнитель.РезультатИсполнения.Успех
Тогда
116
Сообщить("Задача не может быть выполнена, так как
исполнитель \" + ТекСтрокаИсполнитель.Исполнитель +
"\ проставил отрицательную отметку
исполнения");
Исполненно = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Исполненно;
КонецФункции
// действия при проведении документа
Функция ПриПроведении(Отказ)
// проверка того, что все исполнители проставили отметку об исполнении
Если Константы.ПроверятьИсполнениеПриВыполнении.Получить()
Тогда // общая константа
Если ОбщийСрв.ПолучитьКонстанту(ТекущаяДата(),
ОбщийСрв.ПолучитьГлПользователь(),
"ПроверятьИсполнениеПриВыполнении") Тогда // настройка пользователя
Если Не ПроверитьИсполнение() Тогда
Отказ = Истина;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// проверка того, что все подзадачи проведены
ЕстьНеВыполненыеПодзадачи = Ложь;
Для Каждого ТекСтрокаПодзадача Из Подзадачи Цикл
Если ТекСтрокаПодзадача.Подзадача.Проведен <> Истина Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "
имеет невыполненные подзадачи");
ЕстьНеВыполненыеПодзадачи = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьНеВыполненыеПодзадачи = Истина Тогда
Если (Константы.ПринудительноВыполнятьПодзадачи.Получить())
И // общая константа
(ОбщийСрв.ПолучитьКонстанту(ТекущаяДата(),
ОбщийСрв.ПолучитьГлПользователь(),
"ПринудительноВыполнятьПодзадачи")) Тогда // настройка пользователя
117
Сообщить("Подзадачи будут выполнены
принудительно...");
ВыполнитьВсеПодзадачиПринудительно(ЭтотОбъект);
// автоматически провести все подзадачи данной задачи
Иначе // нельзя автоматически выполнять подзадачи
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "
не может быть выполнена");
Отказ = Истина;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Истина
КонецФункции
// обработка проведения
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если Не ПриПроведении(Отказ) Тогда // проверить проведение подзадач
Возврат;
КонецЕсли;
// регистр ИспользованниеНоменклатуры
Движения.ИспользованиеНоменклатуры.Записывать = Истина;
Для Каждого ТекСтрокаНоменклатура Из Номенклатура Цикл
Если ТекСтрокаНоменклатура.Наличие Тогда // если в ТЧ стоит
признак наличия
Продолжить;
КонецЕсли;
Если НЕ
ТекСтрокаНоменклатура.Номенклатура.ВидНоменклатуры.Списывается Тогда
// если номенклатуру не надо списывать
Продолжить;
КонецЕсли;
Движение = Движения.ИспользованиеНоменклатуры.Добавить();
Движение.Период = Дата;
Движение.Номенклатура =
ТекСтрокаНоменклатура.Номенклатура;
Движение.Задача = ЭтотОбъект.Ссылка;
Движение.Количество = ТекСтрокаНоменклатура.Количество;
Движение.Сумма =
ТекСтрокаНоменклатура.Сумма;
КонецЦикла;
КонецПроцедуры
Источник: https://baza.diplomsite.ru/previewfile/1865