﻿&НаСервереБезКонтекста
Функция ПодключитьВнешнююОбработкуСервер(АдресХранилища)
	Возврат ВнешниеОбработки.Подключить(АдресХранилища,,Ложь); 
КонецФункции 

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


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

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


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

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

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

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