Задача: на форме есть поле с текстовым реквизитом, с активной кнопкой выбора. Надо реализовать заполнение реквизита путем к каталогу с помощью диалога выбора каталога.
Для отображения диалога открытия каталога воспользуемся стандартным объектом ДиалогВыбораФайла.
Вызов объекта будем выполнять в методе НачалоВыбора поля формы, которое срабатывает в момент нажатия на кнопку выбора.
Есть 3 метода открыть диалог и получить нужный путь:
1. Выбрать(). Не работает если у конфигурации свойство "Режим использования синхронных вызовов расширений платформы и внешних компонент" = "Не использовать"
&НаКлиенте
Процедура НужнаяПапкаТестНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытияКаталога = Новый ДиалогВыбораФайла(Режим);
если ДиалогОткрытияКаталога.Выбрать() Тогда
НужнаяПапкаТест = ДиалогОткрытияКаталога.Каталог;
КонецЕсли;
КонецПроцедуры
2. ВыбратьАсинх(). Здесь надо перед методом указать "Асинх" и перед вызовом ВыбратьАсинх() поставить "Ждать" для преобразования обещания. В результате получим либо Неопределено, если ничего не выбрано, либо массив с именами выбранных файлов/папок.
&НаКлиенте
Асинх Процедура НужнаяПапкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытияКаталога = Новый ДиалогВыбораФайла(Режим);
РезультатОткрытия = Ждать ДиалогОткрытияКаталога.ВыбратьАсинх();
Если РезультатОткрытия <> Неопределено Тогда
НужнаяПапка = РезультатОткрытия[0];
КонецЕсли;
КонецПроцедуры
3. Показать(). В этом случае надо определить описание оповещения и экспортную процедуру получения обработки выбора. Результат выбора или Неопределено, или Массив.
&НаКлиенте
Процедура НужнаяПапкаПоказатьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытияКаталога = Новый ДиалогВыбораФайла(Режим);
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаВыбора", ЭтаФорма);
ДиалогОткрытияКаталога.Показать(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(РезультатВыбора, ДопПараметры) Экспорт
Если РезультатВыбора <> Неопределено Тогда
НужнаяПапкаПоказать = РезультатВыбора[0];
КонецЕсли;
КонецПроцедуры
Этот же объект работает аналогично для открытия или сохранения файла. В этим случае надо использовать РежимДиалогаВыбораФайла.Открытие и РежимДиалогаВыбораФайла.Сохранение соответственно.
Если надо обработать файл на сервере, то нет необходимости предварительно объявлять объект ДиалогВыбораФайла. Есть методы, которые позволяют открывать этот диалог автоматически, например НачатьПомещениеФайла(). У этого метода 4-й параметр "Интерактивно" типа Булево. Если его задать = Истина, то при вызовет этого метода на клиенте автоматически откроется диалог открытия файла, и после выбора запуститься его обработка
&НаКлиенте
Процедура ЗагрузитьРеестр(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьФайлЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения,,,Истина,УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
Результат = ПроизвестиОбработкуНаСервере(Адрес);
Если Не ПустаяСтрока(Результат) Тогда
Сообщить("Ошибка выполнения обработки файла: " +Результат);
Иначе
Сообщить("Загрузка завершена.");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроизвестиОбработкуНаСервере(Адрес)
Результат = "";
Попытка
Данные = ПолучитьИзВременногоХранилища(Адрес);
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt");
Данные.Записать(ИмяПромежуточногоФайла);
ДанныеФайла = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
СтрокаФайла = ДанныеФайла.ПрочитатьСтроку();
Пока СтрокаФайла <> Неопределено Цикл
//...
СтрокаФайла = ДанныеФайла.ПрочитатьСтроку();
КонецЦикла;
Исключение
Результат = ОписаниеОшибки();
КонецПопытки;
Возврат Результат;
КонецФункции
|