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

файл

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

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

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

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	ОбменССайтомПереопределяемый.ФормаУзлаПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)

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

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

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	Если ПарольИзменен Тогда
		УстановитьПривилегированныйРежим(Истина);
		ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль);
		УстановитьПривилегированныйРежим(Ложь);
	КонецЕсли;

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

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	СформироватьЗаголовокФормы();
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ПриИзмененииОбменТоварами()
	
	УстановитьВидимостьСтраницФормы();
	УстановитьДоступностьПоляКаталогВыгрузки();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииОбменЗаказами()
	
	УстановитьВидимостьСтраницФормы();
	УстановитьДоступностьПолейОбменЗаказами();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененииПереключательНазначениеОбмена()
	
	Объект.ВыгружатьНаСайт = ПереключательНазначениеОбмена = 0;
	УстановитьСтраницуТипаОбмена();
	
	Модифицированность = Истина;
	
КонецПроцедуры

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

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

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

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

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

// Процедура - обработчик события ПриИзменении поля переключателя ПереключательНазначениеОбмена.
//
&НаКлиенте
Процедура ПереключательНазначениеОбменаПриИзменении(Элемент)
	
	ПриИзмененииПереключательНазначениеОбмена();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИнтервалОбменаССайтомПриИзменении(Элемент)
	
	УстановитьРасписаниеРегламентногоЗадания();
	УстановитьНадписьРасписанияОбмена();
	
КонецПроцедуры

// Процедура - обработчик события ПриИзменении поля флажка ОбменТоварами.
//
&НаКлиенте
Процедура ОбменТоварамиПриИзменении(Элемент)
	
	ПриИзмененииОбменТоварами();
	
КонецПроцедуры

// Процедура - обработчик события ПриИзменении поля флажка ОбменЗаказами.
//
&НаКлиенте
Процедура ОбменЗаказамиПриИзменении(Элемент)
	
	ПриИзмененииОбменЗаказами();
	
КонецПроцедуры

&НаКлиенте
Процедура ПарольПриИзменении(Элемент)
	ПарольИзменен = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ПереключательВыгрузкаИзмененийПриИзменении(Элемент)
	
	ПриИзмененииПереключательВыгрузкаИзменений()
	
КонецПроцедуры

&НаКлиенте
Процедура РежимВыгрузкиЦенПриИзменении(Элемент)
	
	Если РежимВыгрузкиЦен = 0 Тогда
		Объект.ВыгружатьОбновленияЦенИОстатков = Истина;
	Иначе
		Объект.ВыгружатьОбновленияЦенИОстатков = Ложь;
	КонецЕсли;
	
	УстановитьДоступностьГруппТоварыИЦены();
	
	СформироватьПредставлениеОтбораВТаблицеКаталогов();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВыгружатьЦеныОстаткиПриИзменении(Элемент)
	
	Если Не Объект.ВыгружатьЦеныОстатки
		И Не Объект.ВыгружатьТовары Тогда
		
		Объект.ВыгружатьЦеныОстатки = Истина;
		СообщитьОбОшибке("ВыгружатьЦеныОстатки");
		
	КонецЕсли;
	
	СформироватьПредставлениеОтбораВТаблицеКаталогов();

	
	УстановитьДоступностьКартинкиСклад();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ОтборГруппыКатегорииНоменклатурыПриИзменении(Элемент)
	
	 
	Если ТаблицаКаталогов.Количество()>0 Тогда
		ТаблицаКаталогов.Очистить();
	КонецЕсли;
	
	ПодключитьОбработчикОжидания("УстановитьПараметрыТаблицыКаталоговКлиент", 0.1, Истина);

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

&НаКлиенте
Процедура ДекорацияНастройкаНажатие(Элемент)
	
	ОткрытьСправочникСайты();
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПолеВводаПриИзменении(Элемент)
	
	ОбменССайтомКлиентПереопределяемый.ПолеВводаПриИзменении(Элемент, ЭтотОбъект, Объект);
	
	ПолеВводаПриИзмененииНаСервере(Элемент.Имя);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПолеФлажкаПриИзменении(Элемент)
	
	ОбменССайтомКлиентПереопределяемый.ПолеФлажкаПриИзменении(Элемент, ЭтотОбъект, Объект);
	
	ПолеФлажкаПриИзмененииНаСервере(Элемент.Имя);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаКаталогов

// Процедура - обработчик события ПередОкончаниемРедактирования таблицы ТаблицаКаталогов.
//
&НаКлиенте
Процедура ТаблицаКаталоговПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
	
	Если Не ИдентификаторУникален() Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаКаталоговНастройкиКаталогаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОткрытьФормуОтбораКаталога();
	
КонецПроцедуры

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

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

