Разукомплектация ОС / Форма документа / Модуль формы

файл

#Область ОписаниеПеременных

&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// СтандартныеПодсистемы.РаботаСФайлами
	РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

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

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

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

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(
		ЭтотОбъект,
		ТекущийОбъект,
		ПараметрыЗаписи);
	// Конец ИнтеграцияС1СДокументооборотом
	
КонецПроцедуры

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

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

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

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

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

#Область СтраницаОсновное

&НаКлиенте
Процедура ХозяйственнаяОперацияПриИзменении(Элемент)
	
	ХозяйственнаяОперацияПриИзмененииНаСервере();	
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ВнеоборотныеАктивыКлиент.УстановитьТекущееВремяДляПрошлойДаты(Объект.Дата);
	
	НастроитьЗависимыеЭлементыФормы(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ВариантОтраженияВУчетеПриИзменении(Элемент)
	
	ВариантОтраженияВУчетеПриИзмененииНаСервере();
	
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	ИнициализацияФормыПриСозданииНаСервере();
	НастроитьЗависимыеЭлементыФормы(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ОсновноеСредствоПриИзменении(Элемент)
	
	ПроверитьВыборОсновногоСредства();
	
КонецПроцедуры

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

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

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

#Область СтраницаОтражениеРасходов

&НаКлиенте
Процедура СтатьяРасходовБУПриИзменении(Элемент)
	
	ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элементы.СтатьяРасходовБУ);
	
	НастроитьЗависимыеЭлементыФормы(Элемент.Имя);
	
КонецПроцедуры

&НаКлиенте
Процедура СтатьяРасходовБУНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовБУНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовБУАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовБУОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура СтатьяРасходовУУПриИзменении(Элемент)
	
	ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элементы.СтатьяРасходовУУ);
	
	НастроитьЗависимыеЭлементыФормы(Элемент.Имя);
	
КонецПроцедуры

&НаКлиенте
Процедура СтатьяРасходовУУНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

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

&НаКлиенте
Процедура АналитикаРасходовУУАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура АналитикаРасходовУУОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
	
	ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(ЭтотОбъект, Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка);
	
КонецПроцедуры

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

#Область СтандартныеПодсистемы

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)

	РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);

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

&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)

	РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент,
				ПараметрыПеретаскивания, СтандартнаяОбработка);

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

&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)

	РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент,
				ПараметрыПеретаскивания, СтандартнаяОбработка);

КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыОС

&НаКлиенте
Процедура ОСВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ИзменитьСтрокуОС();
	
КонецПроцедуры

&НаКлиенте
Процедура ОСПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Отказ = Истина;
	ИзменитьСтрокуОС(Истина, Копирование);
	
КонецПроцедуры

&НаКлиенте
Процедура ОСПередНачаломИзменения(Элемент, Отказ)
	
	Если Элемент.ТекущийЭлемент <> Элементы.ОСНомерСтроки Тогда
		Отказ = Истина;
		ИзменитьСтрокуОС();
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ОСОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	ВнеоборотныеАктивыКлиентСервер.ОбработкаВыбораЭлемента(Объект.ОС, "ОсновноеСредство", ВыбранноеЗначение);
	
КонецПроцедуры

&НаКлиенте
Процедура ОСПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	ЗаполнитьЗначенияРеквизитовОСДоИзменения();
	
КонецПроцедуры

&НаКлиенте
Процедура ОСОсновноеСредствоПриИзменении(Элемент)
	
	ОСОсновноеСредствоПриИзмененииНаСервере();
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Подобрать(Команда)
	
	ОценкаПроизводительностиКлиент.ЗамерВремени("Справочник.ОбъектыЭксплуатации.ФормаВыбора");

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

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

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьСведения(Команда)
	
	ИзменитьСтрокуОС();
	
КонецПроцедуры

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

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

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

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

#Область ПодключаемыеКоманды

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
		Команда,
		ЭтотОбъект,
		Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)

	РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);

КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

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

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

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

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

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()

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

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

	УчетПрослеживаемыхТоваровЛокализация.УстановитьЗаголовокНомерГТД(Элементы, 
		Элементы.ПрослеживаемыеТоварыНомерГТД.Имя, Истина);

	ХозяйственнаяОперацияПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВариантОтраженияВУчетеПриИзмененииНаСервере()

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

	ЗаполнитьИнформациюВПодвале();
	
КонецПроцедуры
 
&НаКлиенте
Процедура НастроитьЗависимыеЭлементыФормы(Знач ИзмененныеРеквизитыИлиЭлемент = "")

	Если ТипЗнч(ИзмененныеРеквизитыИлиЭлемент) = Тип("Строка") Тогда
		ИзмененныеРеквизиты = ИзмененныеРеквизитыИлиЭлемент;
	Иначе
		ИзмененныеРеквизиты = ИзмененныеРеквизитыИлиЭлемент.Имя;
	КонецЕсли;
	
	НастроитьЗависимыеЭлементыФормыНаСервере(ИзмененныеРеквизиты)

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

