0. Synoecium 400 06.04.16 09:36 Сейчас в теме

Внешняя компонента Native API для построения графов (на основе GraphViz)

Данная публикация представляет собой внешнюю компоненту «GraphViz NAPIC», выполненную по технологии native API, предоставляющую методы библиотеки GraphViz для построения графа по его описанию в текстовом формате на языке dot. Приложена обработка с примером вызова компоненты ОФ+УФ.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. awk 687 12.04.16 15:08 Сейчас в теме
2. graphbuh 184 14.04.16 11:41 Сейчас в теме
Хотелось бы спросить у автора этой замечательной статьи, а есть ли возможность на основе этой библиотеки (или может быть есть какие-то готовые продукты),сделать доработку, позволяющую инициировать событие при клике на узел и / или ядро графа...1С уже учится рисовать деревья в типовых (например, ЗУП 3.0), организационная структура. Там макет разбивается на кучу мелких клеток и каждая вершина графа / ребро состоит из большого их числа. Т.е. по идее расшифровку надо привязывать к каждому такому квадратику - куда мышь попадет...Рассчитать узлы и дуги произвольного графа - большая и сложная задача, graphviz ее делает успешно, если бы научиться эти промежуточные результаты выбрасывать в макет (с той или иной степенью точности) это был бы прорыв в визуализации я думаю.
RomanRomans; dabu-dabu; +2 Ответить
3. Synoecium 400 14.04.16 12:50 Сейчас в теме
(2) graphbuh, как мне кажется это возможно сделать без каких-либо дополнительных внешних компонент и изменения библиотеки GraphViz.
1) Определяем координаты и размеры вершин и ребер графа. Это можно сделать, если получить результат построения графа в формате "dot", вот пример простого графа из статьи:
digraph graphname {
graph [bb="0,0,126,197.01"];
node [label="\N"];
a [height=0.57874,
pos="63,176.17",
width=0.75];
b [height=0.57874,
pos="63,98.504",
width=0.75];
a -> b [pos="e,63,119.52 63,155.29 63,147.45 63,138.26 63,129.63"];
c [height=0.57874,
pos="27,20.835",
width=0.75];
b -> c [pos="e,35.921,40.587 54.101,78.8 49.947,70.068 44.916,59.493 40.321,49.835"];
d [height=0.57874,
pos="99,20.835",
width=0.75];
b -> d [pos="e,90.079,40.587 71.899,78.8 76.053,70.068 81.084,59.493 85.679,49.835"];
}
*Кстати, похоже я пропустил формат построения dot, надо будет добавить, так как такая возможность у библиотеки есть и в статье она указана.
2) Определяем координаты мыши при нажатии на поле картинки в 1с. Это можно сделать например так: http://aitika.ru/otvety/1645-1c-Opredelyaem-koordinati-kursora-mishi-v-1S-bez-VK
3) перебираем все вершины и узлы и смотрим, попала ли мышка в какой нибудь из них. Если попала, то делаем что нам надо, это и будет событие клика на элемент графа.
RomanRomans; graphbuh; +2 Ответить
4. graphbuh 184 14.04.16 16:02 Сейчас в теме
Здорово! надо будет попробовать. я тут как раз не мог успокоиться было интересно есть ли интерактивные графы
вот нашел пример:
http://jaredforsyth.com/treed/



5. Steelvan 15.04.16 13:02 Сейчас в теме
http://схемы1с.рф/int_graphs.html

