Изменение параметров НМА / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ЗаблокироватьДанные();
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	
	ИзменениеПараметровНМАЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьНаОснованииИзмененияПараметров(Основание, НематериальныйАктив = Неопределено)

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

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

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

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

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

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

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

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

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

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

	Запрос.УстановитьПараметр("МетодНачисленияАмортизацииУУФлаг", МетодНачисленияАмортизацииУУФлаг);
	Запрос.УстановитьПараметр("МетодНачисленияАмортизацииУУ", МетодНачисленияАмортизацииУУ);
	Запрос.УстановитьПараметр("КоэффициентУскоренияУУФлаг", КоэффициентУскоренияУУФлаг);
	Запрос.УстановитьПараметр("ОбъемНаработкиФлаг", ОбъемНаработкиФлаг);

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

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

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

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

Процедура ПроверитьАмортизация(МассивНепроверяемыхРеквизитов, Отказ)

	Для каждого ДанныеСтроки Из Амортизация Цикл
		ИзменениеПараметровНМАЛокализация.ПроверитьСтрокуАмортизация(ЭтотОбъект, ДанныеСтроки, Отказ);
	КонецЦикла;
	
	Если Амортизация.Количество() < 2 Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Амортизация.Коэффициент");
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

#КонецЕсли

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