Передача ОС в аренду / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Если Основание.Свойство("ОсновноеСредство") Тогда
		ЗаполнитьНаОснованииОбъектаЭксплуатации(Основание.ОсновноеСредство);
	КонецЕсли; 
	
КонецПроцедуры

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

Функция ВспомогательныеРеквизиты()

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

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

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

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

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

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

#КонецЕсли

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