Остатки и доступность товаров / Форма отчета самообслуживание / Модуль формы

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

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

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

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

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ДоступностьПоДатамПриИзмененииБезКонтекста(Компоновщик, ДоступностьПоДатам)
	
	Для Каждого ТаблицаНастроек Из Компоновщик.Настройки.Структура Цикл
		Если ТипЗнч(ТаблицаНастроек) = Тип("ТаблицаКомпоновкиДанных") Тогда
		Для Каждого ЭлементНастроек Из ТаблицаНастроек.Колонки Цикл
			
			НайденнаяГруппировка = НайтиГруппировкуРекурсивно(ЭлементНастроек);
			Если НайденнаяГруппировка <> Неопределено Тогда
				
				ИдентификаторНастройки = НайденнаяГруппировка.ИдентификаторПользовательскойНастройки;
				ПользовательскаяНастройка = Компоновщик.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторНастройки);
				Если ПользовательскаяНастройка <> Неопределено Тогда
					ПользовательскаяНастройка.Использование = ДоступностьПоДатам;
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция НайтиГруппировкуРекурсивно(ЭлементНастроек)
	
	Если ТипЗнч(ЭлементНастроек) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда
		
		Если ЭлементНастроек.Имя = "ДатаДоступностиДляСамообслуживания" Тогда
			Возврат ЭлементНастроек;
		Иначе
			Для Каждого Элемент Из ЭлементНастроек.Структура Цикл
				
				НайденнаяГруппировка = НайтиГруппировкуРекурсивно(Элемент);
				Если НайденнаяГруппировка <> Неопределено Тогда
					Возврат НайденнаяГруппировка;
				КонецЕсли;
				
			КонецЦикла;
			Возврат Неопределено;
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

&НаСервере
Процедура СкладПриИзмененииСервер()

	ЭлементыОтбора = Отчет.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
	СписокОтбора = Новый СписокЗначений;
	МассивДоступныхСкладов = Элементы.Склад.СписокВыбора.ВыгрузитьЗначения();
	
	Если Не ЗначениеЗаполнено(Склад) Тогда
		
		СписокОтбора.ЗагрузитьЗначения(МассивДоступныхСкладов);
		
	Иначе
		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Склады.Ссылка КАК Склад
		|ИЗ
		|	Справочник.Склады КАК Склады
		|ГДЕ
		|	Склады.Ссылка В ИЕРАРХИИ(&ВыбранныйСклад)
		|	И Склады.Ссылка В(&ДоступныеСклады)";
		
		Запрос.УстановитьПараметр("ДоступныеСклады",МассивДоступныхСкладов);
		Запрос.УстановитьПараметр("ВыбранныйСклад",Склад);
		
		СписокОтбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Склад"));
		
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ЭлементыОтбора, "Склад", СписокОтбора);
	
КонецПроцедуры

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

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

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