Объединение ОС / Модуль объекта

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ПроверитьПараметрыУчета(ПараметрыВыбораОсновныхСредств, Отказ)

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

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

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

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

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

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

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

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

Процедура ЗаполнитьРеквизитыПередЗаписью()

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

	Если ОтражатьВУпрУчете И ОтражатьВРеглУчете Тогда
		ДокументВДругомУчете = Неопределено;
	КонецЕсли;

	Если ВалютаУпр = ВалютаРегл Тогда
		ЛиквидационнаяСтоимость = ЛиквидационнаяСтоимостьРегл;
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

Функция ПараметрыВыбораОсновныхСредств()

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

	Возврат ПараметрыВыбораОсновныхСредств;
	
КонецФункции

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

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

#КонецЕсли

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