Дерево значений в таблицу значений и обратно

Алгоритм переводит табличную часть или таблицу значений в дерево значений и обратно.

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

 

Надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать табличную часть документа для хранения данных дерева.  И при открытии формы получать данные из ТЧ и выводить их в дерево. Далее все манипуляции производить с деревом и при сохранении документа помещать данные в обратно в ТЧ.

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

Для реализации такого механизма в ТЧ был добавлен реквизит “КлючСвязи” (обязательный реквизит) с типом число, куда помещался “НомерСтроки” (стандартный реквизит ТЧ) родителя (верхний уровень). А самый верхний элемент дерева имеет “КлючСвязи” равный 0.

На картинке ниже видно структуру дерева и структуру ТЧ

  

Нагрузка на сервер осуществляется при окрытии и при сохранении документа. А с деревом работают уже на клиенте.
На рабочей базе обрабатывается около 200 строк в одном документе.
Открытие и сохранение документа происходит моментально. С большем количеством строк не тестировалось.
Чтобы алгорит правильно работал, у рекизита фомы с типом дерево значений должны быть все реквизиты табличной части, кроме “КлючСвязи” и “НомерСтроки”. Иначе платформа выдаст ошибку. В дерево можо добавлять свои реквизиты отличные от ТЧ, они будут использоваться только в дереве.

likion.ru

3 Comments

  1. Yashazz

    Кабы не объектная блокировка, накрылась бы у вас эта идеология… Если в дереве данные простых типов и не требуется контроль ссылочной целостности, можно его просто хранить сериализованным.

    Reply
  2. jobkostya1c8

    Интересная идея. Стоит запомнить.

    Reply
  3. German_Tagil

    посмотреть надо

    Reply

Leave a Comment

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