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