Главная страница

Диплом. автоматизация приема и обработки заявок отделом техподдержки ооо "компьютерные бизнес системы"


Скачать 3.38 Mb.
Названиеавтоматизация приема и обработки заявок отделом техподдержки ооо "компьютерные бизнес системы"
АнкорДиплом
Дата18.05.2023
Размер3.38 Mb.
Формат файлаpdf
Имя файла2019-3.pdf
ТипРеферат
#1141515
страница9 из 11
1   2   3   4   5   6   7   8   9   10   11
Форма документа «Задача»
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ЗАКЛАДКА ПОДЗАДАЧИ
Если Параметры.Свойство("ЭтоНовый") Тогда // если из вызывающей формы был пердан признак что это новый документ
Если Параметры.ЭтоНовый Тогда // значит нажали кнопку Новая подзадача в тч Подзадачи родителя
Основание = Параметры.Родитель;
Если Не Основание.Пустая() Тогда
ОбщийСрв.ПриВводеНовойЗадачи(Объект,
Основание,
Ложь); // перезаполнить реквизиты и тч новой на основании родителя
// но не добавлять в тч Подзадачи
// далее см. в ПослеЗаписи этой задачи - добавить эту новую в тч Подзадачи родителя
// далее см. в ОбработкаОповещения родителя - спозиционироваться на вновь добавленной задче в дереве
КонецЕсли;
КонецЕсли;
КонецЕсли;
ФильтрПроведенные = 2; // первоначальное значение фильтра "Все"
ЗаполнитьДеревоПодзадач(); // первоначально создать дерево подзадач
КонецПроцедуры

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

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

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

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

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