// Процедура - обработчик события ПослеУдаления таблицы ТаблицаКаталогов.
//
&НаКлиенте
Процедура ТаблицаКаталоговПослеУдаления(Элемент)
	
	Модифицированность = Истина;
	
КонецПроцедуры

// Процедура - обработчик события ПриНачалеРедактирования таблицы ТаблицаКаталогов.
//
&НаКлиенте
Процедура ТаблицаКаталоговПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	
	Если Копирование Тогда
		
		Элемент.ТекущиеДанные.ИдентификаторКаталога = "";
		
	КонецЕсли;
	
	Если (Элемент.ТекущиеДанные.Группы.Количество() = 1
		И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.Группы[0].Значение))
		ИЛИ Элемент.ТекущиеДанные.Группы.Количество() = 0 Тогда
		
		НовыйСписокГрупп = Новый СписокЗначений;
		Если Объект.ВидОтбораПоНоменклатуре = ПредопределенноеЗначение("Перечисление.ВидыОтборовНоменклатуры.ГруппыНоменклатуры") Тогда
			ТипЗначений = ПолучитьТипСправочника("Номенклатура");
			Элементы.ТаблицаКаталоговГруппы.ВыборГруппИЭлементов = ГруппыИЭлементы.Группы;
		Иначе
			ТипЗначений = ПолучитьТипСправочника("ВидыНоменклатуры");
			Элементы.ТаблицаКаталоговГруппы.ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы;
		КонецЕсли;
		
		НовыйСписокГрупп.ТипЗначения = ТипЗначений;
		НовыйСписокГрупп.Добавить(Неопределено, НадписьВсеЭлементыСписка);
		Элемент.ТекущиеДанные.Группы = НовыйСписокГрупп;
		
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормы

&НаКлиенте
Процедура Подключаемый_ТаблицаФормыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
	
	ОбменССайтомКлиентПереопределяемый.ТаблицаФормыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ, ЭтотОбъект, Объект);
	
	ТаблицаФормыПередОкончаниемРедактированияНаСервере(Элемент.Имя, НоваяСтрока, ОтменаРедактирования, Отказ);
	
КонецПроцедуры

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

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

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

// Процедура - обработчик команды НастроитьРасписаниеОбмена.
//
&НаКлиенте
Процедура НастроитьРасписаниеОбмена(Команда)
	
	ВыполнитьНастройкуРасписанияОбмена();
	
КонецПроцедуры

&НаКлиенте
Процедура РасширеннаяНастройка(Команда)
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("РазмерПорции", Объект.РазмерПорции);
	ПараметрыФормы.Вставить("КоличествоПовторений", Объект.КоличествоПовторений);
	ПараметрыФормы.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
	ОбработчикОповещения = Новый ОписаниеОповещения("РасширеннаяНастройкаЗавершить", ЭтотОбъект);
	
	ОткрытьФорму("ПланОбмена.ОбменССайтом.Форма.ФормаРасширенныеНастройки", ПараметрыФормы, ЭтотОбъект
		,
		,
		,
		,
		ОбработчикОповещения);
	
КонецПроцедуры

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

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


#Область ОбработчикиАсинхронныхВызовов

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

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

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

&НаКлиенте
Процедура ВыборФайлаЗавершить(Результат) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПоказатьДиалогВыбораФайла();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ФайлЗагрузкиПоказатьВопросЗавершить(Результат) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ВыбратьФайлОбменаЗаказами();
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораКаталогаВыгрузки(ВыбранныеФайлы, ДополнительныеПараметры = Неопределено) Экспорт
	
	Если ВыбранныеФайлы <> Неопределено Тогда
		Объект.КаталогВыгрузки = ВыбранныеФайлы[0];
		Модифицированность = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораФайлаЗагрузки(ВыбранныеФайлы, ДополнительныеПараметры = Неопределено) Экспорт
	
	Если ВыбранныеФайлы <> Неопределено Тогда
		Объект.ФайлЗагрузки = ВыбранныеФайлы[0];
		Модифицированность = Истина;
	КонецЕсли;
	
КонецПроцедуры

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


&НаКлиенте
Процедура УстановитьДоступностьГруппТоварыИЦены()
		
	Элементы.ГруппаТоварыНастройка.Доступность = Не Объект.ВыгружатьОбновленияЦенИОстатков;
	Элементы.ГруппаЦеныИСклады.Доступность = Не Объект.ВыгружатьОбновленияЦенИОстатков;

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

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

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