Интерактивный граф в 1С.
Только проект авторами уже закрыт.
Хотя за бабки можно и поделиться, наверное.
6. ildarovich 6206 15.04.16 15:59 Сейчас в теме
Вот тут тоже говорится об отображении графов в программе 1С: Как нарисовать граф на 1С. В обсуждении есть интересные ссылки на тему использования графов в экономических и других интересных задачах. Особенно интересны комментарии Polav62, который является автором объемной монографии на тему применения теории графов в экономических задачах.
7. GregRusakov 9 16.04.16 09:07 Сейчас в теме
Работает ли в веб-клиенте, тонком клиенте, на платформе Linux?
8. Synoecium 400 17.04.16 11:56 Сейчас в теме
(7) GregRusakov, Должно работать во всех клиентах, так как это внешняя компонента Native API. Насчет Linux, понятно, что именно эта dll не будет работать, но теоретически возможно скомпилировать GraphViz под Linux, так как библиотека кроссплатформенная. В моем билде я принудительно использую GDI+ для отрисовки графа в растровых форматах, поэтому еще придется повозиться чтобы подключить другие рендереры. В общем, не так просто, но при желании можно)
Есть еще один вариант использования библиотеки GraphViz. Можно взять пакет скомпилированных бинарных файлов на сайте и использовать их из командной строки. Если интересно, могу в демо-обработке добавить такой вариант. Недостатком такого метода будет необходимость внедрять в обработку весь пакет файлов или держать их где-то на жестком диске. Плюс возможны проблемы с правами на запуск исполняемых файлов из 1с.
9. Yashazz 2301 19.04.16 16:13 Сейчас в теме
И снова внешняя приблуда, которая лажанётся в самый ответственный момент. Впрочем, это беда любой внешней компоненты.
10. Synoecium 400 19.04.16 18:57 Сейчас в теме
(9) Yashazz, Попробуй, про лажу отпишешься :) Пока проблем с компонентой не наблюдал.
Кстати насчет стабильности, я специально обернул весь код в компоненте в попытку, так что в худшем случае вернет сообщение о неизвестной ошибке, но 1с не обрушит.
11. Yashazz 2301 19.04.16 19:21 Сейчас в теме
(10) так ведь лажа не сейчас случится. А годика через полтора, или раньше, если очередной новый релиз платформы так захочет. И где я тебя тогда буду искать, если поставлю твою фишку в коммерческое решение, а оно однажды прекрасным утром не заработает? Или если клиент винду/сеть/политику безопасности обновит, а компонента этого юмора не поймёт? Были, были уже у меня такие случаи. До автора фиг достучишься, а крайний - тот, кто поставил это клиенту.
RomanRomans; +1 Ответить
12. RainyAugust22 228 29.12.16 07:53 Сейчас в теме
При нажатии кнопки "Построить из строки в ДД" пишет ошибку - "Некорректная работа компоненты с памятью" - как победить? Платформа 8.3.9
13. Synoecium 400 29.12.16 14:55 Сейчас в теме
(12) В тонком клиенте? я находил ошибку, но в толстом клиенте она не возникала, поэтому обновлять на инфостарте не стал. Вышлю обновленную и если в этом дело, тогда обновлю и в публикации.
14. RainyAugust22 228 29.12.16 15:42 Сейчас в теме
(13)
дело, тогда обновлю и в публикации

Толстый клиент обычное приложение платформа 8.3.9.1818
15. RainyAugust22 228 05.03.18 09:30 Сейчас в теме
В 8.3.9 ошибка с памятью исправилась, хорошая работа!
Подскажите пожалуйста, возможно ли отключить сообщение "Внешняя компонента успешно установлена" при запуске обработки?
16. Synoecium 400 05.03.18 22:01 Сейчас в теме
(15) думаю, что в обработке ошибка и не срабатывает ветка с попыткой подключения компоненты без установки. Вышлю вам исправленную версию и если дело в этом, обновлю в публикации.
17. Aphanas 126 21.07.18 16:03 Сейчас в теме
При попытке вызвать "ПостроитьИзСтрокиВДД" появляется ошибка:
"Использование синхронных методов на клиенте запрещено!"
18. Aphanas 126 23.07.18 05:54 Сейчас в теме
Подскажите,как её запустить.
Система - Win 2012 Server x64, в терминале.

ПодключитьВнешнююКомпоненту всегда возвращает Ложь, и на клиенте, и на сервере.
УстановитьВнешнююКомпоненту выдает ошибку "Возможно, отсутствует компонента для используемого клиентского приложения".
RegSvr32 пишет "entry-point DLLRegisterServer was not found".
19. Synoecium 400 23.07.18 07:17 Сейчас в теме
(18) Проблему воспроизвести удалось, пока я думаю, что с определенной версии платформы перестало работать подключение внешней компоненты (на версии 8.3.7.2027 работает без проблем, на нескольких базах на УФ проверял, и файловые и клиент серверные, а вот на версии 8.3.11.2954 работать не хочет).
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день