Амортизация и износ основных средств (2.2) / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура СформироватьЗаданияКЗакрытиюМесяца()

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

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

#КонецЕсли

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