Принятие к учету ОС (2.2) / Модуль объекта

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

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

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

Процедура ПриКопировании(ОбъектКопирования)
	
	ИнициализироватьДокумент();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ПроверитьГрафикАмортизации(Отказ)
	
	Если МетодНачисленияАмортизацииБУ = Перечисления.СпособыНачисленияАмортизацииОС.ПропорциональноОбъемуПродукции
		Или МетодНачисленияАмортизацииБУ = Перечисления.СпособыНачисленияАмортизацииОС.ПоЕНАОФНа1000кмПробега
		Или Не ЗначениеЗаполнено(ГрафикАмортизации) Тогда
		
		Возврат;
		
	КонецЕсли;
	
	Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент1,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент2,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент3,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент4,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент5,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент6,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент7,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент8,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент9,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент10,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент11,
		|	ГодовыеГрафикиАмортизацииОС.Коэффициент12
		|ИЗ
		|	Справочник.ГодовыеГрафикиАмортизацииОС КАК ГодовыеГрафикиАмортизацииОС
		|ГДЕ
		|	ГодовыеГрафикиАмортизацииОС.Ссылка = &Ссылка");
	Запрос.УстановитьПараметр("Ссылка", ГрафикАмортизации);
	Результат = Запрос.Выполнить();
	ВыборкаГрафика = Результат.Выбрать();
	ВыборкаГрафика.Следующий();
	
	СуммаКоэффициентов1 = 0;
	СуммаКоэффициентов2 = 0;
	СуммаКоэффициентов3 = 0;
	
	МесяцНачала = Месяц(Дата);
	МесяцНачала = ?(МесяцНачала=12, 1, МесяцНачала+1);
	МесяцЗавершения = Месяц(ДобавитьМесяц(Дата, СрокИспользованияБУ));
	
	Для МесяцНачисления = 1 По 12 Цикл
		Коэффициент = ВыборкаГрафика["Коэффициент" + МесяцНачисления];
		
		Если МесяцНачисления <= МесяцЗавершения Тогда
			СуммаКоэффициентов3 = СуммаКоэффициентов3 + Коэффициент;
		КонецЕсли;
		
		Если МесяцНачисления >= МесяцНачала Тогда
			СуммаКоэффициентов1 = СуммаКоэффициентов1 + Коэффициент;
		КонецЕсли;
		
		Если МесяцНачисления >= МесяцНачала И МесяцНачисления <= МесяцЗавершения Тогда
			СуммаКоэффициентов2 = СуммаКоэффициентов2 + Коэффициент;
		КонецЕсли;
		
	КонецЦикла;
	
	Если СрокИспользованияБУ<12 Или (Месяц(Дата)+СрокИспользованияБУ)<12 Тогда
		Если СуммаКоэффициентов2=0 Тогда
			
			Отказ = Истина;
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				НСтр("ru='График амортизации не содержит коэффицентов распределения, соответствующих заданному периоду эксплуатации ОС.
				|Выберите другой график амортизации или срок полезного использования'"),
				ЭтотОбъект,
				"ГрафикАмортизации");
			
		КонецЕсли;
	Иначе
		Если СуммаКоэффициентов1=0 Тогда
			
			Отказ = Истина;
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				НСтр("ru='График амортизации не содержит коэффицентов распределения для первого года периода эксплуатации ОС.
				|Выберите другой график амортизации или срок полезного использования'"),
				ЭтотОбъект,
				"ГрафикАмортизации");
			
		ИначеЕсли СуммаКоэффициентов3=0 Тогда
			
			Отказ = Истина;
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
				НСтр("ru='График амортизации не содержит коэффицентов распределения для последнего года периода эксплуатации ОС.
				|Выберите другой график амортизации или срок полезного использования'"),
				ЭтотОбъект,
				"ГрафикАмортизации");
			
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ЗаполнитьСуммыЦелевыхСредств(ТаблицаОС)
	
	ТаблицаОС.ЗаполнитьЗначения(Неопределено, "СуммаЦелевыхСредств");
	
	Если ВариантПримененияЦелевогоФинансирования = Перечисления.ВариантыПримененияЦелевогоФинансирования.Полное Тогда
		
		ТаблицаЦФ = ЦелевоеФинансирование.Выгрузить();
		ТаблицаЦФ.ЗаполнитьЗначения(Неопределено, "Сумма");
		ЦелевоеФинансирование.Загрузить(ТаблицаЦФ);
		
	ИначеЕсли ВариантПримененияЦелевогоФинансирования = Перечисления.ВариантыПримененияЦелевогоФинансирования.Частичное Тогда
		Если ТаблицаОС.Количество() > 0 Тогда
			СуммаКРаспределению = ЦелевоеФинансирование.Итог("Сумма");
			СуммаСтроки = Окр(СуммаКРаспределению / ТаблицаОС.Количество(), 2);
			ТаблицаОС.ЗаполнитьЗначения(СуммаСтроки, "СуммаЦелевыхСредств");
			ТаблицаОС[0].СуммаЦелевыхСредств = ТаблицаОС[0].СуммаЦелевыхСредств - (СуммаКРаспределению - СуммаСтроки*ТаблицаОС.Количество());
		КонецЕсли;
	Иначе
		ЦелевоеФинансирование.Очистить();
	КонецЕсли;
	
