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