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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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