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