Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 13:23

Помогите с деревом значений

Автор ИгорьШпак, 02 окт 2012, 11:00

0 Пользователей и 1 гость просматривают эту тему.

ИгорьШпак

Люди добрые! Помогите с таким вопросом: Есть дерево значений, в этом дереве есть каталоги, подкаталоги и файлы. Мне нужно узнать  уровень текущей строки. То есть я в самом этом поле кликаю мышкой на любую строчку и нажав на кнопку(скажем так) должен узнать текущий уровень. Суть в том что дерево я составил из файлов и оно мне вывело. Теперь нужно для дальнейшей работы узнать уровень. помогите пожалуйста. Если что непонятно - задавайте.

ИгорьШпак

Все это реализуется в обрабоотке

MuI_I_Ika

Можно уровень расставлять в отдельной колонке при формировании дерева и потом его просто получать.

ИгорьШпак

Я так понял вы предлагаете создать программно колонку и там занасить значение уровня????

У меня вопрос такой - когда я открываю обработку - у меня при открытии сразу выводит на форму данное дерево ( все по уровням) и в данной процедуре я могу получить все что хочу. Далее мне необходимо нажать на кнопку и в зависимости где стоит курсор ( на какой строчке в данной таблице) получить всю информацию

Dethmontt

Функция ВернутьУровеньВложенностиСтрокиДереваЗначений(Знач СтрокаДерева)

Сч=1;
Пока СтрокаДерева.Родитель <> Неопределено Цикл
Сч=Сч+1;
СтрокаДерева = СтрокаДерева.Родитель;
КонецЦикла;

Возврат Сч; //Число уровень вложенности

КонецФункции
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

ИгорьШпак

Вот мой код:


ТаблицаФайлов.Строки.Очистить();
ИсколмаяПапка = СокрЛП(ПутьКФайлам)+"\"+СокрЛП(Строка(Объект.Ссылка.Код));     
НайденныйКаталог = НайтиФайлы(СокрЛП(ПутьКФайлам)+"\", СокрЛП(Строка(Объект.Ссылка.Код))); 
Если НайденныйКаталог.Количество() > 0 Тогда   
   НайденныеФайлы = НайтиФайлы(СокрЛП(ИсколмаяПапка)+"\", "*.*");   
   Если НайденныеФайлы.Количество() > 0 Тогда     
      Для Каждого ЭлФайла ИЗ НайденныеФайлы Цикл            
         Если ЭлФайла.ЭтоКаталог() Тогда         
            Если НЕ ЭтоСправочник Тогда
               Если НЕ Формат(ВладелецФормы.ДокументОбъект.Дата, "ДФ=yyyy-MM-dd") = ЭлФайла.Имя Тогда
                  Продолжить;
               КонецЕсли;
            КонецЕсли;
            НайденныеПодФайлы = НайтиФайлы(СокрЛП(ЭлФайла.ПолноеИмя)+"\", "*.*");   
            Если НайденныеПодФайлы.Количество() > 0 Тогда 
               НоваяСтрока = ТаблицаФайлов.Строки.Добавить();
               НоваяСтрока.НазваниеФайла = ЭлФайла.Имя;
               Родитель = НоваяСтрока;                               
               Для Каждого ЭлПодФайла ИЗ НайденныеПодФайлы Цикл     
                  Если ЭлПодФайла.ЭтоКаталог() Тогда                                     
                     НайденныеПодФайлы2 = НайтиФайлы(СокрЛП(ЭлПодФайла.ПолноеИмя)+"\", "*.*");   
                     Если НайденныеПодФайлы2.Количество() > 0 Тогда         
                        НоваяСтрока2 = НоваяСтрока.Строки.Вставить(0);
                        НоваяСтрока2.НазваниеФайла = ЭлПодФайла.Имя;
                        Для Каждого ЭлПодФайла2 ИЗ НайденныеПодФайлы2 Цикл
                           НоваяСтрока3 = НоваяСтрока2.Строки.Добавить();
                           НоваяСтрока3.НазваниеФайла = ЭлПодФайла2.Имя;
                           НоваяСтрока3.ПолноеИмя = ЭлПодФайла2.ПолноеИмя;
                        КонецЦикла;
                     КонецЕсли;
                  Иначе
                     НоваяСтрока2 = НоваяСтрока.Строки.Добавить();
                     НоваяСтрока2.НазваниеФайла = ЭлПодФайла.Имя;
                     НоваяСтрока2.ПолноеИмя = ЭлПодФайла.ПолноеИмя;                       
                  КонецЕсли;
               КонецЦикла;
            КонецЕсли;
         Иначе
            НоваяСтрока = ТаблицаФайлов.Строки.Добавить();
            НоваяСтрока.НазваниеФайла = ЭлФайла.Имя;
            НоваяСтрока.ПолноеИмя = ЭлФайла.ПолноеИмя;
         КонецЕсли;
      КонецЦикла;                        
   КонецЕсли;
КонецЕсли;



Таблицафайлов - деревозначений.

Код рабочий, могут быть памарки при копировании. Но суть отражена. Этот код одной из процедур, которая запускается при открытии формы. Сами файлы находятся где-то в папках ( путь = константе). Далее мне необходимо добавить файл. НО ВАЖНО ЗНАТЬ ГДЕ СТОИТ КУРСОР В ТАБЛИЦЕ ФАЙЛОВ. Это необходимо для того что если пользователь захочет создать каталог внутри уже сущ каталога и только туда закинуть свои файлы, то мне необходимо знать уровень текущего каталога, чтобы запретить создание каталога, если уровень больше скажем 3.
Если есть вопросы- задавайте. Спасибо.

Dethmontt

Епрст......................

Все что ли самому написать надо???

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

Функция ВернутьУровеньВложенностиСтрокиДереваЗначений(Знач СтрокаДерева)
   
    Сч=1;
    Пока СтрокаДерева.Родитель <> Неопределено Цикл
        Сч=Сч+1;
        СтрокаДерева = СтрокаДерева.Родитель;
    КонецЦикла;
   
    Возврат Сч; //Число уровень вложенности
   
КонецФункции   

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

ИгорьШпак

Огромное спасибо!!!! Я еще набираюсь опыта, но обещаю как только буду компетентен в вопросах - помогать остальным! Спасибо. Единственное ТекущаяСтрока = ЭлементыФормы.Таблицафайлов.ТекущиеДанные(); выдавало ошибку. Но я нашел где нетак. Я заменил ТекущиеДанные() на текущуюстроку

Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

ИгорьШпак

А еще можно написать так Уровень = ТекущаяСтрока.Уровень();

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск