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