Предположим, нам нужно найти файлы, находящиеся в определенном каталоге, которые соответствуют маске, заданной в поле ввода демонстрационной обработки (реквизит МаскаФайлов).
Для решения этой задачи добавим команду НайтиФайлы. Обработчик команды заполним следующим образом (листинг 6.1).
Листинг 6.1. Обработчик команды «НайтиФайлы»
&НаКлиенте
Процедура НайтиФайлыВКаталоге(Команда)
ВыбратьКаталог("Выбор каталога для поиска файлов", Новый ОписаниеОповещения("ПослеВыбораКаталогаДляПоиска", ЭтотОбъект));
КонецПроцедуры
Сначала нам нужно выбрать каталог, в котором будет выполняться поиск файлов. Для этого мы вызываем процедуру ВыбратьКаталог(), в которую передаем заголовок диалога и описание оповещения, указывающее на экспортную процедуру, которая будет выполнена после того, как пользователь выберет каталог (листинг 6.2).
Листинг 6.2. Процедура «ВыбратьКаталог()»
&НаКлиенте
Процедура ВыбратьКаталог(ЗаголовокДиалога, Оповещение)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Диалог.Заголовок = ЗаголовокДиалога;
Диалог.Показать(Оповещение);
КонецПроцедуры
Отображение диалога для выбора мы будем выполнять с помощью немодального метода Показать() объекта ДиалогВыбораФайла. В этот метод мы передаем описание оповещения, содержащееся в параметре Оповещение и указывающее на экспортную процедуру ПослеВыбораКаталогаДляПоиска(), которая будет вызвана после выбора каталога пользователем (листинг 6.3).
Листинг 6.3. Процедура «ПослеВыбораКаталогаДляПоиска()»
&НаКлиенте
Процедура ПослеВыбораКаталогаДляПоиска(ВыбранныеФайлы, Параметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
КаталогПоиска = ВыбранныеФайлы[0];
Если ПустаяСтрока(МаскаФайлов) Тогда
МаскаФайлов = "*.*";
КонецЕсли;
// Найти файлы в выбранном каталоге по указанной маске.
НачатьПоискФайлов(Новый ОписаниеОповещения("НайтиФайлыВКаталогеЗавершение", ЭтотОбъект), КаталогПоиска, МаскаФайлов);
КонецПроцедуры
В этом обработчике оповещения, в случае если каталог выбран, мы получаем путь к каталогу как первый элемент массива, содержащийся в параметре ВыбранныеФайлы, и вызываем процедуру НачатьПоискФайлов(), в которую передаем этот каталог и маску для поиска файлов, заданную в поле ввода МаскаФайлов.
Первым параметром в немодальный метод НачатьПоискФайлов() мы передаем описание оповещения, указывающее на экспортную процедуру НайтиФайлыВКаталогеЗавершение(), которая будет вызвана по окончании поиска файлов (листинг 6.4).
Листинг 6.4. Процедура «НайтиФайлыВКаталогеЗавершение()»
&НаКлиенте
Процедура НайтиФайлыВКаталогеЗавершение(МассивФайлов, Дополнительно) Экспорт
Сообщение = Новый СообщениеПользователю;
Для Каждого Файл Из МассивФайлов Цикл
Сообщение.Текст = "Найден файл - " + Файл.Имя;
Сообщение.Сообщить();
КонецЦикла;
КонецПроцедуры
В этой процедуре в параметре МассивФайлов содержится массив найденных файлов в виде объектов Файл. В цикле обхода этого массива мы показываем короткое имя каждого файла (имя с расширением – Файл.Имя) в сообщении пользователю.