&НаКлиенте
Процедура ОткрытьСправочникСайты()
	
	ПараметрыФормы = Новый Структура("Ключ", Объект.ДанныеСайта);
	ПараметрыФормы.Вставить("Основание", Объект.Ссылка);
	ПараметрыФормы.Вставить("Сайт", Объект.Ссылка);
	
	ОткрытьФорму("Справочник.Сайты.ФормаОбъекта", ПараметрыФормы,
			,,,,Новый ОписаниеОповещения("ПослеНастройкиПерехода", ЭтотОбъект));

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

&НаКлиенте
Процедура УстановитьПараметрыТаблицыКаталогТоваров()
	
	Если Объект.ВидОтбораПоНоменклатуре = ПредопределенноеЗначение("Перечисление.ВидыОтборовНоменклатуры.КатегорииНоменклатуры") Тогда
		
		ЗаголовокТаблицы = НСтр("ru = 'Таблица каталогов (соответствие видов номенклатуры каталогам на сайте)'");
		ЗаголовокКолонки = НСтр("ru = 'Виды номенклатуры'");
		ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы;
		
	Иначе
		
		ЗаголовокТаблицы = НСтр("ru = 'Таблица каталогов (соответствие групп номенклатуры каталогам на сайте)'");
		ЗаголовокКолонки = НСтр("ru = 'Группы номенклатуры'");
		ВыборГруппИЭлементов = ГруппыИЭлементы.Группы;
		
	КонецЕсли;
	
	Элементы.ГруппаТаблицаКаталогов.Заголовок = ЗаголовокТаблицы;
	Элементы.ТаблицаКаталоговГруппы.Заголовок = ЗаголовокКолонки;
	Элементы.ТаблицаКаталоговГруппы.ВыборГруппИЭлементов = ВыборГруппИЭлементов;
	
КонецПроцедуры

&НаКлиенте
Процедура СформироватьЗаголовокФормы()
	
	Если ПереключательНазначениеОбмена = 1 Тогда
		
		ТекстЗаголовка = НСтр("ru = 'Обмен через %1'");
		Каталог = ОпределитьКаталогВыгрузки();
		Если ЗначениеЗаполнено(Каталог) Тогда
			ШаблонЗаголовка = НСтр("ru = 'Обмен через %1'");
			ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, Каталог);
		Иначе
			
			ТекстЗаголовка = НСтр("ru = 'Обмен с сайтом'");
		КонецЕсли;
		
	Иначе
		
		ШаблонЗаголовка = НСтр("ru = 'Обмен с %1'");
		ИмяСайта = ИмяСайта();
		ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ИмяСайта);
	КонецЕсли;
	
	Заголовок = ТекстЗаголовка;
	
КонецПроцедуры

