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

файл

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

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

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

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

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

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

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

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

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

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

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

	Если Амортизация.Количество() = 1
		И Амортизация[0].Коэффициент = 0 Тогда
		Амортизация[0].Коэффициент = 1;
	КонецЕсли;

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

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

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

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

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

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

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

#Область Заполнение

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

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

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

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

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

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

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

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

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

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

Процедура ЗаполнитьНаОснованииРазукомплектацииОС(Основание)

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

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

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

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

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

#Область ПроверкаЗаполнения

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

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

Процедура ПроверитьОтражениеВУчете(Отказ)

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

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

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

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

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

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

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

	МассивНепроверяемыхРеквизитов.Добавить("Амортизация.ОрганизацияПолучательРасходов");
	
	Если Амортизация.Количество() < 2 Тогда
		МассивНепроверяемыхРеквизитов.Добавить("Амортизация.Коэффициент");
	КонецЕсли;
	
КонецПроцедуры

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

#Область Прочее

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

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

Процедура РассчитатьСлужебныеРеквизитыДляРасчетаАмортизации()

	СуммаКоэффициентовАмортизации = Амортизация.Итог("Коэффициент");
	
	СуммаКоэффициентовПредыдущихСтрок = 0;
	Для каждого ДанныеСтроки Из Амортизация Цикл
		ДанныеСтроки.СуммаКоэффициентовПредыдущихСтрок = СуммаКоэффициентовПредыдущихСтрок;
		СуммаКоэффициентовПредыдущихСтрок = СуммаКоэффициентовПредыдущихСтрок + ДанныеСтроки.Коэффициент;
	КонецЦикла; 
	
КонецПроцедуры

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

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

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

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

#КонецЕсли

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