Списание ОС / Модуль объекта

файл

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

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

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

КонецПроцедуры

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

КонецПроцедуры

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

КонецПроцедуры

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

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

КонецПроцедуры

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

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

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

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

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

Процедура ЗаблокироватьЧитаемыеДанные()

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

Процедура ЗаполнитьДокументПоОтбору(Основание)

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

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

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

Процедура ЗаполнитьНаОснованииСписания(Основание, ОсновноеСредство = Неопределено)

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

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

	Документы.СписаниеОС2_4.ЗаполнитьСуммуСписанияНаОснованииВыбытияТМЦ(ЭтотОбъект);
	Документы.СписаниеОС2_4.ЗаполнитьСтатьюРасходовВыбытие(Организация, Дата, ОС, СтатьяРасходовВыбытие);
	
КонецПроцедуры

Процедура ЗаполнитьРеквизитыПередЗаписью()

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

Процедура ЗаполнитьНаОснованииИзмененияУсловийДоговораАренды(Основание)
	
	Если Не ЗначениеЗаполнено(Основание) Тогда
		Возврат;
	КонецЕсли;

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

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

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

	КонецЕсли;
	
КонецПроцедуры

Процедура ПроверитьОсновныеСредства(МассивНепроверяемыхРеквизитов, Отказ)

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

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

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

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

КонецФункции

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

#КонецЕсли

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