Работа с графической схемой в объектной модели 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 не будет опубликован. Обязательные поля помечены *