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