IE2017

Визуализация и интерактивное изменение дерева значений.

Программирование - Практика программирования

Обработка позволяет представить дерево значений в графическом виде, изменить его простым перетаскиванием блоков и выгрузить обратно в дерево значений.
Обработка позволяет представить дерево значений в графическом виде, изменить его простым перетаскиванием блоков на поле html документа и выгрузить обратно в дерево значений.
Реализовано с помощью js плагина jOrgChart.

В настройках при выборе цвета, работают только web-цвета.
Обычное приложение.

Скачать файлы

Наименование Файл Версия Размер
Визуализация дерева значений
.epf 50,88Kb
07.08.14
91
.epf 1.2 50,88Kb 91 Скачать

См. также

Комментарии
1. artur rakhmatulin (нормальный такой) 85 06.08.14 09:42 Сейчас в теме
Прикольно
А как оно работает? здесь уже видел несколько разработок "интерактивных" отчетов, тоже с использованием js, но я таки не очень понял как оно связывается с объектами 1С.
Как в данном случае вы говорите, что можно потыкать html отображение этого дерева и оно перестроится в списке.
2. Сергей Белькин (Belkin_Sergey) 240 06.08.14 08:10 Сейчас в теме
(1) нормальный такой, у нас на предприятии была задача сделать штатное расписание, а вместе с ним и структуру подчиненности отделов, подразделений, должностей, а также изменение штатного расписания. Организация большая, и когда строилось дерево подчиненности, оно было слегка не читаемым, тяжело воспринималось. Поэтому захотелось это дерево визуализировать.
Работает так, из дерева в html-е строится многоуровневый список, после чего js рисует такую структуру. На поле html можно мышкой вцепиться в одну из плашек и поменять ее подчиненность. Т.е. например, взять ведущего бухгалтера и перекинуть его под аудитора. После нажатия на кнопку Html в дерево значений, новый список будет преобразован в дерево значений 1С. В плашки можно встроить ссылки, рисунки, в общем зависит от фантазии и знания html.
3. Сергей Белькин (Belkin_Sergey) 240 06.08.14 08:13 Сейчас в теме
(1) нормальный такой, "как оно связывается с объектами 1С" - никак не связывается, просто парсится html
4. Саша Безымяный (help1Ckr) 06.08.14 11:48 Сейчас в теме
Спасибо огромное! Будем проверять. К сожалению слабо знаком с html но давно хотелось что то такое. ВОт как раз мучаюсь с графическими схемами. Но на html больше возможностей
5. Марина Чирина (chmv) 06.08.14 11:04 Сейчас в теме
Интересно. Но где это можно применить на практике?
6. artur rakhmatulin (нормальный такой) 85 06.08.14 12:14 Сейчас в теме
(2) Belkin_Sergey, о, спасибочки за ответ :) будем в курсе.
Мне почему-то тоже сразу пришла в голову идея с деревом штатного расписания в ЗУПе :)
7. Сергей Белькин (Belkin_Sergey) 240 06.08.14 10:52 Сейчас в теме
(5) chmv, все зависит от вашей фантазии :-)
Как вариант, штатное расписание, о чем писалось выше, или структура подчиненности документов.
8. Александр Аляев (alyaev.a.v) 07.08.14 11:10 Сейчас в теме
Забавная штука.почему 1с не встроит в платформу уже средства визуализации.
9. Mr. Alf Garcia (mip128) 07.08.14 12:02 Сейчас в теме
При открытии ошибка Метод объекта не обнаружен (ШестнадцатиричноеВДесятичное) Возврат ОбщегоНазначения.ШестнадцатиричноеВДесятичное(Число);
Верните мои стартмани!)
10. Сергей Белькин (Belkin_Sergey) 240 07.08.14 10:14 Сейчас в теме
(9) mip128, Вставьте в общий модуль ОбщегоНазначения функцию

