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

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

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

См. также

Быстрый поиск дублей с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)

Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

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

10800 руб.

14.05.2012    155616    327    252    

559

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42645    10    24    

38

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

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

1 стартмани

18.03.2024    2892    2    John_d    11    

56

Переоткрытие внешних обработок

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

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

30.11.2023    4103    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

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

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9381    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

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

2 стартмани

22.08.2023    2234    25    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16355    142    sapervodichka    112    

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

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

Показать
Прикрепленные файлы:
ПоискКаталога.epf
user970589; jobkostya1c_ERP; DitriX; BigB; +4 1
3. jobkostya1c_ERP 100 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. user970589 10 15.12.21 16:28 Сейчас в теме
(1)
"Найд

Большое человеческое спасибо! )
betepon; +1
2. DitriX 2093 20.09.14 13:07 Сейчас в теме
Это называется - не люблю читать внимательно справку :)
+
Оставьте свое сообщение