Параметры начисления налога на имущество / Модуль объекта

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

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	ИнициализироватьДокумент();
	
	ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
	
	Если ТипДанныхЗаполнения = Тип("Структура") Тогда
		ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("Массив") 
		И ДанныеЗаполнения.Количество() <> 0 
		И ТипЗнч(ДанныеЗаполнения[0]) = Тип("СправочникСсылка.ОбъектыЭксплуатации") Тогда
		ЗаполнитьНаОснованииОбъектаЭксплуатации(ДанныеЗаполнения);
	ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.ОбъектыЭксплуатации") Тогда
		ЗаполнитьНаОснованииОбъектаЭксплуатации(ДанныеЗаполнения);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	
	СформироватьЗаданияКЗакрытиюМесяцаПриЗаписи();
	
КонецПроцедуры

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

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

#Область Заполнение

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

Процедура ЗаполнитьДокументПоОтбору(Основание)

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

Процедура ЗаполнитьНаОснованииОбъектаЭксплуатации(Основание)
	
	Если НЕ ЗначениеЗаполнено(Основание) Тогда
		Возврат;
	КонецЕсли; 
	
	Если ТипЗнч(Основание) = Тип("Массив") Тогда
		СписокОС = Основание;
	Иначе
		СписокОС = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Основание);
	КонецЕсли; 
	
	Если СписокОС.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ТекстЗапроса = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ОбъектыЭксплуатации.Ссылка КАК Ссылка
	|ПОМЕСТИТЬ СписокВсехОС
	|ИЗ
	|	Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации
	|ГДЕ
	|	ОбъектыЭксплуатации.Ссылка В ИЕРАРХИИ(&СписокОС)
	|	И НЕ ОбъектыЭксплуатации.ПометкаУдаления
	|	И НЕ ОбъектыЭксплуатации.ЭтоГруппа
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	МестонахождениеОС.ОсновноеСредство КАК ОсновноеСредство,
	|	МестонахождениеОС.Организация КАК Организация
	|ПОМЕСТИТЬ МестонахождениеОС
	|ИЗ
	|	РегистрСведений.МестонахождениеОС.СрезПоследних(
	|			,
	|			ДатаИсправления = ДАТАВРЕМЯ(1,1,1)
	|				И ОсновноеСредство В
	|					(ВЫБРАТЬ
	|						СписокВсехОС.Ссылка
	|					ИЗ
	|						СписокВсехОС)) КАК МестонахождениеОС
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	ОсновноеСредство,
	|	Организация
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПервоначальныеСведенияОС.ОсновноеСредство КАК ОсновноеСредство,
	|	ПервоначальныеСведенияОС.Организация КАК Организация,
	|	ПервоначальныеСведенияОС.ДатаВводаВЭксплуатациюБУ КАК ДатаВводаВЭксплуатациюБУ
	|ПОМЕСТИТЬ ПервоначальныеСведенияОС
	|ИЗ
	|	РегистрСведений.ПервоначальныеСведенияОС.СрезПоследних(
	|			,
	|			ДатаИсправления = ДАТАВРЕМЯ(1,1,1)
	|				И (ОсновноеСредство, Организация) В
	|					(ВЫБРАТЬ
	|						МестонахождениеОС.ОсновноеСредство,
	|						МестонахождениеОС.Организация
	|					ИЗ
	|						МестонахождениеОС)) КАК ПервоначальныеСведенияОС
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	ОсновноеСредство,
	|	Организация
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ПорядокУчетаОСБУ.ОсновноеСредство КАК ОсновноеСредство,
	|	ПорядокУчетаОСБУ.Организация КАК Организация,
	|	ПорядокУчетаОСБУ.СостояниеБУ КАК СостояниеБУ,
	|	ПорядокУчетаОСБУ.АмортизационнаяГруппа КАК АмортизационнаяГруппа,
	|	ПорядокУчетаОСБУ.НедвижимоеИмущество КАК НедвижимоеИмущество
	|ПОМЕСТИТЬ ПорядокУчетаОСБУ
	|ИЗ
	|	РегистрСведений.ПорядокУчетаОСБУ.СрезПоследних(
	|			,
	|			ДатаИсправления = ДАТАВРЕМЯ(1,1,1)
	|				И (ОсновноеСредство, Организация) В
	|					(ВЫБРАТЬ
	|						МестонахождениеОС.ОсновноеСредство,
	|						МестонахождениеОС.Организация
	|					ИЗ
	|						МестонахождениеОС)) КАК ПорядокУчетаОСБУ
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	ОсновноеСредство,
	|	Организация
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СписокВсехОС.Ссылка КАК Ссылка,
	|	ОбъектыЭксплуатации.Наименование КАК Наименование,
	|	ОбъектыЭксплуатации.ИнвентарныйНомер КАК ИнвентарныйНомер,
	|	ОбъектыЭксплуатации.ГруппаОС КАК ГруппаОС,
	|	ПорядокУчетаОСБУ.АмортизационнаяГруппа КАК АмортизационнаяГруппа,
	|	(НЕ ПорядокУчетаОСБУ.ОсновноеСредство ЕСТЬ NULL И ПорядокУчетаОСБУ.НедвижимоеИмущество
	|			ИЛИ ПорядокУчетаОСБУ.ОсновноеСредство ЕСТЬ NULL И ОбъектыЭксплуатации.ГруппаОС В(&ГруппыНедвижимогоИмущества)) КАК НедвижимоеИмущество
	|ПОМЕСТИТЬ СписокПараметровОС
	|ИЗ
	|	СписокВсехОС КАК СписокВсехОС
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОбъектыЭксплуатации КАК ОбъектыЭксплуатации
	|		ПО ОбъектыЭксплуатации.Ссылка = СписокВсехОС.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПорядокУчетаОСБУ КАК ПорядокУчетаОСБУ
	|		ПО ПорядокУчетаОСБУ.ОсновноеСредство = СписокВсехОС.Ссылка
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СписокПараметровОС.Ссылка КАК Ссылка,
	|	СписокПараметровОС.Наименование КАК Наименование,
	|	СписокПараметровОС.ИнвентарныйНомер КАК ИнвентарныйНомер,
	|	СписокПараметровОС.ГруппаОС КАК ГруппаОС,
	|	СписокПараметровОС.НедвижимоеИмущество КАК НедвижимоеИмущество
	|ПОМЕСТИТЬ СписокОС
	|ИЗ
	|	СписокПараметровОС КАК СписокПараметровОС
	|ГДЕ
	|	(&УсловияОтбораПоВидуНалога)
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СтавкиНалога.ОсвобождениеОтНалогообложенияДвижимогоИмущества КАК ОсвобождениеОтНалогообложенияДвижимогоИмущества
	|ИЗ
	|	РегистрСведений.СтавкиНалогаНаИмущество.СрезПоследних(
	|			&Дата,
	|			Организация В
	|				(ВЫБРАТЬ
	|					МестонахождениеОС.Организация
	|				ИЗ
	|					МестонахождениеОС)) КАК СтавкиНалога
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ЕСТЬNULL(МАКСИМУМ(ИСТИНА), ЛОЖЬ) КАК ЕстьЭлементы,
	|	ЕСТЬNULL(МАКСИМУМ(ВЫБОР
	|				КОГДА НЕ ПорядокУчетаОСБУ.АмортизационнаяГруппа В (&ДоступныеАмортизационныеГруппы)
	|						И &ДатаСведений < ДАТАВРЕМЯ(2019, 1, 1)
	|					ТОГДА ИСТИНА
	|				ИНАЧЕ ЛОЖЬ
	|			КОНЕЦ), ЛОЖЬ) КАК ОшибкаДоступныеАмортизационныеГруппы,
	|	ЕСТЬNULL(МАКСИМУМ(ВЫБОР
	|				КОГДА НЕ СписокОС.НедвижимоеИмущество
	|						И ЕСТЬNULL(ПорядокУчетаОСБУ.СостояниеБУ, НЕОПРЕДЕЛЕНО) <> ЗНАЧЕНИЕ(Перечисление.СостоянияОС.ПринятоКУчету)
	|					ТОГДА ИСТИНА
	|				ИНАЧЕ ЛОЖЬ
	|			КОНЕЦ), ЛОЖЬ) КАК ЕстьНепринятыеКУчету,
	|	ЕСТЬNULL(КОЛИЧЕСТВО(РАЗЛИЧНЫЕ МестонахождениеОС.Организация), 0) КАК РазныхОрганизаций
	|ИЗ
	|	СписокОС КАК СписокОС
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПорядокУчетаОСБУ КАК ПорядокУчетаОСБУ
	|		ПО (ПорядокУчетаОСБУ.ОсновноеСредство = СписокОС.Ссылка)
	|		ЛЕВОЕ СОЕДИНЕНИЕ МестонахождениеОС КАК МестонахождениеОС
	|		ПО (МестонахождениеОС.ОсновноеСредство = СписокОС.Ссылка)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СписокОС.Ссылка КАК Ссылка
	|ИЗ
	|	СписокОС КАК СписокОС
	|ГДЕ
	|	СписокОС.НедвижимоеИмущество
	|
	|УПОРЯДОЧИТЬ ПО
	|	СписокОС.Наименование,
	|	СписокОС.ИнвентарныйНомер
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СписокОС.Ссылка КАК Ссылка
	|ИЗ
	|	СписокОС КАК СписокОС
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПервоначальныеСведенияОС КАК ПервоначальныеСведенияОС
	|		ПО (ПервоначальныеСведенияОС.ОсновноеСредство = СписокОС.Ссылка)
	|ГДЕ
	|	НЕ СписокОС.НедвижимоеИмущество
	|	И ПервоначальныеСведенияОС.ДатаВводаВЭксплуатациюБУ < ДАТАВРЕМЯ(2013, 1, 1)
	|
	|УПОРЯДОЧИТЬ ПО
	|	СписокОС.Наименование,
	|	СписокОС.ИнвентарныйНомер
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СписокОС.Ссылка КАК Ссылка
	|ИЗ
	|	СписокОС КАК СписокОС
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПервоначальныеСведенияОС КАК ПервоначальныеСведенияОС
	|		ПО (ПервоначальныеСведенияОС.ОсновноеСредство = СписокОС.Ссылка)
	|ГДЕ
	|	НЕ СписокОС.НедвижимоеИмущество
	|	И ПервоначальныеСведенияОС.ДатаВводаВЭксплуатациюБУ >= ДАТАВРЕМЯ(2013, 1, 1)
	|
	|УПОРЯДОЧИТЬ ПО
	|	СписокОС.Наименование,
	|	СписокОС.ИнвентарныйНомер";
	
	ТекстУсловияОтбораПоВидуНалога = ВнеоборотныеАктивыЛокализация.УсловияОтбораПоВидуНалога(
		"СписокПараметровОС", 
		"ЕСТЬNULL(СписокПараметровОС.АмортизационнаяГруппа, НЕОПРЕДЕЛЕНО)",
		"СписокПараметровОС.НедвижимоеИмущество");
	
	ТекстЗапроса = СтрЗаменить(
		ТекстЗапроса, 
		"&УсловияОтбораПоВидуНалога", 
		ТекстУсловияОтбораПоВидуНалога);
	
	Запрос = Новый Запрос(ТекстЗапроса);
	Запрос.УстановитьПараметр("СписокОС", СписокОС);
	Запрос.УстановитьПараметр("ВидНалога", Перечисления.ВидыИмущественныхНалогов.НалогНаИмущество);
	Запрос.УстановитьПараметр("ГруппыНедвижимогоИмущества", ВнеоборотныеАктивыКлиентСерверЛокализация.ГруппыНедвижимогоИмущества());
	
	ДатаДок = ?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса());
	Запрос.УстановитьПараметр("Дата", ДатаДок);
	Запрос.УстановитьПараметр("ДатаСведений", ДатаДок);
	
	ПараметрыДокумента = Документы.ПараметрыНачисленияНалогаНаИмущество.ПараметрыДокумента();
	Запрос.УстановитьПараметр("ДоступныеАмортизационныеГруппы", ПараметрыДокумента.ДоступныеАмортизационныеГруппы);
	
	Результат = Запрос.ВыполнитьПакет();
	
	РезультатСтавки = Результат[Результат.ВГраница()-4];
	РезультатПроверки = Результат[Результат.ВГраница()-3];
	РезультатНедвижимоеИмущество = Результат[Результат.ВГраница()-2];
	РезультатДвижимоеИмуществоДо2013 = Результат[Результат.ВГраница()-1];
	РезультатДвижимоеИмуществоС2013 = Результат[Результат.ВГраница()];
	
	Если РезультатПроверки.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	// Проверка выбранных ОС.
	ВыборкаПроверки = РезультатПроверки.Выбрать();
	Если ВыборкаПроверки.Следующий() Тогда
		
		Если ВыборкаПроверки.ЕстьЭлементы = Ложь Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, основные средства должны быть недвижимым имуществом, принятым к учету в одной организации.'");
			ВызватьИсключение ТекстСообщения;
		КонецЕсли; 
		
		Если ВыборкаПроверки.ОшибкаДоступныеАмортизационныеГруппы = Истина Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбраны основные средства первой и второй амортизационной группы.'");
			ВызватьИсключение ТекстСообщения;
		КонецЕсли; 
		
	КонецЕсли; 
	
	Если НЕ РезультатНедвижимоеИмущество.Пустой() Тогда
		
		Если НЕ РезультатДвижимоеИмуществоДо2013.Пустой()
			ИЛИ НЕ РезультатДвижимоеИмуществоС2013.Пустой() Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано движимое и недвижимое имущество.'");
			ВызватьИсключение ТекстСообщения;
		ИначеЕсли ВыборкаПроверки.ЕстьНепринятыеКУчету Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано недвижимое имущество не принятое к учету.'");
			ВызватьИсключение ТекстСообщения;
		ИначеЕсли ВыборкаПроверки.РазныхОрганизаций > 1 Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано недвижимое имущество, принятое к учету в разные организации.'");
			ВызватьИсключение ТекстСообщения;
		КонецЕсли; 
		
		ВыборкаОС = РезультатНедвижимоеИмущество.Выбрать();
		
	ИначеЕсли ДатаДок >= '201901010000'
		И (НЕ РезультатДвижимоеИмуществоДо2013.Пустой()
			ИЛИ НЕ РезультатДвижимоеИмуществоС2013.Пустой()) Тогда
		
		ТекстСообщения = НСтр("ru = 'Невозможно создать документ, с 2019 года налогом на имущество облагается только недвижимое имущество.'");
		ВызватьИсключение ТекстСообщения;
		
	ИначеЕсли НЕ РезультатДвижимоеИмуществоДо2013.Пустой() Тогда
		
		Если НЕ РезультатДвижимоеИмуществоС2013.Пустой() Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано движимое имущество, принятое до 2013 года и после 2013 года.'");
			ВызватьИсключение ТекстСообщения;
		ИначеЕсли ВыборкаПроверки.ЕстьНепринятыеКУчету Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано движимое имущество не принятое к учету.'");
			ВызватьИсключение ТекстСообщения;
		ИначеЕсли ВыборкаПроверки.РазныхОрганизаций > 1 Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано движимое имущество, принятое к учету в разные организации.'");
			ВызватьИсключение ТекстСообщения;
		КонецЕсли; 
		
		ВыборкаОС = РезультатДвижимоеИмуществоДо2013.Выбрать();
		
	ИначеЕсли НЕ РезультатДвижимоеИмуществоС2013.Пустой() Тогда
		
		Если ВыборкаПроверки.ЕстьНепринятыеКУчету Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано движимое имущество не принятое к учету.'");
			ВызватьИсключение ТекстСообщения;
		ИначеЕсли ВыборкаПроверки.РазныхОрганизаций > 1 Тогда
			ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано движимое имущество, принятое к учету в разные организации.'");
			ВызватьИсключение ТекстСообщения;
		КонецЕсли; 
		
		ВыборкаОС = РезультатДвижимоеИмуществоС2013.Выбрать();
		
	Иначе
		
		ТекстСообщения = НСтр("ru = 'Невозможно создать документ, выбрано имущество не принятое к учету.'");
		ВызватьИсключение ТекстСообщения;
		
	КонецЕсли; 
	
	// Заполнение документа.
	Пока ВыборкаОС.Следующий() Цикл
		НоваяСтрока = ОС.Добавить();
		НоваяСтрока.ОсновноеСредство = ВыборкаОС.Ссылка;
	КонецЦикла;
	
	ПервоначальныеСведения = Справочники.ОбъектыЭксплуатации.ПервоначальныеСведения(ОС[0].ОсновноеСредство, Дата);
	Организация = ПервоначальныеСведения.Организация;
	
	Если ОС.Количество() < СписокОС.Количество() Тогда
		ТекстСообщения = НСтр("ru = 'Некоторые основные средства невозможно добавить в документ, т.к. по ним не исчисляется налог на имущество.'");
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); 
	КонецЕсли; 
	
