Файл: автоматизация приема и обработки заявок отделом техподдержки ооо "компьютерные бизнес системы".pdf
Добавлен: 30.11.2023
Просмотров: 326
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
116
Для Каждого ТекСтрокаПодзадача Из ЗадачаОбъект.Подзадачи Цикл // по всем строкам таб. части Подзадачи
Если ТекСтрокаПодзадача.Подзадача.Проведен <> Истина Тогда
// если не была проведена
ВыполнитьВсеПодзадачиПринудительно(ТекСтрокаПодзадача.Подзадача.По лучитьОбъект()); // провести все ее подзадачи
ТекСтрокаПодзадача.Подзадача.ПолучитьОбъект().Записать(РежимЗаписиД
окумента.Проведение, РежимПроведенияДокумента.Неоперативный); // провести ее саму
Сообщить("Выполнена подзадача "
+
ОбщийСрв.ПредставлениеЗадачи(ТекСтрокаПодзадача.Подзадача));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// проверить, есть ли среди ТЧ Исполнители записи без отметки исполнения
Функция ПроверитьИсполнение()
Исполненно = Истина;
Для Каждого ТекСтрокаИсполнитель Из Исполнители Цикл
Если
ТекСтрокаИсполнитель.ДатаИсполнения
=
Дата(01,01,0001,00,00,00) Тогда
Сообщить("Задача не может быть выполнена, так как исполнитель \" + ТекСтрокаИсполнитель.Исполнитель +
"\ не проставил отметку исполнения");
Исполненно = Ложь;
КонецЕсли;
Если Не ТекСтрокаИсполнитель.РезультатИсполнения.Пустая() Тогда
Если Не ТекСтрокаИсполнитель.РезультатИсполнения.Успех
Тогда
Сообщить("Задача не может быть выполнена, так как исполнитель \" + ТекСтрокаИсполнитель.Исполнитель +
"\ проставил отрицательную отметку исполнения");
Исполненно = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Исполненно;
КонецФункции
// действия при проведении документа
Функция ПриПроведении(Отказ)
117
// проверка того, что все исполнители проставили отметку об исполнении
Если Константы.ПроверятьИсполнениеПриВыполнении.Получить() Тогда // общая константа
Если
ОбщийСрв.ПолучитьКонстанту(ТекущаяДата(),
ОбщийСрв.ПолучитьГлПользователь(), "ПроверятьИсполнениеПриВыполнении")
Тогда // настройка пользователя
Если Не ПроверитьИсполнение() Тогда
Отказ = Истина;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// проверка того, что все подзадачи проведены
ЕстьНеВыполненыеПодзадачи = Ложь;
Для Каждого ТекСтрокаПодзадача Из Подзадачи Цикл
Если ТекСтрокаПодзадача.Подзадача.Проведен <> Истина Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + " имеет невыполненные подзадачи");
ЕстьНеВыполненыеПодзадачи = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьНеВыполненыеПодзадачи = Истина Тогда
Если (Константы.ПринудительноВыполнятьПодзадачи.Получить()) И
// общая константа
(ОбщийСрв.ПолучитьКонстанту(ТекущаяДата(),
ОбщийСрв.ПолучитьГлПользователь(),
"ПринудительноВыполнятьПодзадачи"))
Тогда // настройка пользователя
Сообщить("Подзадачи будут выполнены принудительно...");
ВыполнитьВсеПодзадачиПринудительно(ЭтотОбъект); // автоматически провести все подзадачи данной задачи
Иначе // нельзя автоматически выполнять подзадачи
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + " не может быть выполнена");
Отказ = Истина;
Возврат Ложь;
КонецЕсли;
КонецЕсли;
Возврат Истина
КонецФункции
// обработка проведения
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если Не ПриПроведении(Отказ) Тогда // проверить проведение подзадач
118
Возврат;
КонецЕсли;
// регистр ИспользованниеНоменклатуры
Движения.ИспользованиеНоменклатуры.Записывать = Истина;
Для Каждого ТекСтрокаНоменклатура Из Номенклатура Цикл
Если ТекСтрокаНоменклатура.Наличие Тогда // если в ТЧ стоит признак наличия
Продолжить;
КонецЕсли;
Если
НЕ
ТекСтрокаНоменклатура.Номенклатура.ВидНоменклатуры.Списывается Тогда // если номенклатуру не надо списывать
Продолжить;
КонецЕсли;
Движение = Движения.ИспользованиеНоменклатуры.Добавить();
Движение.Период = Дата;
Движение.Номенклатура
=
ТекСтрокаНоменклатура.Номенклатура;
Движение.Задача
= ЭтотОбъект.Ссылка;
Движение.Количество = ТекСтрокаНоменклатура.Количество;
Движение.Сумма
= ТекСтрокаНоменклатура.Сумма;
КонецЦикла;
КонецПроцедуры
// обработка распроведения
Процедура ОбработкаУдаленияПроведения(Отказ)
Если Не ОтменитьПроведениеРодителей(ЭтотОбъект.Ссылка) Тогда // отменитиь проведение задач-родителей
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
// отменить проведение всех родителей ДокСсылкаРебенок
Функция ОтменитьПроведениеРодителей(ДокСсылкаРебенок)
МассивОтменяемых
=
ОбщийСрв.СформироватьСписокОтменяемых(ДокСсылкаРебенок);
// сформировать массив распроводимых документов
Если МассивОтменяемых.Количество() Тогда // если есть хоть один - сообщить
Сообщить
("Отмена выполнения "
+
ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект)
+ " приводит к отмене выполнения задач-родителей...");
119
КонецЕсли;
Для Каждого СтрокаОтменяемый Из МассивОтменяемых Цикл // для каждого документа из распроводимых
Если
ОбщийСрв.ВЗакрытомПериоде(СтрокаОтменяемый.Значение)
Тогда // если находится в закрытом периоде
Сообщить("Отмена выполенния "
+
ОбщийСрв.ПредставлениеЗадачи(ДокСсылкаРебенок)
+
" приводит к отмене выполенния "
+
ОбщийСрв.ПредставлениеЗадачи(СтрокаОтменяемый.Значение)
+ ", находящейся в закрытом периоде. Отмена не может быть выполнена");
Возврат Ложь;
КонецЕсли;
Если
Не
ОбщийСрв.ПроверкаПрав(СтрокаОтменяемый.Значение.Автор,
ПараметрыСеанса.глПользователь) Тогда // проверка прав
Сообщить("Отмена выполенния "
+
ОбщийСрв.ПредставлениеЗадачи(ДокСсылкаРебенок)
+
" приводит к отмене выполенния "
+
ОбщийСрв.ПредставлениеЗадачи(СтрокаОтменяемый.Значение)
+ ", на редактирование которого у Вас нет прав.
Отмена не может быть выполнена");
Возврат Ложь;
КонецЕсли;
КонецЦикла;
// распровести каждый
Для Каждого СтрокаОтменяемый Из МассивОтменяемых Цикл
Если СтрокаОтменяемый.Значение.ПолучитьОбъект().Проведен Тогда
СтрокаОтменяемый.Значение.ПолучитьОбъект().Записать(РежимЗаписиДок умента.ОтменаПроведения);
Сообщить("Отменено выполнение родительской "
+
ОбщийСрв.ПредставлениеЗадачи(СтрокаОтменяемый.Значение));
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
// перед любой записью (включая проведение и распроведение) - проверка
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Головная = ЭтоГоловная(); // установить признак - головная или нет
Если ОбщийСрв.ВЗакрытомПериоде(ЭтотОбъект) Тогда // провера на закрытый период
120
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект)
+
"Находится в закрытом периоде. Редактирование невозможно");
Отказ = Истина;
Возврат;
КонецЕсли;
// проверка того что проведен (тогда редактирование запрещено)
Если Не (РежимЗаписи = РежимЗаписиДокумента.Проведение Или
РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения) Тогда
Если
(ЭтотОбъект.Проведен
И
Константы.ЗапретПроведенных.Получить())
И
Не
ПараметрыСеанса.глЗаписьВедетИсполнитель
И Не ПараметрыСеанса.ИдетОбменДанными Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект)
+
"Уже выполнена. Редактирование невозможно");
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
// проверка прав
Если
Не
ОбщийСрв.ПроверкаПрав(Автор,
ПараметрыСеанса.глПользователь) Тогда
Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "Нет прав редактировать чужой документ");
Отказ = Истина;
Возврат;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
РеальнаяДатаВыполнения = ТекущаяДата(); // дата реального выполнения - дата проведения
Если
Константы.УстанавливатьЗавершенаУспешно.Получить()
=
Истина Тогда
Статус = Справочники.Статусы.ЗавершенаУспешно; // статус - успешно
КонецЕсли;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
РеальнаяДатаВыполнения = 0; // если распровели - значит нет реальной даты завершения
Статус = Справочники.Статусы.ПустаяСсылка(); // и нет статуса
КонецЕсли;
КонецПроцедуры
121
// проверка на то, что данная задача не входит ни в одну другую в качетсве подзадачи
Функция ЭтоГоловная()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|
ЗадачаПодзадачи.Подзадача
|ИЗ
|
Документ.Задача.Подзадачи КАК ЗадачаПодзадачи
|
ГДЕ ЗадачаПодзадачи.Подзадача
= &ИскомаяЗадача
|";
Запрос.УстановитьПараметр("ИскомаяЗадача", ЭтотОбъект.Ссылка);
Результат = Запрос.Выполнить();
Возврат (Результат.Выбрать().Количество() = 0);
КонецФункции
1 2 3 4 5 6 7 8 9 10 11
Форма документа «Задача»
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ЗАКЛАДКА ПОДЗАДАЧИ
Если Параметры.Свойство("ЭтоНовый") Тогда // если из вызывающей формы был пердан признак что это новый документ
Если Параметры.ЭтоНовый Тогда // значит нажали кнопку Новая подзадача в тч Подзадачи родителя
Основание = Параметры.Родитель;
Если Не Основание.Пустая() Тогда
ОбщийСрв.ПриВводеНовойЗадачи(Объект,
Основание,
Ложь); // перезаполнить реквизиты и тч новой на основании родителя
// но не добавлять в тч Подзадачи
// далее см. в ПослеЗаписи этой задачи - добавить эту новую в тч Подзадачи родителя
// далее см. в ОбработкаОповещения родителя - спозиционироваться на вновь добавленной задче в дереве
КонецЕсли;
КонецЕсли;
КонецЕсли;
ФильтрПроведенные = 2; // первоначальное значение фильтра "Все"
ЗаполнитьДеревоПодзадач(); // первоначально создать дерево подзадач
КонецПроцедуры
122
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// если нет прав - то форма только просмотр
Если
Не
ОбщийСрв.ПроверкаПрав(Объект.Автор,
ОбщийСрв.ПолучитьГлПользователь()) Тогда
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
// если проведена и запрет проведенных
Если
Объект.Проведен
И
ОбщийСрв.обПолучитьКонстанту("ЗапретПроведенных") Тогда
ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;
// ЗАКЛАДКА ИСПОЛНИТЕЛИ
// если пользователь является исполнителем этого документа и он открыл документ - то считается что он с ним ознакомлен -
// надо проставить отметку об ознакомлении
ИсполнительОзнакомлен = Ложь;
Для Каждого СтрокаИсполнитель Из Объект.Исполнители Цикл
Если
(СтрокаИсполнитель.Исполнитель
=
ОбщийСрв.ПолучитьГлПользователь()) И (СтрокаИсполнитель.Ознакомлен = глПустаяДата) Тогда
СтрокаИсполнитель.Ознакомлен
=
ТекущаяДата();
// простановка даты ознакомления - и есть признак ознакомления
ИсполнительОзнакомлен = Истина;
ОбщийСрв.ЗаписьВедетИсполнитель(Истина); // признак того что дальнейшая запись будет вестись исполнителем
Прервать;
КонецЕсли;
КонецЦикла;
Если ИсполнительОзнакомлен = Истина Тогда // если была простановка даты ознакомления
П = Новый Структура;
П.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);
Записать(П);
КонецЕсли;
// ЗАКЛАДКА ПОДЗАДАЧИ
ВывестиПанельПодзадач(); // первоначальное заполнение дерева подзадач
//
РодительскаяЗадача
=
ОбщийСрв.НайтиРодительскуюЗадачу(Объект.Ссылка);
КонецПроцедуры
// реакция на команду формы Записать и закрыть
&НаКлиенте
123
Процедура ФормаЗаписатьИЗакрыть(Команда)
Записать();
Закрыть();
КонецПроцедуры
// реакция на команду формы Распровести
&НаКлиенте
Процедура ФормаРаспровести(Команда)
П = Новый Структура;
П.Вставить("РежимЗаписи", РежимЗаписиДокумента.ОтменаПроведения);
Записать(П);
КонецПроцедуры
// реакция на окончание выбора в других формах
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
// результат пришел из формы Исполнение исполнителем
Если
ИсточникВыбора.ИмяФормы
=
"Документ.Задача.Форма.ФормаИсполнения" Тогда
ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.РезультатИсполнения
= ВыбранноеЗначение.Получить(0).Значение;
ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.ДатаИсполнения
= ВыбранноеЗначение.Получить(1).Значение;
ЭтотОбъект.Элементы.Исполнители.ТекущиеДанные.Комментарий
= ВыбранноеЗначение.Получить(2).Значение;
ОбщийСрв.ЗаписьВедетИсполнитель(Истина); // флаг того, что записывать можно, даже если нет прав
П = Новый Структура;
П.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);
ЭтотОбъект.Записать(П);
КонецЕсли;
// результат пришел из формы выбора справочника Этапы
Если ИсточникВыбора.ИмяФормы = "Справочник.Этапы.ФормаВыбора"
Тогда
ЗаполнитьДеревоПоШаблону(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
// проверить возможность записи документа из формы
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
124
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение
Тогда
Отказ = Не ПроверкаВозможностиПроведения();
КонецЕсли;
Если
ПараметрыЗаписи.РежимЗаписи
=
РежимЗаписиДокумента.ОтменаПроведения Тогда
Отказ = Не ПроверкаВозможностиРасПроведения();
КонецЕсли
КонецПроцедуры
&НаКлиенте
Функция ПроверкаВозможностиРасПроведения(ЭтаЗадача = Неопределено)
Если ЭтаЗадача = Неопределено Тогда
ЭтаЗадача = Объект.Ссылка;
КонецЕсли;
// задать пользователю вопрос
//МассивОтменяемых
=
ОбщийСрв.СформироватьСписокОтменяемых(ЭтаЗадача);
//Если МассивОтменяемых.Количество() Тогда
//
Если
Вопрос("Отмена выполнения задачи "
+
ОбщийСрв.ПредставлениеЗадачи(ЭтаЗадача)
//
+ " приведет к отмене выполнения задач-родителей. Все равно отменить?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
//
Возврат Ложь;
//
КонецЕсли;
//КонецЕсли;
Возврат Истина;
КонецФункции
Функция ПроверкаВозможностиПроведения(ЭтаЗадача = Неопределено)
Если ЭтаЗадача = Неопределено Тогда
ЭтаЗадача = Объект.Ссылка;
КонецЕсли;
// задать пользователю вопрос
Возврат Истина;
КонецФункции