Программное создание элементов графической схемы (через XSLT)

20.07.17

Разработка - Работа с интерфейсом

Встала как-то передо мной задача визуализировать определенный прикладной процесс, лучше всего для этого подходит графическая схема. Так уж вышло, что 1С по не понятным мне причинам не предоставила возможность программно работать с элементами графической схемы. Пришлось импровизировать.....

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Программное создание элементов графической схемы (через XSLT):
.epf 12,30Kb
35
35 Скачать (1 SM) Купить за 1 850 руб.
Программное создание элементов графической схемы (через XSLT): Поддержка ВыборВарианта
.epf 14,96Kb
57
57 Скачать (1 SM) Купить за 1 850 руб.

Естественно начал с анализа уже готовых решений, наткнулся на это и это, первый по сути работает с исходным форматом *.grs, разбирая и собирая его, второй пример использует XDTO. Первая у меня вообще отказалась работать мой коммент, вторая обработка мне показалась слишком усложнённой, черт ногу сломит. Стал писать свое и вышло очень даже компактно и красиво.

Если не вдаваться в нюансы, работает это так, кодом формируется некая структура, сериализуется в XDTO, сериализованная структура "скармливается" шаблону преобразования XSLT, на выходе получаем XDTO графической схемы, десериализуем и готово. Многие спросят, "почему XSLT?", это наглядно, можно по быстрому поправить, расширить, не лазя по 1000 строк чужого кода.

Вот пример кода, который выводит демо блок-схему

&НаСервере
Функция ПостроитьНаСервере()
	Обработка = РеквизитФормыВЗначение("Объект");
	СтруктураСхемы = Обработка.ИнициализироватьСтруктуру();
	
	Действие1 = Обработка.ДобавитьДействие(СтруктураСхемы,, "Выполняем что-то", "Действие 1", Новый Структура("Верх,Лево", 150, 500));
	Действие2 = Обработка.ДобавитьДействие(СтруктураСхемы,, "Действие 2",, Новый Структура("Верх,Лево", 350, 500),, Истина);
	ВложенныйПроцесс1 = Обработка.ДобавитьВложенныйПроцесс(СтруктураСхемы,, "Вложенный процесс", Новый Структура("Верх,Лево", Действие2.Координаты.Верх, Действие2.Координаты.Лево + Действие2.Размер.Ширина + 20));
	Действие3 = Обработка.ДобавитьДействие(СтруктураСхемы,, "Действие 3",,,, Истина);
	Условие1 = Обработка.ДобавитьУсловие(СтруктураСхемы, "Условие 1",,, Истина);
	Действие4 = Обработка.ДобавитьДействие(СтруктураСхемы,, "Действие 4");
	
	Обработка.СвязатьЭлементы(СтруктураСхемы, Условие1, Действие4, 3, 2, "Да");
	Обработка.СвязатьЭлементы(СтруктураСхемы, Действие2, ВложенныйПроцесс1, 3, 1);
	Обработка.СвязатьЭлементы(СтруктураСхемы, ВложенныйПроцесс1, Действие3, 4, 2);
	
	Возврат Обработка.ПостроитьСхему(СтруктураСхемы);
КонецФункции

 

Хочу обратить внимание как осуществляется связка элементов. Элементы связываются методом

Обработка.СвязатьЭлементы(СтруктураСхемы, Действие2, ВложенныйПроцесс1, 3, 1);

Параметры 3 и 1, это есть номера т.н. портов элемента

Нумерация портов начинается с левой стороны по часовой стрелке.

Вот еще пример, что бы вывести такую примитивную схему.

Достаточно такого кода:

&НаСервере
Функция ПостроитьНаСервереПример2()
	Обработка = РеквизитФормыВЗначение("Объект");
	СтруктураСхемы = Обработка.ИнициализироватьСтруктуру();
	
	Обработка.ДобавитьДействие(СтруктураСхемы,, "Шаг 1", "Действие 1",,, Истина);
	Обработка.ДобавитьДействие(СтруктураСхемы,, "Шаг 2", "Действие 2",,, Истина);
	Обработка.ДобавитьДействие(СтруктураСхемы,, "Шаг 3", "Действие 3",,, Истина);
	Обработка.ДобавитьДействие(СтруктураСхемы,, "Шаг 4", "Действие 4",,, Истина);
	Обработка.ДобавитьДействие(СтруктураСхемы,, "Шаг 5", "Действие 5",,, Истина);
	
	Возврат Обработка.ПостроитьСхему(СтруктураСхемы);
КонецФункции

Автоматическая связь элементов осуществляется благодаря последнему параметру. Если не задан размер элемента, в таком случаи устанавливается размер по умолчанию 100х50. Если не заданы координаты, тогда первый элемент начинается с точки 10х10 от левого верхнего угла, последующие элементы автоматически располагаются под предыдущем на расстоянии 20px.

 

В данный момент поддерживается создание следующих элементов графической схемы:

  • Действие
  • Условие
  • Вложенный процесс

Для конкретно моей задачи этого было достаточно, но на самом деле добавление новых элементов много труда не составит. Единственное могут возникнуть не большие трудности если захотите добавить поддержку не прямоугольных элементов, т.к. отрисовывать форму придется самим по точкам (пример можно посмотреть как сделан элемент условия). Если забить и не отрисовывать по точкам, то при первой отрисовке элемент будет прямоугольный, а при изменении чего-то на схеме, элемент перерисуется, перерисовывает его сама платформа. На самом деле, если бы можно было как-то вызвать эту перерисовку программно, это сильно облегчила б жизнь и кода стало бы еще меньше )

Доработал обработку, теперь есть поддержка элемента ВыборВарианта.

