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

20.07.17

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

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

Файлы

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

Наименование Скачано Купить файл
Программное создание элементов графической схемы (через XSLT):
.epf 12,30Kb ver:1.0
35 2 500 руб. Купить
Программное создание элементов графической схемы (через XSLT): Поддержка ВыборВарианта
.epf 14,96Kb ver:1.1
58 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

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

Оформить подписку и скачать решение со скидкой

Естественно начал с анализа уже готовых решений, наткнулся на это и это, первый по сути работает с исходным форматом *.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С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

31720 руб.

27.03.2025    75692    47    36    

59

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.

36600 руб.

28.08.2025    6685    2    2    

6

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Расширение «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6100 руб.

14.01.2016    59702    22    25    

47

Консолидация данных Работа с интерфейсом Программист Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)

Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.

6088 руб.

17.10.2025    1696    3    0    

2

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    52834    dimanich70    84    

174

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

28.08.2023    24682    YA_418728146    8    

174

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

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

2 стартмани

22.08.2023    8523    116    progmaster    22    

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

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

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

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

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