Списание ОС / Списание ОС при выбытии ТМЦ / Модуль формы

файл

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	Элементы.СписокМесяцВыбытия.Формат = НСтр("ru = 'ДФ=''ММММ гггг'''");
	
	Если ОтборДата.ДатаНачала = '000101010000'
		И ОтборДата.ДатаОкончания = '000101010000' Тогда
		ОтборДата.Вариант = ВариантСтандартногоПериода.ЭтотМесяц;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	НачатьОбновлениеСписка();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_СписаниеИзЭксплуатации"
		ИЛИ ИмяСобытия = "Запись_ПрочееОприходованиеТоваров"
		ИЛИ ИмяСобытия = "Запись_СписаниеОС2_4" Тогда
		ОбновитьДанныеКогдаФормаСтанетАктивной();
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ОтборОрганизацияПриИзменении(Элемент)
	
	НачатьОбновлениеСписка();
	
КонецПроцедуры

&НаКлиенте
Процедура ОтборДатаПриИзменении(Элемент)
	
	Если ОтборДата.ДатаНачала = '000101010000'
		И ОтборДата.ДатаОкончания = '000101010000' Тогда
		ОтборДата.Вариант = ВариантСтандартногоПериода.ЭтотМесяц;
	КонецЕсли;
	
	НачатьОбновлениеСписка();

КонецПроцедуры

&НаКлиенте
Процедура ОтборДокументСписанияПриИзменении(Элемент)
	
	НачатьОбновлениеСписка();

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Поле = Элементы.СписокОсновноеСредство Тогда
		
		СтандартнаяОбработка = Ложь;
		ПоказатьЗначение(, ТекущиеДанные.ОсновноеСредство);
		
	ИначеЕсли Поле = Элементы.СписокДокументВыбытия Тогда
		
		СтандартнаяОбработка = Ложь;
		ПоказатьЗначение(, ТекущиеДанные.ДокументВыбытия);
		
	ИначеЕсли Поле = Элементы.СписокДокументСписания Тогда
		
		СтандартнаяОбработка = Ложь;
		
		Если ЗначениеЗаполнено(ТекущиеДанные.ДокументСписания) Тогда
			ПоказатьЗначение(, ТекущиеДанные.ДокументСписания);
		Иначе
			ВыделенныеСтроки = Новый Массив;
			ВыделенныеСтроки.Добавить(ТекущиеДанные.ПолучитьИдентификатор());
			СоздатьСписание(ВыделенныеСтроки);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ОформитьСписание(Команда)
	
	СоздатьСписание(Элементы.Список.ВыделенныеСтроки);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСписок(Команда)
	
	НачатьОбновлениеСписка();

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	#Область СписокДокументВыбытия
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокДокументВыбытия.Имя);

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	#КонецОбласти
	
	#Область СписокДокументСписания_Заполнено
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокДокументСписания.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ДокументСписания");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	#КонецОбласти
	
	#Область СписокДокументСписания_НеЗаполнено
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокДокументСписания.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ДокументСписания");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Оформить'"));
	#КонецОбласти
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДанныеКогдаФормаСтанетАктивной()

	ПодключитьОбработчикОжидания("Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной", 0.8, Истина);

КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьДанныеКогдаФормаСтанетАктивной()
	
	Если ВводДоступен() Тогда
		НачатьОбновлениеСписка();
	Иначе
		ОбновитьДанныеКогдаФормаСтанетАктивной();
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура НачатьОбновлениеСписка()

	ДлительнаяОперация = НачатьОбновлениеСпискаНаСервере();
	ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбновитьСписокЗавершение", ЭтотОбъект);
	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);

КонецПроцедуры

&НаСервере
Функция НачатьОбновлениеСпискаНаСервере()

	ПараметрыФункции = Новый Структура;
	ПараметрыФункции.Вставить("НачалоПериода", ОтборДата.ДатаНачала);
	ПараметрыФункции.Вставить("КонецПериода", ОтборДата.ДатаОкончания);
	ПараметрыФункции.Вставить("Организация", ОтборОрганизация);
	ПараметрыФункции.Вставить("ДокументСписания", ОтборДокументСписания);

	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияФункции(УникальныйИдентификатор);
	
	ДлительнаяОперация = ДлительныеОперации.ВыполнитьФункцию(
		ПараметрыВыполнения, "Документы.СписаниеОС2_4.ДанныеРабочегоМеста", ПараметрыФункции);
	
	Возврат ДлительнаяОперация;
	
КонецФункции

&НаКлиенте
Процедура ОбновитьСписокЗавершение(Результат, ДополнительныеПараметры) Экспорт

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат.Статус = "Ошибка" Тогда
		ВызватьИсключение Результат.КраткоеПредставлениеОшибки;
	КонецЕсли;

	ОбновитьСписокЗавершениеНаСервере(Результат.АдресРезультата);
	
КонецПроцедуры 

&НаСервере
Процедура ОбновитьСписокЗавершениеНаСервере(Знач АдресРезультата)
	
	Список.Очистить();
	
	Результат = ПолучитьИзВременногоХранилища(АдресРезультата);
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Результат, Список);
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьСписание(ВыделенныеСтроки)
	
	СписокПартий = Новый Массив;
	СписокОснований = Новый Массив;
	
	ТекущийМесяцВыбытия = Неопределено;
	ТекущаяОрганизация = Неопределено;

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

#КонецОбласти

Связанные материалы