Амортизация НМА и списание расходов по НИОКР (2.2) / Модуль объекта

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

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

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

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

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

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

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

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

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

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

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

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

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

Процедура СформироватьЗаданиеАмортизацияНМАПриОтменеПроведения()

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

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

#КонецЕсли

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