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

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); КонецПопытки; КонецЕсли; КонецЕсли; КонецЕсли; // Здесь вызываем обработку открытия папки по указанному пути КонецПроцедуры

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

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 руб.

25.02.2026    3084    11    1    

14

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    45520    31    13    

49

Поиск данных Системный администратор Программист 1С:Предприятие 8 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)

13420 руб.

14.05.2012    168467    358    253    

589

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

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

180000 руб.

05.09.2025    4542    1    1    

3

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

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

2 стартмани

18.08.2025    7582    38    sapervodichka    14    

77

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    8771    DeerCven    15    

63

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

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

10000 руб.

10.04.2025    2284    1    1    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 2115 20.09.14 13:07 Сейчас в теме
Это называется - не люблю читать внимательно справку :)
Для отправки сообщения требуется регистрация/авторизация