Программное создание графических схем

0. Яков Коган (Yashazz) 2103 15.07.16 17:56 Сейчас в теме
Пример динамического создания графических схем, добавления элементов любых видов. Любые схемы без бизнес-процессов. Программная работа со схемой.

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

Комментарии
1. Александр Полетаев (Alias) 34 19.07.16 16:54 Сейчас в теме
Тэги не побились, всё работает.
Вернее, почти всё... в случае если региональные установки разделителя целой и дробной является запятая (Россия), в XML попадают числа типа 191,5 (с запятой), что делает результирующую XML-строку некорректной. Дроби получились от деления на 2 (когда ищем середину).
Заменил Строка() на XMLСтрока() в функции ДобавитьКоординатыФигуры(), после чего стало совсем замечательно.

P.S. Линии декоративные вместо нормально-привязанных (например, от выбора варианта), это недоработка или особенность?
2. Яков Коган (Yashazz) 2103 19.07.16 19:28 Сейчас в теме
(1) Alias, блин, насчёт декоративных линий - это я в итоге мучений с публикацией не ту версию скопипастил. Конечно, там должны быть привязываемые. Это рулится параметром "ДекоративнаяЛиния". Извиняюсь. А вот насчёт формата - тупо прохлопал. Постараюсь обновить публикацию, спасибо.
3. Александр Анисков (vandalsvq) 727 19.07.16 22:55 Сейчас в теме
(2) Yashazz, прикрепи обработку, у кого мани есть могут скачать. Все лучше чем со статьи копипастить ))))
4. Виталий Попов (Сурикат) 139 20.07.16 08:44 Сейчас в теме
Огромное спасибо за публикацию!
5. Яков Коган (Yashazz) 2103 20.07.16 09:28 Сейчас в теме
Коллеги-товарищи, я собираюсь эту штуку развивать дальше, поэтому очень приветствуется критика. Где-какие косяки и недоработки, пишите.
6. Денис (konstruktiv) 20.07.16 13:59 Сейчас в теме
(5) Yashazz, тоже делал такое, также использовал XDTO-сериализацию. В своем время разобрался со многими вещами, даже которые нельзя было сделать интерактивно (перевернуть фигуру на 75 градусов, фон заштриховать). Бросил это дело из-за одной мелочи, поэтому хочу сразу предостеречь. Но возможно я просто не нашел решения.
1. Получается, что стрелки можно сделать только параллельно осям с изгибом только в 90 градусов. Тут вроде бы не страшно. Не так уж плохо и выглядит.
2. Когда связываешь стрелку с фигурой - то есть при интерактивном перетаскивании фигуры стрелка не отклеивается - так вот стрелка может примыкать только к одному из 4 секторов, только к одной точке. А это уже порождает ограничения.
Например разными стрелками будем обозначать товар, деньги и т.п. Соответственно из-за описанных выше ограничений стрелки разного вида сольются в одну. Можно сделать чтобы при первом формировании они не склеивались, но как только передвинешь что-то мышкой, они склеиваются. А интерактивность все-таки лучше оставить в таком продукте.
7. Денис (konstruktiv) 20.07.16 14:03 Сейчас в теме
(5) Yashazz, с этими ключами тоже разобрался:
<printPropItem><key>6</key><val>10</val></printPropItem>
|<printPropItem><key>7</key><val>10</val></printPropItem>
|<printPropItem><key>8</key><val>10</val></printPropItem>
|<printPropItem><key>9</key><val>10</val></printPropItem>
|<printPropItem><key>13</key><val>0</val></printPropItem>
|<printPropItem><key>16</key><val>0</val></printPropItem>
Я не скачивал обработку, но я использовал только сериализованные объекты, которые дает платформа, сам текст XML не парсил и не собирал.
А вообще ощущение, что сами 1сники забросили этот объект, а жаль...
8. Яков Коган (Yashazz) 2103 20.07.16 14:35 Сейчас в теме
(6) Ага, копаю в эту сторону.
Кстати, в процессе изучения выяснилось, что рисовать можно ЛЮБЫЕ фигуры. Любой формы. Если задать координаты, так получаются жуткие звёзды, кривые косоугольники и прочая прелесть. Ну и декорации со всякими овалами тоже))) Тут да, простор для творчества. Правда, надпись при этом может отказаться не внутри многоугольника, а где-то вообще мимо.

