Обмен с сайтом / Модуль объекта

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

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

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

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

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

	Возврат ПараметрыЗадания;
	
КонецФункции

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

	Отбор.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ОбменССайтом);
	
	Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Отбор);
	Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]);
	
	Возврат Задание;
	
КонецФункции

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

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

Процедура ПриКопировании(ОбъектКопирования)
	Код = "";
КонецПроцедуры

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

	СкорректироватьПроверяемыеРеквизиты(ПроверяемыеРеквизиты);
	
КонецПроцедуры

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
	
	Если НЕ ЗначениеЗаполнено(ДанныеЗаполнения) Тогда
		Возврат;
	КонецЕсли;
	
	Если НЕ ТипЗнч(ДанныеЗаполнения)=ТипЗнч(Справочники.Сайты.ПустаяСсылка()) Тогда
		Возврат;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	ОбменССайтом.Ссылка КАК ПланОбмена
	|ИЗ
	|	ПланОбмена.ОбменССайтом КАК ОбменССайтом
	|ГДЕ
	|	ОбменССайтом.Код = &ИДСайта";
	
	Запрос.УстановитьПараметр("ИДСайта", ДанныеЗаполнения.Код);
	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		// Для первого узла код устанавливаем, как у справочника.
		Код = ДанныеЗаполнения.Код;
	КонецЕсли;
	
	ДанныеСайта = ДанныеЗаполнения;
	АдресСайта			= ДанныеЗаполнения.АдресСайта;
	ВыгружатьКартинки	= Истина;
	ВыгружатьНаСайт		= Истина;
	ВладелецКаталога	= ДанныеЗаполнения.Организация;
	ВыгружатьИзменения	= Истина;
	РежимВыгрузки		= 0;
	
	ИмяПользователя = СтрЗаменить(ДанныеЗаполнения.АдресСайта,"www.","");
	ИмяПользователя = Лев(ДанныеЗаполнения.АдресСайта, СтрНайти(ДанныеЗаполнения.АдресСайта,".")-1);
	
	ИмяПользователя				= ИмяПользователя;
	Наименование				= НСтр("ru = 'Обмен с'") + " " + ДанныеЗаполнения.АдресСайта;
	ОбменЗаказами				= Истина;
	ОбменТоварами				= Истина;
	ВыгружатьТовары             = Истина;
	ВыгружатьЦеныОстатки        = Истина;
	ВидОтбораПоНоменклатуре = Перечисления.ВидыОтборовНоменклатуры.КатегорииНоменклатуры;
	
	ТаблицаКаталоговТЗ = Новый ТаблицаЗначений;
	ТаблицаКаталоговТЗ.Колонки.Добавить("Каталог", Новый ОписаниеТипов("Строка", ,
												   Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)));
	ТаблицаКаталоговТЗ.Колонки.Добавить("Группы",  Новый ОписаниеТипов("СписокЗначений"));
	ТаблицаКаталоговТЗ.Колонки.Добавить("ИдентификаторКаталога", Новый ОписаниеТипов("Строка", ,
												   Новый КвалификаторыСтроки(0, ДопустимаяДлина.Переменная)));
	ТаблицаКаталоговТЗ.Колонки.Добавить("ХранилищеНастроекКаталогПакет", Новый ОписаниеТипов("ХранилищеЗначения"));
	НовСтр = ТаблицаКаталоговТЗ.Добавить();
	НовСтр.Каталог = НСтр("ru = 'Основной каталог товаров'");
	НовСтр.ИдентификаторКаталога = Строка(Новый УникальныйИдентификатор);
	СписокГрупп = Новый СписокЗначений;
	
	ИмяСправочникаВидыНоменклатуры = ОбменССайтомПовтИсп.ИмяПрикладногоСправочника("ВидыНоменклатуры");
	
	Если Не ЗначениеЗаполнено(ИмяСправочникаВидыНоменклатуры) Тогда
		ПустаяСсылкаНаВидНоменклатуры = Справочники[ИмяСправочникаВидыНоменклатуры].ПустаяСсылка();
	Иначе
		ПустаяСсылкаНаВидНоменклатуры = Неопределено;
	КонецЕсли;
	СписокГрупп.Добавить(ПустаяСсылкаНаВидНоменклатуры, НСтр("ru = '(Все)'"));
	НовСтр.Группы = СписокГрупп;
	
	СохраненнаяТаблицаКаталогов = Новый ХранилищеЗначения(ТаблицаКаталоговТЗ);
	
	ДополнительныеРеквизиты = Новый Структура("ВыгружатьТовары, ВыгружатьЦеныОстатки", Истина, Истина);
	СохраненныеНастройки = Новый Структура("ПараметрыПрикладногоРешения", ДополнительныеРеквизиты);
	ПараметрыПрикладногоРешения = Новый ХранилищеЗначения(СохраненныеНастройки);
	
КонецПроцедуры

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

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

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

// Формирует уникальное наименование объекта
//
// Параметры:
// нет
// 
// Возвращаемое значение:
// нет
//
Процедура СформироватьНаименование()
	
	Если ОбменТоварами И ОбменЗаказами Тогда
		
		Префикс = НСтр("ru = 'Обмен товарами и заказами'");
		
	ИначеЕсли ОбменЗаказами Тогда
		
		Префикс = НСтр("ru = 'Обмен заказами'");
		
	Иначе
		
		Префикс = НСтр("ru = 'Выгрузка товаров'");
		
	КонецЕсли;
	
	Запрос = Новый Запрос();
	Запрос.Текст = "ВЫБРАТЬ
	               |	МАКСИМУМ(ОбменССайтом.Наименование) КАК Наименование
	               |ИЗ
	               |	ПланОбмена.ОбменССайтом КАК ОбменССайтом
	               |ГДЕ
	               |	ОбменССайтом.Наименование ПОДОБНО &Шаблон
	               |
	               |ИМЕЮЩИЕ
	               |	НЕ МАКСИМУМ(ОбменССайтом.Наименование) ЕСТЬ NULL ";

	
	Запрос.УстановитьПараметр("Шаблон", Префикс + "%");
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда
		Наименование = Префикс;
		Возврат;
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	Выборка.Следующий();
	Суффикс = Прав(СокрЛП(Выборка.Наименование), 4);
	
	Попытка
		СуффиксЧислом = Число(Суффикс);
	Исключение
		Наименование = Префикс + " 0001";
		Возврат;
	КонецПопытки;
		
	Наименование = Префикс + " " + Формат(СуффиксЧислом + 1, "ЧЦ=4; ЧВН=; ЧГ=");
	
КонецПроцедуры

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

// Удаляет регламентное задание, соответствующее объекту.
//
// Параметры:
// нет
// 
// Возвращаемое значение:
// нет
//
Процедура УдалитьЗадание(Задание)
	
	РегламентныеЗаданияСервер.УдалитьЗадание(Задание);
	
КонецПроцедуры

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

Процедура УстановитьПараметрыЗадания(Задание, СвойстваЗадания)
	
	Если Задание = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, СвойстваЗадания);
	
	УстановитьПривилегированныйРежим(Истина);
	
КонецПроцедуры

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

#КонецЕсли

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