Работа с графической схемой в объектной модели DOM



Пример кода для работы с графической схемой в объектной модели DOM, платформа 8.3.12.

За основу взята статья Виталия Барилко //infostart.ru/public/336564/

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

Привожу полный код модуля, отвечающий за логику работы, и пример его использования.

 

 Общий модуль "УниверсальныеКартыМаршрутовКлиентСервер"

 

Хранить карту маршрута будем в справочнике БизнесПроцессы в реквизите КартаМаршрутаXML.

 

Форма элемента справочника имеет следующую структуру: 

 

Модуль формы элемента справочника

 

Пример работы:

 

В файлах приложил демо конфигурацию примера.

19 Comments

  1. Yashazz

    Можно подробнее? Вы динамически строите граф.схему с помощью DOM?

    Reply
  2. botokash

    (1) Построение схемы происходит штатными командами платформы для работы с графической схемой. С помощью DOM я лишь анализирую состав схемы, могу получать все ее элементы и связи, а так же сохранять графическую схему в XML строку и в обратную сторону получать объект графической схемы из XML строки.

    Reply
  3. Yashazz

    1. Ценность идеи исходной статьи — в возможности модифицировать схему. Платформа просто не имеет штатных команд такого рода. Какие команды вы имеете в виду?

    2. Зачем использовать DOM для чтения состава, если как раз это платформа позволяет сделать удобно и просто? Изврата ради?

    Reply
  4. botokash

    (3) По первому вопросу конкретизируйте, о каких командах вы говорите? Я говорил о стандартной командной панели, которая генерируется платформой для элемента формы графической схемы. Модифицируйте ими схему как хотите.

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

    Reply
  5. arsvlg

    Интересно. Спасибо за статью. Попробую.

    Единственное, нужно поправить скриншот структуры справочника. В табличной части отображены не все реквизиты.

    Reply
  6. botokash

    (5) «ТипЭлементаПредставление» и «Наименование» являются реквизитами формы, добавлены к табличной части. Обратите внимание на их цвет в дереве реквизитов формы. Так что скриншот структуры справочника верный)

    Reply
  7. Yashazz

    (4) Насчёт команд понял, ценность этого фрагмента стремится к нулю, т.к. это штатный инструмент платформы и вставить его куда надо — минутное дело. Что умеет DOM, я прекрасно знаю; я вот пытаюсь понять — вы-то его применяете для модификации схемы или только для чтения?

    Reply
  8. botokash

    (7) Пример модификации есть, обратите внимание на приложенный код. Я показываю пример работы с графической схемой полностью через DOM, как чтения, так и модификации. Как программно добавить элементы на схему — ссылка указана, разобраться в коде на пол часа работы.

    Reply
  9. botokash

    (8) Конкретизирую про модификацию, имеем исходную графическую схему «ГрафическаяСхема»

    // 1. Получили ДокументDOM
    ДокументDOM = УниверсальныеКартыМаршрутовКлиентСервер.ПолучитьDOMГрафическойСхемы(ГрафическаяСхема); //
    // 2. …
    // свой код чтения и модификации
    // 3. получаем обратно графическую схему из ДокументDOM, PROFIT!!!
    ГрафическаяСхема = УниверсальныеКартыМаршрутовКлиентСервер.ПолучитьГрафическуюСхемуИзDOM(ДокументDOM);
    Reply
  10. Yashazz

    (8) Уважаемый, я о том, как добавлять программно, задолго до вас несколько готовых разработок сделал)) Которые кстати сказать на ИС лежат.

    В приложенном документе я вижу 2 вызова функций из неведомого модуля, а что там и как — я не телепат, чтоб понять. Ну хорошо, значит, меняете схему через DOM. Ну что ж, как вариант. Я в каком-то из решений года 2-3 назад тоже так делал, и должен сказать, что бывают случаи, когда обратное построение схемы из xml, валидного с точки зрения DOM, не прокатывает. Не жрёт его сериализатор 1С почему-то. Поэтому будьте внимательны и не позиционируйте решение как универсальное, там случаются подводные камни, особенно с элементом «Точка выбора варианта».

    Reply
  11. botokash

    (10) «Неведомый» модуль так же приложен в статье кодом, без скачивания) Ни в коем разе не позиционирую свою статью как готовое решение. По факту есть лишь заготовка общего модуля и пару примеров работы с ним. Как мне кажется, тому кто ищет конкретный ответ на вопрос как, этого должно хватить что бы понять принцип и уже самому создавать свои нетленки)

    Reply
  12. xioxao

    (6) Блин супер интересная разработка… Жаль что не хватает стартмани скачать) как наколочу обязательно зацеплю и потестю) Автору респект, за нестандартные решения, механизмами 1с)

    Reply
  13. botokash

    (12) В публикации весь код приведен полностью, даже скачивать не надо. Но если так нужна конфигурация, напишите в личку, отправлю на почту.

    Reply
  14. ntemny

    Тему с подменой карты маршрута БП не разовьете? Не совсем понял, как это можно сделать у стандартных БП платформы.

    Reply
  15. botokash

    (14) Когда получится что-то рабочее — обязательно поделюсь, конечно.

    Reply
  16. ntemny

    (15)Ну хотя бы в каком направлении копать напишите. Как у БП можно поменять карту маршрута не в конфигураторе?

    Reply
  17. botokash

    (16) В том то и дело, что нельзя. Буду пытаться делать некий имитатор, который будет создавать БП, но переход по карте маршрута обрабатывать самостоятельно.

    Reply
  18. Бубузяка

    Автору, спасибо. Это то, что мне давно было нужно! Видимо, фантазии и знаний о ДокументеДОМ не хватало. Много информации для применения на практике. Материал статьи (картинки и код) достаточен для повторения и последующего изучения.

    Reply
  19. botokash

    (18) Большое спасибо, рад что кому-то полезно.

    Reply

Leave a Comment

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