127
Процедура ИсполнителиПередОкончаниемРедактирования(Элемент, НоваяСтрока,
ОтменаРедактирования, Отказ)
Если Элемент.ТекущиеДанные.Исполнитель.Пустая() И Не (НоваяСтрока и
ОтменаРедактирования) Тогда
Сообщить("Исполнитель должен быть обязательно выбран");
Отказ = Истина;
КонецЕсли;
Процентов = 0;
Для Каждого СтрокаИсполнитель Из Объект.Исполнители Цикл
Процентов = Процентов + СтрокаИсполнитель.Процент;
КонецЦикла;
Если Процентов > 100 Тогда
Сообщить("Суммарный процент исполнения не может превышать
100%");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
// выбор нового исполнителя - проверка что такого еще не было
&НаКлиенте
Процедура
ИсполнителиИсполнительОбработкаВыбора(Элемент,
ВыбранноеЗначение, СтандартнаяОбработка)
Если УжеЕстьВТаблице(ВыбранноеЗначение) Тогда
СтандартнаяОбработка = Ложь;
Сообщить("Этот исполнитель уже выбран");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция УжеЕстьВТаблице(Выбор)
МассивНайденныхСтрок
=
Объект.Исполнители.НайтиСтроки(Новый
Структура("Исполнитель",Выбор));
Возврат МассивНайденныхСтрок.Количество();
КонецФункции
//ввод новой строки в ТЧ Исполнители - запрет копирования (не может быть двух одинаковых строк)
&НаКлиенте
Процедура ИсполнителиПередНачаломДобавления(Элемент, Отказ, Копирование,
Родитель, Группа, Параметр)
Если Копирование = Истина Тогда
// запрет копирования
Отказ = Истина;

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

129
// по всем подзадачам табличной части
Для Каждого СтрокаПодЗадача Из Объект.Подзадачи Цикл
ЗаполнитьПодЗадачу(СтрокаПодЗадача, Голова); // вызвать для корня и далее для каждой строки дерева
КонецЦикла;
ЗначениеВРеквизитФормы(ДеревоОбъект, "ДеревоПодзадач");
КонецПроцедуры
// рекурсивное заполнение одной подзадачи
&НаСервере
Процедура ЗаполнитьПодЗадачу(СтрокаПодЗадача, Узел)
// фильтр по проведенным и не проведенным
Если (ФильтрПроведенные = 0) Или (ФильтрПроведенные = 1) Тогда
Если
Не
Число(СтрокаПодЗадача.ПодЗадача.Проведен)
=
ФильтрПроведенные Тогда
Возврат;
КонецЕсли;
КонецЕсли;
// // фильтр по теущему значению
//Если ФильтрЗначение <> Неопределено Тогда
//
Если ФильтрКолонка = "Наименование" Тогда
//
Если
Найти(СтрокаПодЗадача.ПодЗадача.Наименование,
ФильтрЗначение) = 0 Тогда
//
Возврат;
//
КонецЕсли;
//
ИначеЕсли ФильтрКолонка = "Комментарий" Тогда
//
Если Найти(СтрокаПодЗадача.Комментарий, ФильтрЗначение) =
0 Тогда
//
Возврат;
//
КонецЕсли;
//
ИначеЕсли ФильтрКолонка = "Описание" Тогда
//
Если
Найти(СтрокаПодЗадача.ПодЗадача.КраткоеОписание,
ФильтрЗначение) = 0 Тогда
//
Возврат;
//
КонецЕсли;
//
ИначеЕсли ФильтрКолонка = "Статус" Тогда
//
Если СтрокаПодЗадача.ПодЗадача.Статус <> ФильтрЗначение
Тогда
//
Возврат;
//
КонецЕсли;
//
ИначеЕсли ФильтрКолонка = "ДатаПостановки" Тогда
//
Если
НачалоДня(СтрокаПодЗадача.ПодЗадача.Дата)
<>
НачалоДня(ФильтрЗначение) Тогда

130
//
Возврат;
//
КонецЕсли;
//
ИначеЕсли ФильтрКолонка = "ДатаОжидаемая" Тогда
//
Если НачалоДня(СтрокаПодЗадача.ПодЗадача.ДатаОкончания)
<> НачалоДня(ФильтрЗначение) Тогда
//
Возврат;
//
КонецЕсли;
//
КонецЕсли;
//КонецЕсли;
// создать новый узел дерева
НовыйУзел = Узел.Строки.Добавить();
НовыйУзел.ПодЗадача
= СтрокаПодЗадача.ПодЗадача;
НовыйУзел.Выполнена
=
СтрокаПодЗадача.ПодЗадача.Проведен;
НовыйУзел.НомерВТабЧасти
= СтрокаПодЗадача.НомерСтроки;
НовыйУзел.Наименование
=
Строка(СтрокаПодЗадача.ПодЗадача.Номер)
+
"
"
+
СтрокаПодЗадача.ПодЗадача.Наименование;
НовыйУзел.Статус
= СтрокаПодЗадача.ПодЗадача.Статус;
НовыйУзел.Дата
=
СтрокаПодЗадача.ПодЗадача.Дата;
НовыйУзел.ДатаОжидаемая
=
СтрокаПодЗадача.ПодЗадача.ОжидаемаяДатаВыполнения;
НовыйУзел.Комментарий
=
СтрокаПодЗадача.Комментарий;
НовыйУзел.Пометка
=
УстановитьПометку(СтрокаПодЗадача.ПодЗадача);
//НовыйУзел.Картинка = БиблиотекаКартинок.ДебетКредит;
// теперь рекурсивно для каждого поддрева
Для Каждого СтрокаПодЗадача Из СтрокаПодЗадача.ПодЗадача.Подзадачи
Цикл
ЗаполнитьПодЗадачу(СтрокаПодЗадача, НовыйУзел);
КонецЦикла;
КонецПроцедуры // ЗаполнитьПодЗадачу
// признак выполнения задачи
Функция УстановитьПометку(Задача)
Возврат Число(Задача.Проведен);
//Если Задача.Проведен Тогда
//
Возврат 1;
//КонецЕсли;
//

131
//Для Каждого СтрокаПодЗадача Из Задача.Подзадачи Цикл
//
Если НЕ Задача.Проведен Тогда
//
Возврат 2;
//
КонецЕсли;
//КонецЦикла;
//
//Возврат 0;
КонецФункции
//пройти по массиву Путь (хранит ссылки на подзадачи) начиная с головы и вернуть
ИД последнего узла
&НаКлиенте
Функция СпозиционироватьсяВДеревеПодзадач(Вдереве, Путь, Й)
Если Путь.Количество() = 0 Тогда
Возврат 0;
КонецЕсли;
Ключ = Путь[Й];
Для Каждого ТекущаяСтрока Из Вдереве.ПолучитьЭлементы() Цикл
Если ТекущаяСтрока.Подзадача = Ключ Тогда
Если Й = 0 Тогда
Возврат ТекущаяСтрока.ПолучитьИдентификатор();
Иначе
Возврат СпозиционироватьсяВДеревеПодзадач(ТекущаяСтрока, Путь,
Й-1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецФункции
// перехват выбора (двойной щелчок) - открыть текущую подзадачу
&НаКлиенте
Процедура
ДеревоПодзадачВыбор(Элемент,
ВыбраннаяСтрока,
Поле,
СтандартнаяОбработка)
Если Не ((Поле.Имя = "ДеревоПодзадачКомментарий") Или (Поле.Имя =
"ДеревоПодзадачПодзадача")) Тогда // эти поля - для собственного редактирования
ОткрытьПодзадачу();
КонецЕсли;
КонецПроцедуры
// перехват стандартной команды Добавить - добавить в дерево существующую задачу
// открыть форму выбора и после выбора добавить выбранную задачу в дерево
&НаКлиенте

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

133
КонецПроцедуры
// перехват стандартного Изменения (изменение последовательность строк или комментарий)
&НаКлиенте
Процедура ДеревоПодзадачПриИзменении(Элемент)
СохранитьДеревоНаСервере();
П = Новый Структура;
Оповестить("Дерево",П, ЭтотОбъект); // оповестить об изменении, сделанном в этом форме, все остальные формы - пусть они перстаривают свое дерево
КонецПроцедуры
// по команде НоваяПодзадача
1   2   3   4   5   6   7   8   9   10   11


написать администратору сайта