&НаКлиенте
Функция ИмяСайта()
	
	АдресСайта = СтрЗаменить(Объект.АдресСайта, "\", "/");
	АдресСайта = СтрЗаменить(АдресСайта, " ", "");
	
	Если НРег(Лев(АдресСайта, 7)) = "http://" Тогда
		АдресСайта = Сред(АдресСайта, 8);
	ИначеЕсли НРег(Лев(АдресСайта, 8)) = "https://" Тогда
		АдресСайта = Сред(АдресСайта, 9);
		
	КонецЕсли;
	
	ПозицияСлэша = Найти(АдресСайта, "/");
	
	Если ПозицияСлэша > 0 Тогда
		Сервер = Лев(АдресСайта, ПозицияСлэша - 1);
		
	Иначе	
		Сервер = АдресСайта;
		
	КонецЕсли;
	
	ПозицияДвоеточия = Найти(Сервер, ":");
	
	Если ПозицияДвоеточия > 0 Тогда
		СерверСПортом = Сервер;
		Сервер = Лев(СерверСПортом, ПозицияДвоеточия - 1);
		
	КонецЕсли;
	
	Возврат Сервер;
	
КонецФункции

&НаКлиенте
Функция ОпределитьКаталогВыгрузки()
	
	РазделительПути = ПолучитьРазделительПутиКлиента();
	
	Если Объект.ОбменТоварами Тогда
		ПутьКФайлу = Объект.КаталогВыгрузки;
	ИначеЕсли Объект.ОбменЗаказами Тогда
		ПутьКФайлу = Объект.ФайлЗагрузки;
	Иначе
		Возврат "";
	КонецЕсли;
		
	ПутьКФайлуМассив = СтрРазделить(ПутьКФайлу, РазделительПути);
	ВсегоЭлементов = ПутьКФайлуМассив.Количество();
	Если ВсегоЭлементов > 4 Тогда
		
		ПутьКФайлу = "..." + ПутьКФайлуМассив[ВсегоЭлементов - 4] + РазделительПути
			+ ПутьКФайлуМассив[ВсегоЭлементов - 3] + РазделительПути
			+ ПутьКФайлуМассив[ВсегоЭлементов - 2] + РазделительПути
			+ ПутьКФайлуМассив[ВсегоЭлементов - 1];
			
	КонецЕсли;
	
	Возврат ПутьКФайлу;
	
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьТипСправочника(Имя)

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

&НаКлиенте
Процедура УстановитьПараметрыТаблицыКаталоговКлиент()
	
	ЗаголовокТаблицы = НСтр("ru = 'Таблица каталогов (соответствие групп номенклатуры каталогам на сайте)'");
	Если Объект.ВидОтбораПоНоменклатуре = ПредопределенноеЗначение("Перечисление.ВидыОтборовНоменклатуры.ГруппыНоменклатуры") Тогда
		ЗаголовокКолонки = НСтр("ru = 'Группы номенклатуры'");
		ВыборГруппИЭлементов = ГруппыИЭлементы.Группы;
	Иначе
		ЗаголовокКолонки = НСтр("ru = 'Категории номенклатуры'");
		ВыборГруппИЭлементов = ГруппыИЭлементы.ГруппыИЭлементы;
	КонецЕсли;
	
	Элементы.ГруппаТаблицаКаталогов.Заголовок = ЗаголовокТаблицы;
	Элементы.ТаблицаКаталоговГруппы.Заголовок = ЗаголовокКолонки;
	Элементы.ТаблицаКаталоговГруппы.ВыборГруппИЭлементов = ВыборГруппИЭлементов;
	
КонецПроцедуры

&НаКлиенте
Процедура НастроитьПереходы(АдресСайта)
	
	Если ЗначениеЗаполнено(АдресСайта) Тогда
		
		ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(АдресСайта);
		
	Иначе
		
		ОткрытьСправочникСайты();
		
	КонецЕсли;
	
КонецПроцедуры

	
&НаКлиенте
Процедура ПослеНастройкиПерехода(Результат, Параметры) Экспорт

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

&НаКлиенте
Функция ПереходНаСайтЗаполнен(АдресПереходаНаСайт)
	
	ПереходЗаполнен = Истина;
	Если АдресПереходаНаСайт = НСтр("ru = 'Настроить переход на сайт'")
		Или АдресПереходаНаСайт = НСтр("ru = 'Настроить переход в админзону'") Тогда
		
		ПереходЗаполнен = Ложь;
		
	КонецЕсли;
	
	Возврат ПереходЗаполнен;
	
КонецФункции

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();
	ОбменССайтомПереопределяемый.УстановитьУсловноеОформлениеФормаУзлаОбмена(ЭтотОбъект);

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

&НаКлиенте
Процедура ПриИзмененииПереключательВыгрузкаИзменений()
	
	Объект.ВыгружатьИзменения = (ПереключательВыгрузкаИзменений = 1);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьТочекСамовывозаСервер(Форма, Объект)
	
	Элементы = Форма.Элементы;
	Если Объект.ВыгружатьЦеныОстатки Тогда
		Элементы.СписокТочекСамовывоза.Доступность = Истина;
	Иначе
		Элементы.СписокТочекСамовывоза.Доступность = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьОграниченияКаталогаПредложениямиСервер(Форма, Объект)
	
	Элементы = Форма.Элементы;
	Если Объект.ВыгружатьЦеныОстатки И Объект.ВыгружатьТовары Тогда
		Элементы.ОграничитьКаталогДоступнымиПредложениями.Доступность = Истина;
	Иначе
		Элементы.ОграничитьКаталогДоступнымиПредложениями.Доступность = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьВыгружатьКартинкиСервер(Форма, Объект)
	
	Элементы = Форма.Элементы;
	Если Объект.ВыгружатьТовары Тогда
		Элементы.ВыгружатьКартинки.Доступность = Истина;
	Иначе
		Элементы.ВыгружатьКартинки.Доступность = Ложь;
	КонецЕсли;

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьВыгружатьХарактеристикиСервер(Форма, Объект)
	
	Элементы = Форма.Элементы;
	Если Объект.ВыгружатьТовары Тогда
		Элементы.ВыгружатьХарактеристикиВКаталогТоваров.Доступность = Истина;
	Иначе
		Элементы.ВыгружатьХарактеристикиВКаталогТоваров.Доступность = Ложь;
	КонецЕсли;

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

&НаСервере
Процедура УстановитьНадписьРасписанияОбменаСервер()
	
	Если Не ОбщегоНазначения.РазделениеВключено() Тогда
		
		Если РасписаниеРегламентногоЗадания = Неопределено Тогда
			ТекстЗаголовка = НСтр("ru='Настроить расписание обмена'");
		Иначе
			ТекстЗаголовка = РасписаниеРегламентногоЗадания;
		КонецЕсли;
		
		Элементы.НастроитьРасписаниеОбмена.Заголовок = ТекстЗаголовка;
		
	Иначе
		
		Если РасписаниеРегламентногоЗадания = Неопределено Тогда
			
			ИнтервалОбменаССайтом = НСтр("ru='Один раз в 30 минут'");
			
		Иначе
			
			ЗначениеПериода = РасписаниеРегламентногоЗадания.ПериодПовтораВТечениеДня;
			Если ЗначениеПериода = 0 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в 30 минут'");
				
			ИначеЕсли ЗначениеПериода <= 300 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в 5 минут'");
				
			ИначеЕсли ЗначениеПериода <= 900 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в 15 минут'");
				
			ИначеЕсли ЗначениеПериода <= 1800 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в 30 минут'");
				
			ИначеЕсли ЗначениеПериода <= 3600 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в час'");
				
			ИначеЕсли ЗначениеПериода <= 10800 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в 3 часа'");
				
			ИначеЕсли ЗначениеПериода <= 21600 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в 6 часов'");
				
			ИначеЕсли ЗначениеПериода <= 43200 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru='Один раз в 12 часов'");
				
			КонецЕсли;

			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Процедура УстановитьВидимостьСтраницФормы()
	
	Элементы.СтраницаВыгрузкаТоваров.Видимость = Объект.ОбменТоварами;
	Элементы.СтраницаОбменЗаказами.Видимость = Объект.ОбменЗаказами;
	
КонецПроцедуры

&НаКлиенте
Процедура СообщитьОбОшибке(ИмяПоля)
	
	ОчиститьСообщения();
	
	ТекстСообщения = НСтр("ru = 'Установлен признак ""Выгрузка товаров"".
		|Должны быть указаны выгружаемые данные'");
	
	ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,ИмяПоля);
	
КонецПроцедуры

&НаКлиенте
Процедура ДоступностьРеквизитовГруппы()
	
	УстановитьДоступностьГруппТоварыИЦены();
	
	Элементы.ВыгружатьКартинки.Доступность = Объект.ВыгружатьТовары;
	Элементы.ОтборГруппыКатегорииНоменклатуры.Доступность = Объект.ВыгружатьТовары;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция  ВыбратьФормуРедактирования(ИмяФормыРедактирования);
	
	Возврат ОбменССайтомПовтИсп.ИмяПрикладнойФормы(ИмяФормыРедактирования);
	
КонецФункции

&НаСервере
Процедура ПриСозданииЧтенииНаСервере(ЭтотОбъект, Объект)
	
	Если Не ЭтотОбъект.ФормаРедактируется Тогда
		
		ОбменССайтомПереопределяемый.ДобавитьРеквизитыФормыУзла(ЭтотОбъект, Объект);
		УстановитьУсловноеОформление();
		
	КонецЕсли;
	
	УстановитьВидимостьЭлементовФормы();
	УстановитьДоступностьЭлементовФормы(ЭтотОбъект, Объект);

	НастроитьЭлементыАвтообмен();
	УстановитьНадписьРасписанияОбменаСервер();
	
	ОбновитьПереходыНаСайт();
	
	УстановитьПараметрыТаблицыКаталоговСервер();
	
КонецПроцедуры

&НаСервере
Процедура ВыполнитьДействияПриЧтенииНаСервере()
	
	ЗаполнитьТаблицуКаталоговСервер();
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура УстановитьПараметрыТаблицыКаталоговСервер()
	
	ЗаголовокТаблицы = НСтр("ru = 'Таблица каталогов (соответствие групп номенклатуры каталогам на сайте)'");
	ЗаголовокКолонки = НСтр("ru = 'Группы номенклатуры'");
	ВыборГруппИЭлементов = ГруппыИЭлементы.Группы;
	
	Элементы.ГруппаТаблицаКаталогов.Заголовок = ЗаголовокТаблицы;
	Элементы.ТаблицаКаталоговГруппы.Заголовок = ЗаголовокКолонки;
	Элементы.ТаблицаКаталоговГруппы.ВыборГруппИЭлементов = ВыборГруппИЭлементов;
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Функция ПроверитьУзелОбменаЭтаИБСервер()
	
	ЭтотУзел = ПланыОбмена.ОбменССайтом.ЭтотУзел();
	Возврат Объект.Ссылка = ЭтотУзел;
	
КонецФункции

&НаСервереБезКонтекста
Процедура ОбработатьВыбранныеГруппыСерверБезКонтекста(СписокГрупп, НадписьВсеЭлементыСписка)
	
	ГруппыВыбраны = Ложь;
	
	// Удаляем не группы номенклатуры.
	
	МассивУдалить = Новый Массив;
	
	СправочникНоменклатура = ОбменССайтомПовтИсп.ИмяПрикладногоСправочника("Номенклатура");
	ТипНоменклатура = Тип("СправочникСсылка."+ СправочникНоменклатура);

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

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

&НаКлиенте
Процедура УстановитьДоступностьПолейОбменЗаказами()
	
	Элементы.ФайлЗагрузки.Доступность = Объект.ОбменЗаказами;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьПоляКаталогВыгрузки()
	
	Элементы.КаталогВыгрузки.Доступность = Объект.ОбменТоварами;
	
КонецПроцедуры

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

&НаКлиенте
// Функция возвращает соответствие надписей выбора к количеству секунд
// 
Функция СоответствиеЗначенийВыбораККоличествуСекунд()
	
	СоответствиеНадписей = Новый Соответствие;
	СоответствиеНадписей.Вставить(НСтр("ru='Один раз в 5 минут'"), 300);
	СоответствиеНадписей.Вставить(НСтр("ru='Один раз в 15 минут'"), 900);
	СоответствиеНадписей.Вставить(НСтр("ru='Один раз в 30 минут'"), 1800);
	СоответствиеНадписей.Вставить(НСтр("ru='Один раз в час'"), 3600);
	СоответствиеНадписей.Вставить(НСтр("ru='Один раз в 3 часа'"), 10800);
	СоответствиеНадписей.Вставить(НСтр("ru='Один раз в 6 часов'"), 21600);
	СоответствиеНадписей.Вставить(НСтр("ru='Один раз в 12 часов'"), 43200);
	
	Возврат СоответствиеНадписей;
	
КонецФункции //СоответствиеЗначенийВыбораККоличествуСекунд()

&НаКлиенте
// Заполняет значения расписания регламентного задания.
//
Процедура УстановитьРасписаниеРегламентногоЗадания()
	
	Месяцы = Новый Массив;
	Месяцы.Добавить(1);
	Месяцы.Добавить(2);
	Месяцы.Добавить(3);
	Месяцы.Добавить(4);
	Месяцы.Добавить(5);
	Месяцы.Добавить(6);
	Месяцы.Добавить(7);
	Месяцы.Добавить(8);
	Месяцы.Добавить(9);
	Месяцы.Добавить(10);
	Месяцы.Добавить(11);
	Месяцы.Добавить(12);

	ДниНедели = Новый Массив;
	ДниНедели.Добавить(1);
	ДниНедели.Добавить(2);
	ДниНедели.Добавить(3);
	ДниНедели.Добавить(4);
	ДниНедели.Добавить(5);
	ДниНедели.Добавить(6);
	ДниНедели.Добавить(7);
	
	ПериодПовтораВТечениеДня = ПолучитьПериодПовтораВТечениеДня();
	
	Если ПериодПовтораВТечениеДня > 0 Тогда
		
		Расписание = Новый РасписаниеРегламентногоЗадания;
		Расписание.Месяцы					= Месяцы;
		Расписание.ДниНедели				= ДниНедели;
		Расписание.ПериодПовтораВТечениеДня = ПериодПовтораВТечениеДня; // секунды
		Расписание.ПериодПовтораДней		= 1; // каждый день
		
		РасписаниеРегламентногоЗадания = Расписание;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьНадписьРасписанияОбмена()
	
	ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиентаПриЗапуске();
	Если Не ПараметрыРаботыКлиента.РазделениеВключено Тогда
		
		Если РасписаниеРегламентногоЗадания = Неопределено Тогда
			ТекстЗаголовка = НСтр("ru='Настроить расписание обмена'");
		Иначе
			ТекстЗаголовка = РасписаниеРегламентногоЗадания;
		КонецЕсли;
		
		Элементы.НастроитьРасписаниеОбмена.Заголовок = ТекстЗаголовка;
		
	Иначе
		
		Если РасписаниеРегламентногоЗадания = Неопределено Тогда
			
			ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 30 минут'");
			
		Иначе
			
			ЗначениеПериода = РасписаниеРегламентногоЗадания.ПериодПовтораВТечениеДня;
			Если ЗначениеПериода = 0 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 30 минут'");
				
			ИначеЕсли ЗначениеПериода <= 300 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 5 минут'");
				
			ИначеЕсли ЗначениеПериода <= 900 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 15 минут'");
				
			ИначеЕсли ЗначениеПериода <= 1800 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 30 минут'");
				
			ИначеЕсли ЗначениеПериода <= 3600 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в час'");
				
			ИначеЕсли ЗначениеПериода <= 10800 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 3 часа'");
				
			ИначеЕсли ЗначениеПериода <= 21600 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 6 часов'");
				
			ИначеЕсли ЗначениеПериода <= 43200 Тогда
				
				ИнтервалОбменаССайтом = НСтр("ru = 'Один раз в 12 часов'");
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ТаблицаКаталоговГруппыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	Группы = Элементы.ТаблицаКаталогов.ТекущиеДанные.Группы;
	
	Если Группы.Количество() = 1 Тогда
		
		Если НЕ ЗначениеЗаполнено(Группы[0].Значение) Тогда
			
			Группы.Очистить();
			
		КонецЕсли;
		
	КонецЕсли;
	
	Если Объект.ВидОтбораПоНоменклатуре = ПредопределенноеЗначение("Перечисление.ВидыОтборовНоменклатуры.ГруппыНоменклатуры") Тогда
		ТипЗначений = ПолучитьТипСправочника("Номенклатура");
	Иначе
		ТипЗначений = ПолучитьТипСправочника("ВидыНоменклатуры");
	КонецЕсли;
	
	Элементы.ТаблицаКаталогов.ТекущиеДанные.Группы.ТипЗначения = ТипЗначений;
	
КонецПроцедуры

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

&НаКлиенте
Функция АдресНастроекКаталога()
	
	Если РежимВыгрузки = 0 Тогда
		
		АдресНастроек = Элементы.ТаблицаКаталогов.ТекущиеДанные.АдресНастроекКаталогПакет;
		
	ИначеЕсли РежимВыгрузки = 1 Тогда
		
		АдресНастроек = Элементы.ТаблицаКаталогов.ТекущиеДанные.АдресНастроекКаталог;
		
	ИначеЕсли РежимВыгрузки = 2 Тогда
		
		АдресНастроек = Элементы.ТаблицаКаталогов.ТекущиеДанные.АдресНастроекПакетПредложений;
		
	ИначеЕсли РежимВыгрузки = 3 Тогда
		
		АдресНастроек = Элементы.ТаблицаКаталогов.ТекущиеДанные.АдресНастроекИзмененияПакета;
		
	КонецЕсли;

	Возврат АдресНастроек;
	
КонецФункции

&НаКлиенте
Процедура НастроитьКомпоновщик(НастройкиКомпоновки, Параметры) Экспорт
	
	Если НастройкиКомпоновки = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	УстановитьНастройкиКаталога(НастройкиКомпоновки);
	
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьНастройкиКаталога(НастройкиКомпоновки)
	
	ТекущиеДанные = Элементы.ТаблицаКаталогов.ТекущиеДанные;
	
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	Если РежимВыгрузки = 0 Тогда
		
		ТекущиеДанные.АдресНастроекКаталогПакет = ПоместитьВоВременноеХранилище(НастройкиКомпоновки,
			УникальныйИдентификатор);;

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

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

&НаКлиенте
Функция ИдентификаторУникален()
	
	ИдентификаторКаталога = Элементы.ТаблицаКаталогов.ТекущиеДанные.ИдентификаторКаталога;
	Найдено = ТаблицаКаталогов.НайтиСтроки(Новый Структура("ИдентификаторКаталога", ИдентификаторКаталога));
	ИдентификаторыУникальны = Найдено.Количество() = 1;
	
	Если НЕ ИдентификаторыУникальны Тогда
		
		ОчиститьСообщения();
		
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Идентификатор каталога должен быть уникальным.'"),
			Объект.Ссылка,
			ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(
				"ТаблицаКаталогов", ТаблицаКаталогов.Индекс(Элементы.ТаблицаКаталогов.ТекущиеДанные) + 1,
				"ИдентификаторКаталога"));
	
	КонецЕсли;
	
	Возврат ИдентификаторыУникальны;
	
