Амортизация НМА и списание расходов по НИОКР / Форма документа / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

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

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

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

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

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

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

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
	
	Если НЕ ЗначениеЗаполнено(Объект.НомерПакета) 
		И ЗначениеЗаполнено(Объект.Организация) Тогда
		Объект.НомерПакета = НомерПакетаПоУмолчанию(Объект.Организация);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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


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


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

	ДействиеПослеРасчета = "ЗакрытьФорму";
	
	ПараметрыЗаписи = Новый Структура;
	ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
	ПараметрыЗаписи.Вставить("РежимПроведения", РежимПроведенияДокумента.Неоперативный);

	Записать(ПараметрыЗаписи);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПроводкиМеждУчета(Команда)
	
	
	Возврат;
	
КонецПроцедуры

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

	ВнеоборотныеАктивыКлиентЛокализация.ПриВыполненииКоманды(Команда, ЭтотОбъект);

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

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

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

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

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

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

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

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

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

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

	ПредставлениеПериодаРегистрации = ОбщегоНазначенияУТКлиентСервер.ПолучитьПредставлениеПериодаРегистрации(Объект.Дата);

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

&НаКлиенте
Процедура НачатьРасчетАмортизации()

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

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

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

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;

	РезультатРасчета = ПослеРасчетаАмортизацииНаСервере(Результат);

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

&НаКлиенте
Процедура ВыполнитьДействиеПослеРасчета()

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

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

&НаСервере
Функция ПослеРасчетаАмортизацииНаСервере(Знач Результат)

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

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

&НаКлиенте
Процедура ЗаписатьИВыполнитьДействие(ЗаголовокДействия, ДействиеПослеРасчета)
	
	ДопПараметрыВопроса = Новый Структура("ДействиеПослеРасчета", ДействиеПослеРасчета);

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

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

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

&НаСервереБезКонтекста
Функция НомерПакетаПоУмолчанию(Знач Организация)

	Возврат Документы.АмортизацияНМА2_4.НомерПакетаПоУмолчанию(Организация);

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

&НаСервере
Процедура ПрочитатьЗаписанныйДокумент()

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

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

&НаКлиенте
Процедура ПродолжитьВыполнениеКомандыЛокализации(ИмяКоманды, ПараметрыОповещения) Экспорт

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

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

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