Единственное, так и не удалось побороть, то как отрисовываются линии

После перетаскивания элементов, платформа отрисовывает их нормально

Также хочу обратить внимание, что порты для вариантов начинаются с 6 (уж не знаю почему), учитывайте при связке элементов.

Обработка графическая схема программно динамически

См. также

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18416    26    6    

40

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    13435    YA_418728146    7    

165

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3256    52    progmaster    8    

4

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    5158    kalyaka    6    

33

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9828    1    2    

6

Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Бесплатно (free)

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    19997    acces969    97    

153

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    9894    6    7    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3080 22.07.17 11:16 Сейчас в теме
Хорошая статья, только слова "перересовку", "перересуется" и прочее режут глаз ))) ИТ-шники вообще с языком не дружат. У Гилева есть классная статья об образовании, но там столько ошибок, что я не смог ее до конца дочитать )))
Ko__ma; Артано; +2 Ответить
2. Alxby 1110 24.07.17 09:05 Сейчас в теме
3. SVititnev 19 24.07.17 12:28 Сейчас в теме
Имхо, через XDTO делать удобнее всего (то бишь как в (2))
4. lazarenko 240 24.07.17 13:37 Сейчас в теме
(3) так мой пример это тоже XDTO, отличия только в том как формировать XDTO, в примере (2) кодом 1С, в моем через XSLT
5. ВикторП 348 24.07.17 16:41 Сейчас в теме
Процесс свой как Вы в итоге визуализируете?

Программно рисуете графическую схему? Чем это лучше визуального ручного составления схемы?

Программную схему еще как то используете?
6. lazarenko 240 24.07.17 17:22 Сейчас в теме
(5) просто процесс который визуализируется может меняться в режиме предприятия. Могу аналогию привести с workflow документа, какие статусы и переходы у конкретного документа можно настроить динамически, не будешь же ты перерисовывать каждый раз руками схему.
7. sergbsv 75 26.07.17 02:09 Сейчас в теме
Сделай пожалуйста еще выбор вариантов, и уже получится класно
9. lazarenko 240 26.07.17 12:11 Сейчас в теме
(7) о выборе каких вариантов речь?
8. soroka 26.07.17 10:19 Сейчас в теме
Кто нибудь проверял работу данных компонент в веб клиенте? В свое время писал подобное, но при работе через веб клиент очень странно ведут себя соединительные линии в случае если схема выглядет как несколько рядов действий уходящих по горизонтали на 4 блока. В этом случае соединительные линии обязательно проходят через координату х=1 и у=1. В обычном режим (тонкий клиент) работает нормально.
10. lazarenko 240 26.07.17 15:33 Сейчас в теме
(8) сейчас попробовал, да, коряво все ((
13. soroka 27.07.17 14:53 Сейчас в теме
(10) значит это не мой косяк был, а косяк 1с)))
15. nkp14108 94 29.06.18 11:05 Сейчас в теме
(10) Согласен что на текущий момент формируется все коряво.
Особенно с линиями, на картинке 3 снизу, где нарисовано условие - линии идут по условию!
Но идею можно далее развивать
- добавив возможность играть со свойствами(цвет блока, шрифт, картинка и т.д.)
- добавив свойства декоративной линии
- добавив декорации, да в общем все существующие (их не много)
с возможностью сохранения допустим в PDF
тогда продукт будет интересен в полном объеме.
11. sergbsv 75 27.07.17 14:33 Сейчас в теме
Точка выбора варианта.
в иконках редактора стоит после условия
12. lazarenko 240 27.07.17 14:44 Сейчас в теме
(11) ааа, понял, речь о поддержке нового элемента. Сделаю в ближайшее время
14. nkp14108 94 29.06.18 10:30 Сейчас в теме
Второй вариант с ошибкой
Ошибка инициализации модуля: ВнешняяОбработка.ГрафическаяСхемаДинамически.Форма.Форма.Форма
по причине:
{ВнешняяОбработка.ГрафическаяСхемаДинамически.Форма.Форма.Форма(51,24)}: Переменная не определена (БФТ_ДесериализаторСервер)
СериализованаяСхема = <<?>>БФТ_ДесериализаторСервер.СериализоватьВXml(Схема);
{ВнешняяОбработка.ГрафическаяСхемаДинамически.Форма.Форма.Форма(66,10)}: Переменная не определена (БФТ_ДесериализаторСервер)
Схема = <<?>>БФТ_ДесериализаторСервер.ДесериализоватьИзXml(СериализованаяСхема);
RonzhinDenis; +1 Ответить
16. lazarenko 240 02.07.18 09:56 Сейчас в теме
(14)
БФТ_ДесериализаторСервер

да. Затесались лишние методы СериализоватьИзСхемыМакета и ДесериализоватьСхему, их можно удалить
18. Nicholas 899 15.09.20 13:27 Сейчас в теме
(16) Исправьте, пожалуйста. До сих пор эти ошибки в обработке.
bugromov; +1 Ответить
17. Nicholas 899 11.09.20 14:44 Сейчас в теме
Скажите, а цвета элементов, картинки и прочее оформление можно менять?
19. Mahon83 13 11.05.21 05:48 Сейчас в теме
(17) Добрый день, Вы нашли способ, как это сделать?
20. Nicholas 899 30.08.21 13:55 Сейчас в теме
(19) К сожалению, нет.
Написал об этом в Телеграм:
Напоминаем о возможности высказать предложения по развитию платформы 1С:Предприятие @platform_suggestions

Как всегда - еженедельно по пятницам - новые предложения отправлены нашим разработчикам.
Оставьте свое сообщение