Диплом: Автоматизация учета расхода материалов на производство в компании ООО "Звезда"

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

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

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 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 - менеджмент: реализация проекта (на примере ООО "АГРОПАК")