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