Перем СписокКаталогов ;
Функция ФайлСуществует (Знач ПутьКФайлу) Экспорт
Файл = Новый Файл (ПутьКФайлу);
Возврат Файл.Существует();
КонецФункции
Процедура ПоискКаталога (Каталог)
НайденныеФайлы = НайтиФайлы (Каталог,"*");
Для каждого Ф из НайденныеФайлы цикл
Если Ф.ЭтоКаталог() и Не ф.ПолучитьНевидимость() Тогда
СписокКаталогов.Добавить(Ф.Имя, Ф.ПолноеИмя);
ПоискКаталога (Ф.ПолноеИмя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПоказатьДокументыНажатие(Элемент)
Если ФайлСуществует(ПапкаПользователя) = ложь Тогда
// Разбираем строку пути и вычленяем имя (только имя) каталога пользователя
ФлагПоиска1 = 0;
ТСтрока = ПапкаПользователя;
Пока ФлагПоиска1 = 0 Цикл
НомерСимвола = Найти(ТСтрока,"\");
ДлСтроки = СтрДлина(ТСтрока);
НоваяСтрока = Прав(ТСтрока, ДлСтроки - НомерСимвола);
Если Найти(НоваяСтрока,"\") = 0 тогда
ФлагПоиска1 = 1;
Прервать;
КонецЕсли;
ТСтрока = НоваяСтрока;
КонецЦикла;
// Путь к каталогу хранения - это путь к каталогу - внутри которого осуществляем поиск.
// в общем случае это имя диска
ПутьХранения = Константы.ПутьККаталогуХранения.Получить()+ "\";
СписокКаталогов = Новый СписокЗначений;
ПоискКаталога (ПутьХранения);
// Поиск имени каталога в списке каталогов.
// И соответсвенно реакция
НайденныйКаталог = СписокКаталогов.НайтиПоЗначению(НоваяСтрока);
Если НайденныйКаталог = Неопределено Тогда
Предупреждение ("Каталог пользователя потерян." + Символы.ПС +
"Поиск каталога результатов не дал." + Символы.ПС +
"Нужна ручная корректировка");
Возврат ;
Иначе
ТекстВопроса = "Каталог пользователя потерян." + Символы.ПС +
"Каталог обнаружен в новом месте." + Символы.ПС +
"Старое размещение: "+ ЭтотОбъект.ПапкаПользователя + Символы.ПС +
"Новое размещение : "+ НайденныйКаталог.Представление + Символы.ПС +
"Скорректировать размещение?";
РезультатВопроса = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда
Сообщить ("Путь к найденному каталогу " + НайденныйКаталог.Представление);
Возврат ;
Иначе
ЭтотОбъект.ПапкаПользователя = НайденныйКаталог.Представление;
Сообщить ("Внесение изменений.");
Попытка
ЭтотОбъект.Записать ();
Исключение
Предупреждение("Не удалось записать объект """ + ЭтотОбъект + """
|" + ОписаниеОшибки(),60);
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЕсли;
// Здесь вызываем обработку открытия папки по указанному пути
КонецПроцедуры
Рекурсивный поиск каталога среди каталогов.
02.04.15
Задачи пользователя - Поиск данных
Внимание особо умных. Предложенная процедура актуальна для конфигураций на платформе 8.1 и ниже.
В них для функции НайтиФайлы не был реализован рекурсивный поиск в подкаталогах.
Это указано в справке.
Задача
Найти путь к вложенному каталогу.
Пример
Каталог AST содержит каталоги A1, S1, T1
Каталог A1 содержит каталоги 0001, 0002, 0003
каталог S1 содержит каталоги 1001, 1002, 1003
Каталог Т1 содержит каталоги 2001, 2002, 2003
На входе функции КорневойКаталог = "D:\AST"
КаталогПоиска = "1002"
На выходе функции НайденныйПуть = "D:\AST\A1\1002"
Уточнение - имена КаталогПоиска уникальны и не повторяются.
Функция НайтиФайлы не помогает - она ищет их только в текущем каталоге.
В них для функции НайтиФайлы не был реализован рекурсивный поиск в подкаталогах.
Это указано в справке.
Задача
Найти путь к вложенному каталогу.
Пример
Каталог AST содержит каталоги A1, S1, T1
Каталог A1 содержит каталоги 0001, 0002, 0003
каталог S1 содержит каталоги 1001, 1002, 1003
Каталог Т1 содержит каталоги 2001, 2002, 2003
На входе функции КорневойКаталог = "D:\AST"
КаталогПоиска = "1002"
На выходе функции НайденныйПуть = "D:\AST\A1\1002"
Уточнение - имена КаталогПоиска уникальны и не повторяются.
Функция НайтиФайлы не помогает - она ищет их только в текущем каталоге.