Ведомость по товарам организаций / Модуль объекта

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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