Материал: Автоматизация приема и обработки заявок отделом техподдержки ООО "Компьютерные бизнес-системы"

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