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