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