КонецПроцедуры

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

#Область ПроверкаЗаполнения

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

Процедура ИзменитьИПроверитьСниженнуюНалоговуюСтавку(Отказ)
	
	// Сниженная налоговая ставка может быть только при указанной льготе.
	Если Не ЗначениеЗаполнено(ОснованиеЛьготы) Тогда
		СниженнаяНалоговаяСтавка = 0;
		Возврат;
	КонецЕсли;
		
	СнижениеСтавкиНаПроцент = Перечисления.ВидыЛьготПоИмущественнымНалогам.СнижениеСтавкиНаПроцент;

	ПараметрыЛьготы = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОснованиеЛьготы, "ВидЛьготы, ПроцентУменьшения");
	
	Если ЗначениеЗаполнено(ОснованиеЛьготы) 
			И НалоговаяСтавка > 0 
			И ПараметрыЛьготы.ВидЛьготы = СнижениеСтавкиНаПроцент Тогда

		СниженнаяНалоговаяСтавка = НалоговаяСтавка - ПараметрыЛьготы.ПроцентУменьшения;
	
		// Проверим сниженную ставку.
		Если СниженнаяНалоговаяСтавка = 0 Тогда
			ШаблонПредупреждения = НСтр("ru = 'Сниженная налоговая ставка в результате применения льготы меньше нуля.
										|Ставка налога %1%% снижена на %2%%.'");

			ТекстПредупреждения = СтрШаблон(ШаблонПредупреждения, НалоговаяСтавка, ПараметрыЛьготы.ПроцентУменьшения);

			ОбщегоНазначения.СообщитьПользователю(ТекстПредупреждения, ЭтотОбъект, "ОснованиеЛьготы");

			Отказ = Истина;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ЗаданияКЗакрытиюМесяца

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

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

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

#Область Прочее

Процедура ЗаблокироватьЧитаемыеДанные()

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

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

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

#КонецЕсли

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