КонецПроцедуры

Процедура ЦелевоеФинансированиеОчиститьСубконто()
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Таблица", ЦелевоеФинансирование.Выгрузить());
	Запрос.Текст =
	"ВЫБРАТЬ
	|	(ВЫРАЗИТЬ(Таблица.НомерСтроки КАК ЧИСЛО)) - 1 КАК ИндексСтроки,
	|	ВЫРАЗИТЬ(Таблица.Счет КАК ПланСчетов.Хозрасчетный) КАК Счет,
	|	Таблица.Субконто1 КАК Субконто1,
	|	Таблица.Субконто2 КАК Субконто2,
	|	Таблица.Субконто3 КАК Субконто3
	|ПОМЕСТИТЬ втДанныеЗаполнения
	|ИЗ
	|	&Таблица КАК Таблица
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	втДанныеЗаполнения.ИндексСтроки,
	|	
	|	ВЫБОР КОГДА ХозрасчетныйВидыСубконто1.Ссылка ЕСТЬ NULL
	|		ТОГДА НЕОПРЕДЕЛЕНО
	|		ИНАЧЕ втДанныеЗаполнения.Субконто1
	|	КОНЕЦ КАК Субконто1,
	|	ВЫБОР КОГДА ХозрасчетныйВидыСубконто2.Ссылка ЕСТЬ NULL
	|		ТОГДА НЕОПРЕДЕЛЕНО
	|		ИНАЧЕ втДанныеЗаполнения.Субконто2
	|	КОНЕЦ КАК Субконто2,
	|	ВЫБОР КОГДА ХозрасчетныйВидыСубконто3.Ссылка ЕСТЬ NULL
	|		ТОГДА НЕОПРЕДЕЛЕНО
	|		ИНАЧЕ втДанныеЗаполнения.Субконто3
	|	КОНЕЦ КАК Субконто3
	|ИЗ
	|	втДанныеЗаполнения КАК втДанныеЗаполнения
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто1
	|		ПО втДанныеЗаполнения.Счет = ХозрасчетныйВидыСубконто1.Ссылка И (ХозрасчетныйВидыСубконто1.НомерСтроки = 1)
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто2
	|		ПО втДанныеЗаполнения.Счет = ХозрасчетныйВидыСубконто2.Ссылка И (ХозрасчетныйВидыСубконто2.НомерСтроки = 2)
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто3
	|		ПО втДанныеЗаполнения.Счет = ХозрасчетныйВидыСубконто3.Ссылка И (ХозрасчетныйВидыСубконто3.НомерСтроки = 3)";
	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	Выборка = Результат.Выбрать();
	Пока Выборка.Следующий() Цикл
		СтрокаЦФ = ЦелевоеФинансирование[Выборка.ИндексСтроки];
		ЗаполнитьЗначенияСвойств(СтрокаЦФ, Выборка);
	КонецЦикла;
	
КонецПроцедуры

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

Процедура ПроверитьСпособПоступленияОС(Отказ)

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

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

#КонецЕсли

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