Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Класс Дерево на основе ТП (число прочтений - 8959 )
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Класс Дерево на основе ТП
14. Апреля 2011 :: 02:38
Печать  
Класс, облегчающий реализацию дерева на основе ТП.

Для работы необходимо перенаправить в класс следующие события ТП:
  • ПриВыводеСтроки
  • ПриВыбореКартинки
  • ПриАктивизацииСтроки

Пример такого перенаправления
Код
Выбрать все
Процедура кнтпСписокПриАктивизацииСтроки(ТП) Экспорт
	Если ТП = Дерево.ТП Тогда
		Дерево.тпПриАктивизацииСтроки();
	КонецЕсли;
КонецПроцедуры 

, где Дерево - экземпляр класса Общие.Дерево.

Пример создания дерева
Код
Выбрать все
	Дерево = СоздатьОбъект("Общие.Дерево");
	Дерево.ЗаголовокКода = "Товар";
	Дерево.ДлинаКода = 50;
	Дерево.ШиринаКода = 10;
	Дерево.НоваяКолонка("Путь", "Строка",,, "Путь к файлам группы", 10);
	Дерево.НоваяКолонка("Примечание", "Строка",,,,10);
	тпСписок = Дерево.Инициализация(ФормаЗаявки.Форма, "кнтпСписок"); 



Пример заполнения дерева
Код
Выбрать все
	тзГрупп.ВыбратьСтроки();
	Пока тзГрупп.ПолучитьСтроку() = 1 Цикл
		Дерево.НоваяСтрока();
		Дерево.Код = тзГрупп.ИмяРодителя;
		Дерево.Путь = тзГрупп.Путь;
		Дерево.Данные = тзГрупп.Родитель;
		ПозицияГруппы = Дерево.Позиция;
		Дерево.ПреобразоватьГруппу(ПозицияГруппы, 1);
		тзСписок.ВыбратьСтроки();
		Пока тзСписок.ПолучитьСтроку() = 1 Цикл
			Если тзСписок.Родитель <> тзГрупп.Родитель Тогда
				Продолжить;
			КонецЕсли;
			Дерево.НоваяСтрока(ПозицияГруппы);
			Дерево.Код = тзСписок.ИмяТовара;
			Дерево.Путь = тзГрупп.Путь;
			Дерево.Примечание = тзСписок.Примечание;
			Дерево.Данные = СоздатьОбъект("СписокЗначений");
			Дерево.Данные.Установить("КодТовара", тзСписок.КодТовара);
			Дерево.Данные.Установить("КодСтроки", тзСписок.КодСтроки);
		КонецЦикла;
	КонецЦикла;
	Дерево.Обновить(); 



Т.е. класс используется по аналогии с классом ТаблицаЗначений, только вместо номера строки используется свойство Позиция.

Для получения более подробной информации следует почитать als-файл, который рекомендуется закинуть в папку BIN программы.
Также прилагается и ints-файл, используемый интелисенсом в конфигураторе.
Файл Общие.Дерево.bmp содержит иконки и должен лежать рядом с файлом класса.

P.S.: Сам считаю данный класс еще очень сырым, но люди просили - выкладываю.

P.P.S.: Пример заполнения довольно старый, в нем еще не использовались невидимые колонки, потому неотображаемые данные хранились строго в списке значений, что было не очень удобно и привело к появлению возможности создания невидимых колонок.
  

_____________001.rar ( 21 KB | Загрузки )
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #1 - 14. Апреля 2011 :: 08:18
Печать  
Поглядел, неплохо. В целом подход одинаковый за исключением того как реализовано. У тебя объект управляет и данными и ТП, у меня же данные могут существовать сами по себе от ТП. Данный вопрос я планировал разруливать (научить дерево говорить о своем изменении, благо это не сложно), но руки не доходят.
Для себя заценил метод ПреобразоватьГруппу, правда назвал бы его иначе, а еще лучше просто "ЭтоГруппа" открыл бы на чтение и запись (соответственно с проверкой на всяк пожарный).
И еще заценил картинку со знаком вопрос идея хорошая +100500 Улыбка.
Но я так понял что если понадобится контрол для управления деревом прийдется писать все кнопки + обработку событий. Вот это стоило бы добавить в класс и самостоятельный аналог был бы полный имхо. Хотя код не смотрел, может в чем то не прав.
В любом случае респект Улыбка
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #2 - 14. Апреля 2011 :: 09:53
Печать  
Управление не всегда требуется. Если требуется, - использую класс-обертку для MSComctlLib.Toolbar, иногда в сочетании с классом-оберткой для MSComctlLib.TabStrip.2, однако в 90% случаев достаточно обработчиков ТП для работы с данными и пары кнопок на форме. Все зависит от задач.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #3 - 14. Апреля 2011 :: 10:01
Печать  
Кстати по табстрип поделись примером, помню в свое время так и не подружился с ним Печаль
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #4 - 15. Апреля 2011 :: 02:03
Печать  
vandalsvq писал(а) 14. Апреля 2011 :: 10:01:
Кстати по табстрип поделись примером, помню в свое время так и не подружился с ним Печаль

