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

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

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ЗавершитьРедактирование(Команда)
	
	Закрыть(ПолучитьНастройкиКомпоновкиСервер());
	
КонецПроцедуры

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

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

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

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

&НаСервере
Процедура ЗаполнитьУдаляемыеПоля(УдаляемыеПоля);
	
	// Пакет предложений и каталог
	Если РежимВыгрузки = 0 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьУдаляемыеПоляОтбораКаталог(УдаляемыеПоля);
		ОбменССайтомПереопределяемый.ЗаполнитьУдаляемыеПоляОтбораПакетПредложений(УдаляемыеПоля);
		
		// Каталог
	ИначеЕсли РежимВыгрузки = 1 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьУдаляемыеПоляОтбораКаталог(УдаляемыеПоля);
		
		// Пакет предложений
	ИначеЕсли РежимВыгрузки = 2 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьУдаляемыеПоляОтбораПакетПредложений(УдаляемыеПоля);
		
		// Обновление пакета предложения
	ИначеЕсли РежимВыгрузки = 3 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьУдаляемыеПоляОтбораОбновлениеПакетаПредложений(УдаляемыеПоля);
		
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УдалитьПоляОтбораИзСхемы(ЭлементыОтбора, УдаляемыеПоля)
	
	Если УдаляемыеПоля.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Счетчик = 0;
	Пока Счетчик < ЭлементыОтбора.Количество() Цикл
		
		ПолеОтбора = ЭлементыОтбора[Счетчик];
		ИмяПоля = Строка(ПолеОтбора.ЛевоеЗначение);
		
		Если Не УдаляемыеПоля.Найти(ИмяПоля) = Неопределено Тогда
			
			ЭлементыОтбора.Удалить(ПолеОтбора);
			
		Иначе
			Счетчик = Счетчик + 1;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьПереопределяемыеПоля(СхемаВыгрузкиДанных)
	
	ПоляОтбора = Новый Соответствие;
	
	// Пакет предложений и каталог
	Если РежимВыгрузки = 0 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьПоляОтбораКаталога(ПоляОтбора);
		ОбменССайтомПереопределяемый.ЗаполнитьПоляОтбораПакетаПредложений(ПоляОтбора);
		
	// Каталог
	ИначеЕсли РежимВыгрузки = 1 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьПоляОтбораКаталога(ПоляОтбора);
		
	// Пакет предложений
	ИначеЕсли РежимВыгрузки = 2 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьПоляОтбораПакетаПредложений(ПоляОтбора);
		
	// Обновление пакета предложения
	ИначеЕсли РежимВыгрузки = 3 Тогда
		
		ОбменССайтомПереопределяемый.ЗаполнитьПоляОтбораОбновленияПакетаПредложений(ПоляОтбора);
		
	КонецЕсли;
	
	ОбменССайтом.ДобавитьПоляОтбораВСхему(ПоляОтбора, СхемаВыгрузкиДанных);
	
КонецПроцедуры

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

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

&НаСервере
Функция ПолучитьНастройкиПоУмолчаниюСервер()
	
	Если РежимВыгрузки = 0 Тогда
		
		СхемаВыгрузкиДанных = ПланыОбмена.ОбменССайтом.ПолучитьМакет("СхемаВыгрузкиКаталогПакетПредложений");
		
	ИначеЕсли РежимВыгрузки = 1 Тогда
		
		СхемаВыгрузкиДанных = ПланыОбмена.ОбменССайтом.ПолучитьМакет("СхемаВыгрузкиКаталог");
		
	ИначеЕсли РежимВыгрузки = 2 Тогда
		
		СхемаВыгрузкиДанных = ПланыОбмена.ОбменССайтом.ПолучитьМакет("СхемаВыгрузкиПакетПредложений");
		
	ИначеЕсли РежимВыгрузки = 3 Тогда
		
		СхемаВыгрузкиДанных = ПланыОбмена.ОбменССайтом.ПолучитьМакет("СхемаВыгрузкиОбновлениеПакетаПредложений");
		
	КонецЕсли;
	
	Возврат СхемаВыгрузкиДанных.НастройкиПоУмолчанию;
	
КонецФункции

&НаКлиенте
Процедура НастройкиПоУмолчанию(Команда)
	Закрыть(ПолучитьНастройкиПоУмолчаниюСервер());
КонецПроцедуры

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

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