Карточка расчетов с поставщиками / Модуль объекта

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

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

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

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

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

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

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

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

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

	СегментыСервер.ВключитьОтборПоСегментуПартнеровВСКД(КомпоновщикНастроек);
	
КонецПроцедуры

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

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

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

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

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

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

Функция ИмяКлючаВариантаВЗависимостиОтФлагаБазовая(ИмяКлючаВарианта, ЭтоБазовая)
	
	Если Не ЭтоБазовая Тогда
		Возврат ИмяКлючаВарианта;
	КонецЕсли;
	
	Если ИмяКлючаВарианта = "КарточкаРасчетовСПоставщиками" Тогда
		Возврат "КарточкаРасчетовСПоставщикамиБазовая";
	ИначеЕсли ИмяКлючаВарианта = "КарточкаРасчетовСПоставщикамиПоДокументамКонтекст" Тогда
		Возврат "КарточкаРасчетовСПоставщикамиПоДокументамКонтекстБазовая";
	ИначеЕсли ИмяКлючаВарианта = "КарточкаРасчетовСПоставщикамиКонтекст" Тогда
		Возврат "КарточкаРасчетовСПоставщикамиКонтекстБазовая";
	ИначеЕсли ИмяКлючаВарианта = "КарточкаРасчетовСПоставщикомКонтекст" Тогда
		Возврат "КарточкаРасчетовСПоставщикомКонтекстБазовая";
	КонецЕсли;
	
КонецФункции

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

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

#КонецЕсли

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