Странно. Он ничем особым не отличается от остальных объектов той же библиотеки...
  
Наверх
 
IP записан
 
Strannik
Junior Member
**
Отсутствует


Оцифрованный романтик

Сообщений: 29
Местоположение: Где-то в Башкирии
Зарегистрирован: 17. Июня 2011
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #5 - 17. Июня 2011 :: 17:29
Печать  
Dmitry The Wing писал(а) 14. Апреля 2011 :: 02:38:
Класс, облегчающий реализацию дерева на основе ТП.


Понравилось, хорошо работает. Спасибо.
  

Когда я сомневаюсь - спрошу, если есть у кого.&&Если меня не устроит ответ - я разбираюсь сам.&&Если некого спросить - я разбираюсь сам.&&Если я разберусь - я перестаю сомневаться.
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #6 - 20. Июня 2011 :: 01:11
Печать  
Ну оно и у меня немного уже эволюционировало, но пока несерьезно ... вот когда (и если) найду время перелопатить ее на работу с классом ПроксиПоставщикДанных вместо ТЗ - тогда оно станет и шустрее и удобнее, но последнее время я 99% времени работаю в 1С8.2.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #7 - 20. Июня 2011 :: 03:45
Печать  
Помнится у меня была идея весь набор своих классов (кроме динамических и ИТЗ) перевести на прокси + добавить многие возможности из ДинамическогоСписка 8.2. Но пока я изучал 8.2 (УП) оно меня сожрало и даже останки не отдает.
Удачи в разработке. Мне понравилась твоя реализация. Жаль только с документацией плохо (или уже есть Улыбка, я не знаю). Я люблю законченную работу, чтобы открыл, прочитал и понял все.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #8 - 12. Января 2012 :: 05:11
Печать  
Примерчик бы...
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #9 - 18. Декабря 2012 :: 16:46
Печать  
Да, примера использования деревьев не хватает.
Жду ответа.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #10 - 19. Декабря 2012 :: 02:45
Печать  
Давно ушел из семерки. Откопал конфу примерно годовой давности (классы и вк) и наваял пример.
В архиве папка конфы с двумя классами и обработкой.
В самой конфе сделана только загрузка ВК и классов, обработку надо ручками открыть из соответствующей папки.
Случайным образом генерится случайное количество уровней дерева и элементов на каждом уровне.
  

tree_001.zip ( 1001 KB | Загрузки )
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #11 - 19. Декабря 2012 :: 06:31
Печать  
Спасибо.
А там пометки/флажки для разных элементов и групп дерева можно делать?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #12 - 20. Декабря 2012 :: 08:06
Печать  
Я такой функционал не реализовывал, но его можно доработать через события ПриВыводеСтроки и ПриВыбореКартинки.
Пример логики можно подглядеть в моем классе.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #13 - 21. Декабря 2012 :: 14:08
Печать  
artbear писал(а) 19. Декабря 2012 :: 06:31:
Спасибо.
А там пометки/флажки для разных элементов и групп дерева можно делать?


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

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс Дерево на основе ТП
Ответ #14 - 21. Декабря 2012 :: 15:19
Печать  
vandalsvq писал(а) 21. Декабря 2012 :: 14:08:
artbear писал(а) 19. Декабря 2012 :: 06:31:
Спасибо.
А там пометки/флажки для разных элементов и групп дерева можно делать?


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

Саш, спасибо. Жду пример.
Я уже несколько дней на тебя рассчитываю, но все время забываю позвонить уточнить Улыбка
Начал потихоньку технологии тестирования на новой работе применять.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать