Файл: Торговое предприятие (Краткий анализ предметной области, характеристика предприятия и его деятельности).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 27.04.2023

Просмотров: 1441

Скачиваний: 20

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

// проверка прав

Если Не ОбщийСрв.ПроверкаПрав(Автор, ПараметрыСеанса.глПользователь) Тогда

Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "Нет прав удалять чужой документ");

Отказ = Истина;

Возврат;

КонецЕсли;

// удалить вхождение этого документа в табличную часть Подзадачи любых остальных документов

ТЗРодителей = СформироватьСписокРодителей(ЭтотОбъект.Ссылка); // сформировать ТЗ всех документов, в которые входит удаляемая

Для Каждого СтрокаРодитель Из ТЗРодителей Цикл // для каждого родителя

УдалитьПодзадачу(СтрокаРодитель.Ссылка, ЭтотОбъект.Ссылка); // удалить текущую(удяляемую) задачу из родителя

КонецЦикла

КонецПроцедуры

// удалить ЗадачаРебенок из табличной части Подзадачи у ЗадачаРодитель

Процедура УдалитьПодзадачу(ЗадачаРодитель, ЗадачаРебенок)

Если ЗадачаРодитель.Пустая() Тогда

Возврат;

КонецЕсли;

ЗадачаРодительОбъект = ЗадачаРодитель.ПолучитьОбъект();

СтруктураОтбора = Новый Структура("Подзадача", ЗадачаРебенок);

МассивУдаляемыхСтрок = ЗадачаРодительОбъект.Подзадачи.НайтиСтроки(СтруктураОтбора);

Для Каждого ЭлементМассива Из МассивУдаляемыхСтрок Цикл

ЗадачаРодительОбъект.Подзадачи.Удалить(ЭлементМассива);

КонецЦикла;

ЗадачаРодительОбъект.Записать();

КонецПроцедуры

// сформироват ТЗ документов, в которые ПодЗадачаРебенок входит в таб часть Подзадачи ( вявном виде, не через рекурсию)

Функция СформироватьСписокРодителей(ПодЗадачаРебенок)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Задачи.Ссылка

|ИЗ

| Документ.Задача.Подзадачи КАК ЗадачаПодзадачи

| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Задача КАК Задачи

| ПО ЗадачаПодзадачи.Ссылка = Задачи.Ссылка

|ГДЕ

| ЗадачаПодзадачи.Подзадача = &ПодзадачаРебенок

|";

Запрос.УстановитьПараметр("ПодзадачаРебенок", ПодзадачаРебенок);

РезультатЗапроса = Запрос.Выполнить();

ТЗ = РезультатЗапроса.Выгрузить();

Возврат ТЗ;

КонецФункции

// провести все непроведенные подзадачи из ЗадачаОбъект и провести ее саму

Процедура ВыполнитьВсеПодзадачиПринудительно(ЗадачаОбъект)

Для Каждого ТекСтрокаПодзадача Из ЗадачаОбъект.Подзадачи Цикл // по всем строкам таб. части Подзадачи

Если ТекСтрокаПодзадача.Подзадача.Проведен <> Истина Тогда // если не была проведена

ВыполнитьВсеПодзадачиПринудительно(ТекСтрокаПодзадача.Подзадача.ПолучитьОбъект()); // провести все ее подзадачи


ТекСтрокаПодзадача.Подзадача.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); // провести ее саму

Сообщить("Выполнена подзадача " + ОбщийСрв.ПредставлениеЗадачи(ТекСтрокаПодзадача.Подзадача));

КонецЕсли;

КонецЦикла;

КонецПроцедуры

// проверить, есть ли среди ТЧ Исполнители записи без отметки исполнения

Функция ПроверитьИсполнение()

Исполненно = Истина;

Для Каждого ТекСтрокаИсполнитель Из Исполнители Цикл

Если ТекСтрокаИсполнитель.ДатаИсполнения = Дата(01,01,0001,00,00,00) Тогда

Сообщить("Задача не может быть выполнена, так как исполнитель \" + ТекСтрокаИсполнитель.Исполнитель +

"\ не проставил отметку исполнения");

Исполненно = Ложь;

КонецЕсли;

Если Не ТекСтрокаИсполнитель.РезультатИсполнения.Пустая() Тогда

Если Не ТекСтрокаИсполнитель.РезультатИсполнения.Успех Тогда

Сообщить("Задача не может быть выполнена, так как исполнитель \" + ТекСтрокаИсполнитель.Исполнитель +

"\ проставил отрицательную отметку исполнения");

Исполненно = Ложь;

КонецЕсли;

КонецЕсли;

КонецЦикла;

Возврат Исполненно;

КонецФункции

// действия при проведении документа

Функция ПриПроведении(Отказ)

// проверка того, что все исполнители проставили отметку об исполнении

Если Константы.ПроверятьИсполнениеПриВыполнении.Получить() Тогда // общая константа

Если ОбщийСрв.ПолучитьКонстанту(ТекущаяДата(), ОбщийСрв.ПолучитьГлПользователь(), "ПроверятьИсполнениеПриВыполнении") Тогда // настройка пользователя

Если Не ПроверитьИсполнение() Тогда

Отказ = Истина;

Возврат Ложь;

КонецЕсли;

КонецЕсли;

КонецЕсли;

// проверка того, что все подзадачи проведены

ЕстьНеВыполненыеПодзадачи = Ложь;

Для Каждого ТекСтрокаПодзадача Из Подзадачи Цикл

Если ТекСтрокаПодзадача.Подзадача.Проведен <> Истина Тогда

Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + " имеет невыполненные подзадачи");

ЕстьНеВыполненыеПодзадачи = Истина;

КонецЕсли;

КонецЦикла;

Если ЕстьНеВыполненыеПодзадачи = Истина Тогда

Если (Константы.ПринудительноВыполнятьПодзадачи.Получить()) И // общая константа

(ОбщийСрв.ПолучитьКонстанту(ТекущаяДата(), ОбщийСрв.ПолучитьГлПользователь(), "ПринудительноВыполнятьПодзадачи")) Тогда // настройка пользователя

Сообщить("Подзадачи будут выполнены принудительно...");

ВыполнитьВсеПодзадачиПринудительно(ЭтотОбъект); // автоматически провести все подзадачи данной задачи


Иначе // нельзя автоматически выполнять подзадачи

Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + " не может быть выполнена");

Отказ = Истина;

Возврат Ложь;

КонецЕсли;

КонецЕсли;

Возврат Истина

КонецФункции

// обработка проведения

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Если Не ПриПроведении(Отказ) Тогда // проверить проведение подзадач

Возврат;

КонецЕсли;

// регистр ИспользованниеНоменклатуры

Движения.ИспользованиеНоменклатуры.Записывать = Истина;

Для Каждого ТекСтрокаНоменклатура Из Номенклатура Цикл

Если ТекСтрокаНоменклатура.Наличие Тогда // если в ТЧ стоит признак наличия

Продолжить;

КонецЕсли;

Если НЕ ТекСтрокаНоменклатура.Номенклатура.ВидНоменклатуры.Списывается Тогда // если номенклатуру не надо списывать

Продолжить;

КонецЕсли;

Движение = Движения.ИспользованиеНоменклатуры.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ТекСтрокаНоменклатура.Номенклатура;

Движение.Задача = ЭтотОбъект.Ссылка;

Движение.Количество = ТекСтрокаНоменклатура.Количество;

Движение.Сумма = ТекСтрокаНоменклатура.Сумма;

КонецЦикла;

КонецПроцедуры

// обработка распроведения

Процедура ОбработкаУдаленияПроведения(Отказ)

Если Не ОтменитьПроведениеРодителей(ЭтотОбъект.Ссылка) Тогда // отменитиь проведение задач-родителей

Отказ = Истина;

Возврат;

КонецЕсли;

КонецПроцедуры

// отменить проведение всех родителей ДокСсылкаРебенок

Функция ОтменитьПроведениеРодителей(ДокСсылкаРебенок)

МассивОтменяемых = ОбщийСрв.СформироватьСписокОтменяемых(ДокСсылкаРебенок); // сформировать массив распроводимых документов

Если МассивОтменяемых.Количество() Тогда // если есть хоть один - сообщить

Сообщить ("Отмена выполнения " + ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект)

+ " приводит к отмене выполнения задач-родителей...");

КонецЕсли;

Для Каждого СтрокаОтменяемый Из МассивОтменяемых Цикл // для каждого документа из распроводимых

Если ОбщийСрв.ВЗакрытомПериоде(СтрокаОтменяемый.Значение) Тогда // если находится в закрытом периоде

Сообщить("Отмена выполенния " + ОбщийСрв.ПредставлениеЗадачи(ДокСсылкаРебенок)

+ " приводит к отмене выполенния " + ОбщийСрв.ПредставлениеЗадачи(СтрокаОтменяемый.Значение)

+ ", находящейся в закрытом периоде. Отмена не может быть выполнена");

Возврат Ложь;

КонецЕсли;

Если Не ОбщийСрв.ПроверкаПрав(СтрокаОтменяемый.Значение.Автор, ПараметрыСеанса.глПользователь) Тогда // проверка прав


Сообщить("Отмена выполенния " + ОбщийСрв.ПредставлениеЗадачи(ДокСсылкаРебенок)

+ " приводит к отмене выполенния " + ОбщийСрв.ПредставлениеЗадачи(СтрокаОтменяемый.Значение)

+ ", на редактирование которого у Вас нет прав. Отмена не может быть выполнена");

Возврат Ложь;

КонецЕсли;

КонецЦикла;

// распровести каждый

Для Каждого СтрокаОтменяемый Из МассивОтменяемых Цикл

Если СтрокаОтменяемый.Значение.ПолучитьОбъект().Проведен Тогда

СтрокаОтменяемый.Значение.ПолучитьОбъект().Записать(РежимЗаписиДокумента.ОтменаПроведения);

Сообщить("Отменено выполнение родительской " + ОбщийСрв.ПредставлениеЗадачи(СтрокаОтменяемый.Значение));

КонецЕсли;

КонецЦикла;

Возврат Истина;

КонецФункции

// перед любой записью (включая проведение и распроведение) - проверка

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Головная = ЭтоГоловная(); // установить признак - головная или нет

Если ОбщийСрв.ВЗакрытомПериоде(ЭтотОбъект) Тогда // провера на закрытый период

Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "Находится в закрытом периоде. Редактирование невозможно");

Отказ = Истина;

Возврат;

КонецЕсли;

// проверка того что проведен (тогда редактирование запрещено)

Если Не (РежимЗаписи = РежимЗаписиДокумента.Проведение Или

РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения) Тогда

Если (ЭтотОбъект.Проведен И Константы.ЗапретПроведенных.Получить()) И Не ПараметрыСеанса.глЗаписьВедетИсполнитель

И Не ПараметрыСеанса.ИдетОбменДанными Тогда

Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "Уже выполнена. Редактирование невозможно");

Отказ = Истина;

Возврат;

КонецЕсли;

КонецЕсли;

// проверка прав

Если Не ОбщийСрв.ПроверкаПрав(Автор, ПараметрыСеанса.глПользователь) Тогда

Сообщить(ОбщийСрв.ПредставлениеЗадачи(ЭтотОбъект) + "Нет прав редактировать чужой документ");

Отказ = Истина;

Возврат;

КонецЕсли;

Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

РеальнаяДатаВыполнения = ТекущаяДата(); // дата реального выполнения - дата проведения

Если Константы.УстанавливатьЗавершенаУспешно.Получить() = Истина Тогда

Статус = Справочники.Статусы.ЗавершенаУспешно; // статус - успешно

КонецЕсли;

КонецЕсли;

Если РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда

РеальнаяДатаВыполнения = 0; // если распровели - значит нет реальной даты завершения