Ведомость по товарам на складах / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныйПрограммныйИнтерфейс

// Настройки общей формы отчета подсистемы "Варианты отчетов".
//
// Параметры:
//   Форма - ФормаКлиентскогоПриложения - Форма отчета.
//   КлючВарианта - Строка - Имя предопределенного варианта отчета или уникальный идентификатор пользовательского.
//   Настройки - См. ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию
//
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
	
	Настройки.События.ПриСозданииНаСервере = Истина;
	Настройки.События.ПередЗагрузкойНастроекВКомпоновщик = Истина;
	
КонецПроцедуры

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

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

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

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

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

	КомпоновкаДанныхСервер.УстановитьЗаголовкиМакетаКомпоновки(ПараметризуемыеЗаголовкиПолей(), МакетКомпоновки);
	КомпоновкаДанныхСервер.УстановитьЗаголовкиМакетаКомпоновки(СтруктураДинамическихЗаголовков(), МакетКомпоновки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

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

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

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

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

КонецФункции

Функция ПараметризуемыеЗаголовкиПолей()
	
	Возврат КомпоновкаДанныхСервер.СоответствиеЗаголовковПолейЕдиницИзмерений(КомпоновщикНастроек);
	
КонецФункции

Функция СтруктураДинамическихЗаголовков()
	ДинамическиеЗаголовки = Новый Структура;
	
	Параметр = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек, "ГруппировкаНоменклатуры");
	ДоступнаяНастройка = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(КомпоновщикНастроек.Настройки, Параметр);
	Если ДоступнаяНастройка <> Неопределено Тогда
		ПредставлениеЗначенияПараметра = ДоступнаяНастройка.ДоступныеЗначения[Параметр.Значение-1];
		ДинамическиеЗаголовки.Вставить("ГруппировкаНоменклатуры", ПредставлениеЗначенияПараметра);
	КонецЕсли;
	
	Возврат ДинамическиеЗаголовки;
КонецФункции

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

#КонецЕсли

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