КонецФункции

&НаСервере
Процедура ВосстановитьРеквизитыПрикладногоРешения(ОбъектУзла)
	
	СохраненныеНастройки = Новый Структура;

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

&НаКлиенте
Процедура ДозаполнитьТаблицуКаталогов(СтрокаТаблицыКаталогов)
	
	ОбработатьВыбранныеГруппыСерверБезКонтекста(СтрокаТаблицыКаталогов.Группы, НадписьВсеЭлементыСписка);
	
	Если ПустаяСтрока(СтрокаТаблицыКаталогов.ИдентификаторКаталога) Тогда
		СтрокаТаблицыКаталогов.ИдентификаторКаталога = Строка(Новый УникальныйИдентификатор);
	КонецЕсли;
	
	Если ПустаяСтрока(СтрокаТаблицыКаталогов.Каталог) Тогда
		СтрокаТаблицыКаталогов.Каталог = НСтр("ru = 'Каталог товаров'") + " "
			+ ВРег(СокрЛП(Лев(СтрокаТаблицыКаталогов.ИдентификаторКаталога, 8)));
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
// Заполняет массив реквизитами, которые были добавлены на форму
// 
Процедура ЗаполнитьМассивРеквизитовФормыПрикладногоРешения(МассивРеквизитов)
	
	ОбменССайтомПереопределяемый.ЗаполнитьПрикладныеРеквизитыФормыУзлаОбменССайтом(МассивРеквизитов);
	
