Обновление иерархии документов

Dragon108

Well-Known Member
19.01.2010
265
0
30
Россия
#1
Есть 3 документа , один корневой (Компания) и два респонс то респонс (Подразделение и Контакт). Создаётся иерархия из них, где Компания - корневой документ, Подразделение подчиняется Компании и "самому себе" (Подразделению), Контакт подчинятся только Подразделению , есть поле в Подразделении, которое при создании потомка (т.е. Контакта или Подразделения), заносится в поле создаваемого потомка ... необходимо в полученной иерархии сделать так, что бы при изменении поля в Подразделении на каком то из уровней , обновлялись все его потомки (обновлялись поля, в которые заносится значение из изменяемого поля в Подразделения на уровне , в его потомки (Подразделения и Контакты))
Желательно через @-формулы
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#2
Желательно через @-формулы
а почему?
я б на скрипте делала отдельный агент или код обновления на постсейв измененного документа (выбор варианта зависит от требований по актуализации, активности изменения документов (предотвращение конфликтов) и наличия доступа на редактирование дочерних документов у того, кто правит подразделение)

поищите, нечто подобное пробегало недавно на форуме:
тема обновление документа, например, замечания http://codeby.net/forum/threads/33064.html?vi...st&p=154220
 
K

K-Fire

Гость
#4
Не стоит использовать формулы. Потому-что все в результате сведется к неподдерживаемому коду, который невозможно отдебагить, в котором скорее всего не будет никаких комментариев и т.п.

На LS такая задача решается легко и модифицировать потом легко.
 

Dragon108

Well-Known Member
19.01.2010
265
0
30
Россия
#5
НУ дело в том что я стажёр ... вот дали такое задание :) , можно использовать только @-формулы
 
K

K-Fire

Гость
#6
Алгоритм то ты представляешь как эту задачу сделать?
 
I

iki

Гость
#7
Сразу предупреждаю что то, что написано ниже это плод моей больной фантазии и я всецело осознаю что это извращение в самой его жесткой форме так что прошу ногами по лицу не бить.

Итак решение:
На форме заводишь поля

Cname - название компании (наследуешь от родителя при создании)
DivName -название опдразделения
FullName -служебное компутед вен копозе поле с формулой (наследуеца от родителя)
FullName:@Text(@DocumentUniqueID)

CompanyID -служебное компутед вен копозе поле с Унидом Компании. (наследуеца от родителя)

Hname - иерархическое имя подразделения (компутед поле с формулой):

NameList:=FullName; берем иерархический список унидов
NameList:=@Subset(NameList;-(@Elements(NameList)-1)); - отрезаем свой унид( он нам не нужен)
NameList:=@Subset(NameList;(@Elements(NameList)-1)); - отрезаем название компании (верхинй уровень нам тоже не нужен)
T:=@GetDocField(CompanyID;"CName"); -цепляем по ид навзание компании. запоминаем
@While(@Elements(NameList)>=0; - идем по списку подразделений
NL:=@Subset(NameList;1); -
T:=T:@GetDocField(NL;"DivName"); дергаем название добавляем
NameList:=@Subset(NameList;-(@Elements(NameList)-1)) - отрезаем
);
T

как-то так.

НУ дело в том что я стажёр ... вот дали такое задание , можно использовать только @-формулы
ПЫСЫ. Компания не EL случаем? )
 

Dragon108

Well-Known Member
19.01.2010
265
0
30
Россия
#8
ПЫСЫ. Компания не EL случаем? )
))) в точку, 2 кр, осталось только это доделать нормально

Добавлено:
Алгоритм то ты представляешь как эту задачу сделать?
Ну есть идея хранить в каком нить скрытом поле в Подразделении хранить айди родителя данного подразделения (с Контактами тож самое), сделать вьюшку (где брать всё из Подразделения), первый столбец (категорезированный ) - айдишники Подразделений, второй столбец - айдишники потомков данного подразделения, в форме Подразделение, в Постсейве, Дблукапом искать айдишник данного документа во вьюшке и по нему выцыплять все ему подчиняющиеся, и в цикле проставлять имя Подразделения всем его потомкам, но дело в том что в каждом подразделении храниться ирерахический список высших подразделений , вот как туда пихать изменённое имя подразделения, пока нет идей) ...
Можно наверное хранить где нить старое имя подразделения, искать его в этом иерархическом списке, получать оттуда позицию
этого имени, и записывать на эту позицию новое имя, но это так ... "мысли о высоком"