Выбытие арендованных ОС (забалансовый учет) / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ПроверитьЧтоОСПолученыВАренду(Отказ)

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

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

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

#КонецЕсли

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