КонецПроцедуры

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

&НаКлиенте
Процедура УстановитьДоступностьТочекСамовывоза()
	
	Элементы.СписокТочекСамовывоза.Доступность = Объект.ВыгружатьЦеныОстатки
		И Не Объект.ВыгружатьОбновленияЦенИОстатков;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьОграниченияКаталогаПредложениями()
	
	Элементы.ОграничитьКаталогДоступнымиПредложениями.Доступность = Объект.ВыгружатьЦеныОстатки 
		И Объект.ВыгружатьТовары 
		И Не Объект.ВыгружатьОбновленияЦенИОстатков;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьВыгружатьКартинки()
	
	Элементы.ВыгружатьКартинки.Доступность = Объект.ВыгружатьТовары;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьВыгружатьХарактеристики()
	
	Элементы.ВыгружатьХарактеристикиВКаталогТоваров.Доступность = Объект.ВыгружатьТовары;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ДобавитьТочкиСамовывоза(ТочкиСамовывоза, Параметры) Экспорт
	
	Если Не ТочкиСамовывоза = Неопределено Тогда
		
		СписокТочекСамовывоза.ЗагрузитьЗначения(ТочкиСамовывоза);
		Модифицированность = Истина;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СформироватьЗаголовокПараметрыВыгрузки()
	
	ШаблонЗаголовка = "";
	Если Объект.РазмерПорции > 0 Тогда
		ШаблонЗаголовка = НСтр("ru = 'Количество товаров в порции %1;'");
	КонецЕсли;
	
	Если Объект.КоличествоПовторений > 0 Тогда
		ШаблонЗаголовка = ШаблонЗаголовка + НСтр("ru = 'Количество попыток обмена %2.'");
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ШаблонЗаголовка) Тогда
		ЗаголовокКнопки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, Объект.РазмерПорции,
			Объект.КоличествоПовторений);
	Иначе
		ЗаголовокКнопки = НСтр("ru = 'Параметры порционной выгрузки данных на сайт.'");
	КонецЕсли;
	
	Элементы.РасширеннаяНастройка.Заголовок = ЗаголовокКнопки;
	
