﻿&НаКлиенте
Перем Ванесса;

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

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

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


&НаСервереБезКонтекста
Функция ПолучитьЗначениеКонстантыСервер(ИмяКонстанты)
	Возврат Константы[ИмяКонстанты].Получить();
КонецФункции	

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

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

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

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

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

&НаСервереБезКонтекста
Процедура ПроверитьОбработкуНаВозможностьПодключения(ИмяОбработки)
	Обработка = ВнешниеОбработки.Создать(ИмяОбработки,Ложь);
	Попытка
		ПараметрыОбработки = Обработка.ПараметрыОбработки();
	Исключение
		// значит параметры не указаны
		Возврат;
	КонецПопытки;
	
	IgnoreOn82 = Ложь;
	ПараметрыОбработки.Свойство("IgnoreOn82",IgnoreOn82);
	
	Если IgnoreOn82 Тогда
		СистемнаяИнформация = Новый СистемнаяИнформация;
		Если Лев(СистемнаяИнформация.ВерсияПриложения,4) = "8.2." Тогда
			ИмяОбработки = Неопределено;
		Иначе
			Попытка
				ТекущийРежимСовместимости = Вычислить("Метаданные.РежимСовместимости");
				РежимыСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости;
			Исключение
				Возврат;
			КонецПопытки;
			
			Если ТекущийРежимСовместимости = РежимыСовместимости.Версия8_1 Тогда
				ИмяОбработки = Неопределено;
			ИначеЕсли ТекущийРежимСовместимости = РежимыСовместимости.Версия8_2_13 Тогда
				ИмяОбработки = Неопределено;
			ИначеЕсли ТекущийРежимСовместимости = РежимыСовместимости.Версия8_2_16 Тогда
				ИмяОбработки = Неопределено;
			КонецЕсли;	 

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

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

&НаКлиенте
Процедура ПодключениеОбработкиПродолжение(ИмяОбработки)
	ФормаОбработки = ПолучитьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма.УправляемаяФорма");
	Ванесса = ФормаОбработки;
	
	Если ВыполнитьФичаФайлИзКаталога Тогда
		Ванесса.УстановитьФичаФайл(ПутьКФичаФайлу);
		
		СтруктураНастроек = Новый Структура;
		СтруктураНастроек.Вставить("ИспользоватьКомпонентуVanessaExt", Истина);
		Ванесса.УстановитьНастройкиПриЗапускеБезОткрытияФормы(СтруктураНастроек);
		
		Ванесса.ВыполнитьСценарииБезОткрытияФормы();
	ИначеЕсли ВыполнитьФичаЧерезТекст Тогда	
		Ванесса.УстановитьТекстФичаФайла(ТекстФичаФайла);
		
		СтруктураНастроек = Новый Структура;
		СтруктураНастроек.Вставить("ИспользоватьКомпонентуVanessaExt", Истина);
		Ванесса.УстановитьНастройкиПриЗапускеБезОткрытияФормы(СтруктураНастроек);
		
		Ванесса.ВыполнитьСценарииБезОткрытияФормы();
	КонецЕсли;	 
	
КонецПроцедуры 

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	Ванесса = Неопределено;
КонецПроцедуры

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

&НаКлиенте
Процедура ОткрытьФормуVA(Команда)
	Ванесса.ОткрытьОсновнуюФорму();
КонецПроцедуры


