Рекурсивный поиск каталога среди каталогов.

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"

Уточнение - имена КаталогПоиска уникальны и не повторяются.
Функция НайтиФайлы не помогает - она ищет их только в текущем каталоге.
Перем СписокКаталогов ;

Функция ФайлСуществует (Знач ПутьКФайлу) Экспорт
    Файл = Новый Файл (ПутьКФайлу);
    Возврат Файл.Существует();
КонецФункции

Процедура ПоискКаталога (Каталог)
   
    НайденныеФайлы = НайтиФайлы (Каталог,"*");
    Для каждого Ф из НайденныеФайлы цикл
        Если Ф.ЭтоКаталог() и Не ф.ПолучитьНевидимость() Тогда
            СписокКаталогов.Добавить(Ф.Имя, Ф.ПолноеИмя);
            ПоискКаталога (Ф.ПолноеИмя);               
        КонецЕсли;
    КонецЦикла;

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

Процедура ПоказатьДокументыНажатие(Элемент)
   
    Если ФайлСуществует(ПапкаПользователя) = ложь Тогда
        
// Разбираем строку пути и вычленяем имя (только имя) каталога пользователя
ФлагПоиска1 = 0; ТСтрока = ПапкаПользователя; Пока ФлагПоиска1 = 0 Цикл НомерСимвола = Найти(ТСтрока,"\"); ДлСтроки = СтрДлина(ТСтрока); НоваяСтрока = Прав(ТСтрока, ДлСтроки - НомерСимвола); Если Найти(НоваяСтрока,"\") = 0 тогда ФлагПоиска1 = 1; Прервать; КонецЕсли; ТСтрока = НоваяСтрока; КонецЦикла; // Путь к каталогу хранения - это путь к каталогу - внутри которого осуществляем поиск.
// в общем случае это имя диска
 ПутьХранения = Константы.ПутьККаталогуХранения.Получить()+ "\"; СписокКаталогов = Новый СписокЗначений; ПоискКаталога (ПутьХранения);
// Поиск имени каталога в списке каталогов.
// И соответсвенно реакция
НайденныйКаталог = СписокКаталогов.НайтиПоЗначению(НоваяСтрока); Если НайденныйКаталог = Неопределено Тогда Предупреждение ("Каталог пользователя потерян." + Символы.ПС + "Поиск каталога результатов не дал." + Символы.ПС + "Нужна ручная корректировка"); Возврат ; Иначе ТекстВопроса = "Каталог пользователя потерян." + Символы.ПС + "Каталог обнаружен в новом месте." + Символы.ПС + "Старое размещение: "+ ЭтотОбъект.ПапкаПользователя + Символы.ПС + "Новое размещение : "+ НайденныйКаталог.Представление + Символы.ПС + "Скорректировать размещение?"; РезультатВопроса = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда Сообщить ("Путь к найденному каталогу " + НайденныйКаталог.Представление); Возврат ; Иначе ЭтотОбъект.ПапкаПользователя = НайденныйКаталог.Представление; Сообщить ("Внесение изменений."); Попытка ЭтотОбъект.Записать (); Исключение Предупреждение("Не удалось записать объект """ + ЭтотОбъект + """ |" + ОписаниеОшибки(),60); КонецПопытки; КонецЕсли; КонецЕсли; КонецЕсли; // Здесь вызываем обработку открытия папки по указанному пути КонецПроцедуры

Вступайте в нашу телеграмм-группу Инфостарт

Рекурсивый поиск каталога

См. также

Информационная безопасность Поиск данных ServiceDesk, HelpDesk Журналы и реестры данных 8.3.14 Россия Бухгалтерский учет Бюджетный учет Налоговый учет Управленческий учет Платные (руб)

Полный контроль над изменениями в 1С без нагрузки на вашу базу. Мгновенный доступ к истории изменений, удобное сравнение и откат данных в один клик. Простой отчет с визуальным отображением изменений Откат на любую версию объекта в два клика История изменения данных хранится во внешней базе

180000 руб.

05.09.2025    1515    1    0    

3

Поиск данных Системный администратор Программист 1С v8.3 Управляемые формы 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

13200 руб.

14.05.2012    164654    352    253    

585

Поиск данных 1С v8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Расширение добавляет возможность в 1С в любых полях и отборах выбирать значения не только Код, Наименование или Номер, но и Уникальный идентификатор, Навигационную ссылку, Объект не найден, Представление документа.

2 стартмани

18.08.2025    6029    33    sapervodichka    14    

75

Поиск данных ЭДО и ОФД Подбор и обработка объектов 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Поиск номенклатуры при сопоставлении в ЭДО не интуитивный, не настраиваемый и просто неудобный. Данное решение - это альтернативный вариант расширенного поиска и сопоставления номенклатуры для 1С, который подключается в качестве расширения и решает эту проблему.

10000 руб.

10.04.2025    1400    1    1    

1

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    44823    dimanich70    83    

160

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6639    6    John_d    13    

59

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    55149    atdonya    31    

68

Универсальные функции Программист 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8390    ke.92@mail.ru    17    

67
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Romeo_1c_programmer 35 19.09.14 15:42 Сейчас в теме
Данная задача решается проще с использованием функции "Найти файлы". Пример кода:

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

Показать
Прикрепленные файлы:
ПоискКаталога.epf
FoxMara; jobkostya1c_ERP; DitriX; BigB; +4 1 Ответить
3. jobkostya1c_ERP 101 21.09.14 14:04 Сейчас в теме
(1) Romeo_1c_programmer, конечно, поглядим на практике когда возникнет необходимость поиска. Нужны разные идеи и алгоритмы. Хотя в 1С стараются не доводить до того чтоб заниматься сложным поиском. Итак проблем хватает с путями на FTP.
4. betepon 71 30.09.14 18:26 Сейчас в теме
(1) Romeo_1c_programmer, (2) DitriX,
Попробуйте процедуру от Romeo_1c_programmer использовать в 8.1
Вас, как и меня, ожидает СЮРПРИЗ - она не работает. "Ошибка - слишком много параметров" ;)))
А правильный синтаксис для 8.1 выглядит так
Результат = НайтиФайлы(Путь, "*");
Но поиск будет производится только в каталоге (Путь). Это написано в справке. И во внутренние каталоги НайтиФайлы () заглянуть не может :))).
Это реализовано только начиная с 8.2

Не волнуйтесь - не Вы первые подсказываете заглянуть в справку и написать код, как это сделал Romeo_1c_programmer.
И не Вы последние ошибаетесь.

Так что для конфигураций ниже 8.2 этот алгоритм пока единственный.
5. FoxMara 10 15.12.21 16:28 Сейчас в теме
(1)
"Найд

Большое человеческое спасибо! )
2. DitriX 2111 20.09.14 13:07 Сейчас в теме
Это называется - не люблю читать внимательно справку :)
Для отправки сообщения требуется регистрация/авторизация