Принятие к учету ОС / Принятие к учету ОС / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	Если ОтборДата.Дата = '000101010000' Тогда
		ОтборДата.Вариант = ВариантСтандартнойДатыНачала.НачалоЭтогоДня;
	КонецЕсли;

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	НачатьОбновлениеСписка();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_ПринятиеКУчетуОС2_4" Тогда
		ОбновитьДанныеКогдаФормаСтанетАктивной();
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОтборДатаПриИзменении(Элемент)
	
	Если ОтборДата.Дата = '000101010000' Тогда
		ОтборДата.Вариант = ВариантСтандартнойДатыНачала.НачалоЭтогоДня;
	КонецЕсли;

	НачатьОбновлениеСписка();

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

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

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

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

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

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

&НаКлиенте
Процедура ОформитьПринятиеКУчету(Команда)
	
	ПараметрыФормы = ПолучитьПараметрыФормыПринятияКУчету(Ложь);
	
	Если ПараметрыФормы <> Неопределено Тогда
		ОткрытьФорму("Документ.ПринятиеКУчетуОС2_4.ФормаОбъекта", ПараметрыФормы);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьПринятиеКУчетуУзловКомпонент(Команда)
	
	ПараметрыФормы = ПолучитьПараметрыФормыПринятияКУчету(Истина);
	
	Если ПараметрыФормы <> Неопределено Тогда
		ОткрытьФорму("Документ.ПринятиеКУчетуУзловКомпонентовАмортизации.ФормаОбъекта", ПараметрыФормы);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОформитьМодернизацию(Команда)
	
	ПараметрыФормы = ПолучитьПараметрыФормыМодернизации();
	
	Если ПараметрыФормы <> Неопределено Тогда
		ОткрытьФорму("Документ.МодернизацияОС2_4.ФормаОбъекта", ПараметрыФормы);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСписок(Команда)
	
	НачатьОбновлениеСписка();

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ОбновитьДанныеКогдаФормаСтанетАктивной()

	ПодключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной", 0.8, Истина);

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

&НаКлиенте
Процедура Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной()
	
	Если ВводДоступен() Тогда
		НачатьОбновлениеСписка();
	Иначе
		ОбновитьДанныеКогдаФормаСтанетАктивной();
	КонецЕсли;

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

&НаКлиенте
Процедура НачатьОбновлениеСписка()

	ДлительнаяОперация = НачатьОбновлениеСпискаНаСервере();
	ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбновитьСписокЗавершение", ЭтотОбъект);
	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);

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

&НаСервере
Функция НачатьОбновлениеСпискаНаСервере()

	ПараметрыФункции = Новый Структура;
	ПараметрыФункции.Вставить("Дата", ОтборДата.Дата);
	ПараметрыФункции.Вставить("Организация", ОтборОрганизация);

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

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

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат.Статус = "Ошибка" Тогда
		ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
	КонецЕсли;

	ОбновитьСписокЗавершениеНаСервере(Результат.АдресРезультата);
	
КонецПроцедуры 

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

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

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