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