Изменение параметров ОС (2.2) / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура СформироватьЗаданияКЗакрытиюМесяцаПриЗаписи()

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

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

#КонецЕсли

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