&НаКлиенте
Процедура Жмяк(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = НСтр("ru = 'Текст'; en = 'Text'")+ "(*.xls)|*.xlsx";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файлы";
Если ДиалогОткрытияФайла.Выбрать() Тогда
МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
ФайлСМС="";
Для Каждого ИмяФайла Из МассивФайлов Цикл
ФайлСМС=ИмяФайла;
конеццикла;
если ФайлСМС<>"" тогда
АдресХранилищаФайла = "";
Состояние("Перемещаю файл на сервер");
ПоместитьФайл(АдресХранилищаФайла, ФайлСМС, , Ложь, ЭтаФорма.УникальныйИдентификатор);
Состояние("Обрабатывается файл "+ФайлСМС);
ЗапускФоновойЗагрузкиСправочника(АдресХранилищаФайла);
Состояние("Запущена фоновая обработка файла");
ПодключитьОбработчикОжидания("ИндикаторВыполненияЗагрузки",1,ложь);
иначе
сообщить("Файл не выбран");
конецесли;
конецесли;
КонецПроцедуры
&НаСервере
Процедура ЗапускФоновойЗагрузкиСправочника(АдресХранилищаФайла)
ИмяВременногоФайлаСпр=СК_Регламентные.ЗагрузкаФайлаПредварительная(АдресХранилищаФайла);
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(ИмяВременногоФайлаСпр);
Сообщить("Адрес файла (1):"+АдресХранилищаФайла);
ФЗ = ФоновыеЗадания.Выполнить("СК_Регламентные.ЗагрузкаФайлаДлительная",МассивПараметров);
ЭтаФорма.ФоновоеИдентификатор = ФЗ.УникальныйИдентификатор;
КонецПроцедуры
&НаСервере
Функция ПолучитьСообщенияФЗ(ФЗ, Состояние = Неопределено, УдалятьСообщения = Ложь) Экспорт
Если Состояние = Неопределено Тогда
Состояние = ФЗ.Состояние;
КонецЕсли;
МассивСообщений = Новый Массив;
Сообщения = ФЗ.ПолучитьСообщенияПользователю(УдалятьСообщения);
Если Сообщения <> Неопределено Тогда
Для Каждого Сообщение Из Сообщения Цикл
МассивСообщений.Добавить(Сообщение.Текст);
КонецЦикла;
КонецЕсли;
Возврат МассивСообщений;
КонецФункции
&НаСервере
Функция ОпроситьФоновые()
прог=неопределено;
ФЗ = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ЭтаФорма.ФоновоеИдентификатор);
ФСообщения=ПолучитьСообщенияФЗ(ФЗ,,истина);
Если ФСообщения.Количество() > 0 Тогда
Для Каждого Сообщение Из ФСообщения Цикл
Сообщить(Сообщение);
если найти(Сообщение,"%")>0 тогда
Этаформа.Прогресс=СтрЗаменить(Сообщение,"Выполнено %","");
прог=Этаформа.Прогресс;
конецесли;
КонецЦикла;
КонецЕсли;
возврат прог;
КонецФункции
&НаКлиенте
Процедура ИндикаторВыполненияЗагрузки() Экспорт
пр=ОпроситьФоновые();
если пр<>неопределено тогда
Состояние("Выполнено "+пр);
конецесли;
КонецПроцедуры