Диплом: Автоматизация материально-технического учета ООО «ПрофИнст»

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
127
// проверка - задача ВыбранноеЗначение уже есть в списке подзадач
ВеткаДерева на одном уровне
&НаКлиенте
Функция УжеЕстьВСпискеПодзадач(ВеткаДерева, ВыбранноеЗначение)
Для Каждого Строка Из ВеткаДерева.ПолучитьЭлементы() Цикл
Если Строка.Подзадача = ВыбранноеЗначение Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
//сформировать массив подзадач от текущего узла до корня
&НаКлиенте
Функция ПолучитьПутьВДереве(УзелНачало, ВыбранноеЗначение =
Неопределено )
ПутьВДереве = Новый Массив;
Если Не ВыбранноеЗначение = Неопределено Тогда // включать
ВыбранноеЗначение в массив или нет
ПутьВДереве.Добавить(ВыбранноеЗначение);
КонецЕсли;
Если УзелНачало = Неопределено Тогда
Возврат ПутьВДереве;
КонецЕсли;
// рекурсивно для каждого уровня
ПолучитьПутьВДеревеРекурсивно(УзелНачало.ПолучитьИдентифи
катор(), ПутьВДереве);
Возврат ПутьВДереве;
КонецФункции
//сформировать массив подзадач от текущего узла до корня
&НаСервере
Процедура ПолучитьПутьВДеревеРекурсивно(А, ПутьВДереве)
СтрокаДереваФормы =
ДеревоПодзадач.НайтиПоИдентификатору(А);
128
ПутьВДереве.Добавить(СтрокаДереваФормы.ПодЗадача);
Если СтрокаДереваФормы.Подзадача = Объект.Ссылка Тогда //
если это корень - то закончить рекурсию
Возврат;
КонецЕсли;
Родитель = СтрокаДереваФормы.ПолучитьРодителя();
Если Родитель = Неопределено Тогда
Возврат;
КонецЕсли;
ПолучитьПутьВДеревеРекурсивно(СтрокаДереваФормы.ПолучитьРодителя().П
олучитьИдентификатор(), ПутьВДереве)
КонецПроцедуры
// в объект ВКакуюЗадачу добавить ЧтоДобавлять
&НаСервере
Процедура
ДобавитьСуществующуюПодзадачуНаСервере(ВКакуюЗадачу, ЧтоДобавлять)
ВКакуюЗадачуОбъект = ВКакуюЗадачу.ПолучитьОбъект();
ЧтоДобавлятьОбъект = ЧтоДобавлять.ПолучитьОбъект();
НоваяСтрокаПодзадача =
ВКакуюЗадачуОбъект.Подзадачи.Добавить();
НоваяСтрокаПодзадача.ПодЗадача = ЧтоДобавлять;
ВКакуюЗадачуОбъект.Записать(); // просто записать
// если добавляемая была головная - то больше она не головная
Если ЧтоДобавлять.Головная Тогда
ЧтоДобавлятьОбъект.Головная = Ложь;
ОбщийСрв.ЗаписьВедетИсполнитель(Истина);
ЧтоДобавлятьОбъект.Записать();
ОбщийСрв.ЗаписьВедетИсполнитель(Ложь);
КонецЕсли;
Если (ВКакуюЗадачу.Проведен) И (ЧтоДобавлять.Проведен = Ложь)
Тогда // если эта задача была проведена, а новая нет - то распроводим эту
Сообщить("Выполнение задачи-родителя " +
ОбщийСрв.ПредставлениеЗадачи(ВКакуюЗадачу) + " будет отменено");
129
ВКакуюЗадачуОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведе
ния, РежимПроведенияДокумента.Неоперативный);
КонецЕсли;
КонецПроцедуры
// удалить Подзадача из объекта Задача (в БД)
&НаСервере
Процедура УдалитьПодзадачуНаСервере(Задача, Подзадача)
ЗадачаОбъект = Задача.ПолучитьОбъект();
УдаляемаяСтрока = ЗадачаОбъект.Подзадачи.Найти(Подзадача);
Если Не УдаляемаяСтрока = Неопределено Тогда
ЗадачаОбъект.Подзадачи.Удалить(УдаляемаяСтрока);
ЗадачаОбъект.Записать();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьДеревоНаСервере()
Для Каждого Строка Из ДеревоПодзадач.ПолучитьЭлементы() Цикл
СохранитьСтрокуДерева(Строка); // для каждой строки
КонецЦикла;
КонецПроцедуры
// сохранить строку дерева (со всеми ее подстроками)
&НаСервере
Процедура СохранитьСтрокуДерева(СтрокаДерева)
Задача = СтрокаДерева.ПодЗадача;
ЗадачаОбъект = Задача.ПолучитьОбъект();
ЗадачаОбъект.Подзадачи.Очистить(); // очистить таб. часть
подзадачи
Для Каждого Строка Из СтрокаДерева.ПолучитьЭлементы() Цикл
Новая = ЗадачаОбъект.Подзадачи.Добавить(); // добавить из
дерева каждую строку в таб часть
Новая.Подзадача = Строка.Подзадача;
Новая.Комментарий = Строка.Комментарий;
130
СохранитьСтрокуДерева(Строка); // рекрсивно для каждой
строки
КонецЦикла;
ЗадачаОбъект.Записать();
КонецПроцедуры
// создать новую задачу (для варианта создания новой подзадачи
программно, а не в пустой форме)
&НаСервере
Функция СоздатьПодзадачуНаСервере(Шаблон = Неопределено,
Основание = Неопределено)
// создать новый документ
НоваяПодЗадача = Документы.Задача.СоздатьДокумент();
НоваяПодЗадача.Дата = ТекущаяДата();
НоваяПодЗадача.УстановитьНовыйНомер();
// заполнить реквизиты по-умолчанию и из основания
ОбщийСрв.ПриВводеНовойЗадачи(НоваяПодЗадача, Основание,
Ложь);
Если Не Шаблон = Неопределено Тогда // если шаблон задан, то
часть реквизитов - из шаблона
НоваяПодЗадача.Наименование = Шаблон.Наименование;
Ответсвенный = Справочники.Сотрудники.ПустаяСсылка();
Если Не Шаблон.ОтветсвенныйСотрудник.Пустая() Тогда
Ответсвенный = Шаблон.ОтветсвенныйСотрудник;
Иначе
Ответсвенный =
ОбщийСрв.ОтветсвенныйПоПодразделению(Шаблон.ОтветсвенноеПодразделе
ние);
КонецЕсли;
Если Не Ответсвенный.Пустая() Тогда
НоваяПодЗадача.Отвественный = Ответсвенный; //
Ответсвенный
НоваяСтрИсполнители =
НоваяПодЗадача.Исполнители.Добавить();// он же - первый исполнитель
НоваяСтрИсполнители.Исполнитель = Ответсвенный;
НоваяСтрИсполнители.Процент = 100;
НоваяСтрИсполнители.Задание =
Шаблон.Наименование;
КонецЕсли;
Если Не Шаблон.Статус.Пустая() Тогда
131
НоваяПодЗадача.Статус = Шаблон.Статус;
КонецЕсли;
Если Не Шаблон.Срок = 0 Тогда
НоваяПодЗадача.ОжидаемаяДатаВыполнения =
ТекущаяДата() + 24*60*60*Шаблон.Срок;
КонецЕсли;
Если Не Шаблон.Объем = 0 Тогда
НоваяПодЗадача.Объем = Шаблон.Объем;
КонецЕсли;
Если Не Шаблон.ЕдИзм.Пустая() Тогда
НоваяПодЗадача.ЕдИзм = Шаблон.ЕдИзм;
КонецЕсли;
Если Не ПустаяСтрока(Шаблон.Комментарий) Тогда
НоваяПодЗадача.Комментарий = Шаблон.Комментарий;
КонецЕсли;
Если Не Шаблон.ВидЗадачи.Пустая() Тогда
НоваяПодЗадача.ВидЗадачи = Шаблон.ВидЗадачи;
КонецЕсли;
КонецЕсли;
НоваяПодЗадача.Записать();
Возврат НоваяПодЗадача.Ссылка;
КонецФункции
// при любом изменении (в т.ч. проведении) оповестить другие открытые
формы
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
П = Новый Структура;
Если Параметры.Свойство("ЭтоНовый") Тогда // если из
вызывающей формы был пердан признак что это новый документ (кнопка Новая
в Подзадачи)
Если Параметры.ЭтоНовый Тогда // то в родителя добавить
эту задачу
ДобавитьСуществующуюПодзадачуНаСервере(Параметры.Родитель,
Объект.Ссылка); // добавить новую задачу в объект (в таб. часть)
132
П.Вставить("НоваяПодЗадача", Объект.Ссылка); // и
пердаем новую задачу в ОбработкаОповещения
П.Вставить("ЭтоНовый", Параметры.ЭтоНовый);
КонецЕсли;
КонецЕсли;
Оповестить("Дерево",П, ЭтотОбъект); // оповестить об изменении,
сделанном в этом форме, все остальные формы - пусть они перстаривают свое
дерево
// далее см. в ОбработкаОповещения
КонецПроцедуры
// обработка оповещения о любых изменениях, проведенных в других
формах
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия <> "Дерево" Тогда // не наш случай
Возврат;
КонецЕсли;
//Если Источник = ЭтотОбъект Тогда // если источник изменения -
сама эта форма
// Возврат;
//КонецЕсли;
ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные); //
запомниь путь до текущего элемента
Если Параметр.Свойство("ЭтоНовый") Тогда // если была передана
структра
Если Параметр.ЭтоНовый Тогда // если оповещение передала
форма, в котрой был создан новый документ
Если Источник.ВладелецФормы = ЭтотОбъект Тогда //
если та форма вызывалась из этой
НоваяПодЗадача = Параметр.НоваяПодзадача; //
ссылка на измененную подзадачу
ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные,
НоваяПодЗадача); //сформировать массив подзадач от добавленной подзадачи
до корня
КонецЕсли;
КонецЕсли;
133
КонецЕсли;
// в любом случае - перестроить дерево
ЗаполнитьДеревоПодзадач(); // перстроить дерево подзадач
Элементы.ДеревоПодзадач.ТекущаяСтрока =
СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться
КонецПроцедуры
// по команде ДеревоПодзадачаПровести и ДеревоПодзадачаРасПровести
&НаКлиенте
Процедура ДеревоПодзадачаПровести(Команда)
Если Элементы.ДеревоПодзадач.ТекущиеДанные = Неопределено
Тогда
Возврат;
КонецЕсли;
ЭтаЗадача =
Элементы.ДеревоПодзадач.ТекущиеДанные.ПодЗадача; // какую подзадачу в
дереве проводим
Если ЭтаЗадача.Пустая() Тогда
Возврат;
КонецЕсли;
Если Команда.Имя = "ДеревоПодзадачаПровести" Тогда
Если Не ПроверкаВозможностиПроведения(ЭтаЗадача) Тогда
Возврат;
КонецЕсли;
ПровестиПодЗадачуНаСервере(ЭтаЗадача);
КонецЕсли;
Если Команда.Имя = "ДеревоПодЗадачаРасПровести" Тогда
Если Не ПроверкаВозможностиРасПроведения(ЭтаЗадача)
Тогда
Возврат;
КонецЕсли;
РасПровестиПодЗадачуНаСервере(ЭтаЗадача);
КонецЕсли;
134
ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные); //
запомниь путь до текущего элемента
ЗаполнитьДеревоПодзадач(); // перстроить дерево подзадач
Элементы.ДеревоПодзадач.ТекущаяСтрока =
СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться
Оповестить("Дерево", Новый Структура, ЭтотОбъект); // оповестить
об изменении, сделанном в этом форме, все остальные формы - пусть они
перстаривают свое дерево
ОтобразитьИзменениеДанных(Объект.Ссылка,
ВидИзмененияДанных.Изменение);
КонецПроцедуры
// провести ПодЗадача
&НаСервере
Процедура ПровестиПодЗадачуНаСервере(ПодЗадача)
ПодЗадачаОбъект = ПодЗадача.ПолучитьОбъект();
ПодЗадачаОбъект.Записать(РежимЗаписиДокумента.Проведение,
РежимПроведенияДокумента.Неоперативный);
КонецПроцедуры
// распровести ПодЗадача
&НаСервере
Процедура РасПровестиПодЗадачуНаСервере(ПодЗадача)
ПодЗадачаОбъект = ПодЗадача.ПолучитьОбъект();
ПодЗадачаОбъект.Записать(РежимЗаписиДокумента.ОтменаПровед
ения, РежимПроведенияДокумента.Неоперативный);
КонецПроцедуры
// по команде ДеревоСвернутьВсе - свернуть все узлы, кроме самого
верхнего
&НаКлиенте
Процедура ДеревоСвернутьВсе(Команда)
Для Каждого СтрокаДерева Из
ДеревоПодзадач.ПолучитьЭлементы() Цикл
Для Каждого Строка1 Из СтрокаДерева.ПолучитьЭлементы()
Цикл
135
Элементы.ДеревоПодзадач.Свернуть(Строка1.ПолучитьИдентификатор()
);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
// по команде ДеревоСвернутьДоТекущей - свернуть все узлы, но
развернуть путь до текщего узла
&НаКлиенте
Процедура ДеревоСвернутьДоТекущей(Команда)
ПутьВДереве =
ПолучитьПутьВДереве(Элементы.ДеревоПодзадач.ТекущиеДанные); //
запомниь путь до текущего элемента
Для Каждого СтрокаДерева Из
ДеревоПодзадач.ПолучитьЭлементы() Цикл
Для Каждого Строка1 Из СтрокаДерева.ПолучитьЭлементы()
Цикл
Элементы.ДеревоПодзадач.Свернуть(Строка1.ПолучитьИдентификатор()
);
КонецЦикла;
КонецЦикла;
ЗаполнитьДеревоПодзадач(); // перстроить дерево подзадач
Элементы.ДеревоПодзадач.ТекущаяСтрока =
СпозиционироватьсяВДеревеПодзадач(ДеревоПодзадач, ПутьВДереве,
ПутьВДереве.Количество()-1); // спозиционироваться
КонецПроцедуры
// по команде ДеревоФильтрПроведенные - отобразить в дереве только
Проведенные/Непроведенные/Все
&НаКлиенте
Процедура ДеревоФильтрПроведенные(Команда)
ФильтрПроведенные = ФильтрПроведенные - 1; // при каждом входе
в команду - уменьшить значенеи фильтра на 1
Если ФильтрПроведенные = -1 Тогда
ФильтрПроведенные = 2; // по кругу
КонецЕсли;
136
// заголовок кнопки
Если ФильтрПроведенные = 2 Тогда
Элементы.ДеревоПодзадачПроведенные.Заголовок = "Все";
ИначеЕсли ФильтрПроведенные = 1 Тогда
Элементы.ДеревоПодзадачПроведенные.Заголовок =
"Выполеннные";
ИначеЕсли ФильтрПроведенные = 0 Тогда
Элементы.ДеревоПодзадачПроведенные.Заголовок = "Не
выполеннные";
КонецЕсли;
ЗаполнитьДеревоПодзадач(); // перестроить дерево с отбором,
удовлетворяющем фильтру
КонецПроцедуры
&НаКлиенте
Процедура ДеревоПоШаблону(Команда)
ОткрытьФорму("Справочник.Этапы.ФормаВыбора", ,ЭтаФорма);
// Продолжение см. в ОбработкаВыбора формы
КонецПроцедуры
//--------------------------------------------------------------------------------
// ЗАКЛАДКА РЕСУРСЫ
// при выборе/изменении номенклатуры
&НаКлиенте
Процедура НоменклатураНоменклатураПриИзменении(Элемент)
ЭтотОбъект.Элементы.Номенклатура.ТекущиеДанные.Количество
= 1;
ЭтотОбъект.Элементы.Номенклатура.ТекущиеДанные.Коэфф =
1;
ОсновнаяЕдиницаОтгрузки =
ОбщийСрв.ПолучитьОсновнуюЕдиницуОтгрузкиНоменклатуры(ЭтотОбъект.Э
лементы.Номенклатура.ТекущиеДанные.Номенклатура);
Если Не ОсновнаяЕдиницаОтгрузки.Пустая() Тогда
ЭтотОбъект.Элементы.Номенклатура.ТекущиеДанные.ЕдИзмерения =
ОсновнаяЕдиницаОтгрузки;

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")