КонецПроцедуры

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

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)

	ОбменССайтомПереопределяемый.СкорректироватьПроверяемыеРеквизитыФормыУзла(ЭтотОбъект,
		ПроверяемыеРеквизиты,
		Объект.ОбменТоварами,
		Объект.ОбменЗаказами);

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

&НаКлиенте
Процедура УстановитьДоступностьКартинкиСклад()
	
	УстановитьДоступностьТочекСамовывоза();
	
	УстановитьДоступностьОграниченияКаталогаПредложениями();
	
	УстановитьДоступностьВыгружатьКартинки();
	
	УстановитьДоступностьВыгружатьХарактеристики();
	
	СформироватьПредставлениеОтбораВТаблицеКаталогов();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПоказатьДиалогВыбораФайла()
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
	
	Диалог.Заголовок = НСтр("ru = 'Укажите каталог обмена'");
	Диалог.Каталог = Объект.КаталогВыгрузки;
	
	Оповещение = Новый ОписаниеОповещения("ПослеВыбораКаталогаВыгрузки", ЭтотОбъект);
	
	ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, Диалог);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьФайлОбменаЗаказами()
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	
	Диалог.Заголовок = НСтр("ru = 'Выберите xml-файл с заказами'");
	Диалог.ПолноеИмяФайла = Объект.ФайлЗагрузки;
	Диалог.Фильтр = НСтр("ru = 'Документ XML'") + " (*.xml)|*.xml";
	
	Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайлаЗагрузки", ЭтотОбъект);
	
	ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(Оповещение, Диалог);
	
КонецПроцедуры

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

&НаСервере
Процедура ПолеВводаПриИзмененииНаСервере(ЭлементИмя)
	
	
	ОбменССайтомПереопределяемый.ПолеВводаПриИзмененииНаСервере(ЭлементИмя, ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ПолеФлажкаПриИзмененииНаСервере(ЭлементИмя)
		
	ОбменССайтомПереопределяемый.ПолеФлажкаПриИзмененииНаСервере(ЭлементИмя, ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ТаблицаФормыПередОкончаниемРедактированияНаСервере(ЭлементИмя, НоваяСтрока, ОтменаРедактирования, Отказ)
	
	ОбменССайтомПереопределяемый.ТаблицаФормыПередОкончаниемРедактированияНаСервере(ЭлементИмя, НоваяСтрока, ОтменаРедактирования, Отказ,ЭтотОбъект);
	
КонецПроцедуры

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






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