#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
ИнициализироватьДокументПередЗаполнением();
ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.НематериальныеАктивы")
ИЛИ ТипДанныхЗаполнения = Тип("Массив")
И ДанныеЗаполнения.Количество() <> 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", Ложь);
ВспомогательныеРеквизиты.Вставить("ВедетсяУчетПостоянныхИВременныхРазниц", Ложь);
ВалютаУпр = Константы.ВалютаУправленческогоУчета.Получить();
ВалютаРегл = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
ВспомогательныеРеквизиты.Вставить("ВалютыСовпадают", ВалютаУпр = ВалютаРегл);
ВспомогательныеРеквизиты.Вставить("ИспользоватьУчетВнеоборотныхАктивовПоНаправлениямДеятельности",
ПолучитьФункциональнуюОпцию("ИспользоватьУчетВнеоборотныхАктивовПоНаправлениямДеятельности"));
КорректировкаСтоимостиИАмортизацииНМАЛокализация.ДополнитьВспомогательныеРеквизиты(ЭтотОбъект, ВспомогательныеРеквизиты);
Возврат ВспомогательныеРеквизиты;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли