Приветствую Вас ГостьСуббота, 18.05.2024, 12:15

Каталог статей


Диалог выбора файла

Задача: на форме есть поле с текстовым реквизитом, с активной кнопкой выбора. Надо реализовать заполнение реквизита путем к каталогу с помощью диалога выбора каталога.

Для отображения диалога открытия каталога воспользуемся стандартным объектом ДиалогВыбораФайла.

Вызов объекта будем выполнять в методе НачалоВыбора поля формы, которое срабатывает в момент нажатия на кнопку выбора.

Есть 3 метода открыть диалог и получить нужный путь:

1.  Выбрать(). Не работает если у конфигурации свойство "Режим использования синхронных вызовов расширений платформы и внешних компонент" = "Не использовать"

&НаКлиенте
Процедура НужнаяПапкаТестНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытияКаталога = Новый ДиалогВыбораФайла(Режим);
    если ДиалогОткрытияКаталога.Выбрать() Тогда
        НужнаяПапкаТест =  ДиалогОткрытияКаталога.Каталог;
    КонецЕсли;
КонецПроцедуры
 

2. ВыбратьАсинх(). Здесь надо перед методом указать "Асинх" и перед вызовом ВыбратьАсинх() поставить "Ждать" для преобразования обещания. В результате получим либо Неопределено, если ничего не выбрано, либо массив с именами выбранных файлов/папок.

&НаКлиенте
Асинх Процедура НужнаяПапкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытияКаталога = Новый ДиалогВыбораФайла(Режим);
    РезультатОткрытия =  Ждать ДиалогОткрытияКаталога.ВыбратьАсинх();
    Если РезультатОткрытия <> Неопределено Тогда
        НужнаяПапка = РезультатОткрытия[0];
    КонецЕсли;

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

3. Показать(). В этом случае надо определить описание оповещения и экспортную процедуру получения обработки выбора. Результат выбора или Неопределено, или Массив.

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

&НаКлиенте
Процедура ОбработкаВыбора(РезультатВыбора, ДопПараметры) Экспорт
    Если РезультатВыбора <> Неопределено Тогда
        НужнаяПапкаПоказать = РезультатВыбора[0];
    КонецЕсли;
КонецПроцедуры

Этот же объект работает аналогично для открытия или сохранения файла. В этим случае надо использовать РежимДиалогаВыбораФайла.Открытие и РежимДиалогаВыбораФайла.Сохранение соответственно.

Если надо обработать файл на сервере, то нет необходимости предварительно объявлять объект ДиалогВыбораФайла. Есть методы, которые позволяют открывать этот диалог автоматически, например НачатьПомещениеФайла(). У этого метода 4-й параметр "Интерактивно" типа Булево. Если его задать = Истина, то при вызовет этого метода на клиенте автоматически откроется диалог открытия файла, и после выбора запуститься его обработка

&НаКлиенте
Процедура ЗагрузитьРеестр(Команда)
    ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьФайлЗавершение", ЭтотОбъект);
    НачатьПомещениеФайла(ОписаниеОповещения,,,Истина,УникальныйИдентификатор); 
КонецПроцедуры

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

&НаСервере
Функция ПроизвестиОбработкуНаСервере(Адрес) 
    Результат = "";
    Попытка
        Данные = ПолучитьИзВременногоХранилища(Адрес);
        ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt");
        Данные.Записать(ИмяПромежуточногоФайла);
        ДанныеФайла = Новый ЧтениеТекста(ИмяПромежуточногоФайла);
        СтрокаФайла = ДанныеФайла.ПрочитатьСтроку();
        
        Пока СтрокаФайла <> Неопределено Цикл
            //...
            СтрокаФайла = ДанныеФайла.ПрочитатьСтроку();
        КонецЦикла;

    Исключение
        Результат = ОписаниеОшибки();
    КонецПопытки;
    
    Возврат Результат;
    
КонецФункции
 

Категория: Формы | Добавил: leshic (28.04.2022)
Просмотров: 703 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0