(7) Справедливости ради, я где-то в планах 1С видел программное изменение коллекций фигур схемы, но под таким пятизначным приоритетом, что ещё год-полтора ждать точно...
9. Денис (konstruktiv) 20.07.16 15:19 Сейчас в теме
(8) Yashazz, про любые фигуры тоже проходили)) вроде скрытых возможностей дофига, но как только пытаешься приложить к какой-нибудь реальной задаче, так руки опускаются
10. Николай Крылов (Nikola23) 359 21.07.16 09:08 Сейчас в теме
(5) Зачем тратить силы на собирание строк XML вручную, если то же самое прекрасно работает с использованием XDTO? Объектная модель рулит.
Чем принципиально эта публикация отличается от еще нескольких подобных? Много кода, но зачем?
11. Яков Коган (Yashazz) 2103 21.07.16 15:45 Сейчас в теме
(10) Nikola23, покажите мне эти подобные, пожалуйста. Кроме работы Diversus'а, конечно. И объясните насчёт XDTO - вы предлагаете оперировать абстракциями на уровне элементов схемы? Ну, можно и так, конечно, только вот у меня несколько попыток подобного подхода обламывались - схема не собиралась обратно.

Чем ещё отличается - полной доступностью. Можно воспользоваться безо всяких стартманей.
12. Николай Крылов (Nikola23) 359 27.07.16 00:53 Сейчас в теме
(11) Yashazz, Никаких хитрых абстракций.
Предлагаю возможность настраивать свойства (в т..ч. методом тыка) с использованием привычной объектной модели.
Если задача сводится к нарисовать - то Ваш метод может и подойдет, а если необходимо проанализировать структуру связей схемы и построить по нарисованной картинке автоматизацию?
Если не нашли решения на инфостарте, это значит, либо плохо искали, либо оно куда-то делось.
Я пользуюсь наработками скачанными отсюда.
13. Яков Коган (Yashazz) 2103 27.07.16 17:44 Сейчас в теме
(12) Nikola23, а, так это я тоже практикую. В публикации http://infostart.ru/public/531533/ я именно так и поступил - создал только самое необходимое, дальше донастроил штатными методами и свойствами языка.
А вот за отсутствие пруфлинка и при этом фразу "плохо искали" - мой вам респект, ибо отсутствие ссылки значит, что аналогов у моей публикации всё-таки нету)))
14. Гоша (user595212_go.blin2014) 25.08.16 22:39 Сейчас в теме
Ценная статья, благодарю.
15. Андрей Акулов (DrAku1a) 1209 08.09.16 02:35 Сейчас в теме
16. Яков Коган (Yashazz) 2103 08.09.16 09:55 Сейчас в теме
(15) DrAku1a, да, я указал её как первоисточник. Я от этой идеи собственно и отталкивался. Ещё раз Diversus'у спасибо.
Правда, там в комментах один товарищ указывает, что это всё было изобретено ещё раньше. Что, в общем, не удивительно)
17. Serg (serg_infostart) 243 22.09.16 16:38 Сейчас в теме
Нужен жесткий контроль за itemid, нельзя допускать повторения - иначе будут глюки (срывается соединение между элементами при любой подвижке элемента).
В вышеуказанном блоке изменить:
				// добавляем линию с координатой, начинающейся от середины варианта
				//парПолучателяЛинии=соотДобавленных.Получить(рВариант.Куда); - если надо получитьэти данные
				парЛВ=Новый Структура;
				парЛВ.Вставить("Имя","ЛинияВарианта"+рВариант.Идентификатор);
				парЛВ.Вставить("ТипЭлемента","ЭлементГрафическойСхемыДекоративнаяЛиния");
				парЛВ.Вставить("Идентификатор",ПолучитьСтаршийИдентификатор(строГС));