&НаСервере
Процедура НастроитьЗависимыеЭлементыФормыНаСервере(ИзмененныеРеквизиты = "")

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

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

&НаСервере
Процедура ЗаполнитьИнформациюВПодвале()

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

	Если ЗаголовокНадписи.Количество() <> 0 Тогда
		Элементы.Информация.Заголовок = Новый ФорматированнаяСтрока(ЗаголовокНадписи);
		Элементы.КартинкаИнформация.Видимость = Истина;
		Элементы.Информация.Видимость = Истина;
	Иначе
		Элементы.КартинкаИнформация.Видимость = Ложь;
		Элементы.Информация.Видимость = Ложь;
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьЗначенияРеквизитовОСДоИзменения()

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

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

&НаКлиенте
Процедура ПроверитьВыборОсновногоСредства()

	РезультатПроверки = ПараметрыВыбораОсновныхСредств(Объект);
	
	Если РезультатПроверки.ПроблемныеОС.Количество() <> 0 Тогда
		
		СписокКнопок = Новый СписокЗначений;
		СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Продолжить'"));
		СписокКнопок.Добавить(КодВозвратаДиалога.Отмена);

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыВыбораОсновныхСредств(Объект)

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

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

&НаСервереБезКонтекста
Функция ПараметрыВыбораОсновныхСредствНаСервере(Знач ОсновноеСредство, Знач СписокОС, Знач Дата)

	Возврат Документы.РазукомплектацияОС.ПроверитьВыборОсновныхСредств(ОсновноеСредство, СписокОС, Дата);

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

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

&НаСервере
Процедура ПроверитьВыборОсновногоСредстваЗавершениеНаСервере(Знач РезультатПроверки)

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

	Для каждого ДанныеСтроки Из СтрокиКУдалению Цикл
		Объект.ОС.Удалить(ДанныеСтроки);
	КонецЦикла; 
	
	ЗаполнитьШапкуПоВыбраннымОС();

	ОпределитьСтоимостьИсходногоОС();
	
	ЗаполнитьИнформациюВПодвале();

	НастроитьЗависимыеЭлементыФормыНаСервере("ОсновноеСредство");
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
	
	Закрыть();
	
КонецПроцедуры

&НаСервере
Процедура ОпределитьСтоимостьИсходногоОС()

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

КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьШапкуПоВыбраннымОС()

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

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

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

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

	ПараметрыФормы.Вставить("СписокОС", СписокОС);
	
	Возврат ПараметрыФормы;
	
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьСохраняемыеРеквизитыРедактированияСтроки()

	СохраняемыеРеквизиты =
	"ОсновноеСредство,
	|СтоимостьБУ,
	|СтоимостьНУ,
	|СтоимостьПР,
	|СтоимостьВР,
	|СтоимостьУУ,
	|ЛиквидационнаяСтоимость,
	|ЛиквидационнаяСтоимостьРегл,
	|ГодоваяНормаАмортизацииБУ,
	|ГрафикАмортизации,
	|ГруппаФинансовогоУчета,
	|КоэффициентУскоренияБУ,
	|КоэффициентУскоренияУУ,
	|МетодНачисленияАмортизацииБУ,
	|МетодНачисленияАмортизацииУУ,
	|СрокИспользованияБУ,
	|СрокИспользованияУУ,
	|ПоказательНаработки,
	|ОбъемНаработки";
	
	Возврат СохраняемыеРеквизиты;

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

&НаКлиенте
Процедура РасширенноеРедактированиеСтрокиЗавершение(Результат, ДополнительныеПараметры) Экспорт

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	РасширенноеРедактированиеСтрокиЗавершениеНаСервере(Результат, ДополнительныеПараметры);

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

&НаСервере
Процедура РасширенноеРедактированиеСтрокиЗавершениеНаСервере(Знач РезультатЗакрытия, Знач ДополнительныеПараметры)

	Модифицированность = Истина;

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

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

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

	Возврат ДанныеКорректны;
КонецФункции

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

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

&НаСервере
Процедура ОСОсновноеСредствоПриИзмененииНаСервере()
	
	Элементы.ПрослеживаемыеТоварыОсновноеСредство.СписокВыбора.ЗагрузитьЗначения(ДоступныеОсновныеСредства());	
	
КонецПроцедуры

&НаСервере
Функция АдресВХранилище()
	
	Таб = Новый ТаблицаЗначений();
	
	АдресОстатковПрослеживаемыхТоваров = ПоместитьВоВременноеХранилище(
		Таб,
		УникальныйИдентификатор);

	Возврат АдресОстатковПрослеживаемыхТоваров; 
	
КонецФункции

&НаКлиенте
Процедура ПодборПоОстаткамЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	ОценкаПроизводительностиКлиент.ЗамерВремени(
	"Документ.РазукомплектацияОС.Форма.ФормаДокумента.ПодобратьПоОстаткамПрослеживаемыхТоваров");
	
	АдресОстатковПрослеживаемыхТоваров = АдресВХранилище();

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

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

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

&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры

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

	НастроитьЗависимыеЭлементыФормыНаСервере("ХозяйственнаяОперация");   
	
КонецПроцедуры

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

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