Корректировка стоимости и амортизации НМА / Модуль объекта

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	КорректировкаПервоначальнойСтоимости = Истина;

	КорректировкаАмортизации = Истина;
	ОтражениеУвеличенияАмортизации = Истина;
	ПараметрыРасходовСовпадаютСДаннымиУчетаУвеличениеАмортизации = Истина;
	ВключаетАмортизациюТекущегоМесяца = Ложь;
	
КонецПроцедуры

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

	Если Основание.Свойство("НематериальныйАктив") Тогда
		ЗаполнитьНаОснованииНМА(Основание.НематериальныйАктив, Основание);
	КонецЕсли; 
	
КонецПроцедуры

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

	Если ПрименениеЦелевогоФинансирования Тогда
		ПараметрыРасходовСовпадаютСДаннымиУчетаУменьшениеДоходовЦФ = Истина;
	КонецЕсли;

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

Процедура ЗаполнитьДокументНаОснованииПринятияКУчетуНМА(Основание)

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

Процедура ЗаполнитьДокументНаОснованииИзменениеПараметровНМА(Основание)

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

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

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

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

Процедура ПроверитьТабличнуюЧасть(МассивНепроверяемыхРеквизитов, Отказ)

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

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

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

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

Процедура ЗаполнитьРеквизитыПередЗаписью()

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

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

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

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

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

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

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

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

#КонецЕсли

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