...Показать Скрыть

на:
				// добавляем линию с координатой, начинающейся от середины варианта
				//парПолучателяЛинии=соотДобавленных.Получить(рВариант.Куда); - если надо получитьэти данные
				парЛВ=Новый Структура;
				парЛВ.Вставить("Имя","ЛинияВарианта"+рВариант.Идентификатор);
				парЛВ.Вставить("ТипЭлемента","ЭлементГрафическойСхемыДекоративнаяЛиния");
				парЛВ.Вставить("Идентификатор",пар.Идентификатор + й + 1); // Вот тут нужно изменить - иначе добавляет существующие itemid 
...Показать Скрыть

В остальном, все хорошо.
Напрашивается оптимизация кода, возможно через использование ФабрикиXDTO. И выпустить в виде отдельного серверного модуля.
Я же хочу на вход подавать простейшую структуру взаимосвязей, на выходе получать ГрафическуюСхему - как раз в процессе производства.
И конечно же благодаря статье сэкономлена куча времени. Автору и предшественникам благодарность.
18. Serg (serg_infostart) 243 22.09.16 17:01 Сейчас в теме
Да, еще нюанс.
Системные перечисления сторон (portIndex):
1: Лево
2: Верх
3: Право
4: Низ
5: Центр
6: Вариант 1 Лево
7: Вариант 1 Право
8: Вариант 2 Лево
9: Вариант 2 Право
10: ..... и т.д.

Поэтому, придется исправить еще и порт источника для Декоративной линии варианта.
Кусок кода
				парЛВ.Вставить("НаправлениеОткуда",ТипСтороныЭлементаГрафическойСхемы.Право); // всегда

меняем на
				парЛВ.Вставить("НаправлениеОткуда",7+й*2); // всегда
19. Serg (serg_infostart) 243 22.09.16 17:09 Сейчас в теме
Не обязательно, т.к. работает и без этого, но...
Для чистоты преобразований заменим
парЛВ.Вставить("ВариантОткуда",0);
заменить на
парЛВ.Вставить("ВариантОткуда",й);
20. Serg (serg_infostart) 243 27.09.16 15:29 Сейчас в теме
Сделал объектную модель. Ссылка на эту статью имеется - без этой статьи не решился бы создать свой вариант реализации.
http://infostart.ru/public/551576/ (скоро будет доступна).
21. Михаил Русанов (RainyAugust22) 211 29.12.16 07:26 Сейчас в теме
Где можно скачать в виде обработки?
Скопипастил код в обработку, не получается запустить, помогите плз:
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (ПрочитатьXML)
Возврат СериализаторXDTO.ПрочитатьXML(чтен,Тип("ГрафическаяСхема"));
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.2/data/graphscheme}FlowchartContextType Форма: Элемент Тип: {http://v8.1c.ru/8.2/data/graphscheme}FlowchartContextType
по причине:
Ошибка преобразования данных XDTO:
Значение: 191,5 Тип: {http://www.w3.org/2001/XMLSchema}decimal
по причине:
Ошибка отображения типов:
Отображение типа '{http://www.w3.org/2001/XMLSchema}decimal' в тип 'Число'
22. Яков Коган (Yashazz) 2103 29.12.16 12:15 Сейчас в теме
(21) Ух, красота... Какая у Вас платформа 1С?
23. Михаил Русанов (RainyAugust22) 211 29.12.16 15:41 Сейчас в теме
24. Яков Коган (Yashazz) 2103 29.12.16 20:46 Сейчас в теме
(23) Так это, думаю, просто релиз кривой. 1С, как всегда, косячат неимоверно. Попробуйте на чём-то надёжном вроде 8.3.6
Оставьте свое сообщение