// Преобразует шестнадцатиричное число в десятичное
// 
// Параметры:
//	Источник - строка с шестнадцатиричным числом
//
// Возвращаемое значение:
//	Число - десятичное число
//
Функция ШестнадцатиричноеВДесятичное(Источник) Экспорт
	
	Результат = 0;
	
	Для Поз = 1 По СтрДлина(Источник) Цикл
		ТекКод = КодСимвола(Источник, Поз);
		
		Если ТекКод >= КодСимвола("0") И ТекКод <= КодСимвола("9") Тогда
			ТекКод = ТекКод - КодСимвола("0");
		ИначеЕсли ТекКод >= КодСимвола("a") И ТекКод <= КодСимвола("f") Тогда
			ТекКод = ТекКод +10 - КодСимвола("a");
		ИначеЕсли ТекКод >= КодСимвола("A") И ТекКод <= КодСимвола("F") Тогда
			ТекКод = ТекКод +10 - КодСимвола("A");
		КонецЕсли;
		
		Результат = Результат * 16 + ТекКод;
		
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции // ШестнадцатиричноеВДесятичное()
...Показать Скрыть


Если в нем нет функции ДесятичноеВШестнадцатиричное(), то вставьте ее тоже.

// Преобразует десятичное число в шестнадцатиричное
// 
// Параметры:
//	Источник - число (десятичное) от 0 до 255
//
// Возвращаемое значение:
//	Строка - десятичное число
//
Функция ДесятичноеВШестнадцатиричное(Источник) Экспорт
	
	ШестнадцатиричныеСимволы = "0123456789ABCDEF";
	
	Если Источник < 0 Тогда
		Возврат "00";
	КонецЕсли;
	Если Источник > 255 Тогда
		Возврат "FF";
	КонецЕсли;
	
	ПервыйСимвол	= Цел(Источник / 16) + 1;
	ВторойСимвол	= Источник % 16;
	
	Возврат Сред(ШестнадцатиричныеСимволы, ПервыйСимвол, 1) + Сред(ШестнадцатиричныеСимволы, ВторойСимвол, 1);
	
КонецФункции // ДесятичноеВШестнадцатиричное()
...Показать Скрыть


Вообще эти процедуры в типовых должны быть.
11. Сергей Белькин (Belkin_Sergey) 240 07.08.14 10:31 Сейчас в теме
(9) mip128, перенес эти процедуры из общего модуля в модуль объекта обработки (для тех, кто собирается качать). Вышлите мне в личку свой e-mail, я вам отправлю обновленную версию.
12. Гость 07.08.14 18:27 Сейчас в теме
(10) Belkin_Sergey, представьте что у пользователя вообще пустая конфигурация...
или тогда описывайте релиз, платформу и версию ОС...
А еще настройки ОС что бы JS отрабатывал... а то если пользователь запустит эту ерунду на терминале с ограниченными групповыми политиками, то он как бы пойдет куда по дальше...
Belkin_Sergey; +1 Ответить
13. Михаил Русанов (RainyAugust22) 211 08.08.14 04:59 Сейчас в теме
14. BigB (BigB) 162 08.08.14 09:22 Сейчас в теме
(10) Belkin_Sergey, так по моему проще
Функция ШестнадцатиричноеВДесятичное(Hex) Экспорт
	Стр=ВРег(СокрЛП(Hex));
	Dec=0;
	ДлинаСтр=СтрДлина(Стр);
	Для Х=1 По ДлинаСтр Цикл
		Dec=Dec+Найти("123456789ABCDEF",Сред(Стр,Х,1))*Pow(16,СтрДлина(Стр)-Х)
	КонецЦикла;
	Возврат Dec
КонецФункции
...Показать Скрыть
15. Александр Хомяк (logarifm) 975 08.08.14 13:28 Сейчас в теме
Где применить пока даже не знаю, но вот за идею и за труд ставлю плюс. Это можно где-то как фичу применить для красоты.
invertex; Belkin_Sergey; +2 Ответить
16. Сергей Белькин (Belkin_Sergey) 240 08.08.14 12:02 Сейчас в теме
(14) BigB, гораздо.
Какую в типовой нашел, такую и использовал :-)
17. Александр Губанов (gubanoff) 44 12.08.14 16:33 Сейчас в теме
Подскажите пример, как красиво вывести справочник с иерархией элементов? У меня задваивает элементы - они и на вышестоящих уровнях и на нижестоящих.
18. Сергей Белькин (Belkin_Sergey) 240 12.08.14 14:13 Сейчас в теме
(17) gubanoff,
Там важно создать дерево значений, где будет только 1 главная строка, которая будет родителем для всех остальных строк.
Если вы пытаетесь визуализировать справочник, то предлагаю первой строкой ввести название справочника.
т.е. надо сделать так:
-Номенклатура
---Материалы
------Товары
---Готовая продукция
19. Александр Губанов (gubanoff) 44 12.08.14 18:37 Сейчас в теме
(17) gubanoff, Сделал такой вариант для иерархии элементов:
Функция ДобавитьПоРодителю(ТекРодитель, ТекСтрока)
	Выборка = Справочники.Подразделения.Выбрать(ТекРодитель,,, "Наименование");
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = ТекСтрока.Строки.Добавить();
		НоваяСтрока.Значение = Выборка.Ссылка;
		ДобавитьПоРодителю(Выборка.Ссылка, НоваяСтрока);
	КонецЦикла; 
КонецФункции // ДобавитьПоРодителю()

Процедура ПриОткрытии()
	ПерваяСтрока = ДеревоЗначений.Строки.Добавить();
	ПерваяСтрока.Значение = "Подразделения";
	Выборка = Справочники.Подразделения.ВыбратьИерархически(Неопределено,,,"Наименование");
	Пока Выборка.Следующий() Цикл
		НоваяСтрока = ПерваяСтрока.Строки.Добавить();
		НоваяСтрока.Значение = Выборка.Ссылка;
		ДобавитьПоРодителю(Выборка.Ссылка, НоваяСтрока);
	КонецЦикла; 
	ЭлементыФормы.ДеревоЗначений.СоздатьКолонки();
	ЗаполнитьЗначенияПоУмолчанию();
	УстановитьВидимость();
КонецПроцедуры
...Показать Скрыть
20. Александр Губанов (gubanoff) 44 12.08.14 18:38 Сейчас в теме
На базе с большим числом подразделений выдает ошибку "На этой странице произошла ошибка сценария"
Прикрепленные файлы:
21. Евгений Мартыненков (JohnyDeath) 290 13.08.14 08:57 Сейчас в теме
А оно может отрабатывать правый клик и даблклик на конкретном блоке?
Недавно решал похожую задачу, но остановился на Табличном документе с рисунками типа "текст" на нем. Главный плюс такого подхода:
1) работает и в тонком клиенте
2) отрабатывает "ОбработкаРасшифровки" и "ОбработкаДополнительнойРасшифровки"
22. Юрий Н (graphbuh) 141 26.08.14 15:58 Сейчас в теме
Однозначный плюс! Было бы интересно увидеть развитию этой идеи для результата запроса.
23. Николай Пилатов (npilatov) 60 27.08.14 18:58 Сейчас в теме
А дерево можно применить к документам на пример заказ на производство в унф
24. Николай Андреев (stash_84) 28.10.14 13:48 Сейчас в теме
нет ли варианта обрабатывающего дерево, как и писали выше, формируемое из запроса?
25. Александр Иванов (ls300) 5 26.01.15 17:29 Сейчас в теме
Автор, я воодушевился твоей идеей и сделал аналогичный отчет. Дерево выводится по блокам, но столкнулся с проблемой что поле HTML документа выводит дерево дважды при выполнении метода "УстановитьТекст(ТекстHTMLдокумента)". Подскажи, пожалуйста, как решил эту проблему?
26. Дмитрий Смирнов (chingiz001) 09.04.15 08:52 Сейчас в теме
Понравилась обработка. Хорошо бы еще, чтобы она сохраняла это дерево. Например в XML-файл.
Оставьте свое сообщение