Экземпляр бюджета / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Устанавливает статус для объекта документа
//
// Параметры:
//	НовыйСтатус - Строка - Имя статуса, который будет установлен у заказов
//	ДополнительныеПараметры - Структура - Структура дополнительных параметров установки статуса.
//
// Возвращаемое значение:
//	Булево - Истина, в случае успешной установки нового статуса.
//
Функция УстановитьСтатус(НовыйСтатус, ДополнительныеПараметры) Экспорт
	
	ЗначениеНовогоСтатуса = Перечисления.СтатусыПланов[НовыйСтатус];
	
	Статус = ЗначениеНовогоСтатуса;
	
	Возврат ПроверитьЗаполнение();
	
КонецФункции

#КонецОбласти

#Область ОбработчикиСобытий

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	ИнициализироватьДокумент(ДанныеЗаполнения);
	
КонецПроцедуры

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ДополнительныеСвойства.Вставить("ОтложенноеПроведение",
		ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидБюджета, "ПроводитьЭкземплярыБюджетовОтложено"));
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
	Если ДополнительныеСвойства.ОтложенноеПроведение Тогда
		БюджетированиеСервер.ПоставитьДокументВОчередьПроведения(Ссылка);
		БюджетированиеСервер.ЗапуститьОтложенноеПроведениеФоновымЗаданием(Ссылка);
	КонецЕсли;
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

	Если ИспользоватьУтверждениеБюджетов 
		И Не Пользователи.РолиДоступны("УтверждениеЭкземпляровБюджетов",, Ложь) Тогда
			ЕстьОшибкаДоступа = Истина;
			
			Если Статус = Перечисления.СтатусыПланов.Утвержден Тогда
				ТекстОшибки = НСтр("ru='Нет доступа на утверждение экземпляров бюджетов.'");
			ИначеЕсли СтатусСохраненногоДокумента = Перечисления.СтатусыПланов.Утвержден Тогда
				ТекстОшибки = НСтр("ru='Нет доступа на изменение утвержденных экземпляров бюджетов.'");
			Иначе
				ЕстьОшибкаДоступа = Ложь;
			КонецЕсли;
			
			Если ЕстьОшибкаДоступа Тогда
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					ТекстОшибки,
					ЭтотОбъект,
					, // Поле
					, // ПутьКДанным
					Отказ);
			КонецЕсли;
	КонецЕсли;
		
	ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
	
КонецПроцедуры

Процедура ПриКопировании(ОбъектКопирования)
	
	Статус = Перечисления.СтатусыПланов.ВПодготовке;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		
		Если ДанныеЗаполнения.Свойство("НачалоПериода") Тогда
			НачалоПериода = ДанныеЗаполнения.НачалоПериода;
		КонецЕсли;
		Если ДанныеЗаполнения.Свойство("ОкончаниеПериода") Тогда
			ОкончаниеПериода = ДанныеЗаполнения.ОкончаниеПериода;
		КонецЕсли;
		Если ДанныеЗаполнения.Свойство("ВидБюджета") Тогда
			ВидБюджета = ДанныеЗаполнения.ВидБюджета;
			МодельБюджетирования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидБюджета, "Владелец");
		КонецЕсли;
		Если ДанныеЗаполнения.Свойство("Организация") Тогда
			Организация = ДанныеЗаполнения.Организация;
		КонецЕсли;
		Если ДанныеЗаполнения.Свойство("Подразделение") Тогда
			Подразделение = ДанныеЗаполнения.Подразделение;
		КонецЕсли;
		Если ДанныеЗаполнения.Свойство("Действие") Тогда
			Действие = ДанныеЗаполнения.Действие;
		КонецЕсли;
	
		МаксимальноеКоличествоАналитик = БюджетированиеКлиентСервер.МаксимальноеКоличествоАналитик();
		Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
			Счетчик = 1;
			Пока Счетчик <= МаксимальноеКоличествоАналитик Цикл
				Если ДанныеЗаполнения.Свойство("Аналитика" + Счетчик) Тогда
					ЭтотОбъект["Аналитика" + Счетчик] = ДанныеЗаполнения["Аналитика" + Счетчик];
				КонецЕсли;
				Счетчик = Счетчик + Счетчик;
			КонецЦикла;
		КонецЕсли;
		
	ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЭкземплярБюджета") Тогда
		
		РеквизитыОснования = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеЗаполнения, БюджетированиеКлиентСервер.ИменаРеквизитовБюджета());
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, РеквизитыОснования, , "Дата");
		
		Действие = Перечисления.ТипыДействийЭкземпляровБюджетов.КорректировкаПоСтатьямБюджета;
		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(НачалоПериода) ИЛИ Не ЗначениеЗаполнено(ОкончаниеПериода) Тогда
		
		ТекущаяДата = ТекущаяДатаСеанса();
		Если Не ЗначениеЗаполнено(НачалоПериода) Тогда
			НачалоПериода = ТекущаяДата;
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(ОкончаниеПериода) Тогда
			ОкончаниеПериода = ТекущаяДата;
		КонецЕсли;
		
		Если ЗначениеЗаполнено(ВидБюджета) Тогда
			Справочники.ВидыБюджетов.ВыровнятьДатыПоПериодичностиБюджета(ВидБюджета, НачалоПериода, ОкончаниеПериода);
		КонецЕсли;
		
	КонецЕсли;
	
	ГраницаФактДанных = Справочники.ВидыБюджетов.ГраницаФактическихДанныхПоВидуБюджета(ВидБюджета, НачалоПериода);
	
	Ответственный = Пользователи.ТекущийПользователь();
	
	Если Не ЗначениеЗаполнено(МодельБюджетирования) Тогда
		МодельБюджетирования = Справочники.МоделиБюджетирования.МодельБюджетированияПоУмолчанию();
	КонецЕсли;
	
	Если ЗначениеЗаполнено(МодельБюджетирования)
		И ТипЗнч(ДанныеЗаполнения) <> Тип("ДокументСсылка.ЭкземплярБюджета") Тогда
		Измерения = Документы.ЭкземплярБюджета.ИзмеренияБюджетаПоУмолчанию(МодельБюджетирования, Ответственный);
		Для Каждого Измерение Из Измерения Цикл
			Если Не ЗначениеЗаполнено(ЭтотОбъект[Измерение.Ключ]) Тогда
				ЭтотОбъект[Измерение.Ключ] = Измерение.Значение;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры


Процедура ПроверитьДействиеМоделиБюджетирования(РежимЗаписи, Отказ)
	Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
		Действует = Справочники.МоделиБюджетирования.МодельБюджетированияДействует(МодельБюджетирования);
		Если НЕ Действует Тогда
			ТекстОшибки = НСтр("ru='Проведение документа запрещено, модель бюджетирования не действует.'");
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					ТекстОшибки,
					ЭтотОбъект,,,
					Отказ);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

#КонецОбласти

#КонецЕсли

Связанные материалы