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