gifts2017

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

Опубликовал Сергей Белькин (Belkin_Sergey) в раздел Программирование - Практика программирования

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

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

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

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

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

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

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