Распределение расходов будущих периодов / Модуль объекта

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

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

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

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

Процедура ПриКопировании(ОбъектКопирования)

	РаспределениеРасходов.Очистить();
	
	ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, "РаспределениеРасходов");
	
	РаспределениеРасходовБудущихПериодовЛокализация.ПриКопировании(ЭтотОбъект, ОбъектКопирования);

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

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

	МассивНепроверяемыхРеквизитов = Новый Массив;

	//++ НЕ УТ
	Если РаспределениеИзОВЗ Тогда
		МассивНепроверяемыхРеквизитов.Добавить("СтатьяРасходов");
	КонецЕсли;
	//-- НЕ УТ

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

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

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

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

	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
	// Регистрация задания к расчету себестоимости.
	ИменаРеквизитов = "ВариантРаспределенияРасходовУпр, ВариантРаспределенияРасходовРегл, ВариантРаспределенияРасходовНУ";
	Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
		?(ЗначениеЗаполнено(СтатьяРасходов), СтатьяРасходов, АналитикаРасходов), ИменаРеквизитов);
	
	Если (ВариантУказанияСуммыУпр = Перечисления.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически
		И Реквизиты.ВариантРаспределенияРасходовУпр = Перечисления.ВариантыРаспределенияРасходов.НаРасходыБудущихПериодов 
		И УправленческийУчет)
	ИЛИ (ВариантУказанияСуммыРегл = Перечисления.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически
		И Реквизиты.ВариантРаспределенияРасходовРегл = Перечисления.ВариантыРаспределенияРасходов.НаРасходыБудущихПериодов
		И РегламентированныйУчет)
	ИЛИ (ВариантУказанияСуммыРегл = Перечисления.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически
		И Реквизиты.ВариантРаспределенияРасходовНУ = Перечисления.ВариантыРаспределенияРасходов.НаРасходыБудущихПериодов
		И РегламентированныйУчет)
	ИЛИ (ВариантУказанияСуммыРегл = Перечисления.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически
		И Реквизиты.ВариантРаспределенияРасходовНУ = Перечисления.ВариантыРаспределенияРасходов.НаРасходыБудущихПериодов
		И НДД)
	Тогда
		ШаблонЗапретаДанных = ДатыЗапретаИзменения.ШаблонДанныхДляПроверки();
		СтрокаШаблона = ШаблонЗапретаДанных.Добавить();
		СтрокаШаблона.Раздел = "РегламентныеОперации";
		СтрокаШаблона.Дата = НачалоМесяца(Дата);
		ЕстьЗапретИзмененияПоДатеДокумента = ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(ШаблонЗапретаДанных);
		Если Не ЕстьЗапретИзмененияПоДатеДокумента Тогда
			РегистрыСведений.ЗаданияКРасчетуСебестоимости.СоздатьЗаписьРегистра(Дата, Ссылка, Организация);
		КонецЕсли;
	КонецЕсли;
	
	Запрос = Новый Запрос();
	Запрос.Текст = "
	|ВЫБРАТЬ ПЕРВЫЕ 1 
	|	ИСТИНА
	|ИЗ Документ.РаспределениеРасходовБудущихПериодов КАК Док
	|ГДЕ
	|	Док.Дата МЕЖДУ &ДатаНачала и &ДатаОкончания
	|	И Док.Проведен
	|	И НЕ Док.Ссылка = &Ссылка
	|	И Док.Организация = &Организация
	|	И Док.Подразделение = &Подразделение
	|	И Док.СтатьяРасходов = &СтатьяРасходов
	|	И Док.АналитикаРасходов = &АналитикаРасходов
	|	И (Док.УправленческийУчет И Док.ВариантУказанияСуммыУпр = ЗНАЧЕНИЕ(Перечисление.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически) И &УправленческийУчет
	|		ИЛИ Док.РегламентированныйУчет И Док.ВариантУказанияСуммыРегл = ЗНАЧЕНИЕ(Перечисление.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически) И &РегламентированныйУчет
	|		ИЛИ Док.НалоговыйУчет И Док.ВариантУказанияСуммыРегл = ЗНАЧЕНИЕ(Перечисление.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически) И &НалоговыйУчет
	|		ИЛИ Док.НДД И Док.ВариантУказанияСуммыРегл = ЗНАЧЕНИЕ(Перечисление.ВариантыУказанияСуммыРБП.ОпределяетсяАвтоматически) И &НДД
	|	)";
	
	Запрос.Параметры.Вставить("ДатаНачала", НачалоМесяца(Дата));
	Запрос.Параметры.Вставить("ДатаОкончания", КонецМесяца(Дата));
	Запрос.Параметры.Вставить("Ссылка", Ссылка);
	Запрос.Параметры.Вставить("УправленческийУчет", УправленческийУчет);
	Запрос.Параметры.Вставить("РегламентированныйУчет", РегламентированныйУчет);
	Запрос.Параметры.Вставить("НалоговыйУчет", НалоговыйУчет);
	Запрос.Параметры.Вставить("НДД", НДД);
	Запрос.Параметры.Вставить("Организация", Организация);
	Запрос.Параметры.Вставить("Подразделение", Подразделение);
	Запрос.Параметры.Вставить("СтатьяРасходов", СтатьяРасходов);
	Запрос.Параметры.Вставить("АналитикаРасходов", АналитикаРасходов);
	Выборка = Запрос.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда
		ТекстСообщения = НСтр("ru='Документ с такими настройками уже проведен в данном месяце'");
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения,, "Объект.Дата",, Отказ);
	КонецЕсли;
	
	РаспределениеРасходовБудущихПериодовЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
	
КонецПроцедуры

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

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

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

#Область ИнициализацияИЗаполнение

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

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

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

#КонецЕсли

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