1С 8.1: Иерархия папок в заданном каталоге. Использование рекурсивной функции.

17.05.11

Разработка - Универсальные функции

Была поставлена такая задача, может кому пригодится.
Решение с использованием рекурсивной функции.
Обработка во вложении.
Алгоритм в описании.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Иерархия папок
.erf 11,88Kb
65 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

Внешний вид отчета:

Модуль формы:

Процедура КаталогНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартанаяОбработка = Ложь;
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите каталог";
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        Каталог = ДиалогОткрытияФайла.Каталог;
    Иначе
        Каталог = "";
        Предупреждение("Каталог не выбран!");
    КонецЕсли;
КонецПроцедуры

Процедура Сформировать()
    Дерево.Строки.Очистить();
    Если СокрЛП(Каталог) = "" тогда
        Предупреждение("Необходимо указать начальный каталог");
        Возврат;
    КонецЕсли;
    ВыполнитьДействие(Дерево);
    ЭлементыФормы.Дерево.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать;
    ЭлементыФормы.Дерево.СоздатьКолонки();
КонецПРоцедуры

 

Модуль объекта:

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

Процедура ВыполнитьДействие(ДеревоЗн) Экспорт
    НовСтр = ДеревоЗн.Строки.Добавить();
    НовСтр.Каталог = Каталог;
    ЗаполнитьДерево(Каталог,НовСтр);   
КонецПРоцедуры

 

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

См. также

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

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    6084    Abysswalker    11    

47

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

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

14.05.2025    10917    DeerCven    15    

64

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

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

21.05.2024    62737    dimanich70    86    

177

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

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

1 стартмани

18.03.2024    8509    7    John_d    13    

59

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

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

12.02.2024    78807    atdonya    31    

75

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

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

30.11.2023    11276    ke.92@mail.ru    18    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4612 07.02.11 15:31 Сейчас в теме
Баян или классическая задача, ещё с турбопаскалевых времён. Рекурсивное заполнение динамического списка или построение структуры каталогов.
2. Alias 177 07.02.11 15:32 Сейчас в теме
Очевидный код для решения несложной задачи. Сейчас рекурсия -- это уже азы программирования. Всё равно что учить что метод "Выбрать" -- выбирает, а "Добавить" -- добавляет.
Быстрее написать самому чем искать готовое.
За что ставить плюс? Твёрдый ноль -- ни плюсов, ни минусов...
3. jan27 736 07.02.11 15:37 Сейчас в теме
(2) эта работа писалась не для тех, кому быстрее написать самому )
о рекурсии говорилось и в теме и в анонсе
на что вы рассчитывали когда увидели слово рекурсия?
"Выбрать" - не выбирает?;)
Kuzya_brаtsk; chmod660; +2 Ответить
18. user1463977 07.07.23 16:17 Сейчас в теме
(3) Для управляемых форм можете пример дать?
4. Поручик 4612 07.02.11 15:38 Сейчас в теме
(2) Не будем особо наезжать, человек может старался, обработку ваял. Хотя действительно, блин, детская задачка.
5. jan27 736 07.02.11 15:50 Сейчас в теме
(4) не претендую на то, что обработка архисложная
красивое решение..., спасибо, что кроме простоты задачки других нареканий относительно этого решения нет )
6. anig99 2865 07.02.11 16:09 Сейчас в теме
(5) что ж сказать... уровень программистов 1с "с претензией" падает всё ниже и ниже.
Пора действительно организовывать песочницу - место где будут публиковать и обсуждать ЭЛЕМЕНТАРНЫЕ вещи, которые должны знать все.
7. jan27 736 07.02.11 16:24 Сейчас в теме
(6) в чем заключается "претензия"?
Вы думаете тут в основном качают всевозможные обработки те кому проще самому написать?

ЗЫ Для меня, например, элементарной вещью, помимо рекурсии, является сканирование, сохранение и печать..., но я же не кричу об этом в вашей работе, я прекрасно понимаю, что это кому-то может пригодится
Kuzya_brаtsk; +1 Ответить
8. anig99 2865 07.02.11 17:36 Сейчас в теме
(7)
Как и в случае со "строковым калькулятором" претензия одна - это не готовое решение, это полуфабрикат. Как обработка, она не делает НИЧЕГО, как статья она не несет ничего нового и оригинального для мало-мальски знакомого с элементарным программированием. Именно поэтому место таким вещам во всевозможных FAQ и Простых примерах программирования.
Раз уж упомянули мою публикацию - у неё есть чёткое практическое применение в виде готовых обработок, которые можно использовать без дополнительного программирования. Хотя я и мог оставить пример процедуры и ссылку на справку от Microsoft, где всё это написано.
9. Alias 177 07.02.11 17:59 Сейчас в теме
(2) Я рассчитывал увидеть нечто большее. Какое-нибудь красивое решение, нестандартный оригинальный подход, в котором вместо ожидаемого непроизводительного цикла очень удачно и к месту используется рекурсия. А ничего такого нет.
То есть следующей можно ожидать статью типа "Суммирование числовой колонки дерева. Использование рекурсии". Даже интереснее вывода иерархии папок будет -- там хотя бы можно показать как и зачем в рекурсии используется передача параметров по значению, и показать восходящую рекурсию (от нижних элементов к верхним)...
Не в обиду, правда. :) я ж минус не ставлю, просто и плюса не за что.

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

станут вообще лишними.
10. tango 552 07.02.11 20:47 Сейчас в теме
(9) Изменено: Alias - 07.02.11 18:01 (италик)
что значит "италик" здесь?
11. anig99 2865 07.02.11 20:54 Сейчас в теме
(10) добавил наклон в некоторые строчки. Называется Italic. Bold, Italic, Underline
12. Поручик 4612 07.02.11 22:02 Сейчас в теме
(10), (11) Спасибо, поржал. Кто в теме, тот поймёт почему.
13. jan27 736 07.02.11 22:06 Сейчас в теме
спасибо за замечания
14. anig99 2865 08.02.11 08:10 Сейчас в теме
(13) собственно ссылки там тоже есть.
15. dandrontiy 19.01.12 17:57 Сейчас в теме
как бы получить типовые расширения файлов, зная их расширения ?
16. keeperofswords 13.04.17 22:35 Сейчас в теме
Спасибо за код! сэкономил много времени!! Так же решил доделать там - размер, дату , жирность, проваливаться в файл и т.д. Делюсь своим результатом - может будет полезно для дальнейшего развития отчета.
Прикрепленные файлы:
ВывестиДеревоФайлов.erf
user701220_andy4spam; +1 Ответить
17. jan27 736 14.04.17 11:57 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация